理解声音的结构
应用程序可以从4个地方加载声音:
运行时从外部声音文件里加载
内嵌到SWF文件里的声音资源
从连接到用户系统的麦克风上获取声音数据
从远程多媒体服务器,比如Flash Media Server获取声音流
可以等到声音全部加载后再播放,也可以边加载边播放。
ActionScript 3.0和Flash Player支持以mp3格式存储的声音。它们不能直接加载或播放其他格式的声音,比如WAV或AIFF。
使用Adobe Flash CS3 Professional,可以导入WAV或AIFF格式的声音,然后就可以把它们以MP3的格式嵌入到SWF文件中。Flash开发工具可以压缩嵌入的声音文件以减少文件大小,不过这样需要以降低声音质量的代价。更多信息查看 "Importing Sounds" in Using Flash.
ActionScript3.0声音使用flash.media包中的下列类
类 |
描述 |
flash.media.Sound |
Sound类用来加载声音,管理声音的基本属性以及使声音开始播放 |
flash.media.SoundChannel |
当程序播放一个声音对象的时候,会创建一个新的SoundChannel对象控制播放。SoundChannel对象同时控制声音的左右频道。每个播放的声音都有自己的SoundChannel对象。 |
flash.media.SoundLoaderContext |
SoundLoaderContext类指定当加载一个声音的时候使用多少秒的缓冲区,以及从服务器加载文件的时候FlashPlayer是否查找跨域策略文件。SoundLoaderContext对象作为Sound.load() 方法的参数使用。 |
flash.media.SoundMixer |
SoundMixer类控制程序中所有声音的回放及安全属性。实际上,多个声音频道通过一个共同的SoundMixer对象混合在一起,因此,SoundMixer对象的属性会影响正在播放的所有SoundChannel对象。 |
flash.media.SoundTransform |
SoundTransform类包含用于控制音量和平衡的值。SoundTransform对象可以应用到一个单独的SoundChannel对象,全局的SoundMixer对象或者一个Microphone对象。 |
flash.media.ID3Info |
ID3Info对象包含mp3文件中的ID3元数据信息。 |
flash.media.Microphone |
Microphone类表示连接到用户电脑上的麦克风或者其他声音输入设备。从麦克风输入的音频可以传送到本地喇叭上或者远程服务器上。Microphone对象控制它自己声音流的取样率。 |
每个加载和播放的声音都需要它自己的Sound类和SoundChannel类。从多个SoundChannel实例输出的声音在播放中通过全局的SoundMixer混合在一起。
Sound,SoundChannel和SoundMixer类不能用在从麦克风或者流媒体服务器获取的声音上。
加载外部声音文件
Sound类的每个实例都用来加载和回放指定的声音。应用程序不能重复使用一个Sound对象加载多于一个的声音。如果想加载一个新的声音,需要创建一个新的声音对象。
如果加载一个小的声音文件,比如要附加在按钮上的点击声音,可以像下面这样创建一个新的Sound,然后让它自动加载声音文件:
ActionScript Code:
事件 |
描述 |
open (Event.OPEN) |
在声音加载操作刚开始时发送。 |
progress (ProgressEvent.PROGRESS) |
当从文件或者流中接收到数据的时候周期性的发送。 |
id3 (Event.ID3) |
当一个mp3声音的ID3数据可用时发送。 |
complete (Event.COMPLETE) |
当声音的所有数据加载完后发送。 |
ioError (IOErrorEvent.IO_ERROR) |
如果声音文件不能定位或者加载过程中在所有数据接收完之前被中断的时候发送。 |
下面的代码演示了如何在声音加载完后播放一个声音:
ActionScript Code:
var req:URLReque