private void panelTracks_DragDrop(object sender, DragEventArgs e)
        {
            var droppedPETrack = e.GetDropObject <PEMidiTrack>();

            droppedPETrack.IfObjectNotNull(xx =>
            {
                if (droppedPETrack != sender)
                {
                    DoRequestBackup();

                    Track newTrack = null;
                    if (Sequence == null)
                    {
                        var targetType = this.IsPro ? FileType.Pro : FileType.Guitar5;

                        var seq       = new Sequence(targetType, droppedPETrack.Track.Sequence.Division);
                        this.sequence = seq;
                        if (!droppedPETrack.Track.IsTempo())
                        {
                            var tempo = droppedPETrack.Track.Sequence.Tracks.Where(x => x.IsTempo());
                            if (tempo.Any())
                            {
                                seq.AddTempo(tempo.First().ConvertToPro());
                            }
                        }
                        newTrack = droppedPETrack.Track.Clone(seq.FileType);
                        seq.Add(newTrack);
                    }
                    else
                    {
                        if (this.Sequence == droppedPETrack.Track.Sequence)
                        {
                            this.Sequence.MoveTrack(droppedPETrack.Track.GetTrackIndex(), GetInsertAt());
                        }
                        else
                        {
                            newTrack = droppedPETrack.Track.Clone(Sequence.FileType);

                            sequence.Insert(GetInsertAt(), newTrack);

                            if (!sequence.Tracks.Any(x => x.IsTempo()))
                            {
                                var tempo = droppedPETrack.Track.Sequence.Tracks.Where(x => x.IsTempo());
                                if (tempo.Any())
                                {
                                    sequence.AddTempo(tempo.First().ConvertToPro());
                                }
                            }
                        }
                    }

                    CreatePanelTracks(this.sequence);
                    TrackAdded.IfObjectNotNull(tc => tc(this, this.sequence, newTrack, SelectedDifficulty));
                }
            });
            dragItem = null;
        }
Beispiel #2
0
        public void AddTempoTrack(Track t)
        {
            if (t == null || t.Name == null)
            {
                return;
            }

            try
            {
                if (!Sequence.Contains(t))
                {
                    Sequence.AddTempo(t);
                }
            }
            catch { }

            dirtyItems |= DirtyItem.All;
        }
