- https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/audio
- https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Audio_API
H5音频
HTML5音频播放有两种主流的方式,一种是使用Audio
标签,另一种是使用WebAudio
二进制播放。
Audio
Audio
标签用于定义声音,比如音乐或其他音频流。
<audio src="music.wav">您的浏览器不支持audio标签</audio>
属性 | 值 | 作用 |
---|---|---|
autoplay |
autoplay |
音频在就绪后立即播放 |
controls |
controls |
向用户显示控件,比如播放按钮等。 |
loop |
loop |
每当音频结束时会重新开始播放 |
muted |
muted |
规定视频输出应该被静音 |
preload |
preload |
音频在页面加载时进行加载并预备播放 |
src |
url |
表示要播放的音频的地址URL
|
<audio src="music.ogg" controls="controls" autoplay="autoplay" loop="loop">
Your browser does not support the audio element.
</audio>
Audio
标签属于DOM元素,自带UI界面,在移动端Audio
属于边下载便播放,适合声音文件比较大的文件。但Audio
标签在移动端存在手势的限制,可以使用gesture-requirement-for-media-playback
属性表明必须有用户的收拾操作才可以播放。
移动设备中,Audio
元素在播放前需要一个触屏消息,也就是说无论在Audio
元素中设置了autoplay
或是明确调用play
方法,都不会立即播放音频,必须等待用户触屏后才会播放。目前Android设备上的Chrome浏览器和原生Androi浏览器都有限制,iOS为节省移动资源,也具有相应限制。
Chrome浏览器中可以使用chrome://flags/#disable-gesture-requirement-for-media-playback
解决。也可以制作音频控制按钮,引导用户选择是否需要开启或关闭背景音乐来触发用户操作。
移动设备上某些浏览器暂时不支持多个音频文件同时播放,典型的例如Android设备上原生浏览器就存在这个限制。这对游戏开发来说是不能接受的,因为游戏一般都有背景音乐,另外在游戏的过程中也同时需要触发其他音乐。
WebAudio
WebAudio
是一种新的声音播放形式,可以加载多个声音进行合成,通过二进制解码成浏览器支持的格式进行播放,可利用它实现音频谱的动画效果,让声音具有合成的功能。
WebAudio API提供了在Web上控制音频的一个非常有效且通用的系统,允许开发者自选音频源,对音频添加特效,使音频添加特效,使音频可视化,添加控件效果等。
使用WebAudio来播放音频文件时,如果音频文件较大可能会影响程序的执行效率,具体的时间取决于当前网络环境和音频文件的大小。程序中一般会采用异步下载的方式,但同样会让音频的播放延迟。其次,程序需要调用WebAudio的decodeAudioData()
函数来解码整个音频文件,此函数需要一次性解码整个文件后才会出发成功的回调函数,程序才能开始播放音频文件,这再次增加了音频文件播放的延迟。另外,由于整个音频文件的一次性解码,整个解码前和钱吗后的文件都同时存在内存中,因此也会引起内存的巨大开销。相比采用Audio
标签播放方式,Audio
元素是一边解码一边播放的。decodeAudioData()
函数是为了解码短小的声音文件而设计的,由于WebAudio对音频的延迟性特别关注,所以为了减少声音的延时,在音效处理前要求将需要处理的音频文件装进内存。所以如果需要使用WebAudio播放文件,又比较关注效率文件,建议将音频文件大小缩小或分解为若干个小的文件在分别加载解码播放。
在移动端游戏开发中,游戏一般都有背景音乐,在游戏过程中也同时需要触发其他音乐。因此依靠简单的插入Audio
元素来播放音乐的方案在移动设备上显然是行不通的。所以流行的HTML5游戏引擎会采用另一种方案,即当浏览器支持WebAudio API
时就会采用WebAudio
替换Audio
元素来播放音频文件。
由于音频播放在各个浏览器中存在兼容性文件,在开始使用前,需做好前期的兼容准备。可使用音频文件转换工具将音频转换为44100Hz 96kbps的格式。其次,音频文件要尽量的小,不仅是由于网络带宽的限制,更重要的是因为浏览器音频解码的效率。
声音 Laya.Sound
Laya.Sound 类是用来播放控制声音的类
结构 | 描述 |
---|---|
Package | laya.media |
Class | Laya.Sound |
Inheritance | Sound / EventDispatcher / Object |
属性 | 描述 |
---|---|
Laya.Sound.duration:Number | 获取声音的总时间 |
方法 | 描述 |
---|---|
dispose():void | 释放声音资源 |
load(url:String):void | 加载声音 |
play(startTime:Number=0, loops:Number=0):SoundChannel | 播放声音 |
声音管理器 Laya.SoundManager
音乐和音效作为游戏中常用的基础元素,音乐是指游戏使用的背景音乐。建议背景音乐使用mp3
格式,音效使用mp3
或wav
格式,如果打包为APP则音效只能使用wav
格式。
LayaAir引擎封装可WebAudio
和Audio
,在支持WebAudio
的浏览器上优先会使用WebAudio
,在不支持WebAudio
的浏览器上会使用Audio
,以最大化兼容所有浏览器对音频格式的支持,让开发者更加方便地通过调用laya.media.SoundManager
API接口来直接播放音频。
Laya.SoundManager
声音管理器提供对背景音乐和音效的播放控制,LayaAir引擎默认有两套声音方案分别是H5的Audio和WebAudio。
class SoundManager extends laya.media.SoundManager {}
类别 | 值 |
---|---|
Package | laya.media |
Class | Laya.SoundManager |
Inheritance | SoundManager / Object |
属性 | 描述 |
---|---|
Laya.SoundManager.autoReleaseSound:Boolean = true | 音效播放后是否自动删除 |
Laya.SoundManager.autoStopMusic:Boolean | 失去焦点后是否自动停止播放背景音乐 |
Laya.SoundManager.musicMuted:Boolean | 是否静音背景音乐 |
Laya.SoundManager.musicVolume:Number = 1 | 背景音乐音量 |
Laya.SoundManager.muted:Boolean | 是否静音背景音乐和音效 |
Laya.SoundManager.playbackRate:Number = 1 | 设置声音播放速率 |
Laya.SoundManager.soundMuted:Boolean | 是否静音音效 |
Laya.SoundManager.soundVolume:Number | 设置音效音量 |
Laya.SoundManager.useAudioMusic:Boolean=true | 设置背景音乐使用Audio标签播放 |
方法 | 返回值 | 参数 | 描述 |
---|---|---|---|
Laya.SoundManager.addChannel() | void | channel:SoundChannel | 添加播放的声音实例 |
Laya.SoundManager.removChannel() | void | channel:SoundChannel | 移除播放的声音实例 |
Laya.SoundManager.destroySound() | void | url:string | 释放声音资源 |
Laya.SoundManager.playMusic() | SoundChannel | url:string, loops:number=1, complete=null, startTime=0 | 播放背景音乐 |
Laya.SoundManager.playSound() | SoundChannel | url:string, loops:number=1, complete=null, soundClass=null, startTime=0 | 播放音效 |
Laya.SoundManager.setMusicVolume() | void | volume:number | 设置背景音乐音量 |
Laya.SoundManager.setSoundVolume() | void | volume:number | 设置声音音量 |
Laya.SoundManager.stopAll() | void | - | 停止播放所有音乐与音效 |
Laya.SoundManager.stopAllSound() | void | - | 停止播放所有音效 |
Laya.SoundManager.stopMusic() | void | - | 停止播放背景音乐 |
Laya.SoundManager.stopSound() | void | url:string | 停止声音播放 |
播放音乐
对于音乐可采用 laya.media.SoundManager 音频管理类中的 playMusic() 方法进行播放,由于是背景音乐, playMusic() 方法只能同时播放一个音频文件。
当播放背景音乐时会使用H5的Audio进行播放,使用WebAudio会增加内存且必须等待声音文件加载完毕才能播放存在延迟。
播放音效时优先会使用WebAudio,如果WebAudio不可用则使用H5的Audio播放,但H5的Audio在部分机器上存在兼容文件,另外H5的Audio不能混音且播放有延迟。
/*
* 播放背景音乐。背景音乐同时只能播放一个,如果在播放背景音乐时再次调用本方法,会先停止之前的背景音乐,再播发当前的背景音乐。
* @param url 声音文件地址。
* @param loops 循环次数,0表示无限循环。
* @param complete 声音播放完成回调。
* @param startTime 声音播放起始时间。
* @return SoundChannel对象,通过此对象可以对声音进行控制,以及获取声音信息。
*/
Laya.SoundManager.playMusic(
url:string,
loops?:number,
complete?:laya.utils.Handler,
startTime?:number
):laya.media.SoundChannel;
播放背景音乐
- 背景音乐同时只能播放一个
- 如果在播放背景音乐时再次调用本方法,会先停止之前的背景音乐,再播发当前的背景音乐。
参数 | 类型 | 描述 |
---|---|---|
url | string | 声音文件地址 |
loops? | number | 循环次数 0表示无限循环 |
complete? | laya.utils.Handler | 声音播放完成回调 |
startTime? | number | 声音播放起始时间 |
音乐静音
/** 背景音乐(不包括音效)是否静音。
* 注意1:播放音乐时,改变 musicMuted 为 true,则立即对当前音乐进行静音
* 注意2:静音不代表停止播放
*/
static musicMuted: boolean;
播放音效
对于音效可采用laya.media.SoundManager
音频管理类中的playSound()
方法进行播放,此方法允许同时播放多个音频文件。
/*
* 播放音效。音效可以同时播放多个。
* @param url 声音文件地址。
* @param loops 循环次数,0表示无限循环。
* @param complete 声音播放完成回调 Handler对象。
* @param soundClass 使用哪个声音类进行播放,null表示自动选择。
* @param startTime 声音播放起始时间。
* @return SoundChannel对象,通过此对象可以对声音进行控制,以及获取声音信息。
*/
static playSound(
url:string,
loops?:number,
complete?:laya.utils.Handler,
soundClass?:new () => any,
startTime?:number
):laya.media.SoundChannel;
播放音效时默认情况下如果窗口失去焦点会立即停止播放,当窗口后续再次获得焦点时也不会再继续播放。可使用Laya.SoundManager.autoStopMusic
属性设置失去焦点后是否自动停止播放音乐或音效。
/**失去焦点后是否自动停止背景音乐。默认失去焦点后停止播放
* @param v Boolean 失去焦点后是否自动停止背景音乐。
*/
static autoStopMusic: boolean;
移动端音频文件必须采用.wav
格式才能正常播放,若采用.mp3
格式会没有声音。
音效静音
/**所有音效(不包括背景音乐)是否静音。
* 注意1:播放音效的时候改变 soundMuted 为 true,并不能将当前播放的音效立即静音,它仍会播放直到完毕
* 而其他音效显然是没有声音的.
*/
static soundMuted: boolean;
音量控制
对于音频音量的控制可使用laya.media.SoundManager
音频管理类中的setSoundVolume(volume)
方法来设置,通过设置volume
参数可以有效地控制URL对应声音文件的音量大小,volume
的初始值为1,音量范围从0静音到1最大音量。
/*
* 设置声音音量。根据参数不同,可以分别设置指定声音(背景音乐或音效)音量或者所有音效(不包括背景音乐)音量。
* @param volume 音量。初始值为1。音量范围从 0(静音)至 1(最大音量)。
* @param url (default = null)声音播放地址。默认为null。为空表示设置所有音效(不包括背景音乐)的音量,不为空表示设置指定声音(背景音乐或音效)的音量。
*/
static setSoundVolume(volume:number, url?:string):void;
/*
* 设置背景音乐音量。音量范围从 0(静音)至 1(最大音量)。
* @param volume 音量。初始值为1。音量范围从 0(静音)至 1(最大音量)。
*/
static setMusicVolume(volume:number):void;
对于设备静音控制可通过laya.media.SoundManager
音频管理类中的useAudioMusic
属性来控制,如果需要通过设备静音键让音频自动跟随设备静音,可以将SoundManager.useAudioMusic
属性设置为false
。
static useAudioMusic:boolean;
停止声音
/**停止播放所有声音(包括背景音乐和音效)。
*/
static stopAll(): void;
综合案例
案例:创建舞台并向舞台中添加两个按钮,点击按钮播放音乐和音效。
class Test{
constructor(){
//初始化舞台
this.initStage();
//安装播放按钮
this.createButton();
}
initStage(){
//初始化引擎
const canvas = Laya.init(Laya.Browser.clientWidth, Laya.Browser.clientHeight, Laya.WebGL);
//舞台设置
Laya.stage.alignH = Laya.Stage.ALIGN_CENTER;//设置舞台水平居中
Laya.stage.alignV = Laya.Stage.ALIGN_MIDDLE;//设置舞台垂直居中
Laya.stage.scaleMode = Laya.Stage.SCALE_SHOWALL;//设置舞台缩放模式为显示所有
Laya.stage.bgColor = "#000000";//设置舞台背景颜色为黑色
}
initButton(width=110, height=40, text="播放"){
let sprite = new Laya.Sprite();
sprite.size(width, height);
sprite.graphics.drawRect(0, 0, width, height, "#FF7F50");
sprite.graphics.fillText(text, width/2, 8, "24px SimHei", "#FFFFFF", "center");
return sprite;
}
createButton(){
let btnSound = this.initButton(110, 40, "播放音效");
btnSound.x = (Laya.stage.width - btnSound.width*2 + 10) / 2;
btnSound.y = (Laya.stage.height - btnSound.height) / 2;
Laya.stage.addChild(btnSound);
let btnMusic = this.initButton(110, 40, "播放音乐");
btnMusic.x = btnSound.x + btnSound.width + 10;
btnMusic.y = btnSound.y;
Laya.stage.addChild(btnMusic);
btnSound.on(Laya.Event.CLICK, this, this.onPlaySound);
btnMusic.on(Laya.Event.CLICK, this, this.onPlayMusic);
}
onPlaySound(event){
const url = "./sound/window_open.mp3";
const loops = 1;
Laya.SoundManager.playSound(url, loops, new Laya.Handler(this, this.onCompleteSound));
}
onPlayMusic(event){
const url = "./music/bgm.mp3";
const loops = 1;
Laya.SoundManager.playMusic(url, loops, new Laya.Handler(this, this.onCompleteMusic));
}
onCompleteSound(){
console.log("sound play complete");
}
onCompleteMusic(){
console.log("music play complete");
}
}
new Test();
封装类库
$ vim src/lib/Audio.js
export default class Audio{
//单例设计
static getInstance(){
if(!this._instance){
this._instance = new Audio();
}
return this._instance;
}
//构造器
constructor(){
//公有属性
this._muted = false;//静音所有
this._musicMuted = false;//静音背景音乐
this._soundMuted = false;//静音音效
this._musicVolume = 1;//背景音乐音量
this._soundVolume = 1;//音效音量
//获取初始化声音存储到本地存储
this.init();
//保存数据到本地
this.store();
}
//获取本地存储并设置
init(){
//静音所有
const muted = Laya.LocalStorage.getItem(Audio.MUTED);
this._muted = muted==="true"?true:false;
Laya.SoundManager.muted = this._muted;
//静音背景音乐
const musicMuted = Laya.LocalStorage.getItem(Audio.MUSIC_MUTED);
this._musicMuted = musicMuted==="true"?true:false;
Laya.SoundManager.musicMuted = this._musicMuted;
//静音音效
const soundMuted = Laya.LocalStorage.getItem(Audio.SOUND_MUTED);
this._soundMuted = soundMuted==="true"?true:false;
Laya.SoundManager.soundMuted = this._soundMuted;
//背景音乐音量
const musicVolume = Laya.LocalStorage.getItem(Audio.MUSIC_VOLUME);
this._musicVolume = musicVolume?parseFloat(musicVolume):1;
Laya.SoundManager.musicVolume = this._musicVolume;
//音效音量
const soundVolume = Laya.LocalStorage.getItem(Audio.SOUND_VOLUME);
this._soundVolume = soundVolume?parseFloat(soundVolume):1;
Laya.SoundManager.soundVolume = this._soundVolume;
}
//保存至本地存储
store(){
Laya.LocalStorage.setItem(Audio.MUTED, this.muted);
Laya.LocalStorage.setItem(Audio.MUSIC_MUTED, this.musicMuted);
Laya.LocalStorage.setItem(Audio.SOUND_MUTED, this.soundMuted);
Laya.LocalStorage.setItem(Audio.MUSIC_VOLUME, this.musicVolume);
Laya.LocalStorage.setItem(Audio.SOUND_VOLUME, this.soundVolume);
}
//获取是否静音
get muted(){
return this._muted;
}
//设置是否所有静音
set muted(value){
this._muted = value;
Laya.SoundManager.muted = value;
this.store();
}
//获取背景音乐是否静音
get musicMuted(){
return this._musicMuted;
}
//设置背景音乐是否静音
set musicMuted(value){
this._musicMuted = value;
Laya.SoundManager.musicMuted = value;
this.store();
}
//获取音效是否静音
get soundMuted(){
return this._soundMuted;
}
//设置音效是否静音
set soundMuted(value){
this._soundMuted = value;
Laya.SoundManager.soundMuted = value;
this.store();
}
//获取背景音乐音量
get musicVolume(){
return this._musicVolume;
}
//设置背景音乐音量
set musicVolume(value){
this._musicVolume = value;
Laya.SoundManager.setMusicVolume = value;
this.store();
}
//获取音效音量
get soundVolume(){
return this._soundVolume;
}
//设置音效音量
set soundVolume(value){
this._soundVolume = value;
Laya.SoundManager.setSoundVolume = value;
this.store();
}
//播放背景音乐
playMusic(url, loops=0, complete=null, startTime=0){
Laya.SoundManager.playMusic(url, loops, complete, startTime);
}
//播放音效
playSound(url, loops=0, complete=null, soundClass=null, startTime=0){
Laya.SoundManager.playSound(url, loops, complete, soundClass, startTime);
}
//关闭所有音乐与音效
stopAll(){
Laya.SoundManager.stopAll();
}
//关闭所有背景音乐
stopMusic(){
Laya.SoundManager.stopMusic();
}
//关闭指定音效
stopSound(url){
Laya.SoundManager.stopSound(url);
}
//摧毁指定音效
destroySound(url){
Laya.SoundManager.destroySound(url);
}
//关闭所有音效
stopAllSound(){
Laya.SoundManager.stopAllSound();
}
}
//静态属性:存储本地声音设置的键名
Audio.MUTED = "muted";
Audio.MUSIC_MUTED = "music_muted";
Audio.SOUND_MUTED = "sound_muted";
Audio.MUSIC_VOLUME = "music_volume";
Audio.SOUND_VOLUME = "sound_volume";
外部使用
import Audio from "./libs/Audio";
错误处理
Chrome 77.0.3865.90版本,浏览器控制台报错。
[Violation] Added non-passive event listener to a scroll-blocking 'mousewheel' event. Consider marking event handler as 'passive' to make the page more responsive.
没有添加被动事件监听器来阻止touchstart
事件,请考虑添加事件管理者passive
,以使页面更加流畅。原因是 Chrome51 版本以后,Chrome 增加了新的事件捕获机制-Passive Event Listeners;
Passive Event Listeners:就是告诉前页面内的事件监听器内部是否会调用preventDefault
函数来阻止事件的默认行为,以便浏览器根据这个信息更好地做出决策来优化页面性能。当属性passive
的值为true
的时候,代表该监听器内部不会调用preventDefault
函数来阻止默认滑动行为,Chrome浏览器称这类型的监听器为被动(passive)监听器。目前Chrome主要利用该特性来优化页面的滑动性能,所以Passive Event Listeners特性当前仅支持mousewheel/touch
相关事件。
解决方案:
npm i default-passive-events -S
- js文件中加入
import 'default-passive-events'
The Web Audio autoplay policy will be re-enabled in Chrome 71 (December 2018). Please check that your website is compatible with it.
Chrome PC 端将不支持 Autoplay。该特性与移动端一样,Audio 将不能自动触发。
谷歌浏览器从71版本开始就开启了谷歌的安全策略,因此导致的声音不能自动播放,必须在用户有了操作之后才可以播放音乐,比如可以点击一下后边的https://goo.gl/7K7WLu这个链接,也是可以触发播放音乐的。
The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://goo.gl/7K7WLu
Uncaught TypeError: Cannot read property 'getItem' of undefined
处理方法:浏览器打开chrome://flags/#autoplay-policy;
将Default
换成No user gesture is required
。
解决结果:不起作用,蛋疼,这怎么测,找个旧版本的浏览器吗?
Error in event handler for runtime.onMessage: TypeError: Cannot read property 'join' of undefined
封装 TS
export default class Audio{
//静态常量:浏览器本地缓存键名
public static IS_MUTE = "isMute";//是否静音全部
public static IS_MUTE_MUSIC = "isMuteMusic";//是否静音背景
public static IS_MUTE_SOUND = "isMuteSound";//是否静音音效
public static VOLUME_MUSIC = "volumeMusic";//背景音量
public static VOLUME_SOUND = "volumeSound";//音效音量
//私有属性 静音所有 存取器
private _isMute:boolean;
public get isMute():boolean{
return this._isMute;
}
public set isMute(value:boolean){
this._isMute = value;
Laya.SoundManager.muted = value;
this.save();
}
//私有属性 音乐静音 存取器
private _isMuteMusic:boolean;
public get isMuteMusic():boolean{
return this._isMuteMusic;
}
public set isMuteMusic(value:boolean){
this._isMuteMusic = value;
Laya.SoundManager.musicMuted = value;
this.save();
}
//私有属性 音效静音 存取器
private _isMuteSound:boolean;
public get isMuteSound():boolean{
return this._isMuteSound;
}
public set isMuteSound(value:boolean){
this._isMuteSound = value;
Laya.SoundManager.soundMuted = value;
this.save();
}
//私有属性 音乐音量 存取器
private _volumeMusic:number;
public get volumeMusic():number{
return this._volumeMusic;
}
public set volumeMusic(value:number){
this._volumeMusic = value;
Laya.SoundManager.musicVolume = value;
this.save();
}
//私有属性 音效音量 存取器
private _volumeSound:number;
public get volumeSound():number{
return this._volumeSound;
}
public set volumeSound(value:number){
this._volumeSound = value;
Laya.SoundManager.soundVolume = value;
this.save();
}
//构造函数
/**
* 单例设计
*/
private static _instance:Audio;
public static getInstance():Audio{
if(!this._instance){
this._instance = new Audio();
}
return this._instance;
}
private constructor(){
//初始化属性
this._isMute = false;
this._isMuteMusic = false;
this._isMuteSound = false;
this._volumeMusic = 1;
this._volumeSound = 1;
//初始化数据
this.init();
//保存到浏览器本地存储
this.save();
}
/**
* 从浏览器本地缓存中获取参数,处理后设置声音管理器对应参数。
*/
private init(){
//静音音乐与音效
let isMute = Laya.LocalStorage.getItem(Audio.IS_MUTE);
this._isMute = isMute=="true" ? true : false;
Laya.SoundManager.muted = this._isMute;
//设置音乐静音
let isMuteMusic = Laya.LocalStorage.getItem(Audio.IS_MUTE_MUSIC);
this._isMuteMusic = isMuteMusic=="true" ? true : false;
Laya.SoundManager.musicMuted = this._isMuteMusic;
//设置音效静音
let isMuteSound = Laya.LocalStorage.getItem(Audio.IS_MUTE_SOUND);
this._isMuteSound = isMuteSound=="true" ? true : false;
Laya.SoundManager.soundMuted = this._isMuteSound;
//设置音乐音量
let volumeMusic = Laya.LocalStorage.getItem(Audio.VOLUME_MUSIC);
this._volumeMusic = volumeMusic?parseFloat(volumeMusic):1;
Laya.SoundManager.musicVolume = this._volumeMusic;
//设置音效音量
let volumeSound = Laya.LocalStorage.getItem(Audio.VOLUME_SOUND);
this._volumeSound = volumeSound?parseFloat(volumeSound):1;
Laya.SoundManager.soundVolume = this._volumeSound;
}
/**
* 保存数据到浏览器本地存储
*/
public save(){
Laya.LocalStorage.setItem(Audio.IS_MUTE, this.isMute.toString());
Laya.LocalStorage.setItem(Audio.IS_MUTE_MUSIC, this.isMuteMusic.toString());
Laya.LocalStorage.setItem(Audio.IS_MUTE_SOUND, this.isMuteSound.toString());
Laya.LocalStorage.setItem(Audio.VOLUME_MUSIC, this.volumeMusic.toString());
Laya.LocalStorage.setItem(Audio.IS_MUTE_SOUND, this.isMuteSound.toString());
}
/**
* 设置背景音乐音量
* @param volume {number} 音量大小,范围从0静音到1最大音量。
*/
public setMusicVolume(volume:number):void{
Laya.SoundManager.setMusicVolume(volume);
}
/**
* 设置声音音量
* 根据参数不同可分别设置指定声音音量或所有音效音量
* @param volume {number} 音量大小,初始值为1,范围从0静音到1最大音量。
* @param url {string} 声音播放地址,默认为null, 为空表示设置所有音效的音量。
*/
public setSoundVolume(volume:number, url?:string):void{
Laya.SoundManager.setSoundVolume(volume, url);
}
/**
* 关闭所有音乐
*/
public stopAll(){
Laya.SoundManager.stopAll();
}
/**
* 关闭所有音效
*/
public stopAllSound(){
Laya.SoundManager.stopAllSound();
}
/**
* 关闭所有音乐
*/
public stopMusic(){
Laya.SoundManager.stopMusic();
}
/**
* 关闭所有音乐
* @param url 声音地址
*/
public stopSound(url:string){
Laya.SoundManager.stopSound(url);
}
/**
* 释放声音资源
* @param url 声音地址
*/
public destroySound(url:string){
Laya.SoundManager.destroySound(url);
}
/**
* 播放音效
* 可同时播放多个
* @param url {string} 声音文件地址
* @param loops {number} 循环次数,0表示无限循环。
* @param complete {Handler} 播放完回调Handler对象
* @param soundClass {Object} 使用哪个类进行播放,null表示自动选择。
* @param startTime {number} 播放的起始时间
* @return SoundChannel 声音频道对象,可对声音进行控制并获取声音信息。
*/
public playSound(url:string, loops:number=1, complete=null, soundClass=null, startTime=0){
Laya.SoundManager.playSound(url, loops, complete, soundClass, startTime);
}
/**
* 播放音乐
* 同时只能播放一个,若在播放播放背景音乐时再次调用则会先停止之前的背景音乐后再播放当前音乐。
* @param url {string} 声音文件地址
* @param loops {number} 循环次数,0表示无限循环。
* @param complete {Handler} 播放完成后回调函数
* @param startTime {number} 播放的开始时间
* @return SoundChannel 声音频道对象,可对声音进行控制并获取声音信息。
*/
public playMusic(url:string, loops:number=1, complete=null, startTime=0){
Laya.SoundManager.playMusic(url, loops, complete, startTime);
}
/**
* 移除播放的声音实例
* @param channel SoundChannel 声音实例
*/
public removeChannel(channel):void{
Laya.SoundManager.removeChannel(channel);
}
/**
* 添加播放的声音实例
* @param channel {SoundChannel} 声音实例
*/
public addChannel(channel):void{
Laya.SoundManager.addChannel(channel);
}
}