Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Web音频API-如何将音频缓冲区保存到包含所有更改的文件中?_Javascript_Audio_Web Audio Api - Fatal编程技术网

Javascript Web音频API-如何将音频缓冲区保存到包含所有更改的文件中?

Javascript Web音频API-如何将音频缓冲区保存到包含所有更改的文件中?,javascript,audio,web-audio-api,Javascript,Audio,Web Audio Api,我对音频缓冲区进行了更改,如增益和平移,将它们连接到音频上下文。 现在,我想将所有已实现的更改保存到一个文件中。 按原样保存缓冲区将在不进行更改的情况下为我提供原始音频 有什么方法或程序可以做到这一点吗?正在进行中的是使用MediaRecorder保存修改后的音频 因此,除了连接到目标之外,还要连接到MediaStreamDestinationNode。此节点有一个流对象,可用于初始化MediaRecorder。设置记录器,以便在数据可用时保存数据。当你在录音时,你有一个blob,你可以下载 此

我对音频缓冲区进行了更改,如增益和平移,将它们连接到音频上下文。 现在,我想将所有已实现的更改保存到一个文件中。 按原样保存缓冲区将在不进行更改的情况下为我提供原始音频


有什么方法或程序可以做到这一点吗?

正在进行中的是使用
MediaRecorder
保存修改后的音频

因此,除了连接到目标之外,还要连接到
MediaStreamDestinationNode
。此节点有一个流对象,可用于初始化
MediaRecorder
。设置记录器,以便在数据可用时保存数据。当你在录音时,你有一个blob,你可以下载


此处缺少许多详细信息,但您可以使用找到如何使用MediaRecorder。

我找到了一个解决方案,使用OfflineAudioContext。 下面是一个将增益更改添加到音频并保存的示例。 在代码的最后一行,我得到了带有我所做更改的数组缓冲区。 从那里,我可以继续保存文件

let offlineCtx = new OfflineAudioContext(this.bufferNode.buffer.numberOfChannels, this.bufferNode.buffer.length, this.bufferNode.buffer.sampleRate);
let obs = offlineCtx.createBufferSource();
obs.buffer = this.buffer;
let gain = offlineCtx.createGain();
gain.gain.value = this.gain.gain.value;
obs.connect(gain).connect(offlineCtx.destination);
obs.start();
let obsRES = this.ctx.createBufferSource();
await offlineCtx.startRendering().then(r => {
  obsRES.buffer = r;
});

如您所说,对缓冲区进行更改与通过编码器运行音频上下文后将其连接到文件接收器非常相似,请参见将编码的web音频保存到文件的示例: