2012-03-26 215 views

回答

13

你可以做這樣的事情:

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

3

您可以使用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

6

,如果你有一個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

1
playbackRate = -1.0; 

現在在Safari(9.1.2)中工作!