iOS有哪些替代AudioContext.createMediaStreamSource的方法?

5
我使用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);


}

当我部署到安卓时,它可以正常运行,但似乎在iOS移动浏览器上大多数功能都不可用。

我成功使用iosRTC插件使getUserMedia函数工作,但createMediaStreamSource仍然“不是一个函数”。

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


你解决了吗?在不使用本地开发的情况下,能否使用Cordova实现这个功能?我刚刚实现了cordova-plugin-iosrtc以便能够访问麦克风的实时数据,但现在卡在这里了... - Kshitiz
非常抱歉回复晚了。没有,我找不到不使用本地代码的解决方案。最终我在本地应用程序中使用了这个引擎,如果对任何人有用的话,可以参考一下这个 - Mark Murphy
4个回答

1
无法在 iOS 网页上完成此操作。 需要使用原生应用程序,因为 Apple 不支持 Safari 中的音频输入。

遗憾的是,直到苹果Safari团队意识到音频输入的重要性之前,是的。 - cwilso

0

你尝试使用过吗?

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

0

你之前问了这个问题,但是很遗憾,在Safari Mobile中仍然不支持createMediaStreamSource(它会被支持吗?)。

如先前所述,插件是实现此目的的唯一方法,实际上有一个Cordova/Phonegap插件可以做到这一点。cordova-plugin-audioinput让您使用Web Audio API或通过传递原始音频数据块的回调来访问麦克风的声音,并且它支持iOS和Android。

由于我不想重复发布相同的答案,因此我将指向stackoverflow上的以下答案,您还将找到代码示例:https://dev59.com/f5Xfa4cB1Zd3GeqPiKdh#38464815

我是该插件的创建者,欢迎任何反馈。



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接