Javascript 将blob转换为wav文件

Javascript 将blob转换为wav文件,javascript,reactjs,audio,blob,wav,Javascript,Reactjs,Audio,Blob,Wav,你好,我对整个JS+音频都是新手。 我有一个react话筒,它可以录制来自内置话筒的音频,并在停止后将其变成水滴 为了进行测试,我只想下载构建的wav文件并收听它 wav文件每次仅为15kb。所以它是空的。 不过,自动文件命名是可行的 有没有关于如何将音频blob转换为wav的提示 谢谢大家! function onStop(recordedBlob) { console.log('recordedBlob is: ', recordedBlob); const fileName

你好,我对整个JS+音频都是新手。 我有一个react话筒,它可以录制来自内置话筒的音频,并在停止后将其变成水滴

为了进行测试,我只想下载构建的wav文件并收听它

wav文件每次仅为15kb。所以它是空的。 不过,自动文件命名是可行的

有没有关于如何将音频blob转换为wav的提示

谢谢大家!

function onStop(recordedBlob) {
    console.log('recordedBlob is: ', recordedBlob);
    const fileName = chatId + '-' + Date.now() + '-' + author;

    const audioFile = new File([recordedBlob], `${fileName}.wav`, {
      type: 'audio/wav',
      lastModified: Date.now()
    });

    const a = document.createElement('a');
    a.download = `${fileName}.wav`;
    a.href = window.URL.createObjectURL(audioFile);
    a.click();

    setNewAudioFile(audioFile);
    uploadAudio(audioFile);
    console.log(audioFile);
  }

我已通过以下代码完成此操作:

    const reader = new window.FileReader();
    reader.readAsDataURL(audioBlob);
    reader.onloadend = () => {
      let base64 = reader.result + '';
      base64 = base64.split(',')[1];
      const ab = new ArrayBuffer(base64.length);
      const buff = new Buffer.from(base64, 'base64');
      const view = new Uint8Array(ab);
      for (let i = 0; i < buff.length; ++i) {
        view[i] = buff[i];
      }
      const context = new AudioContext();
      context.decodeAudioData(ab, (buffer) => {
      const wavFile = toWav(buffer);
      const blob = new window.Blob([ new DataView(wavFile) ], {
        type: 'audio/wav'
      });
      const anchor = document.createElement('a');
      document.body.appendChild(anchor);
      anchor.style = 'display: none';
      const url = window.URL.createObjectURL(blob);
      anchor.href = url;
      anchor.download = 'audio.wav';
      anchor.click();
      window.URL.revokeObjectURL(url);
    }
const reader=new window.FileReader();
reader.readAsDataURL(audioBlob);
reader.onloadend=()=>{
让base64=reader.result+'';
base64=base64.split(',)[1];
const ab=新阵列缓冲区(base64.长度);
const buff=new Buffer.from(base64,'base64');
常量视图=新的UINT8阵列(ab);
for(设i=0;i{
const wavFile=toWav(缓冲区);
const blob=new window.blob([new DataView(wavFile)]{
键入:“音频/wav”
});
const-anchor=document.createElement('a');
document.body.appendChild(锚定);
anchor.style='display:none';
constURL=window.url.createObjectURL(blob);
anchor.href=url;
anchor.download='audio.wav';
anchor.click();
window.URL.revokeObjectURL(URL);
}

还收到一个错误:“Uncaught ReferenceError:在FileReader.reader.onloadend中未定义缓冲区”神秘的
toWav(缓冲区)
来自包的实例吗?