ActionScript3.0中的Sound类

Flash平台 everyinch 6804℃ 0评论

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 对数据进行采样;依此类推

声音频谱的实现效果如下:

spectrum1

 

四、Sound类的使用

整体的实现逻辑如下图所示:

sound_function

通过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

Sound类的示例下载

分享&收藏

转载请注明:陈童的博客 » ActionScript3.0中的Sound类

喜欢 (3)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. 好文章,收藏起来! :grin: 谢谢博主分享!
    af2015-07-10 16:29 回复
'; } if( dopt('d_footcode_b') ) echo dopt('d_footcode'); ?>