Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome 如何使用web音频api无缝循环声音_Google Chrome_Loops_Safari_Web Audio Api - Fatal编程技术网

Google chrome 如何使用web音频api无缝循环声音

Google chrome 如何使用web音频api无缝循环声音,google-chrome,loops,safari,web-audio-api,Google Chrome,Loops,Safari,Web Audio Api,我在任何地方都找不到这个问题的明确答案。我正在寻找在chrome中加载文档时自动无缝循环.wav文件的最简单方法。WebAudioAPI似乎是最佳实践,但我找不到简单的文档。对safari和其他项目的支持也会很好,但没有那么重要 我已经看过w3.org的例子,但是没有帮助 我认为这是最接近我想要的,除了打开。单击按钮: 在这里,我为自己的音频实现了forestmist,它在safari中运行完美,但在chrome中停止: 以下是该页面的源代码: Web音频API循环演示 回路1 //-----

我在任何地方都找不到这个问题的明确答案。我正在寻找在chrome中加载文档时自动无缝循环.wav文件的最简单方法。WebAudioAPI似乎是最佳实践,但我找不到简单的文档。对safari和其他项目的支持也会很好,但没有那么重要

我已经看过w3.org的例子,但是没有帮助

我认为这是最接近我想要的,除了打开。单击按钮:

在这里,我为自己的音频实现了forestmist,它在safari中运行完美,但在chrome中停止:

以下是该页面的源代码:


Web音频API循环演示
回路1
//--------------
//音频对象
//--------------
var音频={
缓冲区:{},
兼容性:{},
档案:[
“连帽衫”\u robot\u clipped.wav”,
“beat.wav”
],
是的,
源_循环:{},
};
//-----------------
//音频功能
//-----------------
audio.findSync=函数(n){
var first=0,
电流=0,
偏移量=0;
//查找具有最早开始时间的音频源,以便将所有其他音频同步到
for(audio.source\u循环中的变量i){
当前=音频。源\u循环[i]。\u开始时间;
如果(当前>0){
如果(当前<第一个| |第一个===0){
第一个=电流;
}
}
}
如果(audio.context.currentTime>first){
偏移量=(audio.context.currentTime-first)%audio.buffer[n]。持续时间;
}
返回偏移量;
};
audio.play=功能(n){
if(音频源\u循环[n]。\u播放){
音频。停止(n);
}否则{
audio.source_loop[n]=audio.context.createBufferSource();
audio.source_循环[n].buffer=audio.buffer[n];
audio.source\u loop[n]。loop=true;
audio.source\u循环[n]。连接(audio.context.destination);
var offset=audio.findSync(n);
audio.source\u loop[n]。\u startTime=audio.context.currentTime;
if(audio.compatibility.start==='noteOn'){
/*
函数不支持偏移。
通过使用带有偏移量的noteGrainOn()进行补偿,播放一次,然后安排一个noteOn()调用以循环播放。
*/
audio.source_once[n]=audio.context.createBufferSource();
audio.source_一次[n].buffer=audio.buffer[n];
audio.source\u一次[n]。连接(audio.context.destination);
audio.source_once[n].noteGrainOn(0,偏移量,audio.buffer[n].duration-offset);//currentTime,offset,duration
/*
请注意noteGrainOn()的第三个参数。
如果你的声音是10秒长,偏移量是5,持续时间是5,那么你就会得到你想要的。
如果声音长度为10秒,偏移量为5,持续时间为10,则声音将从开始播放,而不是从偏移量开始播放。
*/
//现在将循环声音排队,以便在音频播放后立即启动。
audio.source_loop[n][audio.compatibility.start](audio.context.currentTime+(audio.buffer[n].duration-offset));
}否则{
audio.source\u loop[n][audio.compatibility.start](0,偏移量);
}
audio.source\u loop[n]。\u playing=true;
}
};
audio.stop=功能(n){
if(音频源\u循环[n]。\u播放){
audio.source_loop[n][audio.compatibility.stop](0);
audio.source\u loop[n]。\u playing=false;
音频.source\u loop[n]。\u startTime=0;
if(audio.compatibility.start==='noteOn'){
audio.source_once[n][audio.compatibility.stop](0);
}
}
};
//-----------------------------
//检查Web音频API支持
//-----------------------------
试一试{
//更多信息请访问http://caniuse.com/#feat=audio-原料药
window.AudioContext=window.AudioContext | | window.webkitadiocontext;
audio.context=新窗口。AudioContext();
}捕获(e){
audio.procedure=false;
警报(“此浏览器不支持Web音频API”);
}
如果(音频,继续){
//---------------
//相容性
//---------------
(功能(){
var start='start',
停止='停止',
buffer=audio.context.createBufferSource();
if(typeof buffer.start!=“函数”){
开始='noteOn';
}
audio.compatibility.start=开始;
if(type of buffer.stop!=“函数”){
停止='noteOff';
}
audio.compatibility.stop=停止;
})();
//-------------------------------
//设置音频文件和按钮
//-------------------------------
for(audio.files中的变量a){
(功能(){
变量i=parseInt(a)+1;
var req=新的XMLHttpRequest();
req.open('GET',audio.files[i-1],true);//数组以0开头,因此为-1
req.responseType='arraybuffer';
req.onload=函数(){
audio.context.decodeAudioData(
请求响应,
功能(缓冲区){
audio.buffer[i]=缓冲区;
audio.source_loop[i]={};
var button=document.getElementById('button-loop-'+i);
按钮。addEventListener('click',函数(e){
e、 预防默认值();
audio.play(这个值);