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); }
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); }
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; } }
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(); }
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(); }
public MainForm() { InitializeComponent(); _gpFile = null; _song = null; }
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); }