protected Measure ReadMeasure(Measure previous) { Measure measure = Measure.GetMeasureFromPrevious(previous); measure.Header = (byte)stream.ReadByte(); //TODO: move this code into header's setter // Numerator if ((measure.Header & 0x01) != 0) measure.NumeratorSignature = ReadByte(); // Denominator if ((measure.Header & 0x02) != 0) measure.DenominatorSignature = ReadByte(); // Beginning of repeat measure.BeginRepeat = ((measure.Header & 0x04) != 0); // End of repeat if ((measure.Header & 0x08) != 0) measure.EndRepeat = ReadByte(); // Number of alternate endings if ((measure.Header & 0x10) != 0) measure.NumberAltEnding = ReadByte(); // Marker if ((measure.Header & 0x20) != 0) measure.PresenceMarker = ReadMarker(); // Tonality if ((measure.Header & 0x40) != 0) { ReadByte(); ReadByte(); } //measure.TonalityMeasure = ReadKey(); // Presence of a double bar measure.PresenceDoubleBar = ((measure.Header & 0x80) != 0); return measure; }
protected Measure ReadMeasure(Measure previous) { Measure measure = Measure.GetMeasureFromPrevious(previous); measure.Header = (byte)stream.ReadByte(); //TODO: move this code into header's setter // Numerator if ((measure.Header & 0x01) != 0) measure.NumeratorSignature = ReadByte(); // Denominator if ((measure.Header & 0x02) != 0) measure.DenominatorSignature = ReadByte(); // Beginning of repeat measure.BeginRepeat = ((measure.Header & 0x04) != 0); // End of repeat if ((measure.Header & 0x08) != 0) measure.EndRepeat = (byte)((ReadByte() & 0xff) - 1); // Marker if ((measure.Header & 0x20) != 0) measure.PresenceMarker = ReadMarker(); // Number of alternate endings if ((measure.Header & 0x10) != 0) measure.NumberAltEnding = ReadByte(); // Tonality if ((measure.Header & 0x40) != 0) { //measure.TonalityMeasure = ReadKey(); ReadByte(); ReadByte(); } if ((measure.Header & 0x01) != 0) Skip(4); if ((measure.Header & 0x10) == 0) Skip(1); int tripletFeel = ReadByte(); //TODO Implement tripletFeel /*if (tripletFeel == 1) { header.setTripletFeel(TGMeasureHeader.TRIPLET_FEEL_EIGHTH); } else if (tripletFeel == 2) { header.setTripletFeel(TGMeasureHeader.TRIPLET_FEEL_SIXTEENTH); } else { header.setTripletFeel(TGMeasureHeader.TRIPLET_FEEL_NONE); }*/ // Presence of a double bar //measure.PresenceDoubleBar = ((measure.Header & 0x80) != 0); return measure; }
public static TabFile CreateFromGp(Stream stream) { TabFile file = new TabFile(); var gpFile = GpFactory.CreateFile(stream); int tracksCount = gpFile.Body.Tracks.Length; int measureTrackPairsCount = gpFile.Body.MeasureTrackPairs.Length; int measureCount = gpFile.Body.Measures.Length; //tracks init for (int i = 0; i < tracksCount; i++) { //TODO: init track header Track track = new Track { Index = i, Name = gpFile.Body.Tracks[i].Name, IsDrum = gpFile.Body.Tracks[i].IsDrumsTrack, StringNumber = gpFile.Body.Tracks[i].StringNumber }; for (int j = 0; j < measureCount; j++) { // if ((j + i) % tracksCount != 0) // continue;//other track measure //TODO init measure Measure measure = new Measure(); measure.NumeratorSignature = gpFile.Body.Measures[j].NumeratorSignature; measure.DenominatorSignature = gpFile.Body.Measures[j].DenominatorSignature; measure.StringsNumber = gpFile.Body.Tracks[i].StringNumber; //TODO: ambiguous usage foreach (var gpBeat in gpFile.Body.MeasureTrackPairs[j * tracksCount + i].Beats) { //TODO init beat Beat beat = new Beat(); beat.Duration = (Tablature.Duration)gpBeat.Duration; beat.Tuplet = gpBeat.NTuplet; beat.IsDotted = gpBeat.DottedNotes; //TODO this is for 6-strings only var stringCount = gpBeat.Strings.Length; beat.Notes = new List<Note>(); for (int s = 0; s < stringCount; s++) beat.Notes.Add(new Note() { Fret = "" }); int noteIndex = 0; for (int stringIndex = 0; stringIndex < stringCount; stringIndex++) { var gpIdx = stringCount-1-stringIndex; if (!gpBeat.Strings[gpIdx]) continue; var effects = gpBeat.Notes[noteIndex].Effects ?? new EffectsOnNote(); beat.Notes[stringIndex] = new Note() { Fret = gpBeat.Notes[noteIndex].FretNumber.ToString(), IsLegato = effects.HammerOnPullOff, Bend = effects.Bend == null ? null : new Bend(), Slide = effects.Slide == PhoneGuitarTab.Tablature.GuitarPro.Slide.NoSlide ? null : new Slide() }; noteIndex++; } measure.Beats.Add(beat); } track.Measures.Add(measure); } file.Tracks.Add(track); } return file; }
public static TabFile CreateFromGp(Stream stream) { TabFile file = new TabFile(); var gpFile = GpFactory.CreateFile(stream); int tracksCount = gpFile.Body.Tracks.Length; int measureTrackPairsCount = gpFile.Body.MeasureTrackPairs.Length; int measureCount = gpFile.Body.Measures.Length; //tracks init for (int i = 0; i < tracksCount; i++) { //TODO: init track header Track track = new Track { Index = i, Name = gpFile.Body.Tracks[i].Name, IsDrum = gpFile.Body.Tracks[i].IsDrumsTrack, StringNumber = gpFile.Body.Tracks[i].StringNumber }; for (int j = 0; j < measureCount; j++) { // if ((j + i) % tracksCount != 0) // continue;//other track measure //TODO init measure Measure measure = new Measure(); measure.NumeratorSignature = gpFile.Body.Measures[j].NumeratorSignature; measure.DenominatorSignature = gpFile.Body.Measures[j].DenominatorSignature; measure.StringsNumber = gpFile.Body.Tracks[i].StringNumber; //TODO: ambiguous usage foreach (var gpBeat in gpFile.Body.MeasureTrackPairs[j * tracksCount + i].Beats) { //TODO init beat Beat beat = new Beat(); beat.Duration = (Tablature.Duration)gpBeat.Duration; beat.Tuplet = gpBeat.NTuplet; beat.IsDotted = gpBeat.DottedNotes; //TODO this is for 6-strings only var stringCount = gpBeat.Strings.Length; beat.Notes = new List <Note>(); for (int s = 0; s < stringCount; s++) { beat.Notes.Add(new Note() { Fret = "" }); } int noteIndex = 0; for (int stringIndex = 0; stringIndex < stringCount; stringIndex++) { var gpIdx = stringCount - 1 - stringIndex; if (!gpBeat.Strings[gpIdx]) { continue; } var effects = gpBeat.Notes[noteIndex].Effects ?? new EffectsOnNote(); beat.Notes[stringIndex] = new Note() { Fret = gpBeat.Notes[noteIndex].FretNumber.ToString(), IsLegato = effects.HammerOnPullOff, Bend = effects.Bend == null ? null : new Bend(), Slide = effects.Slide == PhoneGuitarTab.Tablature.GuitarPro.Slide.NoSlide ? null : new Slide() }; noteIndex++; } measure.Beats.Add(beat); } track.Measures.Add(measure); } file.Tracks.Add(track); } return(file); }