public void MoveTrack(Track track, MoveDirection moveDirection)
 {
     if (track == null)
     {
         throw new ArgumentNullException(nameof(track));
     }
     lock (syncLock)
     {
         var index = Tracks.ToList().IndexOf(track);
         if (moveDirection == MoveDirection.Up)
         {
             if (index > 0)
             {
                 var previousTrack = Tracks.ElementAt(index - 1);
                 var position      = previousTrack.Position;
                 previousTrack.Position = track.Position;
                 track.Position         = position;
             }
         }
         if (moveDirection == MoveDirection.Down)
         {
             if ((index + 1) < Tracks.Count)
             {
                 var nextTrack = Tracks.ElementAt(index + 1);
                 var position  = nextTrack.Position;
                 nextTrack.Position = track.Position;
                 track.Position     = position;
             }
         }
     }
     ReCalculateTrackProperties();
 }
Exemple #2
0
        public void GetPlayback(int index, bool isAccompanyMode)
        {
            Playback pb;

            if (isAccompanyMode)
            {
                //伴奏模式
                var accompanyTracks = new List <TrackChunk>(Tracks);
                accompanyTracks.RemoveAt(index);
                var events = new List <EventsCollection>();
                foreach (var e in accompanyTracks)
                {
                    events.Add(e.Events);
                }
                outputDevice = OutputDevice.GetByName("Microsoft GS Wavetable Synth");
                pb           = new Playback(events, tempoMap, outputDevice);
                Logger.Debug($"Type: {outputDevice.DeviceType}");
                foreach (var item in outputDevice.Channels)
                {
                    Logger.Debug($"Channel: {item}");
                }
            }
            else
            {
                //合奏模式
                pb              = new Playback(Tracks.ElementAt(index).Events, tempoMap);
                pb.EventPlayed += EventPlayed;
            }
            pb.Finished += (_, e) =>
            {
                StopPlayback();
                State.state.PlayingFlag  = false;
                State.state.TimeWhenPlay = DateTime.MinValue;
                Logger.Info("MIDI: Finished");
            };
            playback = pb;
        }