as3声音类详解.doc
《as3声音类详解.doc》由会员分享,可在线阅读,更多相关《as3声音类详解.doc(12页珍藏版)》请在三一办公上搜索。
1、一直都对as3的声音架构设计感到困惑,as3为什么要把播放和停止方法分开呢?为什么不能用一个Sound更换载入的声音呢?原来as3对声音的设计也是深思熟虑的。目的不是为了把问题搞得复杂,而是为了在功能强化的同时做到精简。并尽可能方便我们使用。 架构图: 2011-1-10 09:28 上传下载附件 (22.58 KB) 可以看出,as3中的声音处理是独立的,不再依赖影片剪辑作为声道。as3使用多个类合作处理声音,功能被细化到对应的类中,使得逻辑更加清晰。下面对着架构图由下往上详细阐述各个类所但当的任务。 Sound类负责创建、加载、播放声音。Sound类更像BitmapData扮演的角色,用于
2、描述数据。而不是控制声音。使用Sound创建声音有两种创建方式: 1.通过库中元件创建和载入库中声音是Sound的子类。要播放必须创建它们的实例。 2.通过外部加载的声音外部加载声音创建类型是Sound类本身。为强调一个类描述一个声音数据这种模式,Sound禁止第二次加载外部声音。加载控制符合openprogresscomplete的标准。Sound的构造函数为Sound(stream:URLRequest = null,context:SoundLoaderContext = null),创建外部声音时与load方法参数相同。如果创建库中的声音则不需要任何参数。 方法:load(stream
3、:URLRequest = null, context:SoundLoaderContext = null):void加载声音。不能使用一个Sound对象加载多个声音。当有多声音播放时,必须为每个声音创建不同的Sound对象。 play(startTime:Number= 0, loops:int = 0, sndTransform:SoundTransform = null):SoundChannel播放声音。startTimer为开始播放事件,单位为毫秒。loops为循环次数,0和1都表示播放一次,如同flash属性面板中的次数设置。sndTransform是分配给每个通道的初始对象,如果
4、有必要还可以在soundChannel中修改这个对象。每次播放都会选择不通的声道,对应方法返回值。多次执行会导致重叠播放。 close():void关闭声音流。对于流式播放声音,close很重要,因为soundChannel的stop方法不足以停止流式下载的声音。可能产生继续播放的现象。 事件: open:类型为Event.OPEN。开始下载时触发。 progress:类型为PrograssEvent.PROGRESS。下载时触发。 complete:类型为Event.COMPLETE。下载完毕时触发。 ioError:类型为Event.IO_ERROR。发生IO错误时触发。 id3:类型为E
5、vent.ID3。可以访问id3数据时触发。 属性:所有属性都是只读的,用来访问加载信息。 url: String(加载声音的url值。) bytesLoaded:uint(加载字节数。) bytesTotal:int(总字节数。) length:Number(当前声音长度,如果加载中只反应加载的长度。) id3:ID3Info(id3属性包含唱片信息。) 加载播放外部声音的顺序: 2011-1-10 09:29 上传下载附件 (12.82 KB) 属性: songName:String歌曲名称。 track:String曲目编号。 artist:String歌手名称。 album:Strin
6、g专辑名称。 yesr:String录制年份。 genre:String歌曲流派。 comment:String相关注释。 获取唱片信息顺序: SoundChannel类 SoundChannel继承EventDispatcher,使用importflash.media.SoundChannel声明。SoundChannel用于描述声音通道。有了这个类,声音通道再不用依赖MovieClip了。多个声道可以播放一个声音,一个声道可以播放多个声音(同一时刻只能播放一个)。对声音的操控和状态描述从描述声音数据的Sound类中分离出来。声道与声音之间的关系类似Bitmap和BitmapData的关系。
7、这种逻辑描述更加精确。但与位图不同的是声音通道不是由用户创建的而是系统生成的。这个纽带是Sound的play方法。采用这种处理方式是为了降低复杂性,因为系统自动管理声道免去我们因声道分配分散注意力。系统每次选择空余声道进行回放。当停止了一个声道的播放后,声道自动被as回收。这样一来,我们完全不必去管声道如何分配的,就如显示对象的深度管理一样。 方法:stop()停止播放声音。但不能停止流式下载时播放的声音。 属性:position:Number播放头位置,单位毫秒。只读属性。这表示position并不能设置播放进度。要设置播放进度只能使用play的参数。 leftPear:Number左声道音
8、量。范围为0-1。这个属性并不用来控制平移而是用来读取左声道峰值波幅。可以用这个属性检查是否是单声道。 rightPear:Number右声道音量。范围为0-1。这个属性并不用来控制平移而是用来读取右声道峰值波幅。可以用这个属性检查是否是单声道。 soundTransform:SoundTransform分配给声道的soundTransform对象。 事件:soundComplete类型为Event.SoundComplete。声音播放完毕后触发。 监视和设置声音播放进度:监视播放进度:对于下载完毕的声音可以使用position监视播放进度。但对于正在下载中的声音虽然position可以正常访
9、问,但length属性只能在下载完毕后才能获取,这给监视播放进度造成了困难。这时可以通过bytesLoaded和bytesTotal的比值估算出长度。公式为:position*bytesTotal/bytesLoaded。 设置播放进度:由于position属性是只读的。因此不能通过它设置播放进度。设置播放进度只能通过play方法的startTime参数。这是因为考虑到功能重复。采取这种逻辑还有个长处是不必管播放的状态。方法也只有播放和停止而没有暂停方法。少了一个状态和方法后,播放进度不必管是否播放或暂停。所以免去了playState属性。position的只读特性也避免设置进度时是否要保持播
10、放或暂停状态。现在一切都被简化成播放和停止两个方法了。逻辑大大简化。而暂停和设置进度都由播放和停止两个方法衍生出来。方法如下:设置进度stop+play(startTime)暂停播放=记录position+stop恢复播放play(记录position)SoundTansform类SoundTransformSoundMixer类继承Object。使用importflash.media.SoundMixer声明。由于不使用MovieClip绑定声音通道。所以描述全局声音通道的不是主时间轴而是SoundMixer类。由于与任何声道无关,所以SoundMixer是个静态类。 属性:SoundMix
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- as3 声音 详解
链接地址:https://www.31ppt.com/p-4374883.html