AudioContext:FileReader,用于保存.wav数据,以便稍后使用AudioContext()

时间:2017-08-26 00:19:16

标签: javascript google-chrome-extension html5-audio

所以,基本上,我的Chrome扩展程序有一个文件阅读器,用户可以上传.wav文件。

function handleAddSound() {
  var file = document.getElementById("new_sound_file").files[0];
  var reader = new FileReader();
  reader.onload = function(){
    var data = reader.result;

    // how to save .wav data into object for later playback?
    // what I have tried:

    storageObject["wavData"] = data;

  }
reader.readAsArrayBuffer(file); ???
}

我的播放通过对象进行查看并按以下方式播放:

function playSound(data, time) {
  var source = context.createBufferSource();
  context.decodeAudioData(storageObject["wavData"], function(buffer) {
    source.buffer = buffer;
    source.connect(context.destination);    
    if (!source.start) {
      source.start = source.noteOn;
    } else {
      source.start(time);
    }
  })
 }

我觉得我缺少一些编码和解码步骤或保存数据步骤的正确方法。

有关如何使用AudioContext()保存.wav数据以进行播放的任何想法都将不胜感激!

当我按下与对象键对应的键时,它会触发一次,然后我会收到这些错误:

// context.decodeAudioData(storageObject["wavData"], function(buffer) {
Uncaught (in promise) DOMException: Cannot decode detached ArrayBuffer

显然,这是因为:

https://tc39.github.io/ecma262/#sec-isdetachedbuffer

基本上就是说

  1. 断言:Type(arrayBuffer)是Object,它有一个[[ArrayBufferData]]内部插槽。
  2. 如果arrayBuffer。[[ArrayBufferData]]为null,则返回true。
  3. 返回false。
  4. 我需要这个才能返回false。无论如何要确保ArrayBufferData在那里而不是null?

0 个答案:

没有答案