@@ -32,7 +32,7 @@ public static partial class Audio
3232 //Music
3333 private static string ? sQueuedMusic = string . Empty ;
3434
35- private static GameAudioInstance ? sMyMusic { get ; set ; }
35+ private static GameAudioInstance ? _activeMusicSource ;
3636
3737 //Init
3838 public static void Init ( )
@@ -48,7 +48,7 @@ public static void Init()
4848
4949 public static void UpdateGlobalVolume ( )
5050 {
51- sMyMusic ? . SetVolume ( sMyMusic . GetVolume ( ) , true ) ;
51+ _activeMusicSource ? . Update ( ) ;
5252 for ( var i = 0 ; i < sGameSounds . Count ; i ++ )
5353 {
5454 _ = sGameSounds [ i ] . Update ( ) ;
@@ -62,18 +62,25 @@ public static void UpdateGlobalVolume()
6262 //Update
6363 public static void Update ( )
6464 {
65- if ( sMyMusic != null )
65+ if ( _activeMusicSource != null )
6666 {
67+ _activeMusicSource . Update ( ) ;
6768 var currentTime = Timing . Global . MillisecondsUtc ;
6869 if ( sFadeTimer != 0 && sFadeTimer < currentTime )
6970 {
7071 if ( sFadingOut )
7172 {
72- sMyMusic . SetVolume ( sMyMusic . GetVolume ( ) - 1 , true ) ;
73- if ( sMyMusic . GetVolume ( ) <= 1 && ! string . IsNullOrEmpty ( sQueuedMusic ) )
73+ if ( -- _activeMusicSource . Volume < 1 )
7474 {
7575 StopMusic ( ) ;
76- PlayMusic ( sQueuedMusic , 0 , sQueuedFade , sQueuedLoop ) ;
76+ if ( ! string . IsNullOrEmpty ( sQueuedMusic ) )
77+ {
78+ PlayMusic ( sQueuedMusic , 0 , sQueuedFade , sQueuedLoop ) ;
79+ }
80+ else
81+ {
82+ sFadeTimer = currentTime + sFadeRate ;
83+ }
7784 }
7885 else
7986 {
@@ -82,8 +89,7 @@ public static void Update()
8289 }
8390 else
8491 {
85- sMyMusic . SetVolume ( sMyMusic . GetVolume ( ) + 1 , true ) ;
86- if ( sMyMusic . GetVolume ( ) < 100 )
92+ if ( ++ _activeMusicSource . Volume < 100 )
8793 {
8894 sFadeTimer = currentTime + sFadeRate ;
8995 }
@@ -132,12 +138,12 @@ public static void PlayMusic(string filename, int fadeout = 0, int fadein = 0, b
132138 ClearQueue ( ) ;
133139
134140 filename = GameContentManager . RemoveExtension ( filename ) ;
135- if ( sMyMusic != null )
141+ if ( _activeMusicSource != null )
136142 {
137143 if ( fadeout == 0 ||
138- sMyMusic . State == GameAudioInstance . AudioInstanceState . Stopped ||
139- sMyMusic . State == GameAudioInstance . AudioInstanceState . Paused ||
140- sMyMusic . GetVolume ( ) == 0 )
144+ _activeMusicSource . State == GameAudioInstance . AudioInstanceState . Stopped ||
145+ _activeMusicSource . State == GameAudioInstance . AudioInstanceState . Paused ||
146+ _activeMusicSource . Volume < 1 )
141147 {
142148 StopMusic ( ) ;
143149 StartMusic ( filename , fadein , loop ) ;
@@ -181,16 +187,16 @@ private static void StartMusic(string filename, int fadein = 0, bool loop = fals
181187 return ;
182188 }
183189
184- if ( sMyMusic != null )
190+ if ( _activeMusicSource != null )
185191 {
186192 ApplicationContext . Context . Value ? . Logger . LogTrace ( $ "Trying to start '{ filename } ' without properly closing '{ sCurrentSong } '.") ;
187193 }
188194
189- sMyMusic = music . CreateInstance ( ) ;
195+ _activeMusicSource = music . CreateInstance ( ) ;
190196 sCurrentSong = filename ;
191- sMyMusic . Play ( ) ;
192- sMyMusic . SetVolume ( 0 , true ) ;
193- sMyMusic . IsLooping = loop ;
197+ _activeMusicSource . Play ( ) ;
198+ _activeMusicSource . Volume = 0 ;
199+ _activeMusicSource . IsLooping = loop ;
194200 sFadeRate = fadein / 100 ;
195201 sFadeTimer = Timing . Global . MillisecondsUtc + sFadeRate ;
196202 sFadingOut = false ;
@@ -202,26 +208,26 @@ private static void StartMusic(string filename, int fadein = 0, bool loop = fals
202208 /// <param name="fadeout">The time (in ms) it should take to fade out the current music track.</param>
203209 public static void StopMusic ( int fadeout = 0 )
204210 {
205- if ( sMyMusic == null )
211+ if ( _activeMusicSource == null )
206212 {
207213 return ;
208214 }
209215
210216 if ( fadeout == 0 ||
211- sMyMusic . State == GameAudioInstance . AudioInstanceState . Stopped ||
212- sMyMusic . State == GameAudioInstance . AudioInstanceState . Paused ||
213- sMyMusic . GetVolume ( ) == 0 )
217+ _activeMusicSource . State == GameAudioInstance . AudioInstanceState . Stopped ||
218+ _activeMusicSource . State == GameAudioInstance . AudioInstanceState . Paused ||
219+ _activeMusicSource . Volume < 1 )
214220 {
215221 sCurrentSong = string . Empty ;
216- sMyMusic . Stop ( ) ;
217- sMyMusic . Dispose ( ) ;
218- sMyMusic = null ;
222+ _activeMusicSource . Stop ( ) ;
223+ _activeMusicSource . Dispose ( ) ;
224+ _activeMusicSource = null ;
219225 sFadeTimer = 0 ;
220226 }
221227 else
222228 {
223229 //Start fadeout
224- sFadeRate = fadeout / sMyMusic . GetVolume ( ) ;
230+ sFadeRate = fadeout / Math . Max ( 1 , _activeMusicSource . Volume ) ;
225231 sFadeTimer = Timing . Global . MillisecondsUtc + sFadeRate ;
226232 sFadingOut = true ;
227233 }
0 commit comments