Track CloneToFadeOutTrack(Track track, int fadeDelay) { Track fadeTrack; // Debug.WriteLine("cloneToFadeOutTrack(soundId:{0}, fade:{1}) - begin of func", track.TrackId, fadeDelay); if (track.ToBeRemoved) { // Console.Error.WriteLine("cloneToFadeOutTrack: Tried to clone a track to be removed, please bug report"); return(null); } Debug.Assert(track.TrackId < MaxDigitalTracks); fadeTrack = _track[track.TrackId + MaxDigitalTracks]; if (fadeTrack.Used) { // Debug.WriteLine("cloneToFadeOutTrack: No free fade track, force flush fade soundId:{0}", fadeTrack.SoundId); FlushTrack(fadeTrack); _mixer.StopHandle(fadeTrack.MixChanHandle); } // Clone the settings of the given track fadeTrack = track.Clone(); _track[track.TrackId + MaxDigitalTracks] = fadeTrack; fadeTrack.TrackId = track.TrackId + MaxDigitalTracks; // Clone the sound. // leaving bug number for now #1635361 var soundDesc = _sound.CloneSound(track.SoundDesc); if (soundDesc == null) { // it fail load open old song after switch to diffrent CDs // so gave up // Console.Error.WriteLine("Game not supported while playing on 2 diffrent CDs"); } track.SoundDesc = soundDesc; // Set the volume fading parameters to indicate a fade out fadeTrack.VolFadeDelay = fadeDelay; fadeTrack.VolFadeDest = 0; fadeTrack.VolFadeStep = (fadeTrack.VolFadeDest - fadeTrack.vol) * 60 * (1000 / _callbackFps) / (1000 * fadeDelay); fadeTrack.VolFadeUsed = true; // Create an appendable output buffer fadeTrack.Stream = new QueuingAudioStream(_sound.GetFreq(fadeTrack.SoundDesc), track.MixerFlags.HasFlag(AudioFlags.Stereo)); fadeTrack.MixChanHandle = _mixer.PlayStream(track.GetSoundType(), fadeTrack.Stream, -1, fadeTrack.Volume, fadeTrack.Pan, true, false, track.MixerFlags.HasFlag(AudioFlags.Stereo)); fadeTrack.Used = true; // Debug.WriteLine("CloneToFadeOutTrack() - end of func, soundId {0}, fade soundId {1}", track.SoundId, fadeTrack.SoundId); return(fadeTrack); }
Track CloneToFadeOutTrack(Track track, int fadeDelay) { Track fadeTrack; // Debug.WriteLine("cloneToFadeOutTrack(soundId:{0}, fade:{1}) - begin of func", track.TrackId, fadeDelay); if (track.ToBeRemoved) { // Console.Error.WriteLine("cloneToFadeOutTrack: Tried to clone a track to be removed, please bug report"); return null; } Debug.Assert(track.TrackId < MaxDigitalTracks); fadeTrack = _track[track.TrackId + MaxDigitalTracks]; if (fadeTrack.Used) { // Debug.WriteLine("cloneToFadeOutTrack: No free fade track, force flush fade soundId:{0}", fadeTrack.SoundId); FlushTrack(fadeTrack); _mixer.StopHandle(fadeTrack.MixChanHandle); } // Clone the settings of the given track fadeTrack = track.Clone(); _track[track.TrackId + MaxDigitalTracks] = fadeTrack; fadeTrack.TrackId = track.TrackId + MaxDigitalTracks; // Clone the sound. // leaving bug number for now #1635361 var soundDesc = _sound.CloneSound(track.SoundDesc); if (soundDesc == null) { // it fail load open old song after switch to diffrent CDs // so gave up // Console.Error.WriteLine("Game not supported while playing on 2 diffrent CDs"); } track.SoundDesc = soundDesc; // Set the volume fading parameters to indicate a fade out fadeTrack.VolFadeDelay = fadeDelay; fadeTrack.VolFadeDest = 0; fadeTrack.VolFadeStep = (fadeTrack.VolFadeDest - fadeTrack.vol) * 60 * (1000 / _callbackFps) / (1000 * fadeDelay); fadeTrack.VolFadeUsed = true; // Create an appendable output buffer fadeTrack.Stream = new QueuingAudioStream(_sound.GetFreq(fadeTrack.SoundDesc), track.MixerFlags.HasFlag(AudioFlags.Stereo)); fadeTrack.MixChanHandle = _mixer.PlayStream(track.GetSoundType(), fadeTrack.Stream, -1, fadeTrack.Volume, fadeTrack.Pan, true, false, track.MixerFlags.HasFlag(AudioFlags.Stereo)); fadeTrack.Used = true; // Debug.WriteLine("CloneToFadeOutTrack() - end of func, soundId {0}, fade soundId {1}", track.SoundId, fadeTrack.SoundId); return fadeTrack; }