Chcę połączyć dwa źródła dźwięku, umieszczając jedną piosenkę jako tło drugiej w jednym źródle.Mieszanie dwóch buforów audio, umieść jeden na drugim, używając Web Audio Api
na przykład, mam wejście:
<input id="files" type="file" name="files[]" multiple onchange="handleFilesSelect(event)"/>
I skrypt do dekodowania plików to:
window.AudioContext = window.AudioContext || window.webkitAudioContext;
var context = new window.AudioContext();
var sources = [];
var files = [];
var mixed = {};
function handleFilesSelect(event){
if(event.target.files.length <= 1)
return false;
files = event.target.files;
readFiles(mixAudioSources);
}
function readFiles(index, callback){
var freader = new FileReader();
var i = index ? index : 0;
freader.onload = function (e) {
context.decodeAudioData(e.target.result, function (buf) {
sources[i] = context.createBufferSource();
sources[i].connect(context.destination);
sources[i].buffer = buf;
if(files.length > i+1){
readFiles(i + 1, callback);
} else {
if(callback){
callback();
}
}
});
};
freader.readAsArrayBuffer(files[i]);
}
function mixAudioSources(){
//So on our scenario we have here two decoded audio sources in "sources" array.
//How we can mix that "sources" into "mixed" variable by putting "sources[0]" as background of "sources[1]"
}
Więc jak mogę mieszać tego źródła do jednego źródła? Na przykład mam dwa pliki, w jaki sposób mogę umieścić jedno źródło jako tło innego i umieścić ten miks w jednym źródle?
Inny scenariusz: jeśli na przykład odczytywam strumień wejściowy z mikrofonu i chcę wstawić to wejście do piosenki w tle (jakiś rodzaj karaoke), możliwe jest wykonanie tej pracy na kliencie z obsługą html5? A co z wydajnością? Może lepszy sposób na wymieszanie źródeł audio po stronie serwera?
Jeśli to możliwe, to jaka jest możliwa implementacja funkcji mixAudioSources?
Dzięki.
Co próbowałeś do tej pory? –
Zobacz sekcję przejściową https://www.html5rocks.com/en/tutorials/webaudio/intro/ –
Witam. W tym artykule najbliższym przykładem na to pytanie jest odtwarzanie dwóch źródeł w tym samym czasie. Nie pomaga mi to tak bardzo, ponieważ potrzebuję jednego źródła do przesłania i zapisania na serwerze. –