所以,基本上,我的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
基本上就是说
我需要这个才能返回false。无论如何要确保ArrayBufferData在那里而不是null?