1
0

Stream.cs 6.3 KB

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