2015-11-09 27 views
5

Ho sviluppato un'app utilizzando Cordova e l'API Web Audio, che consente all'utente di collegare cuffie, premere il telefono contro il cuore e ascoltare il proprio battito cardiaco.AudioContext.createMediaStreamSource alternativa per iOS?

Fa ciò utilizzando i nodi del filtro audio.

//Setup userMedia 
context = new (window.AudioContext||window.webkitAudioContext); 
navigator.getUserMedia = (navigator.getUserMedia || 
          navigator.webkitGetUserMedia || 
          navigator.mozGetUserMedia || 
          navigator.msGetUserMedia); 
navigator.getUserMedia(
         {audio:true}, 
         userMediaSuccess, 
         function(e) { 
          alert("error2 " + e.message); 
         }); 

function userMediaSuccess(stream) 
{ 
    //set microphone as input 
    input = context.createMediaStreamSource(stream); 

    //amplify the incoming sounds 
    volume = context.createGain();  
    volume.gain.value = 10; 

    //filter out sounds below 25Hz 
    lowPass = context.createBiquadFilter(); 
    lowPass.type = 'lowpass'; 
    lowPass.frequency.value = 25; 

    //filter out sounds above 425Hz 
    highPass = context.createBiquadFilter(); 
    highPass.type = 'highpass'; 
    highPass.frequency.value = 425; 

    //apply the filters and amplification to microphone input 
    input.connect(lowPass); 
    input.connect(highPass); 
    input.connect(volume); 

    //send the result of these filters to the phones speakers 
    highPass.connect(context.destination); 
    lowPass.connect(context.destination);  
    volume.connect(context.destination); 


} 

Funziona benissimo quando schiero ad Android, ma sembra la maggior parte di queste funzionalità non sono disponibili su browser mobili iOS.

Sono riuscito a rendere la funzione getUserMedia utilizzando lo iosRTC plugin, ma createMediaStreamSource è ancora "non una funzione".

Quindi, sto cercando un'alternativa all'API Web Audio in grado di filtrare le frequenze, o se ci sono plugin che potrei usare, sarebbe perfetto.

+0

Hai capito? È possibile farlo con cordova senza diventare nativo? Ho appena implementato il plugin cordova-iosrtc per poter accedere ai dati in tempo reale dal microfono e ora sono bloccato qui ... –

+0

Ci scusiamo per la risposta super tardiva. No, non sono riuscito a trovare una soluzione senza diventare nativo. Ho finito per usare il motore [this] (http://theamazingaudioengine.com/) nell'app nativa, se questo è utile a qualcuno. –

risposta

1

Non c'è modo di farlo su ios web. Avresti bisogno di un'app nativa, dal momento che Apple non supporta l'input audio in Safari.

+0

Suppongo che dovrò imparare come creare app iOS native allora. –

+0

Purtroppo, fino a quando il team di Apple Safari non si risveglia all'ingresso audio, sì. – cwilso

0

Forse si tenta di utilizzare

document.addEventListener('deviceready', function() { 
    // Just for iOS devices. 
    if (window.device.platform === 'iOS') { 
    cordova.plugins.iosrtc.registerGlobals(); 
    } 
}); 
+0

Sì, ce l'ho già. –

0

Lei ha chiesto questa domanda un po 'di tempo fa, ma purtroppo createMediaStreamSource non è ancora supportato in Safari Mobile (lo sarà mai?).

Come detto in precedenza, un plug-in è l'unico modo per ottenere ciò e in realtà esiste un plug-in Cordova/PhoneGap che fa esattamente questo. cordova-plugin-audioinput consente di accedere al suono dal microfono utilizzando l'API Web Audio o callback che forniscono blocchi di dati audio grezzi e supporta iOS e Android.

Dal momento che non voglio postare la stessa risposta due volte, io invece si punta al seguente risposta qui su StackOverflow, dove troverete anche un esempio di codice: https://stackoverflow.com/a/38464815/6609803

Sono il creatore del plugin e qualsiasi feedback è apprezzato.