2010-09-26 50 views
0

我想非常精确地控制声音的开始,但它似乎在开始声音之前要等待一些东西。这就好像播放器中有一个内部时钟以大约43 fps的速度运行,并且声音只能在该时钟的节拍处开始播放。
无论项目的帧率或它支配的计算机的帧率如何,始终为43 fps(至少对我而言)。SoundChannel何时实际开始播放声音?

为了测试这个,开始一个声音,然后每个帧比较channel.position与期望的位置,例如, getTimer() - startTime。差别总是(对我来说)23或46 mS。

我发现了一个问题here,它讨论了位置属性,并且以它自己的速率进行了更新,在我的情况下它恰好是每秒23帧,速度为43帧/秒。

有没有办法控制声音的播放开始并知道位置属性何时更新?如果有人能够解释什么时候Flash真的在做什么,那会很棒!

我真的很感激所有的输入,这太奇怪了。

编辑:我注意到position属性只包含23.219954648526077的倍数,例如, 46.439909297052154,69.65986394557822?如果您在创建频道后直接询问,它包含我刚刚设置的号码,但在下一帧中只有这些特定号码。任何想法的人?

回答

1

23.219954648526077 ms间隔来自闪存内部使用1024个采样作为缓冲区大小和44100 hz采样率。

23.219954648526077毫秒=(1024个样本/每秒44100个采样)*(每秒1000毫秒)

如果需要样品的准确性,可以尝试使用SampleDataEvent直接和Sound.extract输出样本访问加载的声音样本。如果您希望将多个声音互相同步,但如果您将音频与显示帧或视频进行同步,则会有所帮助。

+0

感谢您的回复,它解释了神秘的一部分。但这并不能解释为什么声音似乎被推迟了。可能是因为soundchannels不是直接创建,而是暂停,直到下一个soundchannel更新周期,位置属性也更新了吗?如果有这样一个循环,是否有任何事件可以用来知道这是什么时候发生的? – Bob 2010-09-28 19:44:05