public void TemporaryShutdown()
 {
     if (CurrentSourceVoice == null)
     {
         throw new Exception();     // TEMP
     }
     savedSamplesPlayed = (int)CurrentSourceVoice.SamplesPlayed;
     CurrentSourceVoice.Stop();
     CurrentStream.Dispose();
 }
        public void TemporaryShutdown()
        {
            if (CurrentSourceVoice != null)
            {
                CurrentSourceVoice.Stop();
                savedSourceVoiceState = new SourceVoiceState
                {
                    SamplesPlayed = CurrentSourceVoice.SamplesPlayed,
                    Done          = CurrentSourceVoice.Done,
                };
            }

            foreach (var sv in sourceVoices.Values)
            {
                sv.Dispose();
            }
            sourceVoices.Clear();
        }
        public void StopSourceVoice(StopReason stopReason)
        {
            JMOD.Sound.DebugOutput("{0} - StopSourceVoice called in SourceVoiceSlot {1}", DateTime.Now.TimeOfDay, ID);
            if (CurrentSourceVoice != null && !CurrentSourceVoice.Done)
            {
                var result = CurrentSourceVoice.Stop();
                if (result.IsFailure)       // to be removed later
                {
                    throw new Exception(result.Code + " - " + result.Description);
                }
            }

            if (stopReason == StopReason.Ended)
            {
                CurrentChannel.HandleFinishedSlot(true);
            }
            else if (stopReason == StopReason.Stopped)
            {
                CurrentChannel.HandleFinishedSlot(false);
            }
            else if (stopReason == StopReason.Stolen)
            {
                CurrentChannel.HandleStolenSlot();
            }

            if (CurrentSourceVoice != null)
            {
                JMOD.Sound.DebugOutput("Flushing buffers");
                var result = CurrentSourceVoice.FlushSourceBuffers();
                if (result.IsFailure)       // to be removed later
                {
                    throw new Exception(result.Code + " - " + result.Description);
                }
            }
            system.ReleaseSourceVoiceSlot(this);
            CurrentChannel     = null;
            CurrentSourceVoice = null;
        }
        public void StopSourceVoice(StopReason stopReason)
        {
            JMOD.Sound.DebugOutput("{0} - StopSourceVoice called in Stream SourceVoiceSlot", DateTime.Now.TimeOfDay);
            if (CurrentSourceVoice != null)
            {
                Result result;
                if (!CurrentSourceVoice.Done)
                {
                    result = CurrentSourceVoice.Stop();
                    if (result.IsFailure)       // to be removed later
                    {
                        throw new Exception(result.Code + " - " + result.Description);
                    }
                }
                result = CurrentSourceVoice.FlushSourceBuffers();
                if (result.IsFailure)
                {
                    throw new Exception(result.Code + " - " + result.Description);
                }
            }

            if (stopReason == StopReason.Ended)
            {
                CurrentChannel.HandleFinishedSlot(true);
            }
            else if (stopReason == StopReason.Stopped)
            {
                CurrentChannel.HandleFinishedSlot(false);
            }
            else
            {
                throw new NotImplementedException();
            }

            CurrentChannel = null;
        }