ios - 使用简单图形播放 iOS 网络音频时出现噼啪声和噪音
问题描述
使用 将音频元素与网络音频图连接时createMediaElementSource()
,我注意到在 iOS 设备(iPhone、iPad)上播放时偶尔会导致噼啪声。在使用(便宜的)安卓设备或运行完全相同代码的 macOS 桌面时,我从未遇到过这些问题。
噪音通常在播放开始后很快出现,并在整个文件中持续存在。通常,当播放开始后不久没有声音问题时,它们根本不会出现。
可以在此处找到演示,但请注意,我可能需要重试几次,直到问题出现https://jsfiddle.net/st___h/36w7vxn2/8/show
完整代码:https ://jsfiddle.net/st___h/36w7vxn2/8/
可以在此处找到说明问题的 iPad 输出记录:https ://st-h.github.io/test/ios_playback_noise.mp3
这是用于设置图表的片段:
var context = new(window.AudioContext || window.webkitAudioContext)();
var gainNode = context.createGain();
var audio = new Audio();
audio.loop = true;
audio.crossOrigin = "anonymous";
audio.addEventListener('error', function(e) {
alert(e);
});
var source = context.createMediaElementSource(audio);
source.connect(gainNode);
gainNode.connect(context.destination);
audio.src = "https://st-h.github.io/test/latencies.mp3";
audio.play();
gainNode.gain.setValueAtTime(0.9, gainNode.context.currentTime);
如果我只是将源连接到目标,而两者之间没有任何节点,问题就不太可能出现。使用像分析器这样的不同节点不会产生任何显着差异。
当 audioContext 的 sampleRate 被打印出来时,我注意到可能会显示 44100 或 48000。但是,我没有发现出现的问题与使用的采样率之间有任何关联。(检查是因为过去有报道称这可能是一个问题,并且噪声类型可能与错误的采样率有关)
使用 iPhone 6s 和 iPad Pro (2017) 进行测试。有趣的是,这也显示在 iOS 上使用 chrome 浏览器。任何想法这里可能出了什么问题?
更新
添加画布和分析器节点似乎增加了问题出现的可能性:https ://jsfiddle.net/st___h/36w7vxn2/27/show
29.3.19
可能这可能是 webkit 中的一个错误:https ://bugs.webkit.org/show_bug.cgi?id=196293 https://bugs.webkit.org/show_bug.cgi?id=190552至少看起来我不是唯一面临类似问题的人。
一个月后,错误报告仍然没有收到任何回复。苹果开发论坛上的帖子也没有通知。
解决方案
多年来,这一直让我发疯。Steve Hummingbird,您在此处提到的 BufferSource 解决方法是否允许您暂停和恢复播放?
推荐阅读
- magento2 - 将 UPC 属性添加到产品页面
- rust - 虽然 Rust 的 char 支持非英文字符,但很多文章推荐使用 string 来存储非英文字符,而不是 char。为什么?
- c++ - 将模板指针转换为 char 指针时 C++ 不执行代码
- javascript - 在 js 中编辑外部 Json 文件:出现错误 Uncaught ReferenceError: require is not defined
- c# - 每 1-5 次迭代做一些事情
- python - 主线程在子线程完成之前不会执行
- bash - 考虑 bash 中的 DST 时区,使用过去的日期时间进行计算
- jfreechart - Jfree 图表标签重叠
- c - if 和 else 的行为如何?
- python - 为什么网站给我一个 403 禁止错误?Python/请求