目录
一、关键帧里面:调用自建的音乐类, 循环播放外部音乐、进行播放、关闭、循环音乐
1、有时候电脑声卡驱动等有问题,导致代码的soundChannel_bgm = sound_bg.play();会出现bug,所以需要添加判断,判断是不是为空
一、关键帧里面:调用自建的音乐类, 循环播放外部音乐、进行播放、关闭、循环音乐
1、代码:自建音乐类
①注意:自建类时候,就不能使用Event.SOUND_COMPLETE来进行循环播放,测试过,没有反应
①注意:自建类时候,不能在自建类里面使用onEnterFrame,检测在任务管理器中发现会CPU、内存变大
/*
作者:xzy
日期:2020年4月24日
版本:2.0
更新:修改了1.0版本中电脑没有音乐驱动会直接报错的情况
*/
package MyLibrary
{
import flash.events.Event;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.*;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.net.URLRequest;
public class MySound extends Sprite
{
//控制音乐停止、循环播放的
private var soundChannel:SoundChannel = null;
//音乐本身
var sound_mousic:Sound = null;
//是否再播放音乐
var isPlayingBGM:Boolean = false;
//是否需要循环播放音乐
var isLoop:Boolean = false;
//功能:构造函数
//参数1:音乐的路径 参数2:是否循环播放音乐
public function MySound(_path_sound:String,_isLoop:Boolean)
{
isLoop = _isLoop;
var url:String = _path_sound;
var request:URLRequest = new URLRequest(url);
sound_mousic = new Sound();
sound_mousic.addEventListener(Event.COMPLETE, completeHandler);
sound_mousic.addEventListener(Event.ID3, id3Handler);
sound_mousic.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
sound_mousic.addEventListener(ProgressEvent.PROGRESS, progressHandler);
sound_mousic.load(request);
if (isLoop==true)
{
//循环播放:发现在类里面,不能使用在关键帧里面的SOUND_COMPLETE,所以播放很多次来实现循环播放
//play的参数1:应开始回放的初始位置(以毫秒为单位)。 参数2:声音循环回 startTime 值的次数。
soundChannel = sound_mousic.play(0,99999999);
}
else
{
//不是循环播放,就播放一次
soundChannel = sound_mousic.play(0);
}
isPlayingBGM = true;
if (soundChannel!=null)
{
soundChannel.stop();
}
isPlayingBGM = false;
//避免:没有插耳机、没有声卡驱动,程序报错的情况,加一层保护
if (soundChannel==null)
{
trace("创建背景音乐失败,检查音乐驱动/板卡是否支持声音/是否插上耳机");
}
}
//成功加载数据后调度。
private function completeHandler(event:Event):void
{
//trace("completeHandler: " + event);
}
//在存在可用于 MP3 声音的 ID3 数据时由 Sound 对象调度。
private function id3Handler(event:Event):void
{
//trace("id3Handler: " + event);
}
//在出现输入/输出错误并由此导致加载操作失败时调度。
private function ioErrorHandler(event:Event):void
{
trace("ioErrorHandler: " + event);
}
//在加载操作进行过程中接收到数据时调度
private function progressHandler(event:ProgressEvent):void
{
//trace("progressHandler: " + event);
}
//功能:播放或者暂停音乐
public function Set_PlayOrStopSound(_isPlay:Boolean)
{
if (_isPlay)
{
if (isPlayingBGM==false)
{
//soundChannel = sound_mousic.play();
if (isLoop==true)
{
//循环播放:发现在类里面,只能使用如此笨办法,参数1:应开始回放的初始位置(以毫秒为单位)。 参数2:声音循环回 startTime 值的次数。
if (soundChannel!=null)
{
soundChannel = sound_mousic.play(0,99999999);
}
}
else
{
if (soundChannel!=null)
{
soundChannel = sound_mousic.play(0);
}
}
isPlayingBGM = true;
}
}
else
{
if (isPlayingBGM==true)
{
if (soundChannel!=null)
{
soundChannel.stop();
}
isPlayingBGM = false;
}
}
}
//功能:音乐是否在播放
//返回值:是否在播放音乐
public function Get_isPlayingSound():Boolean
{
var resert:Boolean;
(isPlayingBGM == true) ? resert = true:resert = false;
return resert;
}
}
}
2、关键帧中创建、播放、暂停背景音乐+按钮音乐
//导入:发布的swf同路径名为MyLibrary文件里面的MySound.as文件
import MyLibrary.MySound;
//注意:新建的变量名字不能和类名字一样
var myBGM:MySound = null;
stop();
Start_sound();
function Start_sound()
{
if (! stage.hasEventListener(KeyboardEvent.KEY_UP))
{
stage.addEventListener(KeyboardEvent.KEY_UP,KeyUp);
}
Init_bgm();
//gotoAndPlay("待机");
}
//离开此帧,销毁
function Destroy_sound()
{
if (stage.hasEventListener(KeyboardEvent.KEY_UP))
{
stage.removeEventListener(KeyboardEvent.KEY_UP,KeyUp);
}
}
function KeyUp(e:KeyboardEvent)
{
switch (e.keyCode)
{
case 65+0 :
if (myBGM!=null)
{
//播放音乐
myBGM.Set_PlayOrStopSound(true);
}
break;
case 65+1 :
if (myBGM!=null)
{
//暂停音乐
myBGM.Set_PlayOrStopSound(false);
}
break;
case 65+2 :
Init_bgm();
break;
case 65+3 :
Destroy_bgm();
break;
}
}
//功能:初始化背景音乐
function Init_bgm()
{
if (myBGM==null)
{
myBGM = new MySound("背景音乐.mp3",true);
trace("Init_bgm");
}
}
//功能:销毁背景音乐
function Destroy_bgm()
{
if (myBGM!=null)
{
myBGM = null;
trace("Destroy_bgm");
}
}
//按钮音乐
function ClickMusic()
{
var soundM:Sound=new Sound();
var soundct:SoundChannel=new SoundChannel();
soundM.load(new URLRequest("按钮音乐.mp3"));
soundct = soundM.play();
}
3、文件布置
二、关键帧中:按键播放或者关闭外部音乐
import flash.events.KeyboardEvent;
/*************************************/
/* 背景音乐 */
/*************************************/
var sound_bg:Sound = null;
var url_bgm:URLRequest = null;
var isPlayingBGM:Boolean = false;
var soundChannel_bgm:SoundChannel = null;
stop();
Start();
function Start()
{
if (! stage.hasEventListener(KeyboardEvent.KEY_UP))
{
stage.addEventListener(KeyboardEvent.KEY_UP,KeyUp);
}
Init_sound();
}
function Destory()
{
}
function KeyUp(e:KeyboardEvent)
{
switch (e.keyCode)
{
case 65+0 :
PlayOrPauseBGM();
break;
}
}
//功能:初始化音乐
function Init_sound()
{
if (url_bgm==null)
{
url_bgm = new URLRequest("背景音乐.mp3");
}
if (sound_bg==null)
{
sound_bg=new Sound();
sound_bg.load(url_bgm);
}
soundChannel_bgm = sound_bg.play();
isPlayingBGM = true;
soundChannel_bgm.stop();
isPlayingBGM = false;
if (soundChannel_bgm==null)
{
trace("创建背景音乐失败,检查音乐驱动/板卡是否支持声音/是否插上耳机");
}
if (! sound_bg.hasEventListener(Event.SOUND_COMPLETE))
{
sound_bg.addEventListener(Event.SOUND_COMPLETE,DoComplete);
}
//soundChannel_bgm.stop();
}
//功能:播放或者停止播放音乐
function PlayOrPauseBGM()
{
if (isPlayingBGM==false)
{
isPlayingBGM = true;
soundChannel_bgm = sound_bg.play();
}
else if (isPlayingBGM==true)
{
isPlayingBGM = false;
soundChannel_bgm.stop();
}
}
//功能:循环播放音乐
function DoComplete(e:Event)
{
soundChannel_bgm = sound_bg.play();
}
三、关键帧里面: 循环播放背景音乐+播放外部加载文件
1.加载外部的音乐+开始播放:需要注意缺少声音驱动
/*************************************/
/* 背景音乐 */
/*************************************/
var sound_bg:Sound=new Sound();
var url_bgm:URLRequest = new URLRequest("背景音乐.mp3");
var soundChannel_bgm:SoundChannel = null;
var isPlayingBGM:Boolean = false;
sound_bg.load(url_bgm);
//PlayBGM();
音乐停止;
//soundChannel_bgm.stop();
PlayBGM();
isPlayingBGM = true;
function PlayBGM()
{
if (isPlayingBGM==false)
{
isPlayingBGM = true;
soundChannel_bgm = sound_bg.play();
}
if (soundChannel_bgm==null)
{
trace("创建背景音乐失败,检查音乐驱动/板卡是否支持声音/是否插上耳机");
}
else if (soundChannel_bgm!=null)
{
if (! soundChannel_bgm.hasEventListener(Event.SOUND_COMPLETE))
{
soundChannel_bgm.addEventListener(Event.SOUND_COMPLETE,DoComplete);
}
}
}
function DoComplete(e:Event)
{
isPlayingBGM = false;
PlayBGM();
}
2、暂停播放:
soundChannel_bgm.stop();
isPlayingBGM=false;
3、再次播放
PlayBGM();
4、注意
①音乐路径可以进行修改
四、文本类里面是:
package
{
import flash.display.MovieClip;
import flash.media.SoundChannel;
import flash.media.Sound;
import flash.net.URLLoader;
import flash.events.Event;
import flash.net.URLRequest;
public class main extends MovieClip
{
//背景音乐
public var sound_bg:Sound=new Sound();
public var url_bgm:URLRequest = new URLRequest("背景音乐.mp3");
public var soundChannel:SoundChannel;
public function PlayBGM()
{
soundChannel = sound_bg.play();
if (! soundChannel.hasEventListener(Event.SOUND_COMPLETE))
{
soundChannel.addEventListener(Event.SOUND_COMPLETE,DoComplete);
}
}
public function DoComplete(e:Event)
{
PlayBGM();
}
public function main()
{
// constructor code
sound_bg.load(url_bgm);
PlayBGM();
}
}
}
五、播放按钮音乐
//按钮音乐
function ClickMusic()
{
var soundM:Sound=new Sound();
var soundct:SoundChannel=new SoundChannel();
soundM.load(new URLRequest("点击音效.mp3"));
soundct = soundM.play();
}
六、AS2里面播放背景音乐
参考:http://blog.sina.com.cn/s/blog_41525e6d0100vns2.html
//背景音乐播放
var mymusic = new Sound();
mymusic.loadSound("背景音乐.mp3",true);
mymusic.start();
var i = 0;//i用来指示当前播放了几遍
var max = 10000;//max用来指定重复播放多少遍
mymusic.onSoundComplete = function()
{
i++;
trace(i);
if (i < max)
{
mymusic.start();
}
}