我正在尝试使用Web Audio API开发HTML5 / Javascript混合应用程序。我偶然发现了在移动Safari(iPadOS 13.2.3)中使用MediaElementSourceNodes的Web Audio API的问题。
一个最小的示例显示音频元素正在加载数据,但是在播放时,听不到声音。下面是我用于示例的代码。我首先认为问题与我的Javascript有关,因为我使用了onclick处理程序来播放声音而不是音频元素的控件。事实并非如此。在调查播放承诺时,事实证明,除了实际的声音输出之外,其他所有东西都按预期工作。音频元素的按钮变为“暂停”,但是没有播放进度。承诺似乎会返回成功。我的代码中奇怪的是,结果是“未定义的”,而在连接到iPad的Mac上从Javascript控制台调用play()时,返回的承诺状态为“待处理”。
但是,我还通过here尝试了Web Audio文档中的示例页面。在该页面上,单击iPad上的播放按钮时也没有声音。
我在互联网上搜索了一段时间,但没有找到任何提示。
在我的示例代码下方,可以访问here。
const AudioContext = window.AudioContext || window.webkitAudioContext;
const audioContext = new AudioContext();
const master = audioContext.createGain();
window.onload = function() {
var button = document.querySelector("#button");
var audio = document.querySelector("audio");
var source = audioContext.createMediaElementSource(audio);
source.connect(master);
master.connect(audioContext.destination);
button.addEventListener('click', function() {
if (audioContext.state === 'suspended') {
audioContext.resume();
}
audio.play().then(result => {
console.log("success");
console.log(result);
});
console.log("Play");
});
console.log("Loaded");
};
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<audio controls src="test.wav"></audio>
<a id="button">Click me</a>
</body>
</html>