2012-03-26 63 views

Trả lời

13

Bạn có thể làm một cái gì đó như thế này:

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

Đó là một ví dụ siêu đơn giản - nhưng điểm mấu chốt là cơ bản mà bạn có thể lấy ví dụ Float32Array cho mỗi kênh trong AudioBuffer và đảo ngược chúng.

+0

Điều này có hiệu quả, cảm ơn. thực sự đang tìm kiếm thứ gì đó giống như thiết lập playbackRate thành số âm nên tôi có thể chơi một cái gì đó tiến và lùi dễ dàng từ cùng một điểm trong clip, nhưng vì bạn đã trả lời câu hỏi với phản hồi hợp lệ (và hoạt động!), tôi sẽ chấp nhận – lakenen

+0

Vâng, tôi nghĩ bạn có thể đang tìm kiếm thứ gì đó ít hacky hơn, nhưng đây là cách tiếp cận duy nhất tôi có thể nghĩ ra. những gì bạn muốn - nhưng tôi đã không thực sự cố gắng đảo ngược bộ đệm trên bay, vì vậy tôi không thể nói chắc chắn. Dù bằng cách nào, nó là tốt để xem người chơi khác chơi với âm thanh Web API. Hy vọng rằng một số tài liệu phong nha sẽ bắt đầu xuất hiện trong vài tháng tới. –

3

Bạn có thể sử dụng phần tử <audio> của html5 và đặt playbackRate thuộc tính thành giá trị âm.

Trong javascript bạn có thể làm như sau

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

Thẻ âm thanh không thực hiện theo yêu cầu của tôi, đó là lý do tại sao tôi cần sử dụng API âm thanh trên web cụ thể. – lakenen

+0

Tốc độ phát lại phải nằm trong khoảng từ 0,5 đến 4,0. Giá trị âm không hoạt động. [Nguồn MDN] (https://developer.mozilla.org/en-US/Apps/Fundamentals/Audio_and_video_delivery/WebAudio_playbackRate_explained) – nicusor

6

nếu bạn có một yếu tố AudioBufferSourceNode:

audioBufferSourceNode.playbackRate = -1; 

-EDIT-

Webkit không có tính năng đó.

Nguồn: https://bugs.webkit.org/show_bug.cgi?id=69725

+1

Tôi đã thử cách này và nó không hoạt động. MinValue trên playbackRate AudioParam là 0. Khi tôi đặt nó thành giá trị nhỏ hơn 0, nó xuất hiện để phát lại ở defaultValue (là 1). – lakenen

+1

Okey ... đó là một lỗi thực tế mà webkit: ( https://bugs.webkit.org/show_bug.cgi?id=69725 – Nullpo

+1

Sẽ thật tuyệt nếu điều này thực sự hiệu quả! – lakenen

1
playbackRate = -1.0; 

hoạt động trong Safari (9.1.2) ngay bây giờ!

Các vấn đề liên quan