Альтернатива AudioContext.createMediaStreamSource для iOS?

Я разработал приложение с использованием Cordova и Web Audio API, которое позволяет пользователю подключить наушники, прижать телефон к сердцу и услышать собственное сердцебиение.

Это делается с помощью узлов аудиофильтра.

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


}

Он отлично работает при развертывании на Android, но кажется, что большинство этих функций недоступны в мобильных браузерах iOS.

Мне удалось создать функцию getUserMedia с помощью плагина iosRTC, но createMediaStreamSource по-прежнему "не является функцией ."

Итак, я ищу альтернативу API веб-аудио, которая может отфильтровывать частоты, или, если есть какие-либо плагины, которые я мог бы использовать, это было бы идеально.


person Mark Murphy    schedule 09.11.2015    source источник
comment
Вы поняли это? Можно ли сделать это с кордовой, не переходя на родную? Я только что реализовал Cordova-plugin-iosrtc, чтобы иметь доступ к данным в реальном времени с микрофона, и теперь застрял здесь....   -  person ksb    schedule 01.04.2016
comment
Извините за супер поздний ответ. Нет, я не мог найти решение, не переходя на родной язык. В итоге я использовал этот движок в нативном приложении, если это кому-нибудь пригодится.   -  person Mark Murphy    schedule 08.04.2016


Ответы (4)


В ios web это сделать невозможно. Вам понадобится родное приложение, так как Apple не поддерживает ввод звука в сафари.

person cwilso    schedule 09.11.2015
comment
К сожалению, до тех пор, пока команда Apple Safari не проснется со звуковым вводом, да. - person cwilso; 10.11.2015

Вы пытались использовать

document.addEventListener('deviceready', function () {
  // Just for iOS devices.
  if (window.device.platform === 'iOS') {
     cordova.plugins.iosrtc.registerGlobals();
  }
});
person Anas Aboureada    schedule 09.11.2015

Вы задали этот вопрос довольно давно, но, к сожалению, createMediaStreamSource до сих пор не поддерживается в Safari Mobile (будет ли когда-нибудь?).

Как было сказано ранее, плагин — единственный способ добиться этого, и на самом деле есть плагин Cordova/Phonegap, который делает именно это. cordova-plugin-audioinput предоставляет вам доступ к звуку с микрофона через Интернет Audio API или с помощью обратных вызовов, которые доставляют необработанные фрагменты аудиоданных и поддерживаются как iOS, так и Android.

Поскольку я не хочу публиковать один и тот же ответ дважды, вместо этого я укажу вам на следующий ответ здесь, в stackoverflow, где вы также найдете пример кода: https://stackoverflow.com/а/38464815/6609803

Я создатель плагина, и любые отзывы приветствуются.

person Edin    schedule 11.08.2016

Хорошие новости, полная поддержка ios Safari https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/createMediaStreamSource

person Gabriel Petersson    schedule 22.10.2020