加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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;
}

}

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读