gpt4 book ai didi

javascript - 在 decodeAudioData 回调方法中存储缓冲区

转载 作者:行者123 更新时间:2023-11-29 21:44:16 27 4
gpt4 key购买 nike

我想制作一个小的浏览器应用程序,它能够播放不同的音符。因此,我将声音作为 Base64 编码的 js 变量。现在我必须先解码 Base64,然后再解码 mp3 格式,以使应用程序可以使用声音。此外,我有一个名为“scale”的数据结构,它存储一个简单的 c-Major 音阶,如下所示:

scale = {
'c': {
color: 'red',
name: 'C1'
},
'd': {
color: 'darkorange',
name: 'D1'
},...

在 goolge 和一些教程的帮助下,我然后这样做来进行编码:

    window.AudioContext = window.AudioContext || window.webkitAudioContext;
var context = new AudioContext();

for (var note in scale){
var cNote = MIDI["Soundfont"]["acoustic_grand_piano"][scale[note].name];
if(cNote){
var byteArray = Base64Binary.decodeArrayBuffer(cNote);
context.decodeAudioData(byteArray, storeNote, function(err) { console.log("err(decodeAudioData): "+err); });
}
}

function storeNote(buffer){
scale[note].buffer = buffer;
}

显然,storeNote 内部的调用确实可以正常工作,因为 note 总是相同的。我想要像 storeNote(buffer, note) 这样的东西。但是,我可以只在 decodeAudioData 中使用回调函数,除了“缓冲区”之外没有其他参数。现在的问题是:如何将当前笔记作为变量传递给 storeNote() ?

最佳答案

            context.decodeAudioData(byteArray, function(buffer).bind(cNote){
scale[this].buffer = buffer;
},

关于javascript - 在 decodeAudioData 回调方法中存储缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31755123/

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