• 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格式,音效使用mp3wav格式,如果打包为APP则音效只能使用wav格式。

LayaAir引擎封装可WebAudioAudio,在支持WebAudio的浏览器上优先会使用WebAudio,在不支持WebAudio的浏览器上会使用Audio,以最大化兼容所有浏览器对音频格式的支持,让开发者更加方便地通过调用laya.media.SoundManagerAPI接口来直接播放音频。

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相关事件。

解决方案:

  1. npm i default-passive-events -S
  2. 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);}
}

Laya Sound相关推荐

  1. 稻盛和夫 泥泞的路_计算的未来可能是泥泞的

    稻盛和夫 泥泞的路 煤泥的美好生活 (The wonderful life of slime) Let me introduce you to slime molds: a group - actua ...

  2. laya.html.dom,Laya Note

    搭建Http服务器 $ npm i -g http-server $ http-server ./ TypeError: Laya.Templet is not a constructor laya. ...

  3. Laya Loader

    资源加载是指游戏进入时都会有一个给资源载入界面,载入界面中用到的资源最好是放在游戏包中,进行首次加载.首次加载完会加载游戏所需的大部分资源,加载的资源可能是在本地,也可能从网络中下载,这里一般需要一个 ...

  4. vue里面嵌入sound music音乐播放

    如果只是单纯想要加一个可以循环播放不受控制的背景音乐 <!--sound--> <!-- 音效 --> <audio id="SGsound" src ...

  5. A simple class to play sound on netcf (part 2)

    在实际测试中发现上一片文章(A simple class to play sound on netcf)中介绍的播放声音的类在pda中运行正常,但却无法在pc中工作,简单分析了一下原因,发现是dll的 ...

  6. 算法的sound和complete

    stackoverflow的答案 Soundness and Completeness of a algorithm stackexchange的答案 What does it mean to say ...

  7. sound.js # pixi辅助插件 — 中文翻译教程

    本篇博客为中文翻译博客,转载请注明出处 sound.js-pixi的交互性插件[版本3.0.11] 安装配置 加载声音文件 初始化加载的声音 播放和控制加载的声音 更改回放速率 添加回声 添加混响 产 ...

  8. Sound Forge Pro 3使用教程

    如何叠加两个音频?可以试试这款Sound Forge Pro 3 for Mac是一款专业的录制,编辑,处理和母版制作工具,凭借24位/ 192kHz的记录能力,可以使您获得惊人的音频清晰度.世界各地 ...

  9. laya zip更新方案

    1.将要打包的的资源和layaairfiles.txt文件一起打成zip. 2.预加载阶段,先将zip包通过downfile下载并解压到缓存目录. 3.设置baseurl,开始预加载所有资源. 4.下 ...

最新文章

  1. 软件测试2019:第四次作业—— 性能测试(含JMeter实验)
  2. 如何提升大规模Transformer的训练效果?Primer给出答案
  3. Spark下的word2vec模型训练
  4. 傅里叶变换 【完整版】
  5. 大数据从业10年,从一个BI项目的失败,看到数据治理的重要性
  6. java对象数组排序的一种方式
  7. element中根据条件判断按钮是否禁用_从零动手封装一个通用的vue按钮组件
  8. python输入n×n的矩阵_Python使用shape计算矩阵的行和列
  9. JSP中使用的模式——JSP+Servlet+JavaBean
  10. er图转为数据流程图_数据流程图与er图.doc
  11. 解读SOA平台---概念分析
  12. 【观察】华为云:决胜拉美市场“正当时”,做出海企业的“好帮手”
  13. 函数的原函数,可积性和变上限积分之间的区别和联系
  14. 算法题6 b站扭蛋机
  15. L2TP 配置 实践出配置
  16. linux安装Openssl步骤详解_问题:OpenSSL: error:100AE081:elliptic curve routines:EC_GROUP_new_by_curve_name:un
  17. Python学习 Day26 JS循环语句(二)
  18. 元宇宙项目的新黑马ComputeCoin(CCN)
  19. php去除空格特殊字符,PHP中ltrim与rtrim去除左右空格及特殊字符实例
  20. Qt QImage 加载 BMP 图像的一个BUG

热门文章

  1. WebTrust是什么?WebTrust认证的CA有哪些?
  2. java解析通讯录xml_企业微信通讯录回调 成员回调 (新增成员和编辑成员)xml解析错误...
  3. html中input文本框的内容不符合要求时的错误提示
  4. 前端面试每日一练小题1
  5. 成绩管理系统(链表)c语言
  6. 视觉识别算法的延伸思考 ---- 如何更好的加深对视觉识别算法的理解
  7. ES6规范前后块级作用域与函数声明的缠缠绵绵
  8. excel相同数据合并
  9. 全概率公式、贝叶斯公式推导过程
  10. 深入探索Java反射机制:解析原理与应用