Javascript 为什么音频在';播放';按钮是第一次点击的吗?
Firefox中的音频有问题。我在Javascript 为什么音频在';播放';按钮是第一次点击的吗?,javascript,html,firefox,html5-audio,Javascript,Html,Firefox,Html5 Audio,Firefox中的音频有问题。我在中有一个.ogg音频剪辑)。正如我所说,音频将播放,但只有在时间轴上选择了时间 我在下面列出了这个问题最简单的例子。这可能需要从HTTP服务器运行(python-mhttp.server,python-msimplehttpserver或其他什么),以避免任何CORS问题。出于这个原因,我不认为我可以在这里包含这个问题的JSFIDLE演示 此问题似乎仅限于Firefox。它肯定不会影响Chrome,但我还没有测试过其他浏览器 <audio id="audi
中有一个.ogg音频剪辑)。正如我所说,音频将播放,但只有在时间轴上选择了时间
我在下面列出了这个问题最简单的例子。这可能需要从HTTP服务器运行(python-mhttp.server
,python-msimplehttpserver
或其他什么),以避免任何CORS问题。出于这个原因,我不认为我可以在这里包含这个问题的JSFIDLE演示
此问题似乎仅限于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>
尝试用以下内容替换窗口“加载”事件侦听器:
audio_node.addEventListener('canplay', function(e) {
var source = audioctx.createMediaElementSource(audio_node);
source.connect(analyser);
source.connect(audioctx.destination);
}, false);
这一问题似乎与一个问题有关
其要点是,Firefox中的createMediaElementSource
目前似乎有点崩溃,您无法将音频API与createMediaStreamSource
一起使用,并使其按预期工作
我找到了一个解决方法(警告:页面自动播放音频),但据我所知,它仅在autoplay
设置为true时才起作用。快速测试表明,将audio.autoplay
设置为true,并立即调用audio.pause()
可能是解决此问题的可接受的解决方法。这种方法的一个缺点是,当按下播放按钮时,音频不会从文件的最开头开始
此解决方案的外观如下所示:
<audio id="audio" controls>
<source src="piano-sonata-no13.ogg" type="audio/ogg" />
</audio>
<script>
var audio_node = document.getElementById('audio');
audio_node.autoplay = true;
// Alternatively, the autoplay attribute can be set on the <audio> tag
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);
audio_node.pause();
}, false);
</script>
var audio_node=document.getElementById('audio');
audio_node.autoplay=true;
//或者,可以在标记上设置“自动播放”属性
var audioctx=new(window.AudioContext | | window.webkitadiocontext)();
var Analyzer=audioctx.createAnalyzer();
window.addEventListener('load',函数(e){
var source=audioctx.createMediaElementSource(音频节点);
源。连接(分析仪);
source.connect(audioctx.destination);
audio_node.pause();
},假);
调用什么play()
它调用什么?@inorganik我对音频API不太熟悉,但我认为audio
标记提供的播放按钮会播放文件。正如我所说,它实际上会播放文件,但只有在按play键然后单击时间线之后。我只是玩了一下,按play/pause/play也会播放文件。我遗漏了什么吗?您可以尝试将currentTime设置为0-audio\u node.currentTime=0
,但我认为这可能与audioctx或AudioContext有关。阅读更多关于他们的文档。谢谢你的回答。事实上,我在发帖前做尽职调查时,看到你在另一个回答中提出了这一点。我试过这个,但没有任何效果。除非我真的错过了一些明显的东西,否则我开始认为这可能是Firefox的一个bug。