public NAudio.Midi.MidiEventCollection Process() { var mid = new NAudio.Midi.MidiEventCollection(1, Fluid.DMUS_PPQ); mid.AddTrack(); for (var i = 0; i < lbinbins.Count; i++) { var lbin = lbinbins[i]; var patch_ = (int)(lbin.dwPatch & 0xFF); //MSB, LSB + patch on the least 8 bits var patch = new NAudio.Midi.PatchChangeEvent(0, (int)lbin.dwPChannel + 1, patch_); mid.AddEvent(patch, 0); } mid.AddEvent(new NAudio.Midi.TempoEvent((int)(Fluid.DMUS_MusicTimeMilisecond / tetr.dblTempo), 0), 0); for (var i = 0; i < tims.Count; i++) { var tim = tims[i]; //NAudio.Midi.TimeSignatureEvent time = new NAudio.Midi.TimeSignatureEvent(tim.lTime, ,,tim); } for (var i = 0; i < seqt.Count; i++) { var ss = seqt[i]; var note = new NAudio.Midi.NoteEvent(ss.mtTime, (int)ss.dwPChannel + 1, NAudio.Midi.MidiCommandCode.NoteOn, ss.bByte1, ss.bByte2); mid.AddEvent(note, 0); note = new NAudio.Midi.NoteEvent(ss.mtTime + ss.mtDuration, (int)ss.dwPChannel + 1, NAudio.Midi.MidiCommandCode.NoteOff, ss.bByte1, ss.bByte2); mid.AddEvent(note, 0); } for (var i = 0; i < 16; i++) { //native build of naudio doesn't have the numbers in the enum. //you can manually force it to take the number by doing (NAudio.Midi.MidiController)number //as suggested on https://github.com/FluidSynth/fluidsynth/issues/544#issuecomment-507844553 mid.AddEvent(new NAudio.Midi.ControlChangeEvent(0, i + 1, (NAudio.Midi.MidiController)OpenVIII.AV.Midi.MidiController.NRPN_MSB, 120), 0); //99 mid.AddEvent(new NAudio.Midi.ControlChangeEvent(0, i + 1, (NAudio.Midi.MidiController)OpenVIII.AV.Midi.MidiController.NRPN_LSB, 38), 0); //98 mid.AddEvent(new NAudio.Midi.ControlChangeEvent(0, i + 1, (NAudio.Midi.MidiController)OpenVIII.AV.Midi.MidiController.LSBGenerator38, 127), 0); //38 mid.AddEvent(new NAudio.Midi.ControlChangeEvent(0, i + 1, (NAudio.Midi.MidiController)OpenVIII.AV.Midi.MidiController.MSGgenerator38, 110), 0); //6 //The DLS loader has wrong release/hold/attack so we need to tweak it via generators. It's prior to change } return(mid); }
private void MessageReceived(object sender, NAudio.Midi.MidiInMessageEventArgs e) { int id = -1; int value = -1; try { NAudio.Midi.ControlChangeEvent evt = (NAudio.Midi.ControlChangeEvent)e.MidiEvent; id = (int)evt.Controller; value = evt.ControllerValue; } catch (Exception ex) { } try { NAudio.Midi.NoteEvent evt = (NAudio.Midi.NoteEvent)e.MidiEvent; id = evt.NoteNumber; value = evt.Velocity > 0 ? 1 : 0; } catch (Exception ex) { } if (id == -1) { return; } try { Device.Values[id].Value = value; if (ValueChange != null) { ValueChange(this, Device.Values[id]); } } catch (Exception ex) { } Console.WriteLine(id); Console.WriteLine(Device.Values[id].ColumnIndex + "-" + Device.Values[id].ChannelKey + ": " + value); }