private void OnSectionOffset(AudioSection audioSection, AudioStreamSection streamSection)
 {
     if (!audioSection.LoopIndefinitely)
     {
         PlayNextSection(audioSection, streamSection);
     }
 }
 private static AudioSync GetAudioSync(AudioSection audioSection, SyncType syncType)
 {
     lock (audioSection)
     {
         return(audioSection.AudioSyncs.FirstOrDefault(x => x.SyncType == syncType));
     }
 }
        private static void SetSync(AudioStream audioStream, AudioSection audioSection, SyncType syncType,
                                    double position)
        {
            if (syncType == SyncType.AudioStreamEvent)
            {
                return;
            }

            var audioSync = GetAudioSync(audioSection, syncType);

            if (audioSync != null)
            {
                RemoveSyncFromStream(audioStream, audioSync);
                lock (audioSection)
                {
                    audioSection.AudioSyncs.Remove(audioSync);
                }
            }

            audioSync = AddSync(audioStream, syncType, position);
            lock (audioSection)
            {
                if (audioSync != null)
                {
                    audioSection.AudioSyncs.Add(audioSync);
                }
            }
        }
 private static void SetSectionTempo(AudioStream audioStream, AudioSection audioSection)
 {
     if (audioSection.TargetBpm != 0)
     {
         AudioStreamHelper.SetTempoToMatchBpm(audioStream, audioSection.Bpm, audioSection.TargetBpm);
     }
 }
        private AudioSection CreateSection(string streamKey, string sectionKey, bool loopIndefinitely,
                                           bool autoPlayNextSection)
        {
            var streamSection = GetStreamSection(streamKey);

            if (streamSection == null)
            {
                return(null);
            }

            var audioSection = GetAudioSection(streamKey, sectionKey);

            if (audioSection != null)
            {
                return(audioSection);
            }

            audioSection = new AudioSection
            {
                Key = sectionKey,
                LoopIndefinitely    = loopIndefinitely,
                AutoPlayNextSection = autoPlayNextSection
            };

            lock (streamSection)
            {
                streamSection.AudioSections.Add(audioSection);
            }

            return(audioSection);
        }
 private void OnSectionEnd(AudioSection audioSection, AudioStreamSection streamSection)
 {
     if (audioSection.LoopIndefinitely || audioSection.HasOffset)
     {
         AudioStreamHelper.SetPosition(streamSection.AudioStream, audioSection.Start.Position);
         ApplySyncIfOneExistsForCurrentPosition(streamSection.AudioStream);
     }
     else
     {
         PlayNextSection(audioSection, streamSection);
     }
 }
        private static AudioSection GetNextSection(AudioSection audioSection, AudioStreamSection streamSection)
        {
            lock (streamSection)
            {
                var index = streamSection.AudioSections.IndexOf(audioSection);

                index++;
                if (index >= streamSection.AudioSections.Count)
                {
                    return(null);
                }

                DebugHelper.WriteLine(index);
                return(streamSection.AudioSections[index]);
            }
        }
 private void PlayNextSection(AudioSection audioSection, AudioStreamSection streamSection)
 {
     if (!audioSection.AutoPlayNextSection)
     {
         // DebugHelper.WriteLine("Pause " + streamSection.AudioStream.Description);
         AudioStreamHelper.Pause(streamSection.AudioStream);
     }
     else
     {
         var nextSection = GetNextSection(audioSection, streamSection);
         if (nextSection != null)
         {
             QueueSection(streamSection.Key, nextSection.Key);
         }
         else
         {
             // DebugHelper.WriteLine("Pause " + streamSection.AudioStream.Description);
             AudioStreamHelper.Pause(streamSection.AudioStream);
         }
     }
 }
        private static AudioSection GetNextSection(AudioSection audioSection, AudioStreamSection streamSection)
        {
            lock (streamSection)
            {
                var index = streamSection.AudioSections.IndexOf(audioSection);

                index++;
                if (index >= streamSection.AudioSections.Count) return null;

                Console.WriteLine(index);
                return streamSection.AudioSections[index];
            }
        }
        private void PlayNextSection(AudioSection audioSection, AudioStreamSection streamSection)
        {
            if (!audioSection.AutoPlayNextSection)
            {
                DebugHelper.WriteLine("Pause " + streamSection.AudioStream.Description);
                AudioStreamHelper.Pause(streamSection.AudioStream);
            }
            else
            {
                var nextSection = GetNextSection(audioSection, streamSection);
                if (nextSection != null)
                {
                    QueueSection(streamSection.Key, nextSection.Key);

                }
                else
                {
                    DebugHelper.WriteLine("Pause " + streamSection.AudioStream.Description);
                    AudioStreamHelper.Pause(streamSection.AudioStream);
                }
            }
        }
 private void OnSectionEnd(AudioSection audioSection, AudioStreamSection streamSection)
 {
     if (audioSection.LoopIndefinitely || audioSection.HasOffset)
     {
         AudioStreamHelper.SetPosition(streamSection.AudioStream, audioSection.Start.Position);
         ApplySyncIfOneExistsForCurrentPosition(streamSection.AudioStream);
     }
     else 
         PlayNextSection(audioSection, streamSection);
 }
 private void OnSectionOffset(AudioSection audioSection, AudioStreamSection streamSection)
 {
     if (!audioSection.LoopIndefinitely)
         PlayNextSection(audioSection, streamSection);
 }
 private static AudioSync GetAudioSync(AudioSection audioSection, SyncType syncType)
 {
     lock (audioSection)
     {
         return audioSection.AudioSyncs.FirstOrDefault(x => x.SyncType == syncType);
     }
 }
        private static void SetSync(AudioStream audioStream, AudioSection audioSection, SyncType syncType,
            double position)
        {
            if (syncType == SyncType.AudioStreamEvent)
                return;

            var audioSync = GetAudioSync(audioSection, syncType);
            if (audioSync != null)
            {
                RemoveSyncFromStream(audioStream, audioSync);
                lock (audioSection)
                {
                    audioSection.AudioSyncs.Remove(audioSync);
                }
            }

            audioSync = AddSync(audioStream, syncType, position);
            lock (audioSection)
            {
                if(audioSync != null)
                    audioSection.AudioSyncs.Add(audioSync);
            }
        }
  private static void SetSectionTempo(AudioStream audioStream, AudioSection audioSection)
  {
    if (audioSection.TargetBpm != 0)
      AudioStreamHelper.SetTempoToMatchBpm(audioStream, audioSection.Bpm, audioSection.TargetBpm);
 }
        private AudioSection CreateSection(string streamKey, string sectionKey, bool loopIndefinitely, bool autoPlayNextSection)
        {
            var streamSection = GetStreamSection(streamKey);
            if (streamSection == null)
                return null;

            var audioSection = GetAudioSection(streamKey, sectionKey);
            if (audioSection != null)
                return audioSection;

            audioSection = new AudioSection
            {
                Key = sectionKey,
                LoopIndefinitely = loopIndefinitely,
                AutoPlayNextSection = autoPlayNextSection,
            };

            lock (streamSection)
            {
                streamSection.AudioSections.Add(audioSection);
            }

            return audioSection;
        }