Stream.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. using Il2Cpp;
  2. using Il2CppInterop.Runtime.Attributes;
  3. using MelonLoader;
  4. using System.Collections;
  5. using UnityEngine;
  6. using UnityEngine.Networking;
  7. namespace AudioMgr
  8. {
  9. public class Stream : MonoBehaviour
  10. {
  11. public Stream(IntPtr intPtr) : base(intPtr)
  12. {
  13. }
  14. private AudioSource _audioSource;
  15. private Setting _activeSetting;
  16. private AudioMaster.SourceType _sourceType;
  17. private bool _isSetup;
  18. private string _streamURL;
  19. //private AudioClip _streamClip = null;
  20. private UnityWebRequest _www;
  21. public enum PlayState { Stopped, Playing };
  22. private PlayState _playState = PlayState.Stopped;
  23. [HideFromIl2Cpp]
  24. public void Setup(string streamURL, AudioMaster.SourceType sourceType)
  25. {
  26. _streamURL = streamURL;
  27. _sourceType = sourceType;
  28. _audioSource = gameObject.AddComponent<AudioSource>();
  29. _audioSource.playOnAwake = false;
  30. _audioSource.volume = VolumeMaster.GetVolume(sourceType);
  31. VolumeMaster.onVolumeChange += ResetVolume;
  32. ApplySettings(SettingMaster.Defaults(sourceType));
  33. _isSetup = true;
  34. }
  35. [HideFromIl2Cpp]
  36. public void Setup(string streamURL, Setting sourceSetting)
  37. {
  38. _streamURL = streamURL;
  39. _sourceType = sourceType;
  40. _sourceType = AudioMaster.SourceType.Custom;
  41. _audioSource = gameObject.AddComponent<AudioSource>();
  42. _audioSource.playOnAwake = false;
  43. _audioSource.volume = VolumeMaster.GetVolume(sourceType);
  44. VolumeMaster.onVolumeChange += ResetVolume;
  45. ApplySettings(sourceSetting);
  46. _isSetup = true;
  47. }
  48. private IEnumerator PlayAudioRoutine()
  49. {
  50. /*
  51. UnityWebRequest www;
  52. WWW foowww = new WWW(_streamURL);
  53. www = UnityWebRequest.Get(_streamURL);
  54. www.SendWebRequest();
  55. MelonLogger.Msg("start ruotig ");
  56. if (!www.isNetworkError && !www.isHttpError)
  57. {
  58. MelonLogger.Msg("now create");
  59. _audioSource.clip = WebRequestWWW.InternalCreateAudioClipUsingDH(www.downloadHandler, www.url, true, true, AudioType.UNKNOWN);
  60. yield return new WaitForSeconds(10f);
  61. MelonLogger.Msg("now play ");
  62. _audioSource.PlayDelayed(1f);
  63. _playState = PlayState.Playing;
  64. }
  65. else
  66. {
  67. _playState = PlayState.Stopped;
  68. MelonLogger.Msg("Error while loading audioclip. Skipping " + www.error);
  69. }
  70. while (_playState == PlayState.Playing)
  71. {
  72. MelonLogger.Msg("in while ");
  73. yield return null;
  74. }
  75. MelonLogger.Msg("now stop ");
  76. Stop();
  77. */
  78. yield return null;
  79. }
  80. [HideFromIl2Cpp]
  81. public void Play()
  82. {
  83. if (_playState == PlayState.Stopped && _isSetup == true)
  84. {
  85. _playState = PlayState.Playing;
  86. MelonCoroutines.Start(PlayAudioRoutine());
  87. }
  88. }
  89. [HideFromIl2Cpp]
  90. public void Stop()
  91. {
  92. _playState = PlayState.Stopped;
  93. _audioSource.Stop();
  94. _www?.Dispose();
  95. }
  96. [HideFromIl2Cpp]
  97. private void OnEnable()
  98. {
  99. VolumeMaster.onVolumeChange += ResetVolume;
  100. }
  101. [HideFromIl2Cpp]
  102. private void OnDisable()
  103. {
  104. VolumeMaster.onVolumeChange -= ResetVolume;
  105. }
  106. [HideFromIl2Cpp]
  107. private void OnDestroy()
  108. {
  109. VolumeMaster.onVolumeChange -= ResetVolume;
  110. }
  111. [HideFromIl2Cpp]
  112. private void ResetVolume()
  113. {
  114. if(_sourceType != AudioMaster.SourceType.Custom)
  115. {
  116. _audioSource.volume = VolumeMaster.GetVolume(_sourceType);
  117. }
  118. }
  119. [HideFromIl2Cpp]
  120. public void ApplySettings(Setting newSetting)
  121. {
  122. _activeSetting = newSetting;
  123. _sourceType = _activeSetting.sourceType;
  124. _audioSource.spread = _activeSetting.spread;
  125. _audioSource.panStereo = _activeSetting.panStereo;
  126. _audioSource.dopplerLevel = _activeSetting.dopplerLevel;
  127. _audioSource.maxDistance = _activeSetting.maxDistance;
  128. _audioSource.minDistance = _activeSetting.minDistance;
  129. _audioSource.pitch = _activeSetting.pitch;
  130. _audioSource.spatialBlend = _activeSetting.spatialBlend;
  131. _audioSource.spatialize = _activeSetting.spatialize;
  132. _audioSource.rolloffFactor = _activeSetting.rolloffFactor;
  133. _audioSource.maxVolume = _activeSetting.maxVolume;
  134. _audioSource.maxVolume = _activeSetting.minVolume;
  135. _audioSource.rolloffMode = _activeSetting.rolloffMode;
  136. //_audioSources[audioSource].SetCustomCurve(AudioSourceCurveType.CustomRolloff, _activeSetting.rollOffCurve);
  137. ResetVolume();
  138. }
  139. [HideFromIl2Cpp]
  140. public PlayState playState
  141. {
  142. get
  143. {
  144. return _playState;
  145. }
  146. }
  147. [HideFromIl2Cpp]
  148. public AudioMaster.SourceType sourceType
  149. {
  150. get
  151. {
  152. return _sourceType;
  153. }
  154. set
  155. {
  156. _sourceType = value;
  157. ApplySettings(SettingMaster.Defaults(_sourceType));
  158. }
  159. }
  160. [HideFromIl2Cpp]
  161. public string streamURL
  162. {
  163. get
  164. {
  165. return _streamURL;
  166. }
  167. set
  168. {
  169. _streamURL = value;
  170. }
  171. }
  172. }
  173. }