提交 f04297b4 编写于 作者: U uhu

feat: 优化示例,返回时停止音频播放

上级 4540789f
...@@ -1199,18 +1199,6 @@ MonoBehaviour: ...@@ -1199,18 +1199,6 @@ MonoBehaviour:
m_StringArgument: m_StringArgument:
m_BoolArgument: 0 m_BoolArgument: 0
m_CallState: 2 m_CallState: 2
- m_Target: {fileID: 2105647632}
m_TargetAssemblyTypeName: AudioManager, Assembly-CSharp
m_MethodName: stopAllAudio
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
--- !u!114 &1439564064 --- !u!114 &1439564064
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
......
...@@ -9,10 +9,10 @@ public class AudioManager : MonoBehaviour ...@@ -9,10 +9,10 @@ public class AudioManager : MonoBehaviour
private static int DEFAULT_AUDIO_COUNT = 10; private static int DEFAULT_AUDIO_COUNT = 10;
// 创建音频队列 // 创建音频队列
private Queue<WXInnerAudioContext> audioPool = new Queue<WXInnerAudioContext>(); private static Queue<WXInnerAudioContext> audioPool = new Queue<WXInnerAudioContext>();
// 当前场景需要预下载的音频列表 // 当前场景需要预下载的音频列表
private string[] audioList = { private static string[] audioList = {
"https://res.wx.qq.com/wechatgame/product/webpack/userupload/20220901/211827/CallMeTeenTop.mp3", "https://res.wx.qq.com/wechatgame/product/webpack/userupload/20220901/211827/CallMeTeenTop.mp3",
"https://res.wx.qq.com/wechatgame/product/webpack/userupload/20220815/105451/1.mp3", "https://res.wx.qq.com/wechatgame/product/webpack/userupload/20220815/105451/1.mp3",
"https://res.wx.qq.com/wechatgame/product/webpack/userupload/20220901/211846/Night-n.mp3", "https://res.wx.qq.com/wechatgame/product/webpack/userupload/20220901/211846/Night-n.mp3",
...@@ -21,7 +21,9 @@ public class AudioManager : MonoBehaviour ...@@ -21,7 +21,9 @@ public class AudioManager : MonoBehaviour
}; };
// 正在播放的音频对象列表 // 正在播放的音频对象列表
private List<WXInnerAudioContext> audioPlayArray = new List<WXInnerAudioContext>(); private static List<WXInnerAudioContext> audioPlayArray = new List<WXInnerAudioContext>();
private bool isDestroyed = false;
// 初始化 // 初始化
public void Start() public void Start()
...@@ -44,6 +46,10 @@ public class AudioManager : MonoBehaviour ...@@ -44,6 +46,10 @@ public class AudioManager : MonoBehaviour
private WXInnerAudioContext getAudio() private WXInnerAudioContext getAudio()
{ {
if (this.isDestroyed) {
return null;
}
if (audioPool.Count == 0) if (audioPool.Count == 0)
{ {
addAudio(); addAudio();
...@@ -116,6 +122,10 @@ public class AudioManager : MonoBehaviour ...@@ -116,6 +122,10 @@ public class AudioManager : MonoBehaviour
{ {
var audioIndex = getAudio(); var audioIndex = getAudio();
if (audioIndex == null) {
return;
}
// 如果没有下文修改needDownload为false的函数,理论上创建的所有音频都是true,可以省去这一条 // 如果没有下文修改needDownload为false的函数,理论上创建的所有音频都是true,可以省去这一条
audioIndex.needDownload = true; audioIndex.needDownload = true;
...@@ -137,6 +147,10 @@ public class AudioManager : MonoBehaviour ...@@ -137,6 +147,10 @@ public class AudioManager : MonoBehaviour
// 但是再次使用该音频时会因为没有下载而需要再次下载,并不推荐这样使用 // 但是再次使用该音频时会因为没有下载而需要再次下载,并不推荐这样使用
var audioPlayRightNow = getAudio(); var audioPlayRightNow = getAudio();
if (audioPlayRightNow == null) {
return;
}
// 修改src会触发下载,所以设置needDownload属性要在修改src之前 // 修改src会触发下载,所以设置needDownload属性要在修改src之前
audioPlayRightNow.needDownload = false; audioPlayRightNow.needDownload = false;
...@@ -152,7 +166,10 @@ public class AudioManager : MonoBehaviour ...@@ -152,7 +166,10 @@ public class AudioManager : MonoBehaviour
public void stopAllAudio() public void stopAllAudio()
{ {
audioPlayArray.ForEach(audio => audio.Stop()); audioPlayArray.ForEach(audio => {
audio.OffCanplay();
audio.Stop();
});
} }
public void playRandom() public void playRandom()
...@@ -163,4 +180,10 @@ public class AudioManager : MonoBehaviour ...@@ -163,4 +180,10 @@ public class AudioManager : MonoBehaviour
playRightNow(index); playRightNow(index);
} }
private void OnDestroy()
{
this.isDestroyed = true;
this.stopAllAudio();
}
} }
\ No newline at end of file
...@@ -13,9 +13,6 @@ ...@@ -13,9 +13,6 @@
参考[微信开发者文档](https://developers.weixin.qq.com/minigame/dev/api/media/audio/InnerAudioContext.html) 参考[微信开发者文档](https://developers.weixin.qq.com/minigame/dev/api/media/audio/InnerAudioContext.html)
其中src为音频地址,可填本地路径如 xx.wav,运行时会自动和配置的音频地址前缀(默认为DATA_CDN/Assets)做拼接得到最终线上地址。 其中src为音频地址,可填本地路径如 xx.wav,运行时会自动和配置的音频地址前缀(默认为DATA_CDN/Assets)做拼接得到最终线上地址。
* 使用方法一:
```c# ```c#
// 使用方法一:创建音频对象可以在初始化是加上needDownload = true,音频会先下载到本地,然后再播放 // 使用方法一:创建音频对象可以在初始化是加上needDownload = true,音频会先下载到本地,然后再播放
// 保存本地后,同样的路径不会重复下载,再次使用时无需下载 // 保存本地后,同样的路径不会重复下载,再次使用时无需下载
...@@ -59,6 +56,10 @@ WX.PreDownloadAudios(a, (int res) => ...@@ -59,6 +56,10 @@ WX.PreDownloadAudios(a, (int res) =>
}); });
} }
}); });
// 停止音频播放
audio.OffCanplay();
audio.Stop();
``` ```
## 参考示例 ## 参考示例
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册