私は、音のサンプルが間隔を置いてランダムに選択されて、歌が進化するようにしようとしています。 HTML Audioはタイミングが不正確なのでこれでは不十分だったので、私はWeb Audioを試していますが、かなり複雑に思えます。今のところ、私はちょうど私がこのWeb Audio:正確なタイミングでイベントを発生させますか?
playSound.start(audioContext.currentTime + numb);
のようなものに出くわした。しかし、今のように私はそれを動作させることができないなど、正確に16秒の時点で新たなオーディオファイルの再生を作る方法を知りたい、または32秒。
var audioContext = new audioContextCheck();
function audioFileLoader(fileDirectory) {
var soundObj = {};
soundObj.fileDirectory = fileDirectory;
var getSound = new XMLHttpRequest();
getSound.open("GET", soundObj.fileDirectory, true);
getSound.responseType = "arraybuffer";
getSound.onload = function() {
audioContext.decodeAudioData(getSound.response, function(buffer) {
soundObj.soundToPlay = buffer;
});
}
getSound.send();
soundObj.play = function(volumeVal, pitchVal) {
var volume = audioContext.createGain();
volume.gain.value = volumeVal;
var playSound = audioContext.createBufferSource();
playSound.playbackRate.value = pitchVal;
playSound.buffer = soundObj.soundToPlay;
playSound.connect(volume);
volume.connect(audioContext.destination)
playSound.start(audioContext.currentTime)
}
return soundObj;
};
var harp1 = audioFileLoader("IRELAND/harp1.ogg");
var harp2 = audioFileLoader("IRELAND/harp2.ogg");
function keyPressed() {
harp1.play(.5, 2);
harp2.start(audioContext.currentTime + 7.5);
}
window.addEventListener("keydown", keyPressed, false);
私は、harp1.oggが終了すると直ちにharp2.oggを再生しようとしていることがわかります。最終的には、次のファイルをランダムに選択できるようにしたいと思いますが、今のところ、どうすればそれを実現するかを知る必要があります。 harp1.oggが開始してから7.5秒後にharp2.oggを正確に再生させるにはどうすればいいですか?(もっと良いですが、harp2が終了したときにトリガーする方法はありますか?
提案通り、https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode/onendedです。 –
あなたの 'soundObj'オブジェクトには' start'メソッドがありません。 'playSound'を' soundObj'のプロパティにすることをお勧めします。この方法で、外部から 'start'メソッドにアクセスできます。 – Kaiido
偉大な、私はすでに、私はあまりにも野心的にしようとする前に、より多くのファンダメンタルズを勉強する必要があることを知っています--- "playSoundをsoundObjの財産にする"のはどうですか?ありがとう! – Tom