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

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

fix: 示例
...@@ -8,7 +8,7 @@ public class AudioManager : MonoBehaviour ...@@ -8,7 +8,7 @@ public class AudioManager : MonoBehaviour
// cdn路径音频最多支持10个同时在线播放,先下载后的音频(needDownload)最多支持32个同时播放,先初始化10个 // cdn路径音频最多支持10个同时在线播放,先下载后的音频(needDownload)最多支持32个同时播放,先初始化10个
//private static int DEFAULT_AUDIO_COUNT = 10; //private static int DEFAULT_AUDIO_COUNT = 10;
// 创建音频队列 // 创建音频对象池,复用对象
private static Queue<WXInnerAudioContext> audioPool = new Queue<WXInnerAudioContext>(); private static Queue<WXInnerAudioContext> audioPool = new Queue<WXInnerAudioContext>();
// 当前场景需要预下载的音频列表 // 当前场景需要预下载的音频列表
...@@ -51,6 +51,7 @@ public class AudioManager : MonoBehaviour ...@@ -51,6 +51,7 @@ public class AudioManager : MonoBehaviour
} }
// 从缓存池中获取音频实例 // 从缓存池中获取音频实例
// 注意:发现一些偶现的bug,目前不推荐使用!!
private WXInnerAudioContext getAudio() private WXInnerAudioContext getAudio()
{ {
if (this.isDestroyed) if (this.isDestroyed)
...@@ -66,7 +67,28 @@ public class AudioManager : MonoBehaviour ...@@ -66,7 +67,28 @@ public class AudioManager : MonoBehaviour
var audio = audioPool.Dequeue(); var audio = audioPool.Dequeue();
audio.needDownload = true; 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; return audio;
} }
...@@ -81,7 +103,11 @@ public class AudioManager : MonoBehaviour ...@@ -81,7 +103,11 @@ public class AudioManager : MonoBehaviour
} }
if (needDestroy) if (needDestroy)
{ {
audio.Destroy(); if (WXInnerAudioContext.Dict.ContainsValue(audio))
{
audio.Destroy();
createdAudioCount -= 1;
}
} }
else else
{ {
...@@ -92,7 +118,7 @@ public class AudioManager : MonoBehaviour ...@@ -92,7 +118,7 @@ public class AudioManager : MonoBehaviour
} }
Debug.Log("___________________"); Debug.Log("___________________");
Debug.Log("已创建InnerAudio" + createdAudioCount + " 对象池:" + audioPool.Count + " 正在播放:" + audioPlayArray.Count); Debug.Log("已创建InnerAudio:" + createdAudioCount + " 对象池:" + audioPool.Count + " 正在播放:" + audioPlayArray.Count);
Debug.Log("___________________"); Debug.Log("___________________");
} }
...@@ -174,7 +200,7 @@ public class AudioManager : MonoBehaviour ...@@ -174,7 +200,7 @@ public class AudioManager : MonoBehaviour
// 播放音频 // 播放音频
public void playAfterDownload(int index, bool isShort) public void playAfterDownload(int index, bool isShort)
{ {
var audioIndex = getAudio(); var audioIndex = createAudio();
if (audioIndex == null) if (audioIndex == null)
{ {
...@@ -214,7 +240,7 @@ public class AudioManager : MonoBehaviour ...@@ -214,7 +240,7 @@ public class AudioManager : MonoBehaviour
{ {
// 如果是需要在当前场景立刻播放的音频,则不设置needDownload,音频会边下边播 // 如果是需要在当前场景立刻播放的音频,则不设置needDownload,音频会边下边播
// 但是再次使用该音频时会因为没有下载而需要再次下载,并不推荐这样使用 // 但是再次使用该音频时会因为没有下载而需要再次下载,并不推荐这样使用
var audioPlayRightNow = getAudio(); var audioPlayRightNow = createAudio();
audioPlayRightNow.needDownload = false; audioPlayRightNow.needDownload = false;
...@@ -296,11 +322,10 @@ public class AudioManager : MonoBehaviour ...@@ -296,11 +322,10 @@ public class AudioManager : MonoBehaviour
if (audioBGM != null) if (audioBGM != null)
{ {
audioBGM.Stop(); removeAudio(audioBGM, true);
} }
// 长音频在使用后需要销毁 // 长音频在使用后需要销毁
audioBGM = addAudio(true); audioBGM = createAudio();
audioPlayArray.Add(audioBGM);
audioBGM.src = audioList[index]; audioBGM.src = audioList[index];
audioBGM.OnCanplay(() => audioBGM.OnCanplay(() =>
{ {
......
...@@ -64,7 +64,8 @@ audio.Stop(); ...@@ -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) [音频示例](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.
先完成此消息的编辑!
想要评论请 注册