Skip to content

Latest commit

 

History

History
72 lines (64 loc) · 4.21 KB

AudioOptimization.md

File metadata and controls

72 lines (64 loc) · 4.21 KB

音频优化

由于导出成WEBGL的游戏,音频处理上存在一定的性能损耗,建议直接调用SDK中的音频API直接控制播放,能达到不错效果。

API使用

长音频的使用

代码如下,可参考微信开发者文档,其中src为音频地址,可填本地路径如 Assets/xx.wav,运行时会自动和配置的音频地址前缀做拼接得到最终线上地址。注意长音频使用时,音频对象是不还被缓存的,需要直接缓存音频对象(就是WX.CreateInnerAudioContext的对象需要自己缓存),不然每次都会重新加载。

  • 使用方法一:

为了减少用户等待时间和避免音频延迟, 对于重要的音频可以等待onCanplay事件之后再调用Play播放。onCanplay事件是表示,当前音频已经可以播了,可以直接掉用Play,不会有延迟。而对于没那么重要的音频,允许部分延迟的,可以不等待onCanplay事件,而直接调用Play方法,这样音频就会边加载边播放,效果取决于用户网络,可能会稍微有点延迟。如果希望等音频全部加载了再播放,以及便于后续复用,避免后续延迟的话,可以在初始化是加上needDownload = true,

       // 第一次使用     
            var music = WX.CreateInnerAudioContext(new InnerAudioContextParam()
            {
                src = "Audio/0.wav",
                needDownload = true
            });
            music.OnCanplay(() =>
            {
                music.Play();
            });
            
        // 后续需要需要同时创建多个音频实例时,可以直接Play
                var music2 = WX.CreateInnerAudioContext(new InnerAudioContextParam()
                {
                    src = "Audio/0.wav"
                });
                music2.Play();    
  • 使用方法二: 如果想直接将用到的音频先完全下载避免延迟,用到的时候直接使用,则可以如下调用:
            string[] a = { "Assets/Audio/0.wav", "Assets/Audio/1.wav" }; //需要预下载列表
            WX.PreDownloadAudios(a, (int res) =>
            {
                //下载完成后回调
                Debug.Log("Downloaded" + res);
                if (res == 0)
                {
                    //可以直接调用,无网络延迟
                    var music0 = WX.CreateInnerAudioContext(new InnerAudioContextParam()
                    {
                        src = "Audio/0.wav"
                    });
                    music0.Play();

                    var music1 = WX.CreateInnerAudioContext(new InnerAudioContextParam()
                    {
                        src = "Audio/1.wav"
                    });
                    music1.Play();
                }
            });

注意 WX.CreateInnerAudioContext 返回的音频对象是可以复用的,就是可以多次调用Play方法播放,但是如果需要多个音频同时播放就要创建多个音频对象了。

短音频的使用

类似于Unity开发者喜欢更改AudioClip的方式来播放短音频,这里可以使用WX.ShortAudioPlayer来播放音频。音频对象会自动被缓存下来。便于后续播放`。(如果这里的方法不适合你的需求,那你还是可以按照长音频的方式来播放短音频。)可以参考如下代码:

// 这里是播放前预先加载Assets/music目录下的两个音频,来避免后续播放的音频播放延迟
WX.ShortAudioPlayer.PreLoadAudio(new string[] { "music/LowCrash.wav", "music/Brake2.wav" });

// 在需要播放的适合调用,不要暂停其他短音频,这里会自动停掉其他短音频,只播放这个端音频
WX.ShortAudioPlayer.StopOthersAndPlay("music/Brake2.wav", 1.0f,false);

导出设置

勾选使用微信音频API,并填上"Assets目录对应CDN地址",比如填写的地址为https://wx.qq.com/data/Assets/ ,而API的src地址为 Audio/Chill_1.wav,则最终会请求 https://wx.qq.com/data/Assets/Audio/Chill_1.wav

将音频文件上传CDN

游戏内的音频会被导出到导出目录的Assets文件夹下,需要将其上传至您的CDN,保证用户能访问到

avatar