as3 加载外部声音文件问题详细剖析

2019-10-08 15:02:53刘景俊

每个加载和播放的声音都需要它自己的Sound类和SoundChannel类。从多个SoundChannel实例输出的声音在播放中通过全局的SoundMixer混合在一起。
Sound,SoundChannel和SoundMixer类不能用在从麦克风或者流媒体服务器获取的声音上。
加载外部声音文件
Sound类的每个实例都用来加载和回放指定的声音。应用程序不能重复使用一个Sound对象加载多于一个的声音。如果想加载一个新的声音,需要创建一个新的声音对象。
如果加载一个小的声音文件,比如要附加在按钮上的点击声音,可以像下面这样创建一个新的Sound,然后让它自动加载声音文件:
ActionScript Code:

复制代码
var req:URLRequest = new URLRequest("click.mp3");
var s:Sound = new Sound(req);

Sound()构造函数使用一个URLRequest对象作为第一个参数。当指定了URLRequest参数的时候,Sound对象就开始自动加载指定的声音文件。
除了这个最简单的情况之外,应用程序都应该注意声音的加载过程并监视加载过程中出现的错误。比如,如果这个点击声音特别的大,可能在用户点击按钮触发这个声音的时候这个声音文件还没有完全加载完。试图播放一个未加载完的声音可能导致一个运行期错误。安全的做法是等声音完全加载后再允许用户的那些可能导致声音播放的行为。
在声音加载过程中,Sound对象会发送几个不同的事件。应用程序可以监听这些事件来跟踪加载过程以确保声音在完全加载后才能播放。下表列出了声音对象可能发送的事件。

事件

描述

open (Event.OPEN)

在声音加载操作刚开始时发送。

progress (ProgressEvent.PROGRESS)

当从文件或者流中接收到数据的时候周期性的发送。

id3 (Event.ID3)

当一个mp3声音的ID3数据可用时发送。

complete (Event.COMPLETE)

当声音的所有数据加载完后发送。

ioError (IOErrorEvent.IO_ERROR)

如果声音文件不能定位或者加载过程中在所有数据接收完之前被中断的时候发送。