MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-dev-survey

AudioContext.createDelay()

这篇翻译不完整。请帮忙从英语翻译这篇文章

  createDelay() 是  AudioContext   的一个方法,作用是将输入音频信号延迟一定时间。(比如可以实现 对着话筒说句话,然后几秒后 这句话从音响里播放出来)

 

语法

var audioCtx = new AudioContext();
var synthDelay = audioCtx.createDelay(maxDelayTime);

参数

maxDelayTime
设置最大允许延迟的时间,以“秒”为单位

返回

A DelayNode. The default DelayNode.delayTime if no parameter is passed to createDelay() is 0 seconds.

以上是原文,大意是返回延时时间,没有设置时默认是0

 

示例

首先是中文版的简洁的示例,这个例子中 话筒里接收到的声音 会延迟3秒 从音响中播放

window.AudioContext = window.AudioContext || window.webkitAudioContext || window.mozAudioContext || window.msAudioContext;

try {//音频相关api
    var audioContext = new window.AudioContext(); 
    var synthDelay = audioContext.createDelay(5.0);
} catch (e) { 
    alert("你浏览器不支持");
}
 

var error = function (error) {alert("有错误"); }; 

//以下是获取麦克风
if (navigator.getUserMedia) { //标准api
 navigator.getUserMedia({ "audio": true },
 function (stream) { 
 micto(stream);    //具体工作 
                   }, error); 
}else if(navigator.webkitGetUserMedia) {   //webkit api
 navigator.webkitGetUserMedia({audio:true, video:  false },
 function (stream) {
  micto(stream); //具体工作 
                   }, error); 
 }else if (navigator.mozGetUserMedia) {  //火狐 api
 navigator.mozGetUserMedia({ "audio": true },
 function (stream) {   
  micto(stream);//具体工作 
                   }, error); 
 }else if (navigator.msGetUserMedia) { //ie api
 navigator.msGetUserMedia({ "audio": true },
 function (stream) { 
  micto(stream);//具体工作 
                   }, error); 
 } else { 
   alert("您的浏览器版不支持这个api"); 
}



                     
                         
 var micto = function(stream) {
       
  synthDelay.delayTime.value = 3.0;   //延迟3秒
  
  var source = audioContext.createMediaStreamSource(stream);
 
  source.connect(synthDelay);
 
  synthDelay.connect(audioContext.destination);
 
      } 
 

 

 以下是英文版示例

We have created a simple example that allows you to play three different samples on a constant loop — see create-delay (you can also view the source code). If you just press the play buttons, the loops will start immediately; if you slide the sliders up to the right, then press the play buttons, a delay will be introduced, so the looping sounds don't start playing for a short amount of time.

var AudioContext = window.AudioContext || window.webkitAudioContext;
var audioCtx = new AudioContext();

var synthDelay = audioCtx.createDelay(5.0);

  ...

var synthSource;

playSynth.onclick = function() {
  synthSource = audioCtx.createBufferSource();
  synthSource.buffer = buffers[2];
  synthSource.loop = true;
  synthSource.start();
  synthSource.connect(synthDelay);
  synthDelay.connect(destination);
  this.setAttribute('disabled', 'disabled');
}

stopSynth.onclick = function() {
  synthSource.disconnect(synthDelay);
  synthDelay.disconnect(destination);
  synthSource.stop();
  playSynth.removeAttribute('disabled');
}

...

var delay1;
rangeSynth.oninput = function() {
delay1 = rangeSynth.value;
synthDelay.delayTime.value = delay1;
}

Specifications

Specification Status Comment
Web Audio API
createDelay()
Working Draft  

Browser compatibility

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 10.0webkit (Yes) 25.0 (25.0)  未实现 15.0webkit
22 (unprefixed)
6.0webkit
Feature Android Edge Firefox Mobile (Gecko) Firefox OS IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support ? (Yes) 26.0 1.2 ? ? ? 33.0

See also

文档标签和贡献者

 此页面的贡献者: wang_geng, jb145161
 最后编辑者: wang_geng,