现在的位置: 首页 > 综合 > 正文

AS3中音频、视频的播放控制

2014年02月08日 ⁄ 综合 ⁄ 共 3529字 ⁄ 字号 评论关闭

耐心的看完lynda.com出版的《ActionScript 3.0 in Flash CS3 Professional Essential Training》,教的东西都很初级,但是很通俗易懂,音、视、代码并茂,充分体现“because knowledge must be free"的精神,o(∩_∩)o...,要是是中文的就好了,这是其中的音频和视频的播放控制代码,在CS3中它们的播放相差较大,整理一番,供以后参考。

【音频部分:】

要点:URLRequest,Sound,SoundChannel,SoundTransform

注意:flash CS3中的mp3好像不支持320kbps,放不出来的时候要考虑这一点。

重要概念和术语:

  • 波幅 (Amplitude):声音波形上的点与零或平衡线之间的距离。
  • 比特率 (Bit rate):每秒为声音文件编码或流式传输的数据量。对于 mp3 文件,比特率通常是以每秒千位数 (kbps) 来表述的。较高的比特率通常意味着较高品质的声音波形。
  • 缓冲 (Buffering):在回放之前接收和存储声音数据。
  • mp3:MPEG-1 Audio Layer 3 (mp3) 是一种常用的声音压缩格式。
  • 声相 (Panning):将音频信号放在立体声声场中左声道和右声道之间。
  • 峰值 (Peak):波形中的最高点。
  • 采样率 (Sampling rate):定义在生成数字信号时每秒从模拟音频信号采集的样本数。标准光盘音频的采样率为 44.1 kHz 或每秒 44,100 个样本。
  • 流式传输 (Streaming):此过程是指,在仍从服务器加载声音文件或视频文件的后面部分的同时播放该文件的前面部分。
  • 音量 (Volume):声音的响度。
  • 波形 (Waveform):声音信号波幅随时间变化的图形形状。

补充:音频控制部分缺乏播放完毕控制,这是kinghill的播放器控制代码(注意函数名称不同)

//声音完毕的处理

function soundEnd(event:Event):void {
 pause_btn.visible=false;
 pause_btn.removeEventListener(MouseEvent.CLICK,pauseSound);
 play_btn.visible=true;
 play_btn.addEventListener(MouseEvent.CLICK,playSound);

}

function playSound(event:MouseEvent):void {
 soundControl=sound.play(soundPosition);
 soundControl.addEventListener(Event.SOUND_COMPLETE,soundEnd);//监测声音是否完毕,放在声音播放之后
 play_btn.visible=false;
 play_btn.removeEventListener(MouseEvent.CLICK,playSound);
 pause_btn.visible=true;
 pause_btn.addEventListener(MouseEvent.CLICK,pauseSound);
}

代码范例:

var soundReq:URLRequest = new URLRequest("free_fade.mp3");
var sound:Sound = new Sound();
var soundControl:SoundChannel = new SoundChannel();
var volumeControl:SoundTransform = new SoundTransform();
var resumeTime:Number = 0;

sound.load(soundReq);

sound.addEventListener(Event.COMPLETE, onComplete);
up_btn.addEventListener(MouseEvent.CLICK, increaseVolume);
down_btn.addEventListener(MouseEvent.CLICK, decreaseVolume);

function onComplete(event:Event):void
{
 play_btn.addEventListener(MouseEvent.CLICK, playSound);
 stop_btn.addEventListener(MouseEvent.CLICK, stopSound);
}

function playSound(event:MouseEvent):void
{
 soundControl = sound.play(resumeTime);
 pause_btn.visible = true;
 pause_btn.addEventListener(MouseEvent.CLICK, pauseSound);
 play_btn.visible = false;
 play_btn.removeEventListener(MouseEvent.CLICK, playSound);
}

function pauseSound(event:MouseEvent):void
{
 resumeTime = soundControl.position;
 soundControl.stop();
 play_btn.visible = true;
 play_btn.addEventListener(MouseEvent.CLICK, playSound);
 pause_btn.visible = false;
 pause_btn.removeEventListener(MouseEvent.CLICK, pauseSound);
}

function stopSound(event:MouseEvent):void
{
 soundControl.stop();
 play_btn.visible = true;
 play_btn.addEventListener(MouseEvent.CLICK, playSound);
 pause_btn.visible = false;
 pause_btn.removeEventListener(MouseEvent.CLICK, pauseSound);
}

function increaseVolume(event:MouseEvent):void
{
 volumeControl.volume += .5;
 soundControl.soundTransform = volumeControl;
}

function decreaseVolume(event:MouseEvent):void
{
 volumeControl.volume -= .5;
 soundControl.soundTransform = volumeControl;
}

pause_btn.visible = false;

【视频部分:】

要点:NetConnection,NetStream,Video ,onMetaData

原理:

代码范例:

var videoConnection:NetConnection = new NetConnection();
videoConnection.connect(null);
var videoStream:NetStream = new NetStream(videoConnection);
videoStream.play("short_jump.flv");
var metaListener:Object = new Object();
metaListener.onMetaData = onMetaData;
videoStream.client = metaListener;
var video:Video = new Video();
video.attachNetStream(videoStream);
addChild(video);

function onMetaData(data:Object):void
{
 play_btn.addEventListener(MouseEvent.CLICK, playMovie);
 stop_btn.addEventListener(MouseEvent.CLICK, stopMovie);
}

function playMovie(event:MouseEvent):void
{
 videoStream.play("short_jump.flv");
}

function stopMovie(event:MouseEvent):void
{
 videoStream.pause();
}
 

抱歉!评论已关闭.