Fluid idea for Life

随笔,杂记

难道一个完美的SOUND真的很难?

很久就听说AS3的Sound有些诡异,一直没有亲见,这次终于碰上了。 下面是段简单的代码:

var sound:Sound = new Sound();
sound.addEventListener(Event.COMPLETE,onLoaded);
var soundChannel:SoundChannel;
sound.load( new URLRequest("test.mp3") );
function onLoaded(e:Event):void
{	
	soundChannel = sound.play();
	soundChannel.addEventListener(Event.SOUND_COMPLETE, onSoundOver);
}</p>
<p>function onSoundOver(e:Event):void
{	
	trace("over:"+sound.length+":"+soundChannel.position);
}

播放完毕,会发现SOUND_COMPLETE事件触发时,position总会小于length,实际测试时,mp3文件不同的采样率导致不同的误差,大的有好几秒,小的有几百毫秒。在一般情况下,这个误差可以忽略,但如果需要对声音时间进行精确控制,问题就大了。最近做的项目中恰好需要对声音进行精确控制,精确到200毫秒左右,在经过反复检测后发现了这个问题。 Google下,发现很多人都遇到了同类问题,比较权威的解释是:Flash Player可以处理比特率在16-320kbps范围内的mp3,且总以44.1khz的采样率来进行播放,这意味着如果原采样率是22khz,则以两倍速度进行播放,于是产生了误差。 有个老外写了一个精确获取position的方法,通过采样率来校正误差,地址一时找不到了,但还是没能彻底解决这个问题,只有等Adobe来做了。

Tags: SOUND_COMPLETE

上一篇: 看过团长,写点什么
下一篇: 播放mp3的另一种方法

发表评论

评论内容:

点击获得Trackback地址