| 
									
										
										
										
											2022-08-01 03:47:37 +00:00
										 |  |  |  | using UnityEngine; | 
					
						
							|  |  |  |  | using System.Collections; | 
					
						
							|  |  |  |  | using System.Runtime.InteropServices; | 
					
						
							|  |  |  |  | using System.Collections.Generic; | 
					
						
							|  |  |  |  | using System; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | namespace WeChatWASM | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |     /// <summary> | 
					
						
							|  |  |  |  |     /// 音频类,详见 https://developers.weixin.qq.com/minigame/dev/api/media/audio/InnerAudioContext.html | 
					
						
							|  |  |  |  |     /// </summary> | 
					
						
							|  |  |  |  |     public class WXInnerAudioContext | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public Hashtable ht = new Hashtable(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         #region C#调用JS桥接方法 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL | 
					
						
							|  |  |  |  |         [DllImport("__Internal")] | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  |         private static extern void WXInnerAudioContextSetBool(string id,string key, bool value); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL | 
					
						
							|  |  |  |  |         [DllImport("__Internal")] | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  |         private static extern void WXInnerAudioContextSetString(string id,string key, string value); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL | 
					
						
							|  |  |  |  |         [DllImport("__Internal")] | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  |         private static extern void WXInnerAudioContextSetFloat(string id,string key, float value); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL | 
					
						
							|  |  |  |  |         [DllImport("__Internal")] | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  |         private static extern float WXInnerAudioContextGetFloat(string id, string key); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL | 
					
						
							|  |  |  |  |         [DllImport("__Internal")] | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  |         private static extern bool WXInnerAudioContextGetBool(string id, string key); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL | 
					
						
							|  |  |  |  |         [DllImport("__Internal")] | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  |         private static extern void WXInnerAudioContextPlay(string id); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL | 
					
						
							|  |  |  |  |         [DllImport("__Internal")] | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  |         private static extern void WXInnerAudioContextPause(string id); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL | 
					
						
							|  |  |  |  |         [DllImport("__Internal")] | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  |         private static extern void WXInnerAudioContextStop(string id); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL | 
					
						
							|  |  |  |  |         [DllImport("__Internal")] | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  |         private static extern void WXInnerAudioContextSeek(string id, float position); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL | 
					
						
							|  |  |  |  |         [DllImport("__Internal")] | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  |         private static extern void WXInnerAudioContextDestroy(string id); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL | 
					
						
							|  |  |  |  |         [DllImport("__Internal")] | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  |         private static extern void WXInnerAudioContextAddListener(string id, string key); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL | 
					
						
							|  |  |  |  |         [DllImport("__Internal")] | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  |         private static extern void WXInnerAudioContextRemoveListener(string id, string key); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         #endregion | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         private bool _autoplay = false; | 
					
						
							|  |  |  |  |         private bool _loop = false; | 
					
						
							|  |  |  |  |         private string _src = ""; | 
					
						
							|  |  |  |  |         private float _startTime = 0; | 
					
						
							|  |  |  |  |         private float _volume = 1; | 
					
						
							|  |  |  |  |         private float _oldVolume = 1; | 
					
						
							|  |  |  |  |         private float _playbackRate = 1; | 
					
						
							|  |  |  |  |         private bool _isPlaying = false; | 
					
						
							|  |  |  |  |         private bool isWaiting = false; | 
					
						
							|  |  |  |  |         private bool isWaitingPlay = false; | 
					
						
							|  |  |  |  |         private bool isWaitingStop = false; | 
					
						
							|  |  |  |  |         private bool isWaitingPause = false; | 
					
						
							|  |  |  |  |         private Action _onCanplay; | 
					
						
							|  |  |  |  |         private Action _onPlay; | 
					
						
							|  |  |  |  |         private Action _onPause; | 
					
						
							|  |  |  |  |         private Action _onStop; | 
					
						
							|  |  |  |  |         private Action _onEnded; | 
					
						
							|  |  |  |  |         private Action _onTimeUpdate; | 
					
						
							|  |  |  |  |         private Action _onError; | 
					
						
							|  |  |  |  |         private Action _onWaiting; | 
					
						
							|  |  |  |  |         private Action _onSeeking; | 
					
						
							|  |  |  |  |         private Action _onSeeked; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_WEBGL && !UNITY_EDITOR | 
					
						
							|  |  |  |  |         private static readonly bool isWebGLPlayer = true; | 
					
						
							|  |  |  |  | #else | 
					
						
							|  |  |  |  |         private static readonly bool isWebGLPlayer = false; | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public static Dictionary<string, WXInnerAudioContext> Dict = new Dictionary<string, WXInnerAudioContext>(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public string instanceId; | 
					
						
							|  |  |  |  |         public WXInnerAudioContext(string id, InnerAudioContextParam param) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             instanceId = id; | 
					
						
							|  |  |  |  |             _src = param.src; | 
					
						
							|  |  |  |  |             _autoplay = param.autoplay; | 
					
						
							|  |  |  |  |             _startTime = param.startTime; | 
					
						
							|  |  |  |  |             _volume = param.volume; | 
					
						
							|  |  |  |  |             _oldVolume = _volume; | 
					
						
							|  |  |  |  |             _loop = param.loop; | 
					
						
							|  |  |  |  |             _playbackRate = param.playbackRate; | 
					
						
							|  |  |  |  |             Dict.Add(id, this); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             OnPlay(()=> { | 
					
						
							|  |  |  |  |                 _isPlaying = true; | 
					
						
							|  |  |  |  |             }); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             OnEnded(()=> { | 
					
						
							|  |  |  |  |                 _isPlaying = false; | 
					
						
							|  |  |  |  |             }); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             OnPause(()=> { | 
					
						
							|  |  |  |  |                 _isPlaying = false; | 
					
						
							|  |  |  |  |             }); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             OnStop(()=> { | 
					
						
							|  |  |  |  |                 _isPlaying = false; | 
					
						
							|  |  |  |  |             }); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #if UNITY_EDITOR | 
					
						
							|  |  |  |  |             _isPlaying = autoplay; | 
					
						
							|  |  |  |  | #endif | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 内部函数,请不要调用 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="key"></param> | 
					
						
							|  |  |  |  |         public void _HandleCallBack(string key) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             switch (key){ | 
					
						
							|  |  |  |  |                 case "onCanplay": | 
					
						
							|  |  |  |  |                     _onCanplay?.Invoke(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case "onPlay": | 
					
						
							|  |  |  |  |                     _onPlay?.Invoke(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case "onPause": | 
					
						
							|  |  |  |  |                     _onPause?.Invoke(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case "onStop": | 
					
						
							|  |  |  |  |                     _onStop?.Invoke(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case "onEnded": | 
					
						
							|  |  |  |  |                     _onEnded?.Invoke(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case "onTimeUpdate": | 
					
						
							|  |  |  |  |                     _onTimeUpdate?.Invoke(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case "onError": | 
					
						
							|  |  |  |  |                     _onError?.Invoke(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case "onWaiting": | 
					
						
							|  |  |  |  |                     _onWaiting?.Invoke(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case "onSeeking": | 
					
						
							|  |  |  |  |                     _onSeeking?.Invoke(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |                 case "onSeeked": | 
					
						
							|  |  |  |  |                     _onSeeked?.Invoke(); | 
					
						
							|  |  |  |  |                     break; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 是否自动开始播放,默认为 false | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public bool autoplay | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             get | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 return _autoplay; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             set | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (!isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     ht["autoplay"] = value; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 else { | 
					
						
							|  |  |  |  |                     WXInnerAudioContextSetBool(instanceId, "autoplay", value); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |                 _autoplay = value; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 音频资源的地址,用于直接播放。可以设置为网络地址,或者unity中的本地路径如 Assets/xx.wav,运行时会自动和配置的音频地址前缀做拼接得到最终线上地址 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public string src | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             get | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 return _src; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             set | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (!isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     ht["src"] = value; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 else { | 
					
						
							|  |  |  |  |                     WXInnerAudioContextSetString(instanceId, "src", value); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |                 _src = value; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 开始播放的位置(单位:s),默认为 0 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public float startTime | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             get | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 return _startTime; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             set | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (!isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     ht["startTime"] = value; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 else { | 
					
						
							|  |  |  |  |                     WXInnerAudioContextSetFloat(instanceId, "startTime", value); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 _startTime = value; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 是否循环播放,默认为 false | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public bool loop | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             get | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 return _loop; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             set | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (!isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     ht["loop"] = value; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 else { | 
					
						
							|  |  |  |  |                     WXInnerAudioContextSetBool(instanceId, "loop", value); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |                 _loop = value; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 音量。范围 0~1。默认为 1 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public float volume | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             get | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 return _volume; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             set | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (!isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     ht["volume"] = value; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 else { | 
					
						
							|  |  |  |  |                     if (!isWaiting) { | 
					
						
							|  |  |  |  |                         isWaiting = true; | 
					
						
							|  |  |  |  |                         WXSDKManagerHandler.Instance.StartCoroutine(DoSetVolume()); | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                      | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 _oldVolume = value; | 
					
						
							|  |  |  |  |                 _volume = value; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         IEnumerator DoSetVolume() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             //这里unity音频音量设置太频繁,延迟0.5秒后再执行 | 
					
						
							|  |  |  |  |             yield return new WaitForSeconds(0.5f); | 
					
						
							|  |  |  |  |             WXInnerAudioContextSetFloat(instanceId, "volume", _volume); | 
					
						
							|  |  |  |  |             isWaiting = false; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 静音,静音时将音量设置为 0,取消静音则恢复原来的音量 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public bool mute | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             get | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 return _volume == 0; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             set | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (!isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     ht["volume"] = value ? 0 : _oldVolume; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 else | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                    WXInnerAudioContextSetFloat(instanceId, "volume", value ? 0 : _oldVolume); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 _volume = value ? 0 : _oldVolume; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 播放速度。范围 0.5-2.0,默认为 1。(Android 需要 6 及以上版本) | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public float playbackRate | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             get | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 return _playbackRate; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             set | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (!isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     ht["playbackRate"] = value; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 else { | 
					
						
							|  |  |  |  |                     WXInnerAudioContextSetFloat(instanceId, "playbackRate", value); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |                 _playbackRate = value; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 当前音频的长度(单位 s)。只有在当前有合法的 src 时返回(只读) | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public float duration | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             get | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (!isWebGLPlayer) { | 
					
						
							|  |  |  |  |                     var v = ht["duration"]; | 
					
						
							|  |  |  |  |                     if (v == null) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         v = 0f; | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                     return (float)v; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 return WXInnerAudioContextGetFloat(instanceId, "duration"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 当前音频的播放位置(单位 s)。只有在当前有合法的 src 时返回,时间保留小数点后 6 位(只读) | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public float currentTime | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             get | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (!isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     var v = ht["currentTime"]; | 
					
						
							|  |  |  |  |                     if (v == null) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         v = 0f; | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                     return (float)v; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 return WXInnerAudioContextGetFloat(instanceId, "currentTime"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 当前音频的播放位置(单位 s)。只有在当前有合法的 src 时返回,时间保留小数点后 6 位(只读) | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public float buffered | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             get | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if(!isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     var v = ht["buffered"]; | 
					
						
							|  |  |  |  |                     if (v == null) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         v = 0f; | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                     return (float)v; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 return WXInnerAudioContextGetFloat(instanceId, "buffered"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 当前是是否暂停或停止状态(只读) | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public bool paused | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             get | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (!isWebGLPlayer) { | 
					
						
							|  |  |  |  |                     var v = ht["paused"]; | 
					
						
							|  |  |  |  |                     if (v == null) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         v = false; | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                     return (bool)v; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 return WXInnerAudioContextGetBool(instanceId, "paused"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public bool isPlaying | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             get | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 return _isPlaying; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 播放 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void Play() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (isWebGLPlayer) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (!isWaitingPlay) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     isWaitingPlay = true; | 
					
						
							|  |  |  |  |                     WXSDKManagerHandler.Instance.StartCoroutine(DoPlay()); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 return; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             | 
					
						
							|  |  |  |  |             Debug.Log(_src + " 音频播放了,这里就不真的播放了。"); | 
					
						
							|  |  |  |  |             ht["paused"] = false; | 
					
						
							|  |  |  |  |             _HandleCallBack("onPlay"); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         IEnumerator DoPlay() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             //这里unity音频调用太频繁,延迟0.1秒后再执行 | 
					
						
							|  |  |  |  |             yield return new WaitForSeconds(0.1f); | 
					
						
							|  |  |  |  |             WXInnerAudioContextPlay(instanceId); | 
					
						
							|  |  |  |  |             isWaitingPlay = false; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 暂停。暂停后的音频再播放会从暂停处开始播放 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void Pause() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (isWebGLPlayer) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (!isWaitingPause) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     isWaitingPause = true; | 
					
						
							|  |  |  |  |                     WXSDKManagerHandler.Instance.StartCoroutine(DoPause()); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 return; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             Debug.Log(_src + " 音频暂停了"); | 
					
						
							|  |  |  |  |             ht["paused"] = true; | 
					
						
							|  |  |  |  |             _HandleCallBack("onPause"); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         IEnumerator DoPause() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             //这里unity音频调用太频繁,延迟0.1秒后再执行 | 
					
						
							|  |  |  |  |             yield return new WaitForSeconds(0.1f); | 
					
						
							|  |  |  |  |             WXInnerAudioContextPause(instanceId); | 
					
						
							|  |  |  |  |             isWaitingPause = false; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 停止。停止后的音频再播放会从头开始播放。 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void Stop() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (isWebGLPlayer) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (!isWaitingStop) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     isWaitingStop = true; | 
					
						
							|  |  |  |  |                     WXSDKManagerHandler.Instance.StartCoroutine(DoStop()); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 return; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             Debug.Log(_src + " 音频停止了"); | 
					
						
							|  |  |  |  |             ht["paused"] = false; | 
					
						
							|  |  |  |  |             _HandleCallBack("onStop"); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         IEnumerator DoStop() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             //这里unity音频调用太频繁,延迟0.1秒后再执行 | 
					
						
							|  |  |  |  |             yield return new WaitForSeconds(0.1f); | 
					
						
							|  |  |  |  |             WXInnerAudioContextStop(instanceId); | 
					
						
							|  |  |  |  |             isWaitingStop = false; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 跳转到指定位置 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void Seek(float position) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (isWebGLPlayer) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 WXInnerAudioContextSeek(instanceId, position); | 
					
						
							|  |  |  |  |                 return; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             Debug.Log(_src + " 音频跳转播放"); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 销毁当前实例 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void Destroy() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (isWebGLPlayer) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 WXInnerAudioContextDestroy(instanceId); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else { | 
					
						
							|  |  |  |  |                 Debug.Log(_src + " 音频销毁!"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             Dict.Remove(instanceId); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 监听音频进入可以播放状态的事件。但不保证后面可以流畅播放 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OnCanplay(Action action) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |              | 
					
						
							|  |  |  |  |             if (_onCanplay == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) { | 
					
						
							|  |  |  |  |                     WXInnerAudioContextAddListener(instanceId, "onCanplay"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             _onCanplay += action; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 监听音频进入可以播放状态的事件。但不保证后面可以流畅播放,action 为空表示移除全部事件监听 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OffCanplay(Action action = null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (action == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onCanplay = null; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onCanplay -= action; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (_onCanplay == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     WXInnerAudioContextRemoveListener(instanceId, "offCanplay"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 监听音频播放事件 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OnPlay(Action action) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (_onPlay == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     WXInnerAudioContextAddListener(instanceId, "onPlay"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             _onPlay += action; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 取消监听音频播放事件,action 为空表示移除全部事件监听 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OffPlay(Action action = null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (action == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onPlay = null; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onPlay -= action; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (_onPlay == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     WXInnerAudioContextRemoveListener(instanceId, "offPlay"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 监听音频暂停事件 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OnPause(Action action) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (_onPause == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     WXInnerAudioContextAddListener(instanceId, "onPause"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             _onPause += action; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 取消监听音频暂停事件,action 为空表示移除全部事件监听 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OffPause(Action action = null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (action == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onPause = null; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onPause -= action; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (_onPause == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     WXInnerAudioContextRemoveListener(instanceId, "offPause"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 监听音频暂停事件 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OnStop(Action action) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (_onStop == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) { | 
					
						
							|  |  |  |  |                     WXInnerAudioContextAddListener(instanceId, "onStop"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             _onStop += action; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 取消监听音频暂停事件,action 为空表示移除全部事件监听 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OffStop(Action action = null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (action == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onStop = null; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onStop -= action; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (_onStop == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     WXInnerAudioContextRemoveListener(instanceId, "offStop"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 监听音频自然播放至结束的事件 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OnEnded(Action action) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (_onEnded == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) { | 
					
						
							|  |  |  |  |                     WXInnerAudioContextAddListener(instanceId, "onEnded"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             _onEnded += action; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 取消监听音频自然播放至结束的事件,action 为空表示移除全部事件监听 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OffEnded(Action action = null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (action == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onEnded = null; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onEnded -= action; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (_onEnded == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     WXInnerAudioContextRemoveListener(instanceId, "offEnded"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                      | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 监听音频播放进度更新事件 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OnTimeUpdate(Action action) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (_onTimeUpdate == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) { | 
					
						
							|  |  |  |  |                     WXInnerAudioContextAddListener(instanceId, "onTimeUpdate"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             _onTimeUpdate += action; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 取消监听音频播放进度更新事件,action 为空表示移除全部事件监听 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OffTimeUpdate(Action action = null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (action == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onTimeUpdate = null; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onTimeUpdate -= action; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (_onTimeUpdate == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) { | 
					
						
							|  |  |  |  |                     WXInnerAudioContextRemoveListener(instanceId, "offTimeUpdate"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 监听音频播放错误事件 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OnError(Action action) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (_onError == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) { | 
					
						
							|  |  |  |  |                     WXInnerAudioContextAddListener(instanceId, "onError"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             _onError += action; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 取消监听音频播放错误事件,action 为空表示移除全部事件监听 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OffError(Action action = null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (action == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onError = null; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onError -= action; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (_onError == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) { | 
					
						
							|  |  |  |  |                     WXInnerAudioContextRemoveListener(instanceId, "offError"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 监听音频加载中事件。当音频因为数据不足,需要停下来加载时会触发 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OnWaiting(Action action) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (_onWaiting == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) { | 
					
						
							|  |  |  |  |                     WXInnerAudioContextAddListener(instanceId, "onWaiting"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                  | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             _onWaiting += action; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 取消监听音频加载中事件,action 为空表示移除全部事件监听 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OffWaiting(Action action = null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (action == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onWaiting = null; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onWaiting -= action; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (_onWaiting == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (isWebGLPlayer) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     WXInnerAudioContextRemoveListener(instanceId, "offWaiting"); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                      | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 监听音频进行跳转操作的事件 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OnSeeking(Action action) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (_onSeeking == null && isWebGLPlayer) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 WXInnerAudioContextAddListener(instanceId, "onSeeking"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             _onSeeking += action; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 取消监听音频进行跳转操作的事件,action 为空表示移除全部事件监听 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OffSeeking(Action action = null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (action == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onSeeking = null; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onSeeking -= action; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (_onSeeking == null && isWebGLPlayer) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 WXInnerAudioContextRemoveListener(instanceId, "offSeeking"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 监听音频完成跳转操作的事件 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OnSeeked(Action action) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (_onSeeked == null && isWebGLPlayer) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 WXInnerAudioContextAddListener(instanceId, "onSeeked"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             _onSeeked += action; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 取消监听音频完成跳转操作的事件,action 为空表示移除全部事件监听 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public void OffSeeked(Action action = null) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (action == null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onSeeked = null; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 _onSeeked -= action; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (_onSeeked == null && isWebGLPlayer) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 WXInnerAudioContextRemoveListener(instanceId, "offSeeked"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | } |