gpt4 book ai didi

javascript - iPad 上的 iOS 禁用网络音频 API

转载 作者:可可西里 更新时间:2023-11-01 04:00:15 26 4
gpt4 key购买 nike

请注意:此问题已于 2016 年 11 月在 iOS 10.1.1 中修复。谢谢 Apple!

我无法在 iPad 上通过 Web Audio API 播放任何音频。这是使用最新版本的 iOS(从 9.3.2 开始 - 目前是 10.1)。

测试用例

这里是 a bare-bones test我已经设置(下面的代码)。对我而言,所有测试都无法在 iPad 上运行。在 iPhone 或其他兼容浏览器上没有问题。有 another test page here (来自威廉马龙)。这些声音在三台 iPad 上都无法播放。最后this game使用 Web Audio API(感谢 Derek)并且也被静音。

如果您在 iPad 上阅读本文,请尝试 bare-bones test并在评论(或 contact me privately )中报告是否加载,然后播放,工作并播放声音。请包括 iOS 版本号(设置 -> 通用 -> 关于 -> 版本)。

如有任何见解或反馈,我们将不胜感激!

测试代码如下:

<!DOCTYPE html>
<html>
<head>
<title>Web Audio API - iPad Test</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="./jquery-2.2.3.min.js"></script>
<style>
section { padding:10px; margin:0 0 10px; background:DarkSeaGreen }
a { cursor:pointer; display:block; background: DarkSeaGreen; padding:10px; margin:0 0 3px }
</style>
</head>
<body>
<script>
var app = {};
$(document).ready(function() {
// Do we have Web Audio API?
try {
window.AudioContext = window.AudioContext || window.webkitAudioContext;
audioContext = new AudioContext();
} catch (e) {
alert('Web Audio API is not supported in this browser');
}
$('#loadClick').on('click',function(){load('./ipad_test.mp3')});
$('#playTouchEnd').on('touchend',play);
$('#playTouchStart').on('touchstart',play);
$('#playClick').on('click',play);
$('#unlockTouchEnd').on('touchend',unlock);
$('#unlockTouchStart').on('touchstart',unlock);
$('#unlockClick').on('click',unlock);
});
function unlock() {
// play empty buffer to unmute audio
var buffer = audioContext.createBuffer(1, 1, 22050);
var source = audioContext.createBufferSource();
source.audioContext = buffer;
source.connect(audioContext.destination);
source.start(0);
$('#messages').append('<p>Unlocked.</p>');
}
function load(file) {
if(app.loaded) {
$('#messages').append('<p>Already loaded.</p>');
return;
}
var request = new XMLHttpRequest();
request.open ('GET', file, true);
request.responseType = 'arraybuffer';
request.onload = function () {
audioContext.decodeAudioData(
request.response,
function (buffer) {
app.buffer = buffer;
$('#messages').append('<p>Loaded.</p>');
app.loaded = 1;
},
function(){alert('Load error.');}
)
};
request.send();
}
function play() {
if(!app.loaded) {
$('#messages').append('<p>Please load before playing.</p>');
return;
}
var sourceNode = audioContext.createBufferSource();
sourceNode.buffer = app.buffer;
sourceNode.connect (audioContext.destination);
sourceNode.start(0);
$('#messages').append('<p>Playing.</p>');
}
</script>
<h1>Web Audio API Test</h1>
<p>Unlock should not be needed at all, but offers an alternative way to try and get the audio going. Load and then play should be all any compatible device needs. Refresh to start again.</p>
<a id="unlockTouchEnd">Unlock (touchend)</a>
<a id="unlockTouchStart">Unlock (touchstart)</a>
<a id="unlockClick">Unlock (click)</a>
<a id="loadClick" style="background:#c0c0c0">Load (click)</a>
<a id="playTouchEnd">Play Audio (touchend)</a>
<a id="playTouchStart">Play Audio (touchstart)</a>
<a id="playClick">Play Audio (click)</a>
<section id="messages"></section>
</body>
</html>

背景

Apple documentation makes it clear该音频必须从用户操作启动,Web Audio API 才能工作。他们说:

Note: On iOS, the Web Audio API requires sounds to be triggered from an explicit user action, such as a tap. Calling noteOn() from an onload event will not play sound.

网上有很多关于此问题的线程,最新的线程是 2015 年秋季的 iOS 9.0 到 9.2:

他们建议从 touchstart 事件触发音频以解锁 iOS 音频(或在当时出现问题时触发 touchend)。我已经尝试了所有建议的技术,但无法使用 touchstart、touchend 或 click 来工作。 iPad 上的音频始终静音。

最佳答案

Apple 于 2016 年 11 月在 iOS 10.1.1 中修复了此问题。谢谢 Apple!

关于javascript - iPad 上的 iOS 禁用网络音频 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37431296/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com