Javascript 不使用“快速解码Html5音频”;createMediaElementSource“;
我使用的是WebAudioAPI的“createMediaElementSource”,它可以在Firefox(Gecko)和Chrome(Blink)上正常工作,但不能在Safari(Webkit)上正常工作。这对我来说是个大问题,因为我更喜欢从我的Html5音频播放器获取音频,而不是使用XMLHttpRequests,因为后者太慢了 我所做的第一次尝试是从audio标记中获取源代码作为字符串,并将其作为XMLHttpRequest中的url。正如预期的那样,它可以工作,但解码速度非常慢,我不能用stop()暂停音频,因为恢复会导致在听到之前对整个文件进行另一轮事先解码 stackoverflow用户Kevin Ennis给了我一个非常好的建议: 您可以将音频分解为多个较小的文件。喜欢 可能会将其分解成4个独立的1MB音频文件并加载到 秩序。然后可以在加载第一个后开始播放,然后 在播放的同时,你加载其他的 我的问题是,技术上我如何做到这一点?我不知道有什么函数可以检查音频文件是否完成 我想会是这样的:Javascript 不使用“快速解码Html5音频”;createMediaElementSource“;,javascript,web-audio-api,Javascript,Web Audio Api,我使用的是WebAudioAPI的“createMediaElementSource”,它可以在Firefox(Gecko)和Chrome(Blink)上正常工作,但不能在Safari(Webkit)上正常工作。这对我来说是个大问题,因为我更喜欢从我的Html5音频播放器获取音频,而不是使用XMLHttpRequests,因为后者太慢了 我所做的第一次尝试是从audio标记中获取源代码作为字符串,并将其作为XMLHttpRequest中的url。正如预期的那样,它可以工作,但解码速度非常慢,我不
var source = document.getElementByTagName["audio"][0].src;
var fileExt = source.indexOf('.');
var currentFile = 1;
if(decodeCurrentData == complete) {
currentFile += 1;
source = source.slice(0, fileExt) + "_part" + currentFile.toString() + ".mp3";
loadAudioFile();
}
var loadAudioFile = function () {
var request = new XMLHttpRequest();
request.open( "GET", "source", true );
request.responseType = "arraybuffer";
request.onload = function (){
context.decodeAudioData(request.response, function (buffer) {
convolver.buffer = buffer;
});
};
request.send();
};
loadAudioFile();
我的想法行得通还是彻底失败?您建议我如何处理较长的解码时间?您不需要检查它是否完成-您只需要提前安排它应该完成的时间。(不管怎样,这是获得样本精确调度的唯一方法,您需要使用这种方法。)此外,我要指出,您需要小心-MP3解码有时会根据解码器的不同而增加长度,在不同的系统上会有所不同。decodeAudioData被指定为重新采样,因此,如果文件采样率与上下文采样率不匹配,则用于很好地组合在一起的片段可能不再平滑。