0

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

为了测试这一点,启动一个声音,然后每帧将 channel.position 与预期的位置进行比较,例如 getTimer() - startTime。差异总是(对我而言)23 或 46 毫秒。

我在这里发现了一个问题,它讨论了位置属性,并且它以自己的速率更新,在我的例子中恰好是 43 fps,大约每 23 毫秒。

有没有办法控制声音的播放开始并知道位置属性何时更新?如果有人能解释 Flash 实际在做什么以及什么时候做的,那就太好了!

我真的很感激所有的意见,这太奇怪了。

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

4

1 回答 1

1

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

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

如果您需要样本精度,您可以尝试使用SampleDataEvent直接输出样本并使用Sound.extract访问加载的声音样本。如果您希望将多个声音相互同步,但如果您将音频与显示帧或视频同步,这将有所帮助。

于 2010-09-27T17:37:26.547 回答