我有一个可以正常工作的系统
因此,如果我有4个音频剪辑,则通话看起来像
AudioBufferSourceNode.start(0);
AudioBufferSourceNode.start(1);
AudioBufferSourceNode.start(2);
AudioBufferSourceNode.start(3);
我认为这可以完美安排4秒钟的音频,但是似乎要面对时钟问题,也许是因为我希望音频时钟是完美的。我已经使用了一个增益节点来消除每个声音片段(1秒)之间的咔嗒声,但是我立即或在很长一段时间后开始遇到计时问题。基本上,在最坏的情况下,我的音频会像这样播放
---------------------- ----------- ----------- -----------
| 1 second | 1 second | | 950ms | | 900ms | | 850ms |
---------------------- ----------- ----------- -----------
gap gap gap
在此图中,“ 1秒”和“ #ms”表示正在播放的音频量。它应始终为1秒。随着音频的发展,它似乎也在发展差距。我猜想,即使我告诉音频上下文将文件精确地播放为0,也可以,但是其他预定的音频片段可能会或可能不会准时播放。
这是正确的,还是我的系统出了点问题?我是否可以安排音频剪辑在确切的正确时间播放以100%的可靠性,还是我需要添加一些计算以计算出播放时间的+/-毫秒?
答案 0 :(得分:3)
看来完成此任务的目的是 AudioWorkletNode 。
根据AudioBufferSourceNode documentation:
AudioBufferSourceNode接口是一个AudioScheduledSourceNode,它表示存储在AudioBuffer中的由内存中音频数据组成的音频源。对于回放对定时精度要求特别严格的音频,例如对于必须符合特定节奏并且可以保留在内存中而不是从磁盘或网络中播放的声音,它尤其有用。要播放需要精确定时但必须从网络流传输或从磁盘播放的声音,请使用AudioWorkletNode 来实现其播放。
这种情况恰好实现了来自网络的流传输。 不是设计的AudioBufferSourceNode可以通过网络即时更新。
什么可能导致不同步:
建议: