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
Seguono i comandi per la trasmissione del flusso audio video ... ma non ci interessano per capire l'errorecodice://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
Questo funziona perfettamente e la chat ha un flusso perfetto.
Quando il collegamento si chiude accade questo
In questo momento le comunicazioni sono terminate ma qualsiasi suono del dispositivo si è ammutolitocodice:// qui i comandi per interrompere lo stream remoto e di seguito: gainNode=null; stream=null; AudioNativo=null; AudioCorretto=null; ctx.close(); ctx=null;
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().

Rispondi quotando