我正在开发一个钢琴应用程序。我有一个带有音符名称及其播放时间的 json 数组。
var data= [{"duration":300,"value":"2C"},{"duration":400,"value":"2D"},{"duration":420,"value":"2E"},{"duration":600,"value":"2F"},{"duration":400,"value":"2G"}];
我需要按顺序演奏 2C 音符 300 微秒,2D 音符 400 微秒,2E 音符 420 以此类推,即在完成上一个音符后播放下一个音符。
我有所有笔记的 .ogg 格式的音频文件,所有笔记的持续时间都相同,为 1018.776 微秒。
为了播放上述json数据的注释,我尝试了javascript的setTimeout函数:
$.each( data, function( key, value ) {
setTimeout(function(){
var audioElement = document.createElement('audio');
audioElement.setAttribute('src', './audio/'+value.value+'.ogg');
audioElement.play();
}, value.duration*key);
});
但这不起作用。主要问题是持续时间。当我使用console.log(value.value)时,结果是2C、2D、2E、2G、2F。这里 2F 和 2G 的顺序不正确。那么,如何以正确的顺序和它们各自的持续时间来演奏这些音符呢?