AudioBufferSourceNode

AudioBufferSourceNode 接口代表一个由存储器中的音频数据组成的音频源,它通过AudioBuffer来进行存储. 它是一个AudioNode.

AudioBufferSourceNode 没有输入却有一个输出. The number of channels in the output corresponds to the number of channels of the AudioBuffer that is set to the AudioBufferSourceNode.buffer property. If there is no buffer set—that is, if the attribute's value is NULL—the output contains one channel consisting of silence. An AudioBufferSourceNode 只能被播放一次; 也就是说,  AudioBufferSourceNode.start() 只允许执行一次. 如果声音需要再播放一次, 那么就需要再创建一个 AudioBufferSourceNode . Those nodes are cheap to create, and AudioBuffers can be reused across plays. It is often said that AudioBufferSourceNodes have to be used in a "fire and forget" fashion: once it has been started, all references to the node can be dropped, and it will be garbage-collected automatically.

多次调用 AudioBufferSourceNode.stop() 是允许的. 最近一次的调用将替换上一次的调用, granted the AudioBufferSourceNode has not already reached the end of the buffer.


The AudioBufferSourceNode takes the content of an AudioBuffer and m

输入数量 0
输出数量 1
频道数量 由相关的 AudioBuffer 定义

属性

从父级的 AudioNode 继承属性.

AudioBufferSourceNode.buffer
Is an AudioBuffer that defines the audio asset to be played, or when set to the value null, defines a single channel of silence. 
AudioBufferSourceNode.detune
Is a k-rate AudioParam representing detuning of oscillation in cents. Its default value is 0.
AudioBufferSourceNode.loop
Is a Boolean attribute indicating if the audio asset must be replayed when the end of the AudioBuffer is reached. Its default value is false.
AudioBufferSourceNode.loopStart
Is a double value indicating, in seconds, where in the AudioBuffer the restart of the play must happen. Its default value is 0.
AudioBufferSourceNode.loopEnd
Is a double value indicating, in seconds, where in the AudioBuffer the replay of the play must stop (and eventually loop again). Its default value is 0.
AudioBufferSourceNode.playbackRate
Is an a-rate AudioParam that defines the speed factor at which the audio asset will be played. Since no pitch correction is applied on the output, this can be used to change the pitch of the sample.

事件

AudioBufferSourceNode.onended
Is an EventHandler containing the callback associated with the ended event.

方法

从父级的 AudioNode 继承方法

AudioBufferSourceNode.start()
Schedules the start of the playback of the audio asset.
AudioBufferSourceNode.stop()
Schedules the end of the playback of an audio asset.

例子

在这个例子中, 我们将会创建一个2秒的缓冲器,并用白噪音填充它, 然后通过AudioBufferSourceNode来播放它.  注释里说明了它的功能.

注意: 你可以 查看在线演示 或 查看源代码.

var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
var button = document.querySelector('button');
var pre = document.querySelector('pre');
var myScript = document.querySelector('script');
pre.innerHTML = myScript.innerHTML;
// Stereo
var channels = 2;
// Create an empty two-second stereo buffer at the
// sample rate of the AudioContext
var frameCount = audioCtx.sampleRate * 2.0;
var myArrayBuffer = audioCtx.createBuffer(2, frameCount, audioCtx.sampleRate);
button.onclick = function() {
  // Fill the buffer with white noise;
  //just random values between -1.0 and 1.0
  for (var channel = 0; channel < channels; channel++) {
   // This gives us the actual ArrayBuffer that contains the data
   var nowBuffering = myArrayBuffer.getChannelData(channel);
   for (var i = 0; i < frameCount; i++) {
     // Math.random() is in [0; 1.0]
     // audio needs to be in [-1.0; 1.0]
     nowBuffering[i] = Math.random() * 2 - 1;
   }
  }
  // Get an AudioBufferSourceNode.
  // This is the AudioNode to use when we want to play an AudioBuffer
  var source = audioCtx.createBufferSource();
  // set the buffer in the AudioBufferSourceNode
  source.buffer = myArrayBuffer;
  // connect the AudioBufferSourceNode to the
  // destination so we can hear the sound
  source.connect(audioCtx.destination);
  // start the source playing
  source.start();
}

注意: 音频数据解码的例子请查看 AudioContext.decodeAudioData 页面.

规范

Specification Status Comment
Web Audio API
AudioBufferSourceNode
Working Draft  

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 14 webkit[1] 23.0 (23.0) 未实现 15 webkit
22
6 webkit
detune property (Yes) 40.0 (40.0) 未实现 ? ?
Feature Android Chrome Firefox Mobile (Gecko) Firefox OS IE Phone Opera Mobile Safari Mobile
Basic support 未实现 28 webkit[1] 25.0 (25.0) 1.2 未实现 未实现 webkit
detune property 未实现 (Yes) (Yes) (Yes) 未实现 未实现 ?

[1] As of Chrome 42.0 setting AudioBufferSourceNode.buffer more than once is deprecated. A deprecation message is displayed if the buffer attribute is assigned more than once.

相关页面

文档标签和贡献者