我正在从服务器接收小块的PCM音频数据,并将它们存储在一个数组中。现在,我想使用一些HTML5功能按顺序播放这些音频块,没有间隙。我认为“可能”的解决方案有两个:
的
当我研究这些选项时,请向我推荐任何其他选项或对我正在考虑的两个选项的看法。虽然跨平台解决方案将是最好的,但我可以满足于Chrome唯一的解决方案,因为
发布于 2011-08-28 01:50:40
安排音频是Web audio API的设计目标。如果您将解码的PCM音频块作为类型化数组(AUDIO_CHUNKS
),则可以使用noteOn()
为每个块创建音频缓冲区,并在准确的时间(一个接一个)调度它们。类似于:
var startTime = 0;
for (var i = 0, audioChunk; audioChunk = AUDIO_CHUNKS[i]; ++i) {
// Create/set audio buffer for each chunk
var audioBuffer = audioCtx.createBuffer(NUM_CHANNELS, NUM_SAMPLES, SAMPLE_RATE);
audioBuffer.getChannelData(0).set(audioChunk);
var source = audioCtx.createBufferSource();
source.buffer = audioBuffer;
source.noteOn(startTime);
source.connect(audioCtx.destination);
startTime += audioBuffer.duration;
}
发布于 2011-08-05 11:49:31
选项1可能不起作用,因为音频标签不能播放原始音频数据(我假设这就是您所说的PCM音频数据,或者我错了?)。每个浏览器都需要特定的编解码器。在音频标签的顶部播放没有间隙的东西是完全不可靠的。
选项2可能行得通。web音频api包含的缓冲区可能会填充原始数据并播放,但我从未尝试过这样做。现在最大的缺点是: a.只有Chrome;b.用户需要通过输入about:flag来配置chrome,并启用Web Audio,这可能会让一些人感到害怕。
第三种选择是音频数据API,这是一种折衷方案。我自己从来没有试过,但从规格来看,它看起来就是你想要的。我不知道如何实现,所以你必须自己做一些研究:) https://wiki.mozilla.org/Audio_Data_API#Writing_Audio
请不要因为我在脑海中给出了这些答案,而且我对HTML5音频还很陌生。
https://stackoverflow.com/questions/6593738
复制相似问题