示例#1
0
        public List <MasterBar> RetrieveMasterBars(GpFile file)
        {
            List <MasterBar> masterBars = new List <MasterBar>();

            foreach (MeasureHeader mh in file.MeasureHeaders)
            {
                //(mh.timeSignature.denominator) * mh.timeSignature.numerator;
                MasterBar mb = new MasterBar();
                mb.Time = mh.TimeSignature.Numerator + "/" + mh.TimeSignature.Denominator.Value;
                mb.Num  = mh.TimeSignature.Numerator;
                mb.Den  = mh.TimeSignature.Denominator.Value;
                string keyFull = "" + (int)mh.KeySignature;
                if (!(keyFull.Length == 1))
                {
                    mb.KeyType = int.Parse(keyFull.Substring(keyFull.Length - 1));
                    mb.Key     = int.Parse(keyFull.Substring(0, keyFull.Length - 1));
                }
                else
                {
                    mb.Key     = 0;
                    mb.KeyType = int.Parse(keyFull);
                }
                mb.KeyBoth = keyFull; //Useful for midiExport later

                mb.TripletFeel = mh.TripletFeel;

                masterBars.Add(mb);
            }

            return(masterBars);
        }
示例#2
0
        public List <Track> RetrieveTracks(GpFile file)
        {
            List <Track> tracks = new List <Track>();

            foreach (GP.Track tr in file.Tracks)
            {
                Track track = new Track();
                track.Name          = tr.Name;
                track.Patch         = tr.Channel.Instrument;
                track.Port          = tr.Port;
                track.Channel       = tr.Channel.Channel;
                track.PlaybackState = PlaybackStates.Def;
                track.Capo          = tr.Offset;
                if (tr.IsMute)
                {
                    track.PlaybackState = PlaybackStates.Mute;
                }
                if (tr.IsSolo)
                {
                    track.PlaybackState = PlaybackStates.Solo;
                }
                track.Tuning = GetTuning(tr.Strings);

                track.Notes = RetrieveNotes(tr, track.Tuning, track);
                tracks.Add(track);
            }

            return(tracks);
        }
示例#3
0
 public Track(GpFile song, int number, List <GuitarString> strings = null, List <Measure> measures = null)
 {
     this.Song   = song;
     this.Number = number;
     if (strings != null)
     {
         this.Strings = strings;
     }
     if (measures != null)
     {
         this.Measures = measures;
     }
 }
示例#4
0
 public NativeFormat(GpFile fromFile) : this()
 {
     Title      = fromFile.Title;
     Subtitle   = fromFile.Subtitle;
     Artist     = fromFile.Interpret;
     Album      = fromFile.Album;
     Words      = fromFile.Words;
     Music      = fromFile.Music;
     Tempos     = RetrieveTempos(fromFile);
     Directions = fromFile.Directions;
     BarMaster  = RetrieveMasterBars(fromFile);
     Tracks     = RetrieveTracks(fromFile);
     Lyrics     = fromFile.Lyrics;
     UpdateAvailableChannels();
 }
示例#5
0
        private void ReadFile(string path)
        {
            string extension = string.Empty;


            extension = Path.GetExtension(path).ToUpper();

            switch (extension)
            {
            case ".GP3":
                _gpFile = new Gp3File(File.ReadAllBytes(path));
                break;

            case ".GP4":
                _gpFile = new Gp4File(File.ReadAllBytes(path));
                break;
            }
            _gpFile?.ReadSong();
        }
示例#6
0
 public MainForm()
 {
     InitializeComponent();
     _gpFile = null;
     _song   = null;
 }
示例#7
0
        public List <Tempo> RetrieveTempos(GpFile file)
        {
            List <Tempo> tempos = new List <Tempo>();
            //Version < 4 -> look at Measure Headers, >= 4 look at mixtablechanges


            int version = file.VersionTuple[0];

            if (version < 4) //Look at MeasureHeaders
            {
                //Get inital tempo from file header
                Tempo init = new Tempo();
                init.Position = 0;
                init.Value    = file.Tempo;
                if (init.Value != 0)
                {
                    tempos.Add(init);
                }

                int   pos      = 0;
                float oldTempo = file.Tempo;
                foreach (MeasureHeader mh in file.MeasureHeaders)
                {
                    Tempo t = new Tempo();
                    t.Value    = mh.Tempo.Value;
                    t.Position = pos;
                    pos       += FlipDuration(mh.TimeSignature.Denominator) * mh.TimeSignature.Numerator;
                    if (oldTempo != t.Value)
                    {
                        tempos.Add(t);
                    }
                    oldTempo = t.Value;
                }
            }
            else //Look at MixtableChanges - only on track 1, voice 1
            {
                int pos = 0;

                //Get inital tempo from file header
                Tempo init = new Tempo();
                init.Position = 0;
                init.Value    = file.Tempo;
                if (init.Value != 0)
                {
                    tempos.Add(init);
                }
                foreach (Measure m in file.Tracks[0].Measures)
                {
                    int smallPos = 0; //inner measure position
                    if (m.Voices.Count == 0)
                    {
                        continue;
                    }

                    foreach (Beat b in m.Voices[0].Beats)
                    {
                        if (b.Effect != null)
                        {
                            if (b.Effect.MixTableChange != null)
                            {
                                MixTableItem tempo = b.Effect.MixTableChange.Tempo;
                                if (tempo != null)
                                {
                                    Tempo t = new Tempo();
                                    t.Value    = tempo.Value;
                                    t.Position = pos + smallPos;

                                    tempos.Add(t);
                                }
                            }
                        }

                        smallPos += FlipDuration(b.Duration);
                    }
                    pos += FlipDuration(m.Header.TimeSignature.Denominator) * m.Header.TimeSignature.Numerator;
                }
            }

            return(tempos);
        }