我正在尝试使用 mp3 文件播放无间隙循环。我已经阅读了一些教程并了解到有类似编码器/装饰延迟之类的东西,并且可以使用一些工具用适当的音乐数据来填补这个空白。它甚至可以正常工作,但是当我尝试在 Flash 中播放该音乐时(实际上是 haxe nme,但我认为这没有任何区别),我发现还有另一个延迟,我猜这是由 flash 造成的.media.Sound(好吧,实际上在互联网的代码中找到了一些这样的评论)。
太好了,因为我有时需要更快或更慢地播放声音,这就是我的播放器的工作方式:
- 提取的字节存储在 bytes var
- speed 是一个浮点变量,默认 = 1
- 有位置变量以字节表示实际位置(字节由许多声音对象共享,所以我不能轻易使用 bytes.position)
- 当我播放声音时,在 SampleDataEvent 处理程序中,我设置 bytes.position = position * 8,然后读取并播放两个浮点数并更新 position += speed
如果我已经做错了什么 - 请指出。
为了摆脱这种延迟,我尝试:
- 添加延迟变量
- 硬编码从 audacity 读取的声音长度(看起来 flash.media.Sound object.length 不准确,我不确定,但我猜是因为 mp3 解码器/编码器延迟)
- 假设每个声音是 128kbps, 44.1kHz
- 设置 DELAY 所以 flash.media.Sound 对象 bytesTotal - DELAY = 硬编码长度 * 128kbps
它可以播放,但是:
- Audacity 的 mp3 仍然有令人讨厌的差距。
- mp3 来自填补 mp3 空白的工具(来自这里http://www.compuphase.com/mp3/mp3loops.htm)播放效果更好,但开头的声音并不清晰。
- 停止声音后,我可以听到恼人的“咔哒”声。
您能帮我理解为什么(1)会发生以及如何解决所有 3 个问题吗?