internal Gp7Importer PrepareGp7ImporterWithBytes(byte[] buffer) { var readerBase = new Gp7Importer(); readerBase.Init(ByteBuffer.FromBuffer(buffer)); return(readerBase); }
public void TestGraceBeatGeneration() { var reader = new Gp7Importer(); var buffer = TestPlatform.LoadFile("TestFiles/Audio/GraceBeats.gp"); var settings = Settings.SongBook; reader.Init(ByteBuffer.FromBuffer(buffer), settings); var score = reader.ReadScore(); var handler = new FlatMidiEventGenerator(); var generator = new MidiFileGenerator(score, settings, handler); generator.Generate(); // on beat var tick = 0; var ticks = new FastList <int>(); Assert.AreEqual(tick, score.Tracks[0].Staves[0].Bars[0].Voices[0].Beats[0].AbsolutePlaybackStart); Assert.AreEqual(3840, score.Tracks[0].Staves[0].Bars[0].Voices[0].Beats[0].PlaybackDuration); ticks.Add(tick); tick += score.Tracks[0].Staves[0].Bars[0].Voices[0].Beats[0].PlaybackDuration; Assert.AreEqual(tick, score.Tracks[0].Staves[0].Bars[1].Voices[0].Beats[0].AbsolutePlaybackStart); Assert.AreEqual(120, score.Tracks[0].Staves[0].Bars[1].Voices[0].Beats[0].PlaybackDuration); ticks.Add(tick); tick += score.Tracks[0].Staves[0].Bars[1].Voices[0].Beats[0].PlaybackDuration; Assert.AreEqual(tick, score.Tracks[0].Staves[0].Bars[1].Voices[0].Beats[1].AbsolutePlaybackStart); Assert.AreEqual(3720, score.Tracks[0].Staves[0].Bars[1].Voices[0].Beats[1].PlaybackDuration); ticks.Add(tick); tick += score.Tracks[0].Staves[0].Bars[1].Voices[0].Beats[1].PlaybackDuration; // before beat Assert.AreEqual(tick, score.Tracks[0].Staves[0].Bars[2].Voices[0].Beats[0].AbsolutePlaybackStart); Assert.AreEqual(3720, score.Tracks[0].Staves[0].Bars[2].Voices[0].Beats[0].PlaybackDuration); ticks.Add(tick); tick += score.Tracks[0].Staves[0].Bars[2].Voices[0].Beats[0].PlaybackDuration; Assert.AreEqual(tick, score.Tracks[0].Staves[0].Bars[3].Voices[0].Beats[0].AbsolutePlaybackStart); Assert.AreEqual(120, score.Tracks[0].Staves[0].Bars[3].Voices[0].Beats[0].PlaybackDuration); ticks.Add(tick); tick += score.Tracks[0].Staves[0].Bars[3].Voices[0].Beats[0].PlaybackDuration; Assert.AreEqual(tick, score.Tracks[0].Staves[0].Bars[3].Voices[0].Beats[1].AbsolutePlaybackStart); Assert.AreEqual(3840, score.Tracks[0].Staves[0].Bars[3].Voices[0].Beats[1].PlaybackDuration); ticks.Add(tick); tick += score.Tracks[0].Staves[0].Bars[3].Voices[0].Beats[1].PlaybackDuration; // bend Assert.AreEqual(GraceType.BendGrace, score.Tracks[0].Staves[0].Bars[4].Voices[0].Beats[0].GraceType); Assert.AreEqual(tick, score.Tracks[0].Staves[0].Bars[4].Voices[0].Beats[0].AbsolutePlaybackStart); Assert.AreEqual(1920, score.Tracks[0].Staves[0].Bars[4].Voices[0].Beats[0].PlaybackDuration); ticks.Add(tick); tick += score.Tracks[0].Staves[0].Bars[4].Voices[0].Beats[0].PlaybackDuration; Assert.AreEqual(tick, score.Tracks[0].Staves[0].Bars[4].Voices[0].Beats[1].AbsolutePlaybackStart); Assert.AreEqual(1920, score.Tracks[0].Staves[0].Bars[4].Voices[0].Beats[1].PlaybackDuration); ticks.Add(tick); tick += score.Tracks[0].Staves[0].Bars[4].Voices[0].Beats[1].PlaybackDuration; var info = score.Tracks[0].PlaybackInfo; var expectedEvents = new FlatMidiEventGenerator.MidiEvent[] { // channel init new FlatMidiEventGenerator.ControlChangeEvent { Tick = 0, Track = 0, Channel = info.PrimaryChannel, Controller = (byte)ControllerType.VolumeCoarse, Value = 120 }, new FlatMidiEventGenerator.ControlChangeEvent { Tick = 0, Track = 0, Channel = info.PrimaryChannel, Controller = (byte)ControllerType.PanCoarse, Value = 64 }, new FlatMidiEventGenerator.ControlChangeEvent { Tick = 0, Track = 0, Channel = info.PrimaryChannel, Controller = (byte)ControllerType.ExpressionControllerCoarse, Value = 127 }, new FlatMidiEventGenerator.ControlChangeEvent { Tick = 0, Track = 0, Channel = info.PrimaryChannel, Controller = (byte)ControllerType.RegisteredParameterFine, Value = 0 }, new FlatMidiEventGenerator.ControlChangeEvent { Tick = 0, Track = 0, Channel = info.PrimaryChannel, Controller = (byte)ControllerType.RegisteredParameterCourse, Value = 0 }, new FlatMidiEventGenerator.ControlChangeEvent { Tick = 0, Track = 0, Channel = info.PrimaryChannel, Controller = (byte)ControllerType.DataEntryFine, Value = 0 }, new FlatMidiEventGenerator.ControlChangeEvent { Tick = 0, Track = 0, Channel = info.PrimaryChannel, Controller = (byte)ControllerType.DataEntryCoarse, Value = 12 }, new FlatMidiEventGenerator.ProgramChangeEvent { Tick = 0, Track = 0, Channel = info.PrimaryChannel, Program = (byte)info.Program }, new FlatMidiEventGenerator.ControlChangeEvent { Tick = 0, Track = 0, Channel = info.SecondaryChannel, Controller = (byte)ControllerType.VolumeCoarse, Value = 120 }, new FlatMidiEventGenerator.ControlChangeEvent { Tick = 0, Track = 0, Channel = info.SecondaryChannel, Controller = (byte)ControllerType.PanCoarse, Value = 64 }, new FlatMidiEventGenerator.ControlChangeEvent { Tick = 0, Track = 0, Channel = info.SecondaryChannel, Controller = (byte)ControllerType.ExpressionControllerCoarse, Value = 127 }, new FlatMidiEventGenerator.ControlChangeEvent { Tick = 0, Track = 0, Channel = info.SecondaryChannel, Controller = (byte)ControllerType.RegisteredParameterFine, Value = 0 }, new FlatMidiEventGenerator.ControlChangeEvent { Tick = 0, Track = 0, Channel = info.SecondaryChannel, Controller = (byte)ControllerType.RegisteredParameterCourse, Value = 0 }, new FlatMidiEventGenerator.ControlChangeEvent { Tick = 0, Track = 0, Channel = info.SecondaryChannel, Controller = (byte)ControllerType.DataEntryFine, Value = 0 }, new FlatMidiEventGenerator.ControlChangeEvent { Tick = 0, Track = 0, Channel = info.SecondaryChannel, Controller = (byte)ControllerType.DataEntryCoarse, Value = 12 }, new FlatMidiEventGenerator.ProgramChangeEvent { Tick = 0, Track = 0, Channel = info.SecondaryChannel, Program = (byte)info.Program }, new FlatMidiEventGenerator.TimeSignatureEvent { Tick = 0, Numerator = 4, Denominator = 4 }, new FlatMidiEventGenerator.TempoEvent { Tick = 0, Tempo = 120 }, // on beat new FlatMidiEventGenerator.BendEvent { Tick = ticks[0], Track = 0, Channel = info.PrimaryChannel, Value = 64 }, new FlatMidiEventGenerator.NoteEvent { Tick = ticks[0], Track = 0, Channel = info.PrimaryChannel, DynamicValue = DynamicValue.F, Key = (byte)67, Length = 3840 }, new FlatMidiEventGenerator.BendEvent { Tick = ticks[1], Track = 0, Channel = info.PrimaryChannel, Value = 64 }, new FlatMidiEventGenerator.NoteEvent { Tick = ticks[1], Track = 0, Channel = info.PrimaryChannel, DynamicValue = DynamicValue.F, Key = (byte)67, Length = 120 }, new FlatMidiEventGenerator.BendEvent { Tick = ticks[2], Track = 0, Channel = info.PrimaryChannel, Value = 64 }, new FlatMidiEventGenerator.NoteEvent { Tick = ticks[2], Track = 0, Channel = info.PrimaryChannel, DynamicValue = DynamicValue.F, Key = (byte)67, Length = 3720 }, // before beat new FlatMidiEventGenerator.BendEvent { Tick = ticks[3], Track = 0, Channel = info.PrimaryChannel, Value = 64 }, new FlatMidiEventGenerator.NoteEvent { Tick = ticks[3], Track = 0, Channel = info.PrimaryChannel, DynamicValue = DynamicValue.F, Key = (byte)67, Length = 3720 }, new FlatMidiEventGenerator.BendEvent { Tick = ticks[4], Track = 0, Channel = info.PrimaryChannel, Value = 64 }, new FlatMidiEventGenerator.NoteEvent { Tick = ticks[4], Track = 0, Channel = info.PrimaryChannel, DynamicValue = DynamicValue.F, Key = (byte)67, Length = 120 }, new FlatMidiEventGenerator.BendEvent { Tick = ticks[5], Track = 0, Channel = info.PrimaryChannel, Value = 64 }, new FlatMidiEventGenerator.NoteEvent { Tick = ticks[5], Track = 0, Channel = info.PrimaryChannel, DynamicValue = DynamicValue.F, Key = (byte)67, Length = 3840 }, // bend beat new FlatMidiEventGenerator.BendEvent { Tick = ticks[6], Track = 0, Channel = info.SecondaryChannel, Value = 64 }, new FlatMidiEventGenerator.BendEvent { Tick = ticks[6] + 13 * 0, Track = 0, Channel = info.SecondaryChannel, Value = 64 }, new FlatMidiEventGenerator.BendEvent { Tick = ticks[6] + 13 * 1, Track = 0, Channel = info.SecondaryChannel, Value = 65 }, new FlatMidiEventGenerator.BendEvent { Tick = ticks[6] + 13 * 2, Track = 0, Channel = info.SecondaryChannel, Value = 66 }, new FlatMidiEventGenerator.BendEvent { Tick = ticks[6] + 13 * 3, Track = 0, Channel = info.SecondaryChannel, Value = 67 }, new FlatMidiEventGenerator.BendEvent { Tick = ticks[6] + 13 * 4, Track = 0, Channel = info.SecondaryChannel, Value = 68 }, new FlatMidiEventGenerator.BendEvent { Tick = ticks[6] + 13 * 5, Track = 0, Channel = info.SecondaryChannel, Value = 69 }, new FlatMidiEventGenerator.BendEvent { Tick = ticks[6] + 13 * 6, Track = 0, Channel = info.SecondaryChannel, Value = 70 }, new FlatMidiEventGenerator.BendEvent { Tick = ticks[6] + 13 * 7, Track = 0, Channel = info.SecondaryChannel, Value = 71 }, new FlatMidiEventGenerator.BendEvent { Tick = ticks[6] + 13 * 8, Track = 0, Channel = info.SecondaryChannel, Value = 72 }, new FlatMidiEventGenerator.BendEvent { Tick = ticks[6] + 13 * 9, Track = 0, Channel = info.SecondaryChannel, Value = 73 }, new FlatMidiEventGenerator.BendEvent { Tick = ticks[6] + 13 * 10, Track = 0, Channel = info.SecondaryChannel, Value = 74 }, new FlatMidiEventGenerator.BendEvent { Tick = ticks[6] + 13 * 11 + 1, Track = 0, Channel = info.SecondaryChannel, Value = 75 }, new FlatMidiEventGenerator.NoteEvent { Tick = ticks[6], Track = 0, Channel = info.SecondaryChannel, Length = 3840, Key = 67, DynamicValue = DynamicValue.F }, // end of track new FlatMidiEventGenerator.TrackEndEvent { Tick = 19200, Track = 0 } // 3840 = end of bar }; for (int i = 0; i < handler.MidiEvents.Count; i++) { Logger.Info("Test", $"i[{i}] {handler.MidiEvents[i]}"); if (i < expectedEvents.Length) { Assert.AreEqual(expectedEvents[i], handler.MidiEvents[i]); } } Assert.AreEqual(expectedEvents.Length, handler.MidiEvents.Count); }