使用音频
HTML5的音频播放,在当前有两种主流的方式,一种是Audio标签播放,另一种是WebAudio二进制播放。
Audio属于dom元素,带有ui界面,在移动端Audio属于边下载边播放,适合声音文件比较大的文件,但是Audio在移动端会有手势的限制,gesture-requirement-for-media-playback属性表明必须有用户的手势操作才可以播放。
WebAudio是一种新的声音播放形式,可以加载多个声音进行合成,他是通过二进制文件解码成浏览器支持的格式进行播放。而且用这个接口甚至可以实现音频谱的动画效果,让声音有了合成的功能。
音乐与音效作为游戏中常用的基础元素,LayaAir引擎封装了WebAudio与Audio,在支持WebAudio的浏览器上,优先使用WebAudio,在不支持WebAudio的浏览器上使用Audio,最大化兼容所有浏览器对音频格式的支持,让开发者可以更加方便的,通过调用laya.media.SoundManager API接口就可以直接播放音频。
一、音乐与音效的应用区别
Section titled “一、音乐与音效的应用区别” 音乐:是指游戏用的背景音乐。采用laya.media.SoundManager音频管理类中的playMusic方法进行播放,由于是背景音乐,playMusic方法只能同时播放一个音频文件。
音效:采用的是laya.media.SoundManager音频管理类中的playSound方法,允许同时播放多个音频文件。
二、音频的兼容性准备
Section titled “二、音频的兼容性准备” 由于音频播放问题的各个浏览器兼容性不同,在开始应用前,我们要做好前期的兼容准备。
(1)使用“格式工厂”音频文件转换工具。选择 44100Hz,96kbps 进行转换。
(2)音频文件尽量小,不仅仅是带宽的限制,还有浏览器音频解码的效率问题。
三、音频音量的控制
Section titled “三、音频音量的控制” 声音音量的控制,可以通过laya.media.SoundManager音频管理类中的setSoundVolume方法来设置:
/** * 设置声音音量。根据参数不同,可以分别设置指定声音(背景音乐或音效)音量或者所有音效(不包括背景音乐)音量。 * @param volume 音量。初始值为1。音量范围从 0(静音)至 1(最大音量)。 * @param url (default = null)声音播放地址。默认为null。为空表示设置所有音效(不包括背景音乐)的音量,不为空表示设置指定声音(背景音乐或音效)的音量。 */ static setSoundVolume(volume: number, url?: string): void { if (url) { let channel = this.findChannel(url); if (channel) channel.volume = volume; } else { this.soundVolume = volume; } } 通过设置volume参数,可以有效控制url所对应声音文件的音量大小。初始值为1。音量范围从 0(静音)至 1(最大音量)。
四、设备静音控制
Section titled “四、设备静音控制”如果通过设备静音键让音频自动跟随设备静音。需要将useAudioMusic设置为false。
Laya.SoundManager.useAudioMusic = false;五、失去焦点的处理
Section titled “五、失去焦点的处理”如果不是手机全屏游戏,或者在浏览器里交互。有可能会导致切出游戏后,失去焦点,而失去焦点后,音频也会停止播放,这是浏览器机制导致,开发者有两种方式,来避免。
一种是在入口文件中,将autoStopMusic设置为false。
……//失去焦点后是否自动停止背景音乐。false不自动停止,一直播。true是自动停止Laya.SoundManager.autoStopMusic = false;……如果不设置这个,当失去焦点停止的时候。需要开发者要自行在失去焦点和恢复的时候,通过侦听失去stage焦点和获得stage焦点进行控制,(在小游戏平台,也要看各小游戏的平台切出规则),浏览器中恢复的参考代码如下:
……//循环播放_sound_sound.play(0);
//失去舞台焦点(切出游戏)的处理Laya.stage.on(Laya.Event.BLUR, this, () => { _sound.stop();});//获得舞台焦点(切回游戏)的处理Laya.stage.on(Laya.Event.FOCUS, this, () => { _sound.play(0);});……