javascript - 将Blob转换为WAV文件

标签 javascript reactjs audio blob wav

您好,我是整个JS + Audio的新手。
我有一个React-mic,它可以录制来自内置麦克风的音频,并在停止后将其转换为blob。

为了进行测试,我只想下载内置的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);
    }

关于javascript - 将Blob转换为WAV文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59591778/

相关文章:

javascript - 如何在服务器端经典 ASP 页面中引用上传的文件?

javascript - react : Script tag not working when inserted using dangerouslySetInnerHTML

javascript - React.js风格变异错误……?

javascript - 下一个身份验证 : How the registration is handled with a email + password credential provider?

javascript - 音频无法在 iOS Cordova Phonegap 应用程序中播放

android - 从 Android 设备流式传输到 shoutcast(上行)

javascript - 如何加载第二页作为覆盖层

javascript - 单选按钮清除文本框

javascript - 配合CSS,有没有比用JS更直接的方法呢?

android - 什么是 SLDataLocator_AndroidSimpleBufferQueue (Android 4.3)?