Sound类在flash.media包中,flash.media包中的内容包括:
类 | 说明 |
Microphone | Microphone 类可以连接到麦克风并捕获音频 |
Camera | Camera 类可以连接到摄像头并捕获视频 |
Video | Video 类在应用程序中显示实时视频或录制视频 |
Sound | Sound 类允许在应用程序中使用声音 |
ID3Info | ID3Info 类包含反映 ID3 元数据的属性 |
SoundLoaderContext | SoundLoaderContext 类为加载声音的 SWF 文件提供安全检查 |
SoundChannel | SoundChannel 类控制应用程序中的声音 |
SoundTransform | SoundTransform类包含控制音量和平移的属性 |
SoundMixer | SoundMixer 类包含 SWF 文件中全局声音控件的静态属性和方法 |
关于Sound的有关类,以及它们的关系如下表所示:
ID3Info | SoundTransform | SoundTransform |
Sound类 | SoundChannel | SoundMixer |
SoundLoaderContext |
中间行的Sound、SoundChannel和SoundMixer是ActionScript3.0中关于声音的关键类。即加载控制、播放控制和变换控制。
一、Sound相关类
1. Sound类
使用 Sound 类可以创建 Sound 对象、将外部 MP3 文件加载到该对象并播放该文件、关闭声音流,以及访问声音流中的字节数和 ID3 元数据。
属性 |
bytesLoaded : uint[只读] 返回声音对象中当前可用的字节数 |
bytesTotal : int[只读] 返回声音对象中总的字节数 |
id3 : ID3Info[只读] 提供对作为 MP3 文件一部分的元数据的访问 |
isBuffering : Boolean[只读] 返回外部 MP3 文件的缓冲状态 |
length : Number[只读] 当前声音的长度(以毫秒为单位) |
url : String[只读] 从中加载此声音的 URL |
Sound类中的方法:
方法 |
Sound(stream:URLRequest = null, context:SoundLoaderContext = null)创建一个新的 Sound 对象 |
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知 |
close():void关闭该流,从而停止所有数据的下载 |
extract(target:ByteArray, length:Number, startPosition:Number = -1):Number从 Sound 对象提取原始声音数据 |
load(stream:URLRequest, context:SoundLoaderContext = null):void启动从指定 URL 加载外部 MP3 文件的过程 |
play(startTime:Number = 0, loops:int = 0, sndTransform:SoundTransform = null):SoundChannel生成一个新的 SoundChannel 对象来回放该声音 |
Sound的事件:
事件 | 摘要 |
complete | 成功加载数据后调度 |
Id3 | 当存在 ID3 数据时由 Sound 对象调度 |
ioError | 在出现输入/输出错误并由此导致加载操作失败时调度 |
open | 在加载操作开始时调度 |
progress | 在加载操作进行过程中接收到数据时调度 |
sampleData | 当播放器请求新的音频数据时调度 |
2. ID3Info
ID3Info 类包含反映 ID3 元数据的属性。 可以通过访问 Sound 类的 id3 属性来获取 MP3 文件的其它元数据;例如,mySound.id3.TIME
album : String专辑的名称;对应于 ID3 2.0 标签 TALB |
artist : String歌手的姓名;对应于 ID3 2.0 标签 TPE1 |
comment : String录制的相关注解;对应于 ID3 2.0 标签 COMM |
genre : String歌曲的流派;对应于 ID3 2.0 标签 TCON |
songName : String歌曲的名称;对应于 ID3 2.0 标签 TIT2 |
track : String曲目编号;对应于 ID3 2.0 标签 TRCK |
year : String录制的年份;对应于 ID3 2.0 标签 TYER |
3. SoundLoaderContext 类
SoundLoaderContext 类为加载声音的 SWF 文件提供安全检查。 SoundLoaderContext 对象以参数的形式传递到构造函数和 Sound 类的 load() 方法
使用此类时,请考虑 Flash Player 安全模型:
- 如果执行调用的 SWF 文件在网络沙箱中,并且要加载的声音文件是本地文件,则不允许加载和播放声音
- 默认情况下,若执行调用的 SWF 是本地的,并且试图加载和播放远程声音,则不允许加载和播放声音。 用户必须授予明确许可以允许该操作
- 某些处理声音的操作受到限制。 除非实现一个 URL 策略文件,否则位于其他域中的 SWF 文件无法访问已加载声音中的数据。受此限制约束的与声音相关的 API 为 Sound.id3 属性以及 SoundMixer.computeSpectrum()、SoundMixer.bufferTime 和 SoundTransform() 方法
SoundLoaderContext 类的属性和方法:
属性 |
bufferTime : Number = 1000在开始传输声音流之前将其预加载到缓冲区中所用的毫秒数 |
checkPolicyFile : Boolean = false指定 Flash Player 是否应在开始加载声音之前尝试从所加载声音的服务器下载 URL 策略文件 |
方法 |
SoundLoaderContext(bufferTime:Number = 1000, checkPolicyFile:Boolean = false)创建新的声音加载器上下文对象。 |
二、SoundChannel
SoundChannel 类控制应用程序中的声音。 Flash 应用程序中播放的每一个声音都被分配到一个声道,而且应用程序可以具有混合在一起的多个声道。 SoundChannel 类包含 stop() 方法、用于监控声道幅度(音量)的属性,以及用于对声道设置 SoundTransform 对象的属性。
属性 |
leftPeak : Number[只读] 左声道的当前幅度(音量),范围从 0(静音)至 1(最大幅度) |
rightPeak : Number[只读] 右声道的当前幅度(音量),范围从 0(静音)至 1(最大幅度) |
position : Number[只读] 当播放声音时,position 属性指示声音文件中当前播放的位置 |
soundTransform : SoundTransform分配给该声道的 SoundTransform 对象 |
方法 |
stop():void停止在该声道中播放声音 |
事件 | 事件摘要 |
soundComplete | 在声音完成播放后调度 |
三、SoundMixer相关的类
1. SoundTransform类
SoundTransform 类包含控制音量和平移的属性。以下对象包含 soundTransform 属性:Microphone、NetStream、SimpleButton、SoundChannel、SoundMixer 和 Sprite。
SoundTransform(vol:Number = 1, panning:Number = 0)
leftToLeft : Number从 0(无)至 1(全部)的值,指定了左输入在左扬声器里播放的量 |
leftToRight : Number从 0(无)至 1(全部)的值,指定了左输入在右扬声器里播放的量 |
pan : Number声音从左到右的平移,范围从 -1(左侧最大平移)至 1(右侧最大平移) |
rightToLeft : Number从 0(无)至 1(全部)的值,指定了右输入在左扬声器里播放的量 |
rightToRight : Number从 0(无)至 1(全部)的值,指定了右输入在右扬声器里播放的量 |
volume : Number音量范围从 0(静音)至 1(最大音量) |
2. SoundMixer
SoundMixer 类包含 SWF 文件中全局声音控件的静态属性和方法。 SoundMixer 类控制SWF中嵌入的声音流;它并不控制动态创建的Sound对象。
属性 |
bufferTime : int[静态] 在开始传输嵌入的声音流之前,将其预加载到缓冲区中所用的秒数 |
soundTransform : SoundTransform[静态] 控制全局声音属性的 SoundTransform 对象。 |
方法 |
areSoundsInaccessible():Boolean[静态] 确定是否因安全限制而无法访问任何声音 |
computeSpectrum(outputArray:ByteArray, FFTMode:Boolean = false, stretchFactor:int = 0):void[静态] 获取当前声音波形的快照,并将其放在指定的 ByteArray 对象中 |
stopAll():void[静态] 停止当前正在播放的所有声音 |
3. computeSpectrum () 方法
public static function computeSpectrum(outputArray:ByteArray, FFTMode:Boolean = false, stretchFactor:int = 0):void
- ByteArray 为标准浮点值(范围为 -1.0 到 1.0)格式。创建的 ByteArray 对象的大小固定为 512 个浮点值,其中前 256 个值表示左声道,后 256 个值表示右声道
- outputArray:ByteArray — 用于保存与声音关联的 ByteArray 对象 FFTMode:Boolean (default = false) — 指示是否对声音数据执行傅立叶变换的布尔值。将此参数设置为 true 会导致方法返回的是频谱而不是原始声音波形。在频谱中,左侧表示的是低频,右侧表示的是高频
- stretchFactor:int (default = 0) — 声音采样的分辨率。 如果将 stretchFactor 值设置为 0,则会按 44.1 KHz 对数据进行采样;如果值为 1,则按 22.05 KHz 对数据进行采样;依此类推
声音频谱的实现效果如下:
四、Sound类的使用
整体的实现逻辑如下图所示:
通过Sound类监听声音文件的加载,当加载完毕实现播放,监测播放的进度,从而实现循环播放或播放列表控制。
package{ import flash.display.Sprite; import flash.events.Event; import flash.media.Sound; import flash.media.SoundChannel; import flash.net.URLRequest; public class LoopOne extends Sprite{ private var sound:Sound; private var channel:SoundChannel; public function LoopOne(){ sound = new Sound(); sound.load(new URLRequest("assets/song1.mp3")); sound.addEventListener(Event.COMPLETE,onStart); } private function onStart(e:Event):void{ channel = sound.play(); channel.addEventListener(Event.SOUND_COMPLETE,onStart); } } }
附件中包括一些示例,示例的内容如下所示:
播放及单曲循环:LoopOne.as
播放多个音乐:LoopMulti.as
播放暂停:PlayPause.as
上一首和下一首:BackForward.as
音量控制:ChangleVolume.as
音乐频谱:EQGraph.as
音乐进度:SoundProgressBar.as
转载请注明:陈童的博客 » ActionScript3.0中的Sound类