Flash:关键帧中调用自建的音乐类,进行播放、关闭、循环音乐+按键播放或者关闭外部音乐+循环播放背景音乐+播放按钮音乐+停止+加载外部音乐文件+AS2播放背景音乐

目录

一、关键帧里面:调用自建的音乐类, 循环播放外部音乐、进行播放、关闭、循环音乐

1、代码:自建音乐类

2、关键帧中创建、播放、暂停背景音乐+按钮音乐

3、文件布置

二、关键帧中:按键播放或者关闭外部音乐

三、关键帧里面: 循环播放背景音乐+播放外部加载文件

1.加载外部的音乐+开始播放:需要注意缺少声音驱动

2、暂停播放:

3、再次播放

4、注意

四、文本类里面是:

五、播放按钮音乐

六、AS2里面播放背景音乐

七、注意:

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

 

七、注意:

1、有时候电脑声卡驱动等有问题,导致代码的soundChannel_bgm = sound_bg.play();会出现bug,所以需要添加判断,判断是不是为空

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值