2015-11-09 7 views
5

Ich habe eine App mit Cordova und der Web Audio API entwickelt, die es dem Benutzer ermöglicht, Kopfhörer anzuschließen, das Telefon gegen ihr Herz zu drücken und ihren eigenen Herzschlag zu hören.AudioContext.createMediaStreamSource Alternative für iOS?

Dies geschieht mithilfe von Audio-Filter-Knoten.

//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); 


} 

Es läuft gut, wenn ich auf Android bereitstellen, aber es scheint, dass die meisten dieser Funktionen nicht auf mobilen iOS-Browsern verfügbar sind.

Ich habe getUserMedia-Funktion mit der iosRTC plugin machen, aber CreateMediaStreamSource ist immer noch "keine Funktion."

Also, ich bin auf der Suche nach einer Alternative zu der Web-Audio-API, die Frequenzen herausfiltern kann, oder wenn es Plugins gibt, die ich verwenden könnte, wäre das perfekt.

+0

Haben Sie das herausgefunden? Ist es möglich, dies mit Cordova zu tun, ohne nativ zu werden? Ich habe gerade das cordova-plugin-iosrtc implementiert, um auf Live-Daten vom Mikrofon zugreifen zu können und stehe jetzt hier fest .... –

+0

Sorry für die super späte Antwort. Nein, ich konnte keine Lösung finden, ohne nativ zu werden. Ich habe die [this] (http://theamazingaudioengine.com/) Engine in der nativen App verwendet, wenn das irgendjemandem nutzt. –

Antwort

1

Es gibt keine Möglichkeit, dies auf dem ios web zu tun. Sie benötigen eine native App, da Apple in Safari keine Audioeingabe unterstützt.

+0

Ich denke, ich muss lernen, wie man dann native iOS-Apps erstellt. –

+0

Leider, bis das Apple Safari-Team zur Audioeingabe aufwacht, yep. – cwilso

0

Haben Sie versucht,

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

Ja, das habe ich schon drin. –

0

Sie diese Frage gestellt zu verwenden, eine ganze Weile her, aber leider ist createMediaStreamSource noch nicht in Safari Mobile unterstützt (wird es jemals sein?).

Wie bereits erwähnt, ist ein Plugin die einzige Möglichkeit, dies zu erreichen, und es gibt tatsächlich ein Cordova/Phonegap-Plugin, das genau das tut. cordova-plugin-audioinput ermöglicht den Zugriff auf den Ton vom Mikrofon über die Web Audio-API oder Callbacks, die unformatierte Audiodatenblöcke liefern, und unterstützt sowohl iOS als auch Android.

Da will ich nicht zweimal die gleiche Antwort schreiben, werde ich Sie stattdessen hier auf Stackoverflow auf die folgende Antwort darauf, wo Sie auch ein Codebeispiel finden: https://stackoverflow.com/a/38464815/6609803

Ich bin der Schöpfer des Plugins und jede Rückmeldung wird geschätzt.