Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么音频在';播放';按钮是第一次点击的吗?_Javascript_Html_Firefox_Html5 Audio - Fatal编程技术网

Javascript 为什么音频在';播放';按钮是第一次点击的吗?

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

Firefox中的音频有问题。我在
中有一个.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。