2010-07-03 220 views
1

我很感兴趣学习如何在ActionScript 3中解码和播放音频。我了解如何使用SAMPLE_DATA事件将字节写入Sound对象,所以这不是一个真正的问题。我想了解的是如何在Flash Player中实现备用音频格式以进行原生播放。解码音频/音频播放(AS3)

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

任何人都可以给我任何意见吗?

回答

2

如果你想写一个解码器,你应该看看的第一件事就是你想要解码的格式的规格。

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

此外,它可能有助于在Java中看到(或者可能是port)一些其他已经这样做的开源库(我没有意识到任何用Actionscript编写):http://www.jcraft.com/jorbis/ (我不知道这个库,我刚刚发现它谷歌搜索“ogg vorbis开源”。

无论如何,你将不得不做一些工作,让它工作,我不是这个意思但我不确定Actionscript是否足够实时的音频解码

+0

“我不确定Actionscript是否足够快速进行实时音频解码”...也不是我。 – spender 2010-07-03 01:16:17

+0

先解码,然后播放它,或者只解码缓冲区并在播放过程中缓慢解码。 – 2010-07-03 01:21:31

+0

@ M28。是的,在播放时解码就是我所说的“实时音频解码”。正如我所说,我怀疑AS速度够快,但我可能是错的。另一方面,事先解码整个事情并不总是一种选择;另外,我有一种感觉,它需要很长时间(并且你必须使用“绿色线程”,这会让它变慢)。 – 2010-07-03 01:54:12

1

你可以尝试,但你不会有太多的咕噜声去做其他的事情。在Flash 10之前,我写了一篇详细介绍hack to feed PCM data into sound output in Flash的文章。有人因为编写了AS3 Ogg解码器而联系上了,但是......即使在完全优化代码之后,也发现AVM2并没有太多的工作。基本上,这是相当缓慢的解码OGG是相当处理器密集型。我看不出这些年来事情会发生什么变化,因为CPU已经变得“更广泛”,而且速度并不快。 ActionScript是单线程的,所以你不能卸载到另一个核心。

可能值得检查this ...也许性能有所提高。

编辑:说了这么多,正如胡安所说,不要因此回答而气馁。我怀疑FLAC解码的计算需求可能远远小于OGG,如果DSP让你兴奋,花时间计算出所有这些东西是值得的,即使闪存路线(可能)导致失望。就我个人而言,我认为Silverlight的MediaStreamSource看起来非常有前途,但还没有真正涉足这么多。

+0

让我告诉你,这是一个很棒的破解,我记得我在一个我正在研究的音频混音器项目中玩弄它时间(尽管由此产生的用户生成的音频原始数据太大而无法实践把它发送到服务器并写一个MP3编码器已经远离我的联盟;我最终以类似midi的格式发送“混音数据”,并让服务器进行真正的混音)。但与它合作非常有趣。 +1! (也是一个很好的答案)。 – 2010-07-03 01:48:45

+0

@Juan ...谢谢。发现如何让安德烈米歇尔的秘密秘诀绝对是我用Flash最有趣的。 – spender 2010-07-03 02:03:31