我有一个可以正常工作的系统
因此,如果我有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%可靠性,还是我需要添加一些计算以计算出播放时间的+/-几毫秒?
看来完成此任务的目的是AudioWorkletNode。
根据AudioBufferSourceNode documentation:
AudioBufferSourceNode接口是一个AudioScheduledSourceNode,它表示存储在AudioBuffer中的由内存中音频数据组成的音频源。对于回放对定时精度要求特别严格的音频,例如对于必须符合特定节奏并且可以保留在内存中而不是从磁盘或网络中播放的声音,它尤其有用。要播放需要精确定时但必须从网络流传输或从磁盘播放的声音,请使用AudioWorkletNode来实现其播放。
这种情况恰好实现了来自网络的流传输。 AudioBufferSourceNode是not设计的,可以通过网络即时更新。
什么可能导致不同步:
建议: