public AudioStream Load(string streamKey, string filename)
        {
            if (!File.Exists(filename))
            {
                throw new Exception("Cannot find file " + filename);
            }
            if (GetStreamSection(streamKey) != null)
            {
                throw new Exception("AudioStream already exists with streamKey " + streamKey);
            }

            var audioStream = new Sample
            {
                Filename = filename
            };

            var tags = TagHelper.LoadTags(filename);

            if (tags != null)
            {
                if (tags.Gain.HasValue)
                {
                    audioStream.Gain = tags.Gain.Value;
                }
                if (tags.Bpm.HasValue)
                {
                    audioStream.Bpm = tags.Bpm.Value;
                }

                audioStream.Description = TrackHelper.GuessTrackDescription(filename, tags.Artist, tags.Title);
            }

            AudioStreamHelper.LoadAudio(audioStream);

            audioStream.SyncProc = OnSync;
            AudioStreamHelper.AddToMixer(audioStream, Output);
            AudioStreamHelper.SetPosition(audioStream, 0);

            lock (_streamSections)
            {
                _streamSections.Add(new AudioStreamSection
                {
                    Key           = streamKey,
                    AudioStream   = audioStream,
                    AudioSections = new List <AudioSection>()
                });
            }

            return(audioStream);
        }
        /// <summary>
        ///     Loads a track for playing as the raw loop track.
        /// </summary>
        /// <param name="filename">The filename.</param>
        /// <returns></returns>
        /// <exception cref="System.Exception">Cannot find file  + filename</exception>
        public Track LoadRawLoopTrack(string filename)
        {
            if (!File.Exists(filename))
            {
                throw new Exception("Cannot find file " + filename);
            }

            if (RawLoopTrack != null)
            {
                UnloadRawLoopTrack();
            }

            var track = new Track
            {
                Id       = _nextTrackId++,
                Filename = filename
            };

            SetArtistAndTitle(track, "", "");
            LoadTagData(track);
            ExtenedAttributesHelper.LoadExtendedAttributes(track);
            LoadTrackAudioData(track);

            // DebugHelper.WriteLine("Loaded raw loop track " + track.Description);

            // set track sync event
            track.SyncProc         = OnTrackSync;
            track.CurrentStartLoop = 0;
            track.CurrentEndLoop   = 0;
            track.RawLoopStart     = 0;
            track.RawLoopEnd       = track.Length;

            // DebugHelper.WriteLine("Loading raw loop track " + track.Description);

            AudioStreamHelper.AddToMixer(track, _rawLoopMixer);
            RawLoopTrack = track;

            SetRawLoopPositions(0, track.Length, 0);

            return(RawLoopTrack);
        }