flash播放声音类
发布时间:2020-12-15 18:22:43 所属栏目:百科 来源:网络整理
导读:package com.clayui.data { import flash.events.Event; import flash.events.EventDispatcher; import flash.media.ID3Info; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundLoaderContext; import flash.media.Soun
package com.clayui.data
{ import flash.events.Event; import flash.events.EventDispatcher; import flash.media.ID3Info; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundLoaderContext; import flash.media.SoundTransform; import flash.net.URLRequest; import flash.utils.ByteArray; /** * 声音代理对像,用于代理声音对像,因为声音play调用一次将产生新的 SoundChannel,而引用它可能存在内存问题; * @author crl *? */ public class SoundEntity extends EventDispatcher{ /** * 尽量用Soundentry的play而不直接使用sound的,便于管理channel;? */ private var _sound:Sound; /** * 声音管理控制类 **/? private var _channel:SoundChannel; /** * 循环播放次数;? */ private var _loops:int; /** * 剩余循环次数;? */ private var _leftLoops:int; /** * 声音唯一标识 **/? private var _key:String; /** * 播放到的位置 **/? private var _position:int; /** * 音量 **/? private var _volume:int; /** * 播放停止控制状态变量 **/? private var _pause:Boolean; /** * ? * @param sound 代理的声音对像; * @param key 标识; *? */ public function SoundEntity(sound:Sound,key:String):void{ _sound=sound; _key=key; } public function get key():String{ return _key; } public function getNewSoundChannel(startTime:int=0,loops:int=0,sndTransform:SoundTransform=null):SoundChannel { _channel = _sound.play(startTime,loops,sndTransform); return _channel; } public function play(startTime:int=0,sndTransform:SoundTransform=null):void{ this.loops=loops; if(_channel){ _channel.stop(); _channel.removeEventListener(Event.SOUND_COMPLETE,soundCompleteHandler); } _channel=_sound.play(startTime,sndTransform); if(_channel==null){ //没有扬声器时或其它故障; return; } _channel.addEventListener(Event.SOUND_COMPLETE,soundCompleteHandler,false,true); _pause=false; } /** * 用于处理以段MP3播放完成的操作(如:循环播放、换) **/? private function soundCompleteHandler(event:Event):void{ _leftLoops--; if(_leftLoops<=0){ _channel.stop(); _channel.removeEventListener(Event.SOUND_COMPLETE,soundCompleteHandler); this.dispatchEvent(event.clone()); } } /** * 停止? *? */ public function stop():void{ if(_channel==null){ return; } _channel.stop(); _pause=true; _position=_channel.position; } /** * 暂停/继续;? *? */ public function pause():void{ if(_channel==null){ return; } _pause=!_pause; if(_pause){ _position=_channel.position; _channel.stop(); }else{ _channel.stop(); _channel.removeEventListener(Event.SOUND_COMPLETE,soundCompleteHandler); _channel=_sound.play(_position,_channel.soundTransform); _channel.addEventListener(Event.SOUND_COMPLETE,true); } } /** * 设置音量;? * @param value *? */ public function set volume(value:Number):void{ if(_channel==null){ return; } var soundTransform:SoundTransform=_channel.soundTransform; soundTransform.volume=value; _channel.soundTransform=soundTransform; } /** * 取得音量;? * @return? *? */ public function get volume():Number{ if(_channel==null){ return -1; } return _channel.soundTransform.volume; } /** * 重复次数;? * @param value *? */ public function set loops(value:int):void{ _leftLoops=_loops=value; } public function get loops():int{ return _loops; } //代理sound对像; public function close():void{ _sound.close(); } public function load(stream:URLRequest,context:SoundLoaderContext = null):void{ _sound.load(stream,context); } public function extract(target:ByteArray,length:Number,startPosition:Number = -1):Number{ return _sound.extract(target,length,startPosition); } public function get id3():ID3Info{ return _sound.id3; } public function get bytesLoaded():uint{ return _sound.bytesLoaded; } public function get bytesTotal():int{ return _sound.bytesTotal; } public function get length():Number{ return _sound.length; } public function get isBuffering():Boolean{ return _sound.isBuffering; } public function get url():String{ return _sound.url; } //代理soundChannel; public function get position():Number{ if(_channel)return _channel.position; return -1; } public function get soundTransform():SoundTransform{ if(_channel==null){ return null; } return _channel.soundTransform; } public function get leftPeak():Number{ if(_channel==null){ return 0; } return _channel.leftPeak; } public function get rightPeak():Number{ if(_channel==null){ return 0; } return _channel.rightPeak; } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |