iOS上的webkitAudioContext createMediaElementSource无法正常工作

时间:2016-04-05 15:07:04

标签: javascript ios audio webkit webkitaudiocontext

我想在iPhone上进行现场声音分析。因此我使用 webkitAudioContext Analyzer。

var ctx = new (window.AudioContext || window.webkitAudioContext);
var audioGoodmorning = new Audio('assets/sounds/greeting.m4a');
var audioSrc = ctx.createMediaElementSource(audioGoodmorning);
var analyser = ctx.createAnalyser();

analyser.fftSize = 32;
audioSrc.connect(analyser);
audioSrc.connect(ctx.destination);
var frequencyData = new Uint8Array(analyser.fftSize);

analyser.getByteFrequencyData(frequencyData);

这适用于Mac上的Chrome。当使用

将网站添加到主屏幕时,它也适用于Safari
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-title" content="CHAR">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">

如果没有将网站添加到主屏幕,它无法在Safari上运行。 使用嵌入iOS wkwebview的网站时,它不起作用。这就是我想要实现的目标。 不工作时,frequencyData数组充满零。

有没有遇到过这种问题的人?

提前致谢

2 个答案:

答案 0 :(得分:0)

检查这个小提琴:

https://jsfiddle.net/4b2dvhqy/1/

var audio = new Audio();
audio.loop = true;
audio.autoplay = true;
audio.crossOrigin = "anonymous";

audio.addEventListener('error', function(e) {
  console.log(e);
});
audio.src = "https://greggman.github.io/doodles/sounds/DOCTOR VOX - Level Up.mp3";
audio.play();
audio.controls = true;

document.getElementById("wrapper").append(audio);

audio.addEventListener('canplay', function() {
  var audioSourceNode = audioContext.createMediaElementSource(audio);

  audioSourceNode.connect(analyser);
  analyser.connect(audioContext.destination);
});

在Safari上运行良好,因为音频内容是在用户点击事件下处理的。

没有“用户点击事件”,仅在Chrome或Safari“ localhost”上运行良好。

另外,另一个Fiddle也可以很好地处理HTML标签音频:

https://jsfiddle.net/cbua1pkn/1/

这里的窍门是当用户单击播放按钮时初始化audioContext! (因此您处于用户事件上下文中)。

答案 1 :(得分:-1)

以防万一尚未解决,根据https://caniuse.com/#search=webaudio Safari仍然不支持createMediaElementSource,所以我认为你在这里运气不好。不幸的是,Safari对WebAudio API的支持并不是很好。