我正在尝试制作一些声音样本以一定间隔随机选择的内容,以便歌曲演变并且每次听到时都会有所不同。 HTML音频还不够,因为时机不精确,所以我正在尝试使用Web Audio,但它似乎相当复杂。现在,我只是想知道如何在16秒时准确地播放新的音频文件,或者32秒等等。我遇到过这样的事情
playSound.start(audioContext.currentTime + numb);
但截至目前,我无法使其发挥作用。
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结束时有没有办法触发它(音频没有间隙)?)帮助赞赏,谢谢!
答案 0 :(得分:1)
WebAudio应该能够使用<div class="bg bg2">
<input type="text" placeholder="100% width - button" /><a class="button" href="#">Click</a>
</div>
<div class="bg">
<input type="text" placeholder="100% width" />
</div>
非常精确地启动音频,直到最近的采样时间。如果它没有,那是因为来自start(time)
的音频数据不包含您预期的数据,或者它是您浏览器中的错误。
答案 1 :(得分:0)
当您拨打keyPressed
时,您希望触发两首歌曲以开始播放。一个立即,另一个在7.5秒。
播放歌曲的功能是soundObj.play
,需要另外一个参数,即播放歌曲的audioContext时间。例如:soundObj.play = function(volumeVal, pitchVal, startTime) {...}
function keyPressed()
块看起来像这样:
harp1.play(.5, 2, 0);
harp2.start(1, 1, audioContext.currentTime + 7.5);
audioContext.resume();
audioContext.resume()启动实际的音频(或者更确切地说,启动音频图表时序,以便它按照您预定的时间进行操作)