Example #1
0
        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);
        }
Example #2
0
            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);
            }