我正在做一个项目,我有一台服务器通过WebSocket向浏览器提供音频。然后,浏览器使用WebSocket捕获音频块并通过Web Audio API播放它们。
我创建了一个AudioContext,然后具有预定义的X采样率,以便在本地硬件上播放此音频。很公平。但是,我从服务器获得的音频的采样率是Y(不一定是与X相同的值,但我确实通过我定义的WebSocket协议知道它是什么。)
经过大量的挖掘后,我似乎无法看到输入音频通过Web Audio本身重新采样的方式。我无法想象这是一个不常见的问题,但由于我不是一个专业的JavaScript编码器,我还没有看出解决方案。
只有将样本分配给getChannelData才能在X == Y时真正起作用。否则,音频会跳过并且音调错误。使用decodeAudioData可以让我访问执行重新采样,但似乎我不想编写自己的重采样器。
思想?
答案 0 :(得分:1)
困惑,你需要使用decodeAudioData吗?
如果您只传输原始PCM数据,只需在服务缓冲区的sampleRate中在本地AudioContext中创建一个AudioBuffer(即根据您获得的数据设置http://webaudio.github.io/web-audio-api/#widl-AudioContext-createBuffer-AudioBuffer-unsigned-long-numberOfChannels-unsigned-long-length-float-sampleRate的第三个参数),并使用适当的时间调用start()(并且playbackRate为1)。您将在块边界处获得轻微的故障,但只是次要故障。
对此问题进行了积极讨论,观看问题:https://github.com/WebAudio/web-audio-api/issues/118。