1

我在 mp3 文件上使用AudioContext's decodeAudioData,这给了我一个AudioBuffer. 有了这个音频缓冲区,我继续使用getChannelData().

现在我想使用相同的代码来绘制 a 的音频数据的波形MediaStream,这意味着我需要相同类型的输入/数据。我知道 aMediaStream包含实时信息,但必须有一种方法可以从MediaStreamas访问每个新数据

包含 PCM 数据的 Float32Array

这就是AudioBuffer' 的getChannelData回报。

我试图MediaStream用 a包装MediaStreamAudioSourceNode并将其输入 aAnalyserNode以使用getFloatFrequencyData()(返回 a Float32Array),但我可以看出数据与我从中获得的数据不同getChannelData()。也许它不是“PCM”数据?如何获取“PCM”数据?

希望这很清楚。谢谢您的帮助!

4

2 回答 2

4

首先,请注意 AnalyserNode 仅偶尔对数据进行采样,但不会处理所有数据。我认为这很符合您的场景,但只要知道如果您需要所有数据(例如,您正在缓冲音频),您今天将需要使用 ScriptProcessor。

假设您只需要数据样本,您可以使用 AnalyserNode,但您应该调用 getFloatTimeDomainData(),而不是 getFloatFrequencyData()。这将为您提供 PCM 数据(FrequencyData 为您提供 PCM 数据的 FFT)。

于 2016-10-28T23:46:33.423 回答
1

使用 audiocontext 创建 MediaStreamDestination,然后从流中创建新的 MediaRecorder,

var options = {mimeType: 'audio/webm;codecs=pcm'};
mediaRecorder = new MediaRecorder(stream, options);
于 2018-08-24T09:14:19.143 回答