适用于iOS的AudioContext.createMediaStreamSource替代方案?

时间:2015-11-09 11:55:12

标签: ios cordova web-audio

我使用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移动浏览器上都无法使用。

我设法使用iosRTC plugin创建getUserMedia函数,但createMediaStreamSource仍然是#34;而不是函数。"

所以,我正在寻找可以过滤频率的Web Audio API的替代方案,或者如果有任何我可以使用的插件,那将是完美的。

4 个答案:

答案 0 :(得分:1)

在ios网站上无法做到这一点。您需要一个原生应用程序,因为Apple不支持Safari中的音频输入。

答案 1 :(得分:0)

您是否尝试使用

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

答案 2 :(得分:0)

很久以前你问过这个问题,但遗憾的是,Safari Mobile仍然不支持createMediaStreamSource(它会不会?)。

如前所述,插件是实现此目的的唯一方法,实际上有一个Cordova / Phonegap插件就是这样做的。 cordova-plugin-audioinput允许您使用Web Audio API或通过提供原始音频数据块的回调来访问麦克风的声音,它支持iOS和Android。

由于我不想两次发布相同的答案,我会在stackoverflow上指出以下答案,您还可以找到代码示例:https://stackoverflow.com/a/38464815/6609803

我是插件的创建者,感谢所有反馈。

答案 3 :(得分:0)