var actions = function(){return {whichPattern:"pattern1"}};
    var audio = new Audio();
    var _play = function(){
        var l = pattern[actions().whichPattern].instrument.length,
            times_played =0;
        var p = setInterval(function(){

var x = pattern[actions().whichPattern][times_played];
        for(var i=0; i<x.length;i++){
                var toBePlayed = pattern[actions().whichPattern][times_played][i],
                url= "All Drums sounds/"+toBePlayed+".wav";
                audio.src = url;
                audio.play();
                console.log(audio);
                times_played++;
        }

        }, pattern_config[actions().whichPattern].delay);
    if(times_played === l){
        clearInterval(p);

    };

    var pp=document.getElementById("play_pause");
    pp.style.background="url('graphics/pause.png') no-repeat";
    pp.style.backgroundSize ="30px 28px"
    audio.source='All Drums sounds/'+pattern['pattern1'][1][0]+'.wav';
    audio.play();

    };

    var pattern_config = {
        pattern1:{
            WP_slotsCounter:0,
            instrument:["Kick_02", "F_T_03", "Rude_cymbal_02"],
                delay:10
        },
    };

    var pattern={
        pattern1: [], // [['asas', 'sf', 'asd'], ['svv','dgh','sdgh']]
    }

上面的代码很简单。第一个函数返回一个对象...

我的主要动机是:

假设使用pattern.pattern1 = [['asas', 'sf', 'asd'], ['svv','dgh','sdgh']],那么pattern['pattern1'][0]中的所有字符串应同时播放,然后延迟patter_config[actions().whichPattern].delay,则具有pattern['pattern1'][1]名称的声音文件应一起播放。

所以要实现这一点,我做了上面的功能_play()
很好的问题是它没有播放音乐文件,也没有给出任何错误,所以我可以确定问题出在哪里。

最佳答案

pattern [“pattern1”]是一个字符串数组,没有任何“instrument”属性
也许您正在尝试使用pattern_config [“pattern1”]

 var actions = function () {
     return {
         whichPattern: "pattern1"
     }
 };
 var audio = new Audio();
 var _play = function () {
     var l = pattern_config[actions().whichPattern].instrument.length,
         times_played = 0;
     var p = setInterval(function () {

         var x = pattern_config[actions().whichPattern][times_played];
         for (var i = 0; i < x.length; i++) {
             var toBePlayed = pattern_config[actions().whichPattern][times_played][i],
                 url = "All Drums sounds/" + toBePlayed + ".wav";
             audio.src = url;
             audio.play();
             console.log(audio);
             times_played++;
         }

     }, pattern_config[actions().whichPattern].delay);
     if (times_played === l) {
         clearInterval(p);

     };

     var pp = document.getElementById("play_pause");
     pp.style.background = "url('graphics/pause.png') no-repeat";
     pp.style.backgroundSize = "30px 28px"
     audio.source = 'All Drums sounds/' + pattern['pattern1'][1][0] + '.wav';
     audio.play();

 };

 var pattern_config = {
     pattern1: {
         WP_slotsCounter: 0,
         instrument: ["Kick_02", "F_T_03", "Rude_cymbal_02"],
         delay: 10
     },
 };

 var pattern = {
     pattern1: [['asas', 'sf', 'asd'], ['svv','dgh','sdgh']],
 }

关于javascript - 使用javascript动态播放多种声音,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31249752/

10-12 06:08