AudioContext.createMediaStreamSource替代iOS?

我开发了一个使用Cordova和Web Audio API的应用程序,允许用户插入耳机,将手机按在他们的心脏上,并听取他们自己的心跳。

它通过使用audiofilter节点来完成。

//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时运行良好,但似乎大多数这些function不适用于iOS移动浏览器。

我设法使用iosRTC插件 getUserMedia函数,但createMediaStreamSource仍然是“不是一个函数”。

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

在ios网站上没有办法做到这一点。 你需要一个原生的应用程序,因为苹果不支持safari中的audioinput。

你有没有尝试使用

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

很久以前你问过这个问题,但遗憾的是在Safari Mobile中仍然不支持创buildMediaStreamSource(它会永远不会被支持吗?)。

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

由于我不想两次发表相同的答案,所以我会在stackoverflow中指向以下答案,您还可以在其中find一个代码示例: https : //stackoverflow.com/a/38464815/6609803

我是插件的创造者,任何反馈表示赞赏。