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(); }
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; }