Sto usando il callback onaudioprocess di ScriptProcessorNode per elaborare l'input del microfono. Collegando MediaStreamSourceNode allo ScriptProcessorNode, posso ottenere i dati audio grezzi all'interno della funzione di callback onaudioprocess. Tuttavia, dopo circa 30 secondi (che varia da 10 a 35 secondi), il browser interrompe la chiamata a un processo audio. Nel seguente codice, l'output di console.log ('>>') si arresta sempre dopo circa 30 secondi.Chrome: onaudioprocess smette di chiamare dopo un po 'di tempo
var ctx = new AudioContext();
var BUFFER_LENGTH = 4096;
console.log('Buffer length is + ' + BUFFER_LENGTH);
navigator.webkitGetUserMedia({audio: true}, function (stream) {
var mediaStreamSource = ctx.createMediaStreamSource(stream);
var scriptProcessor = ctx.createScriptProcessor(BUFFER_LENGTH, 1, 1);
scriptProcessor.onaudioprocess = function (e) {
console.log('>>');
};
scriptProcessor.connect(ctx.destination);
}, function(e) {
console.error('Unable to get audio input source.');
});
Ho provato tutte le possibili BUFFER_LENGTH (256, 512, 1024, 2048, 4096, 8192, 16384), ma la situazione non cambia (log arresta dopo 30 sec.) Ho osservato questo problema in l'ultima versione di Chrome (versione 35.0.1916.153) e Canary (versione 37.0.2060.3 canarino). Qualcuno sa qualche soluzione alternativa?
Mi chiedo se abbia a che fare con il fatto che stai restituendo e.outputbuffer vuoti nei tuoi callback onaudioprocess. Dopo 30 secondi alla visualizzazione dei buffer vuoti, Chrome potrebbe voler risparmiare batteria/potenza di elaborazione e disattivare la richiamata. – notthetup
Grazie notthetup, ho provato a copiare inputBuffer in outputBuffer in onaudioprocess. Ma non ha risolto il problema. Ecco il codice: var source = e.inputBuffer.getChannelData (0); var dest = e.outputBuffer.getChannelData (0); dest.set (origine); – kuu