Ich habe mit der Web Audio API gespielt und ich versuche, mehrere Teile eines Songs zu laden und sie an einen neuen ArrayBuffer anhängen und dann verwenden ArrayBuffer zum Abspielen aller Teile als ein Lied. Im folgenden Beispiel verwende ich die gleichen Song-Daten (das ist eine kleine Schleife) anstelle von verschiedenen Teilen eines Songs.Web Audio API anfügen/verketten verschiedene AudioBuffers und spielen sie als ein Lied
Das Problem ist, dass es immer noch nur einmal statt zwei Mal spielt und ich weiß nicht warum.
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);
Danke, Ihr Kommentar hat mir geholfen! http://72lions.github.com/PlayingChunkedMP3-WebAudioAPI/ – 72lions
@cwilso Ist es möglich, mehrere AudioBufferSourceNodes zu verschiedenen Zeiten der Wiedergabe zu einem einzigen zu verbinden? –
Nun, Sie können sie einfach an das gleiche Ziel verbinden. Ich denke, das hat den Effekt, den Sie suchen. – cwilso