Ho un problema che non riesco a risolvere. Faccio prima una panoramica del progetto che sto portando avanti:
Sto realizzando una audio/video chat per smartphone
Utilizzo AudioContext() per gestire il volume del microfono. Il tutto funziona bene ma al termine della chat ho il volume dei suoni di sistema a 0 anche se gli indicatori sono al massimo del volume
Ora vi mostro come lavoro l'audio:
Non fate caso a come è scritto il codice. Non è un listato ma mostro solo le parti essenziali
codice:
//Prendo lo stream audio video nell'oggetto stream
navigator.getUserMedia({video: true, audio: true}, function(stream)
// estraggo la traccia video perchè mi servirà dopo
videoTracks = stream.getVideoTracks();
// genero un connettore audio
ctx = new AudioContext();
// estraggo lo stream audio
AudioNativo = ctx.createMediaStreamSource(stream);
// preparo l'oggetto per il nuovo stram audio che tra poco verrà corretto
AudioCorretto = ctx.createMediaStreamDestination();
// creo il nodo per la gestione dell'audio
gainNode = ctx.createGain();
// connetto il nodo all'audio nativo
AudioNativo.connect(gainNode);
// trasferisco la traccia audio in AudioCorretto (l'audio verrà manipolato tra poco)
gainNode.connect(AudioCorretto);
// aggiungo ad AudioCorretto la traccia video salvata in precedenza
AudioCorretto.stream.addTrack(videoTracks[0]);
// ------------ inizio controllo volume microfono
// parto con il volume del microfono a 0
gainNode.gain.value = 0; // livello volume microfono
// controlo di un bottone, se tenuto premuto alza il volume altrimenti lo azzera e cambia immagine
// bottone Speaker a pressione accende microfono
$('#DivSpeaker0').on("touchstart", function(p) {
p.preventDefault();
document.getElementById('DivSpeaker0').style.backgroundImage='url(Rilascia.png)';
gainNode.gain.value = 1;
});
// bottone Speaker a pressione spegne microfono
$('#DivSpeaker0').on("touchend", function(p) {
p.preventDefault();
document.getElementById('DivSpeaker0').style.backgroundImage='url(Premi.png)';
gainNode.gain.value = 0;
});
// ------------ fine controllo volume microfono
Seguono i comandi per la trasmissione del flusso audio video ... ma non ci interessano per capire l'errore
Questo funziona perfettamente e la chat ha un flusso perfetto.
Quando il collegamento si chiude accade questo
codice:
// qui i comandi per interrompere lo stream remoto e di seguito:
gainNode=null;
stream=null;
AudioNativo=null;
AudioCorretto=null;
ctx.close();
ctx=null;
In questo momento le comunicazioni sono terminate ma qualsiasi suono del dispositivo si è ammutolito
Se avvio una chat tutto torna a funzionare e gli interlocutori comunicano bene.
Al termine si azzittisce tutto nuovamente. Per far tornare i suoni è sufficiente chiudere l'applicazione.
Datosi che sarà una APP che deve restare sempre attiva ... il problema è serio!
Per quel che ho capito, la funzione AudioContext() "ctx = new AudioContext()" , anche se chiusa "ctx.close()", continua ad impegnarmi le risorse audio e mantiene l'audio a 0 che è l'ultima impostazione data.
Credo che ci sia qualcosa che mi sfugge nell'utilizzo di AudioContext().