防止音频恢复

Prevent audio resume

我有一个 vanilla JS 网络应用程序,它播放声音以响应特定事件,按下按钮会停止声音。一切正常。

但是,我最近开始在我的鼠标上使用专用媒体 play/pause 按钮,我注意到这个按钮恢复播放该选项卡中的最后一个声音,即使它已经被取消。

我能以某种方式阻止这种情况吗?对于停止,我目前正在使用 this answer:

中提到的标准解决方案
sound.pause();
sound.currentTime = 0;

这是在 Windows 10.

上的 Firefox 中

我考虑过在关键事件上执行 preventDefault,因为没有理由 play/pause 这些(警报)声音就像它们是媒体轨道一样。但是提示这个事件是浏览器处理的,JS是不可用的

据我所知,此行为并未在任何地方指定。当用户按下硬件按钮切换声音时,当今的浏览器会以某种方式尝试“做正确的事”。

有一个 Media Session Standard 允许自定义体验,但如果未使用,浏览器会尝试在页面上寻找活动媒体元素以应用事件。

至少据我所知,Web Audio API 到目前为止还没有连接到任何硬件密钥。如果您的文件相当小,使用 AudioBufferSourceNode 代替音频元素可能是有意义的。

无论如何,一个似乎在 Firefox 和 Chrome 中有效的快速修复是将 currentTime 设置为 duration 而不是将其设置为零。

sound.pause();
sound.currentTime = sound.duration;