2012-03-26 23 views

cevap

13

Böyle bir şey yapabileceğini:

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; 
    }); 
}); 

Süper bir basit bir örnek - ama nokta AudioBuffer her kanal için Float32Array örneğini kapmak ki temelde ve onları tersine çevir.

+0

Bu işe yarıyor, teşekkürler. aslında playbackRate'i negatif bir sayıya ayarlamak gibi bir şey arıyordu, böylece klipte aynı noktadan ileri ve geri bir şeyler kolayca oynatabiliyorum, ama siz soruya geçerli bir (ve çalışma!) yanıtı ile cevap verdiğinizden, kabul edeceğim – lakenen

+0

Evet, muhtemelen biraz daha az hacky için bir şey aradığınızı düşünmüştüm, ama bu benim gelebildiğim tek yaklaşımdı. Bunun değeri ne olursa olsun, muhtemelen bu yaklaşımın etrafında bazı kodlar oluşturmak mümkündür. ne istersen - ama aslında arabayı geçici olarak tersine çevirmeyi denemedim, o yüzden kesin olarak söyleyemem. Her iki durumda da, Web Audio ile oynayan diğer devleri görmek güzel API. Umarım bazı iyi belgeler önümüzdeki birkaç ay içinde ortaya çıkmaya başlayacaktır. –

3

<audio> öğesini html5 öğesini kullanabilir ve playbackRate özelliğini negatif değere ayarlayabilirsiniz. Bir AudioBufferSourceNode elemanı varsa

JavaScript için aşağıda belirtilen

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

Ses etiketi gereksinimlerim yerine getirmiyor, bu yüzden özellikle web ses API'sini kullanmam gerekiyor. – lakenen

+0

Oynatma oranı 0,5 ile 4,0 arasında olmalıdır. Olumsuz değerler henüz çalışmıyor. [MDN kaynağı] (https://developer.mozilla.org/en-US/Apps/Fundamentals/Audio_and_video_delivery/WebAudio_playbackRate_explained) – nicusor

6

yapabilirsiniz:

audioBufferSourceNode.playbackRate = -1; 

-EDIT-

Webkit bu özelliği yoktur.

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

+1

Bunu denedim ve işe yaramıyor. PlaybackRate AudioParam üzerindeki minValue değeri 0'dır. Onu 0'dan daha düşük bir değere ayarladığımda, defaultValue'de (1 olan) oynatılır. – lakenen

+1

Okey ... bu gerçek bir hata var :( https://bugs.webkit.org/show_bug.cgi?id=69725 – Nullpo

+1

Bu gerçekten işe yararsa harika olurdu! – lakenen

1
playbackRate = -1.0; 

, Safari (9.1.2) sürümünde çalışıyor!