private void ParseChannelMessage() { if (trackIndex >= trackData.Length) { throw new MidiFileException("End of track unexpectedly reached."); } var command = ChannelMessage.UnpackCommand(status); var channel = ChannelMessage.UnpackMidiChannel(status); var data1 = trackData[trackIndex]; trackIndex++; var data2 = 0; if (ChannelMessage.DataBytesPerType(command) == 2) { if (trackIndex >= trackData.Length) { throw new MidiFileException("End of track unexpectedly reached."); } data2 = trackData[trackIndex]; trackIndex++; } newTrack.Insert(ticks, new ChannelMessage(command, data1, data2, channel)); runningStatus = status; }
private void ParseChannelMessage() { if (trackIndex >= trackData.Length) { throw new MidiFileException("End of track unexpectedly reached."); } cmBuilder.Command = ChannelMessage.UnpackCommand(status); cmBuilder.MidiChannel = ChannelMessage.UnpackMidiChannel(status); cmBuilder.Data1 = trackData[trackIndex]; trackIndex++; if (ChannelMessage.DataBytesPerType(cmBuilder.Command) == 2) { if (trackIndex >= trackData.Length) { throw new MidiFileException("End of track unexpectedly reached."); } cmBuilder.Data2 = trackData[trackIndex]; trackIndex++; } cmBuilder.Build(); newTrack.Insert(ticks, cmBuilder.Result); runningStatus = status; }
public void SetChanMessageData(int data) { MessageData = data; Command = ChannelMessage.UnpackCommand(MessageData); Channel = ChannelMessage.UnpackMidiChannel(MessageData); Data1 = ChannelMessage.UnpackData1(MessageData); Data2 = ChannelMessage.UnpackData2(MessageData); Text = GetText(); }
private void ParseChannelMessage() { if (trackIndex >= trackData.Length) { //throw new MidiFileException("End of track unexpectedly reached."); Console.Write("\nERROR: End of track unexpectedly reached (TrackReader.cs ParseChannelMessage)"); return; } cmBuilder.Command = ChannelMessage.UnpackCommand(status); cmBuilder.MidiChannel = ChannelMessage.UnpackMidiChannel(status); cmBuilder.Data1 = trackData[trackIndex]; // PROGRAM CHANGE if (cmBuilder.Command == ChannelCommand.ProgramChange) { newTrack.ProgramChange = cmBuilder.Data1; newTrack.MidiChannel = cmBuilder.MidiChannel; } trackIndex++; if (ChannelMessage.DataBytesPerType(cmBuilder.Command) == 2) { if (trackIndex >= trackData.Length) { //throw new MidiFileException("End of track unexpectedly reached."); Console.Write("\nERROR: End of track unexpectedly reached (TrackReader.cs ParseChannelMessage)"); return; } // FAB : 07/08/2014 if (trackData[trackIndex] <= 127) { cmBuilder.Data2 = trackData[trackIndex]; } else { cmBuilder.Data2 = 127; } if (cmBuilder.Data1 == 0x07) { // Volume de la piste newTrack.Volume = cmBuilder.Data2; } else if (cmBuilder.Data1 == 0x5B) { // Reverb 91 // FAB 2017 newTrack.Reverb = cmBuilder.Data2; } else if (cmBuilder.Data1 == 0x0A) { // pan 10 // FAB 2017 newTrack.Pan = cmBuilder.Data2; } // Collecte des notes if (cmBuilder.Command == ChannelCommand.NoteOn) { newTrack.ContainsNotes = true; newTrack.Visible = true; // Data1 = Note number // Data2 = Velocity if (ticks >= 0 && cmBuilder.Data2 > 0) { // FAB : // Add a MidiNote to this track. This is called for each NoteOn event */ newTrack.MidiChannel = cmBuilder.MidiChannel; MidiNote note = new MidiNote(ticks, newTrack.MidiChannel, cmBuilder.Data1, 0, cmBuilder.Data2, false); newTrack.Notes.Add(note); } else { // FAB if (newTrack.Notes.Count > 0) { newTrack.MidiChannel = cmBuilder.MidiChannel; NoteOff(newTrack.MidiChannel, cmBuilder.Data1, ticks); } } } else if (ticks >= 0 && cmBuilder.Command == ChannelCommand.NoteOff) { // FAB newTrack.ContainsNotes = true; newTrack.Visible = true; newTrack.MidiChannel = cmBuilder.MidiChannel; NoteOff(newTrack.MidiChannel, cmBuilder.Data1, ticks); } trackIndex++; } cmBuilder.Build(); newTrack.Insert(ticks, cmBuilder.Result); runningStatus = status; }