gpt4 book ai didi

javascript - 网络音频 : Make event occur at exact moment?

转载 作者:行者123 更新时间:2023-12-03 05:12:11 26 4
gpt4 key购买 nike

我正在尝试制作一些声音样本,每隔一定时间随机选择声音样本,以便歌曲不断发展,并且每次听时都会有所不同。 HTML Audio 对此还不够,因为时间不精确,所以我正在尝试 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);

你看,我正在尝试让 harp2.ogg 在 harp1.ogg 完成后立即播放。最终我希望能够随机选择下一个文件,但现在我只需要知道如何实现它。如何让 harp2.ogg 在 harp1.ogg 开始后 7.5 秒准确播放(或者更好的是,有没有办法在 harp2 结束时触发它(没有音频间隙)?)感谢帮助,谢谢!

最佳答案

WebAudio 应该能够使用 start(time) 非常精确地启动音频,精确到最近的采样时间。如果没有,这是因为 decodeAudioData 中的音频数据不包含您期望的数据,或者是您的浏览器中的错误。

关于javascript - 网络音频 : Make event occur at exact moment?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41758946/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com