未验证 提交 4bcfdb27 编写于 作者: ocean2o11's avatar ocean2o11 提交者: GitHub

Merge pull request #221 from wechat-miniprogram/fix/audio

fix: 示例
......@@ -8,7 +8,7 @@ public class AudioManager : MonoBehaviour
// cdn路径音频最多支持10个同时在线播放,先下载后的音频(needDownload)最多支持32个同时播放,先初始化10个
//private static int DEFAULT_AUDIO_COUNT = 10;
// 创建音频队列
// 创建音频对象池,复用对象
private static Queue<WXInnerAudioContext> audioPool = new Queue<WXInnerAudioContext>();
// 当前场景需要预下载的音频列表
......@@ -51,6 +51,7 @@ public class AudioManager : MonoBehaviour
}
// 从缓存池中获取音频实例
// 注意:发现一些偶现的bug,目前不推荐使用!!
private WXInnerAudioContext getAudio()
{
if (this.isDestroyed)
......@@ -66,7 +67,28 @@ public class AudioManager : MonoBehaviour
var audio = audioPool.Dequeue();
audio.needDownload = true;
audioPlayArray.Add(audio);
if (!audioPlayArray.Contains(audio))
{
audioPlayArray.Add(audio);
}
return audio;
}
// 从缓存池中获取音频实例
private WXInnerAudioContext createAudio()
{
if (this.isDestroyed)
{
return null;
}
var audio = addAudio(true);
if (!audioPlayArray.Contains(audio))
{
audioPlayArray.Add(audio);
}
return audio;
}
......@@ -81,7 +103,11 @@ public class AudioManager : MonoBehaviour
}
if (needDestroy)
{
audio.Destroy();
if (WXInnerAudioContext.Dict.ContainsValue(audio))
{
audio.Destroy();
createdAudioCount -= 1;
}
}
else
{
......@@ -92,7 +118,7 @@ public class AudioManager : MonoBehaviour
}
Debug.Log("___________________");
Debug.Log("已创建InnerAudio" + createdAudioCount + " 对象池:" + audioPool.Count + " 正在播放:" + audioPlayArray.Count);
Debug.Log("已创建InnerAudio:" + createdAudioCount + " 对象池:" + audioPool.Count + " 正在播放:" + audioPlayArray.Count);
Debug.Log("___________________");
}
......@@ -174,7 +200,7 @@ public class AudioManager : MonoBehaviour
// 播放音频
public void playAfterDownload(int index, bool isShort)
{
var audioIndex = getAudio();
var audioIndex = createAudio();
if (audioIndex == null)
{
......@@ -214,7 +240,7 @@ public class AudioManager : MonoBehaviour
{
// 如果是需要在当前场景立刻播放的音频,则不设置needDownload,音频会边下边播
// 但是再次使用该音频时会因为没有下载而需要再次下载,并不推荐这样使用
var audioPlayRightNow = getAudio();
var audioPlayRightNow = createAudio();
audioPlayRightNow.needDownload = false;
......@@ -296,11 +322,10 @@ public class AudioManager : MonoBehaviour
if (audioBGM != null)
{
audioBGM.Stop();
removeAudio(audioBGM, true);
}
// 长音频在使用后需要销毁
audioBGM = addAudio(true);
audioPlayArray.Add(audioBGM);
audioBGM = createAudio();
audioBGM.src = audioList[index];
audioBGM.OnCanplay(() =>
{
......
......@@ -64,7 +64,8 @@ audio.Stop();
## 参考示例
InnerAudioContext 实例最多同时存在 32 个,如果播放的不是本地文件而是 cdn 地址,则最多只支持 10 个,因此建议使用 needDownload 先下载,可以参考以下示例使用:
InnerAudioContext 实例最多同时存在 32 个,如果播放的不是本地文件而是 cdn 地址,则最多只支持 10 个,因此建议使用 needDownload 先下载
在播放完成之后需要销毁音频,再重新创建,可以参考以下示例使用:
[音频示例](https://github.com/wechat-miniprogram/minigame-unity-webgl-transform/blob/main/Demo/API/Assets/Scripts/AudioManager.cs)
## 示例补充说明
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册