gpt4 book ai didi

javascript - WebAudio API:是否可以导出带有StereoPanner节点数据的AudioBuffer?

转载 作者:行者123 更新时间:2023-12-03 00:23:17 25 4
gpt4 key购买 nike

我想将AudioBuffer导出到带有StereoPanner节点的wav文件中,即我向左平移声音并向左平移输出声音。我想知道是否可以导出与AudioContext关联的StereoPanner数据?
我已经从AudioContext构建了一个AudioSource,并将StereoPanner附加到了我的AudioSource。我可以在浏览器中平移声音,也可以将AudioBuffer导出到文件(wav)。不幸的是,当我导出AudioBuffer时,似乎没有StereoPanner数据。是否可以导出StereoPanner数据?还是任何音频节点数据?
这是我的示例代码。我已经掩盖了一些接线细节。 audiobuffer-to-wav库提供了encodeWav函数。

const audioContext = new AudioContext();

// file input code

const arrayBuffer = await new Promise(resolve => {
const reader = new FileReader();

reader.onload = res => {
resolve(res.target.result);
};

reader.readAsArrayBuffer(e.target.files[0]);
});

audioContext.decodeAudioData(arrayBuffer, newAudioBuffer => {
const newAudioSource = audioContext.createBufferSource();
const newStereoPanNode = audioContext.createStereoPanner();

newAudioSource.buffer = newAudioBuffer;

newAudioSource.connect(newStereoPanNode);
newAudioSource.connect(audioContext.destination);
newStereoPanNode.connect(audioContext.destination);

const wavBuffer = encodeWAV(audioBuffer);
const blob = new Blob([wavBuffer], { type: 'audio/wav' });

// download file code
});

最佳答案

感谢您使用代码更新问题。
给定代码示例,获得所需内容的最简单方法是将AudioContext替换为OfflineAudioContext。像这样:

const audioContext =
new OfflineAudioContext({sampleRate: sampleRate,
numberOfChannels: 2,
length: lengthInFrames});

// Same stuff as above.


audioContext.decodeAudioData(arrayBuffer, newAudioBuffer => {
const newAudioSource = audioContext.createBufferSource();
const newStereoPanNode = audioContext.createStereoPanner();

newAudioSource.buffer = newAudioBuffer;

newAudioSource.connect(newStereoPanNode);
newAudioSource.connect(audioContext.destination);
newStereoPanNode.connect(audioContext.destination);

audioContext.startRendering()
.then(renderedBuffer => {
const wavBuffer = encodeWAV(audioBuffer);
const blob = new Blob([wavBuffer], { type: 'audio/wav' });
// Download file
});
});
如果必须使用 AudioContext,则解决方案会更加复杂。您必须在立体声声像器之后粘贴 ScriptProcessorNodeAudioWorkletNode才能捕获输出并将其保存在某个位置。播放完源代码后,可以对保存数据进行如上所述的编码。

关于javascript - WebAudio API:是否可以导出带有StereoPanner节点数据的AudioBuffer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64161691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com