使用来自音频标签的源使用 AudioContext

Posted

技术标签:

【中文标题】使用来自音频标签的源使用 AudioContext【英文标题】:Working with AudioContext with a source from audio tag 【发布时间】:2012-10-25 23:37:37 【问题描述】:

我正在构建一个音乐播放器,我想根据当前播放的曲目添加一个脉动效果。

这里有一些我想要的例子:

http://www.htmlfivewow.com/demos/hal/index.html

http://www.schillmania.com/projects/soundmanager2/demo/360-player/canvas-visualization.html

我的问题是,在第一个示例中,声音是通过 xhr 加载的,而在第二个示例中,它使用了 flash。

我希望能够从音频标签中获取我想要分析的声音。

恐怕不可能,这会导致很大的安全性缺失,因为我们可以加载网页而不是声音然后分析它。反正有解决办法吗?

【问题讨论】:

问了类似的问题几秒钟然后注意到你的问题:) 【参考方案1】:

您可以在 AudioContext 中使用 createMediaElementSource 方法。

<audio id="audio" src="test.mp3"></audio>
<script type="text/javascript">
    var context = new webkitAudioContext;
    var el = document.getElementById('audio');
    var source = context.createMediaElementSource(el);
    source.connect(context.destination);
    el.play();
</script>

【讨论】:

我真的很喜欢这种方法,因为它不需要提示用户权限或全局输入上下文,只需要音频标签。【参考方案2】:

看起来这是通过 Web Audio API 实现的一种实现:

https://github.com/richtaur/audia/blob/master/audia.js

和背景:

http://www.lostdecadegames.com/audia-is-a-library-for-simplifying-the-web-audio-api/

【讨论】:

为我工作。它通过 1) 模拟 标记 2) 让您访问 AudioContext 来达到相同的目的。为什么不能用这个? 我只想构建一个个人音乐播放器并发现音频 api,我想要一个“漂亮”的解决方案,使用覆盖不是我想要的。即使audia看起来不错。它还使用 xhr 来加载音频文件。感谢您对我的“问题”感兴趣;)

以上是关于使用来自音频标签的源使用 AudioContext的主要内容,如果未能解决你的问题,请参考以下文章

使用 AudioContext restart 音频

尝试运行 AudioContext.createMediaElementSource() 时如何解决“音频无法识别调用‘连接’的对象”错误?

web技术分享| AudioContext 实现音频可视化

如何控制(音频缓冲区)AudioContext() 的音量?

可以使用Web Audio API和createMediaElementSource分析来自Icecast的流式音频吗?

如果 AUDIO 标签中的源无效,则回退到默认值