Воспроизведение двух нот в tone.js одним нажатием кнопки

1

Я разрабатываю веб-игру, в которой нажатие одной кнопки должно воспроизводить две заметки последовательно. Я могу сделать это, используя загруженные аудиофайлы и звуковой обратный вызов.

function playMusic(){
    audio.src = music_array[music_counter++];
    audio.play();
    audio.onended = function(){
        playMusic();
    };
}

Я могу использовать вышеуказанный блок кода для воспроизведения всей песни. Однако, используя этот подход, мне нужно будет загрузить все аудиофайлы в html заранее, и я не думаю, что это хороший подход. Итак, я искал tone.js с той же целью, но я не умею играть заметки один за другим. Я попытался использовать для цикла следующим образом:

music = ["C4;4n", "D4;4n", ...... , "G5;8n"];
for(var i=0; i<range; i++){
    parts = music[music_counter++].split(';');
    synth.triggerAttackRelease(parts[0], parts[1]);
}

а также

for(var i=0; i<range; i++){
    playNote();
}

playNote(){
    parts = music[music_counter++].split(';');
    synth.triggerAttackRelease(parts[0], parts[1]);
}

без везения. Я просмотрел их документацию и другие записи stackoverflow. Я не смог найти решение. Есть ли у кого-нибудь идеи, как достичь этого?

Теги:
tone.js

1 ответ

0
Лучший ответ

Наконец я понял, как это сделать.

var synth = new Tone.Synth().toMaster();

var music = [{"time": 0, "note": "A4", "duration": "16n"},
         ......
         {"time": 23.5, "note": "A4", "duration": "8n"},
         {"time": 24, "note": "G4", "duration": "4n"}];

function playMusic(){
    var part = new Tone.Part(function(time, note){
        //the notes given as the second element in the array
        //will be passed in as the second argument
        console.log(note);
        synth.triggerAttackRelease(note.note, note.duration, time);
    }, music).start(0);

    Tone.Transport.start();
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню