【发布时间】:2014-07-30 15:44:29
【问题描述】:
我在 Firefox 中遇到音频问题。我在<audio> 标签中有一个 .ogg 音频剪辑,当第一次按下播放按钮时,Firefox 没有开始播放该文件。但是,如果按下播放按钮,然后从时间线中选择时间,音频将从选择的时间开始播放。如果反复按下播放按钮(例如播放/暂停/播放),文件也会开始播放。
我还使用网络音频 API 通过 AnalyserNode 运行音频。但是,该问题似乎与分析仪无关,因为可以在不影响此问题的情况下将其删除。这似乎与createMediaElementSource 有关。如果我删除与此相关的 JavaScript 代码,问题就会消失。
音频文件是从同一来源提供的,所以我相当肯定这不是 CORS 问题(如 here 所述)。正如我所说,音频会播放,但前提是在时间线上选择了时间。
我将包含以下问题的最简单示例。这可能需要从 HTTP 服务器(python -m http.server、python -m SimpleHTTPServer 或其他)运行以避免任何 CORS 问题。出于这个原因,我认为我不能在此处包含有关此问题的 JSFiddle 演示。
此问题似乎仅限于 Firefox。它肯定不会影响 Chrome,但我还没有实际测试过任何其他浏览器。
<audio id="audio" controls>
<source src="piano-sonata-no13.ogg" type="audio/ogg" />
</audio>
<script>
var audio_node = document.getElementById('audio');
var audioctx = new (window.AudioContext || window.webkitAudioContext)();
var analyser = audioctx.createAnalyser();
window.addEventListener('load', function(e) {
var source = audioctx.createMediaElementSource(audio_node);
source.connect(analyser);
source.connect(audioctx.destination);
}, false);
</script>
编辑:可以在此处找到此问题的示例:http://mdn.github.io/media-source-buffer/
【问题讨论】:
-
什么叫
play(),它叫什么? -
@inorganik 我对音频 API 不是很熟悉,但我认为
audio标签提供的播放按钮会播放文件。正如我所说,它确实会播放文件,但只有在按下播放然后单击时间线之后。我只是玩了一下,按播放/暂停/播放也会播放文件。我错过了什么吗? -
您可以尝试将 currentTime 设置为 0 -
audio_node.currentTime = 0但我认为这可能与 audioctx 或 AudioContext 有关。阅读更多关于他们的文档。
标签: javascript html firefox html5-audio