Gram z interfejsem Web Audio API i próbuję załadować wiele części utworu i dołączyć je do nowego ArrayBuffer, a następnie użyć tego ArrayBuffer do odtwarzania wszystkich części jako jednej piosenki. W poniższym przykładzie używam tych samych danych utworu (co jest małą pętlą) zamiast różnych części utworu.Web Audio API dołącza/łączy różne AudioBuffery i odtwarza je jako jedną piosenkę
Problem polega na tym, że nadal gra się tylko raz zamiast dwa razy i nie wiem dlaczego.
function init() {
/**
* Appends two ArrayBuffers into a new one.
*
* @param {ArrayBuffer} buffer1 The first buffer.
* @param {ArrayBuffer} buffer2 The second buffer.
*/
function appendBuffer(buffer1, buffer2) {
var tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);
tmp.set(new Uint8Array(buffer1), 0);
tmp.set(new Uint8Array(buffer2), buffer1.byteLength);
return tmp;
}
/**
* Loads a song
*
* @param {String} url The url of the song.
*/
function loadSongWebAudioAPI(url) {
var request = new XMLHttpRequest();
var context = new webkitAudioContext();
request.open('GET', url, true);
request.responseType = 'arraybuffer';
/**
* Appends two ArrayBuffers into a new one.
*
* @param {ArrayBuffer} data The ArrayBuffer that was loaded.
*/
function play(data) {
// Concatenate the two buffers into one.
var a = appendBuffer(data, data);
var buffer = a.buffer;
var audioSource = context.createBufferSource();
audioSource.connect(context.destination);
//decode the loaded data
context.decodeAudioData(buffer, function(buf) {
console.log('The buffer', buf);
audioSource.buffer = buf;
audioSource.noteOn(0);
audioSource.playbackRate.value = 1;
});
};
// When the song is loaded asynchronously try to play it.
request.onload = function() {
play(request.response);
}
request.send();
}
loadSongWebAudioAPI('http://localhost:8282/loop.mp3');
}
window.addEventListener('load',init,false);
Dzięki, Twój komentarz pomógł mi! http://72lions.github.com/PlayingChunkedMP3-WebAudioAPI/ – 72lions
@ cwilso Czy możliwe jest podłączenie wielu AudioBufferSourceNodes do jednego w różnych momentach odtwarzania? –
Po prostu podłącz je do tego samego miejsca docelowego. Myślę, że to efekt, którego szukasz. – cwilso