如何使用网络音频API反向播放音频?

问题描述:

如何使用web audio API反向播放音频?我似乎无法在API文档中找到任何内容...如何使用网络音频API反向播放音频?

你可以做这样的事情:

var context = new AudioContext(), 
    request = new XMLHttpRequest(); 
request.open('GET', 'path/to/audio.mp3', true); 
request.responseType = 'arraybuffer'; 
request.addEventListener('load', function(){ 
    context.decodeAudioData(request.response, function(buffer){ 
     var source = context.createBufferSource(); 
     Array.prototype.reverse.call(buffer.getChannelData(0)); 
     Array.prototype.reverse.call(buffer.getChannelData(1)); 
     source.buffer = buffer; 
    }); 
}); 

这是一个超级简单的例子 - 但有一点基本上是可以抢到Float32Array实例在AudioBuffer每个通道扭转它们。

+0

这是工作,谢谢。实际上是在寻找更像是将playbackRate设置为负数的东西,以便我可以轻松地从剪辑中的同一点向前和向后播放某些内容,但由于您使用有效的(和正在工作的!)回答回答了问题,因此我会接受it! – lakenen 2012-06-13 00:30:47

+0

是的,我想你可能是在寻找一些不太冒昧的东西,但这是我能想出的唯一方法。对于它的价值,可能还有可能围绕这种方法构建一些代码你想要什么 - 但我实际上并没有尝试立即反转缓冲区,所以我不能肯定地说。无论哪种方式,很高兴看到其他开发者使用Web音频播放API。希望一些体面的文档将在未来几个月内开始出现。 – 2012-06-13 03:20:59

您可以使用html5的<audio>元素并将playbackRate属性设置为负值。

在Javascript中,你可以做以下

var song = document.getElementsByTagName('audio')[0]; 
song.playbackRate = -1; 
+1

音频标签不符合我的要求,这就是为什么我需要专门使用网络音频API。 – lakenen 2012-03-26 15:13:48

+0

播放速率应该在0.5到4.0之间。负值不起作用。 [MDN来源](https://developer.mozilla.org/en-US/Apps/Fundamentals/Audio_and_video_delivery/WebAudio_playbackRate_explained) – nicusor 2016-03-13 09:30:14

,如果你有一个AudioBufferSourceNode元素:

​​

CNC中

的Webkit不具备该功能。

来源:https://bugs.webkit.org/show_bug.cgi?id=69725

+1

我试过这个,它不起作用。 playbackRate AudioParam上的minValue为0.当我将它设置为一个低于0的值时,它会在defaultValue(1)处播放。 – lakenen 2012-03-26 15:43:15

+1

Okey ...这是一个实际的bug它webkit :( https://bugs.webkit.org/show_bug.cgi?id=69725 – Nullpo 2012-03-26 15:47:26

+1

这将是伟大的,如果这实际上工作! – lakenen 2012-06-13 00:32:25

playbackRate = -1.0; 

现在在Safari(9.1.2)中工作!