Beispiel #3
0
        private void ProcessFile(string fileName)
        {
            string[] lines = new ProcessScore(fileName).Score.ToArray();

            MidiFile.Folder = Path.GetDirectoryName(fileName);

            string value = "";

            var note = new Note();

            foreach (string s in lines)
            {
                if (s.StartsWith("@skip"))
                {
                    throw new SkipFileException("Skip Instruction");
                }

                if (s.StartsWith("@real"))
                {
                    note.RealPitch = true;
                    continue;
                }

                if (s.StartsWith("@swing"))
                {
                    note.Swing = !note.Swing;
                    continue;
                }

                if (s.StartsWith("@soprano"))
                {
                    note.SetSoprano();
                    continue;
                }

                if (s.StartsWith("@alto"))
                {
                    note.SetAlto();
                    continue;
                }

                if (s.StartsWith("@transpose"))
                {
                    note.Transpose = true;
                    continue;
                }

                if (s.StartsWith("t="))
                {
                    value = s.Replace("t=", "");
                    Sequence.AddTempo(uint.Parse(value));
                    continue;
                }

                if (s.StartsWith("f="))
                {
                    value           = s.Replace("f=", "");
                    MidiFile.Folder = value;
                    continue;
                }

                string[] notes = TokeniseBar(s);

                foreach (var n in notes)
                {
                    note.NextNote(n);
                    Sequence.AddMidiNote(note);
                }
            }

            MidiFile.AllocateTracks(new TrackBuilder(Sequence, Debug));
        }
        void PlayMidiFromSelection()
        {
            try
            {
                if (EditorPro.Sequence == null)
                {
                    return;
                }

                if (!CreateMidiPlaybackDeviceIfNull())
                {
                    return;
                }

                if (midiPlaybackSequencer == null)
                {
                    midiPlaybackSequencer = new Sequencer();
                }

                if (playbackSequencerAttached == false)
                {
                    this.midiPlaybackSequencer.PlayingCompleted     += new EventHandler(midiPlaybackSequencer_PlayingCompleted);
                    this.midiPlaybackSequencer.ChannelMessagePlayed += new EventHandler <ChannelMessageEventArgs>(midiPlaybackSequencer_ChannelMessagePlayed);

                    this.midiPlaybackSequencer.SysExMessagePlayed += new EventHandler <SysExMessageEventArgs>(midiPlaybackSequencer_SysExMessagePlayed);


                    playbackSequencerAttached = true;
                }

                if (MidiPlaybackInProgress == true)
                {
                    midiPlaybackSequencer.Stop();
                    MidiPlaybackInProgress = false;
                }

                if (midiPlaybackSequence != null)
                {
                    midiPlaybackSequence.Dispose();
                }
                midiPlaybackSequence        = new Sequence(FileType.Pro, EditorPro.Sequence.Division);
                midiPlaybackSequence.Format = EditorPro.Sequence.Format;

                midiPlaybackSequencer.Sequence = midiPlaybackSequence;

                int pos = 0;
                if (SelectedChord != null)
                {
                    pos = SelectedChord.DownTick - Utility.ScollToSelectionOffset;
                }

                var mainTrack = EditorPro.GuitarTrack.GetTrack();
                if (mainTrack != null)
                {
                    midiPlaybackSequence.AddTempo(EditorPro.GuitarTrack.GetTempoTrack().Clone());
                    Track t = new Track(FileType.Pro, mainTrack.Name);

                    foreach (var gc in EditorPro.GuitarTrack.Messages.Chords.Where(x => x.IsPureArpeggioHelper == false).ToList())
                    {
                        foreach (var cn in gc.Notes.Where(x => x.IsArpeggioNote == false && x.TickLength > 0 && x.Data2 >= 100).ToList())
                        {
                            t.Insert(gc.DownTick - Utility.ScollToSelectionOffset, new ChannelMessage(ChannelCommand.NoteOn, cn.Data1, cn.Data2));
                            t.Insert(gc.UpTick - 1 - Utility.ScollToSelectionOffset, new ChannelMessage(ChannelCommand.NoteOff, cn.Data1, 0));
                        }
                    }
                    midiPlaybackSequence.Add(t);
                }

                if (SelectedSong != null)
                {
                    if (SelectedSong.EnableSongMP3Playback &&
                        SelectedSong.SongMP3Location.FileExists())
                    {
                        LoadSongMP3Playback();
                    }
                }


                midiPlaybackSequencer.Start();

                MidiPlaybackPosition           = pos;
                midiPlaybackSequencer.Position = pos;

                MidiPlaybackInProgress = true;

                timerMidiPlayback.Enabled = true;
            }
            catch
            {
                MidiPlaybackInProgress    = false;
                timerMidiPlayback.Enabled = false;
            }
        }
        private void panelTracks_DragDrop(object sender, DragEventArgs e)
        {
            var droppedPETrack = e.GetDropObject<PEMidiTrack>();
            droppedPETrack.IfObjectNotNull(xx =>
            {
                if (droppedPETrack != sender)
                {
                    DoRequestBackup();

                    Track newTrack = null;
                    if (Sequence == null)
                    {
                        var targetType = this.IsPro ? FileType.Pro : FileType.Guitar5;

                        var seq = new Sequence(targetType, droppedPETrack.Track.Sequence.Division);
                        this.sequence = seq;
                        if (!droppedPETrack.Track.IsTempo())
                        {
                            var tempo = droppedPETrack.Track.Sequence.Tracks.Where(x => x.IsTempo());
                            if (tempo.Any())
                            {
                                seq.AddTempo(tempo.First().ConvertToPro());
                            }
                        }
                        newTrack = droppedPETrack.Track.Clone(seq.FileType);
                        seq.Add(newTrack);
                    }
                    else
                    {

                        if (this.Sequence == droppedPETrack.Track.Sequence)
                        {
                            this.Sequence.MoveTrack(droppedPETrack.Track.GetTrackIndex(), GetInsertAt());
                        }
                        else
                        {
                            newTrack = droppedPETrack.Track.Clone(Sequence.FileType);

                            sequence.Insert(GetInsertAt(), newTrack);

                            if (!sequence.Tracks.Any(x => x.IsTempo()))
                            {
                                var tempo = droppedPETrack.Track.Sequence.Tracks.Where(x => x.IsTempo());
                                if (tempo.Any())
                                {
                                    sequence.AddTempo(tempo.First().ConvertToPro());
                                }
                            }
                        }
                    }

                    CreatePanelTracks(this.sequence);
                    TrackAdded.IfObjectNotNull(tc => tc(this, this.sequence, newTrack, SelectedDifficulty));
                }
            });
            dragItem = null;
        }