解码音频/音频播放 (AS3)

Posted

技术标签:

【中文标题】解码音频/音频播放 (AS3)【英文标题】:Decoding Audio / Audio Playback (AS3) 【发布时间】:2010-07-03 01:01:04 【问题描述】:

我有兴趣学习如何在 ActionScript 3 中解码和播放音频。我了解如何使用 SAMPLE_DATA 事件将字节写入 Sound 对象,所以这不是一个真正的问题。我想了解的是如何在 Flash Player 中实现用于本机播放的替代音频格式。

我想我要问的是:如何获取 X 格式的内容并将其“转换/解码”为 WAV 格式并将字节写入 Sound 对象,播放音频?我有兴趣为 FLAC 音频和可能的 OGG 音频编写解码器,因为这些似乎是一些最广泛使用的开源音频格式。

任何人都可以给我任何建议吗?

【问题讨论】:

【参考方案1】:

如果你想写一个解码器,你首先应该看的是你想要解码的格式的规范。

可以在此处找到 ogg/vorbis 规范:http://xiph.org/vorbis/doc/Vorbis_I_spec.html

另外,看看(或移植)其他一些已经这样做的开源库(我不知道有任何用 Actionscript 编写的)可能会有所帮助,例如用 Java 编写的:@987654322 @(我不知道这个库,我只是在谷歌上搜索“ogg vorbis 开源”。

无论如何,您都必须做一些工作才能使其正常工作,我并不是要让您气馁,但我不确定 Actionscript 是否足够快以进行实时音频解码。

【讨论】:

“我不确定 Actionscript 是否足够快以进行实时音频解码”...我也不是。 先解码再播放,也可以只解码缓冲区,在播放过程中慢慢解码。 @M28。是的,播放时解码就是我所说的“实时音频解码”。正如我所说,我怀疑 AS 是否足够快,但我可能错了。另一方面,预先解码整个事情并不总是一种选择。而且,我感觉这需要很长时间(而且你必须使用“绿色线程”,这会使其变慢)。【参考方案2】:

您可以尝试,但您不会有太多的精力去做其他事情。在 Flash 10 之前,我写了一篇文章详细介绍了 hack to feed PCM data into sound output in Flash。有人联系,因为他们写了一个 AS3 Ogg 解码器,但是……即使在完全优化了代码之后,发现 AVM2 真的不能胜任这项工作。基本上,它相当慢,解码 OGG 是相当密集的处理器。从那以后的几年里,我看不出事情会发生多大的变化,因为 CPU 变得“更宽”了,而且速度并没有那么快。 ActionScript 是单线程的,因此您不能卸载到另一个内核。

可能值得一试this...也许性能有所提高。

编辑:说了这么多,正如胡安所说,不要对这个答案感到气馁。我怀疑 FLAC 解码的计算需求可能比 OGG 少得多,如果 DSP 让你兴奋,花时间弄清楚所有这些东西是 100% 值得的,即使 Flash 路线(可能)导致失望。我个人认为 Silverlight 的 MediaStreamSource 看起来很有前途,但并没有真正涉足那么多。

【讨论】:

让我告诉你,这是一个很棒的 hack。我记得我当时在一个音频混音器项目中玩弄它(尽管生成的用户生成的音频原始数据太大而无法将其发送到服务器并且编写 MP3 编码器超出了我的范围; 我最终以类似 midi 的格式发送“混合数据”,并让服务器进行真正的音频混合)。但是与它一起工作很有趣。为此+1! (也是一个很好的答案)。 @Juan... 谢谢。发现如何制作 Andre Michelle 的秘方绝对是我玩 Flash 的最大乐趣。

以上是关于解码音频/音频播放 (AS3)的主要内容,如果未能解决你的问题,请参考以下文章

FFmpeg进行音频的解码和播放

第十章 视频播放器开发之音频播放

使用 Audiotrack 在 Android 中播放 javacv-ffmpeg 解码的音频

投屏Sink端音频底层解码并用OpenSLES进行播放

Android FFmpeg视频播放器三 音频封装格式解码播放

ffmpeg 播放音频