private void onMessageRecevied(object sender, MidiReceivedEventArgs e) { long time = CSoundManager.rc演奏用タイマ.nシステム時刻ms; // lock前に取得。演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 int dev = int.Parse((sender as IMidiInput).Details.Id); lock (this.objMidiIn排他用) { if ((this.listInputDevices != null) && (this.listInputDevices.Count != 0)) { foreach (IInputDevice device in this.listInputDevices) { CInputMIDI tmidi = device as CInputMIDI; if ((tmidi != null) && (tmidi.ID == dev)) { for (int i = 0; i < e.Length / 3; i++) { tmidi.tメッセージからMIDI信号のみ受信(dev, time, e.Data, i); } break; } } } } }
private static void Input_MessageReceived(object sender, MidiReceivedEventArgs e) { if (e.Data.Length > 2) { //Console.WriteLine($"{e.Data[0].ToString("x2")} - {e.Data[1].ToString("x2")} - {e.Data[2].ToString("x2")}"); } }
private void OnMessageReceived(object sender, MidiReceivedEventArgs args) { var data = args.Length == args.Data.Length && args.Start == 0 ? args.Data : args.Data.Skip(args.Start).Take(args.Length).ToArray(); var message = new Model.Midi.MidiMessage(data, args.Timestamp); MessageReceived?.Invoke(this, message); }
private void ConsumeMidiEvent(object?sender, MidiReceivedEventArgs message) { var converted = ConvertToMidiEvent(message); if (converted != null) { _eventBus.Publish(converted); } }
private void MidiInput_MessageReceived(object sender, MidiReceivedEventArgs e) { if (FilterMidiMsg(e.Data)) { vMixer.remoteSet = true; DecodeMsg(e.Data); //Just in case the message cannot be decoded, reset the flag vMixer.remoteSet = false; } }
void ProcessMessageReceived(object sender, MidiReceivedEventArgs e) { var messageType = (MessageType)(e.Data[0] >> 4); // managed-midi breaks on clock message through Port.Send if (messageType != MessageType.Clock) { MessageReceived.Invoke(e); } // Extract the information from the MIDI byte array, // and invoke the respective callbacks switch (messageType) { case MessageType.NoteOn: { var noteNumber = (int)e.Data[1]; var velocity = (int)e.Data[2]; if (velocity != 0) { NoteOn.Invoke(noteNumber, velocity); } else { NoteOff.Invoke(noteNumber); } break; } case MessageType.NoteOff: { var noteNumber = (int)e.Data[1]; NoteOff.Invoke(noteNumber); break; } case MessageType.ControlChange: { var ccNumber = (int)e.Data[1]; var value = (int)e.Data[2]; ControlChange.Invoke(ccNumber, value); break; } case MessageType.Clock: { CalculateMidiClock(e.Timestamp); break; } default: break; } }
//private static void PatchChange(int value, int channel, int device = 0) //{ // MidiOutDevice(device).Send(MidiMessage.ChangePatch(value, channel).RawData); //} //public static void CCOut(string allparams) //{ // string[] words = allparams.Split('|'); // new Thread(() => // { // Thread.CurrentThread.IsBackground = true; // try // { // CCOut(Convert.ToInt16(words[0]), Convert.ToInt16(words[1]), Convert.ToInt16(words[2]),Midi.MidiOutDeviceNumber); // } // catch (Exception ex) // { // Debug.WriteLine("CCOut:", ex); // } // }).Start(); //} //public static void NoteOut(string allparams) //{ // string[] words = allparams.Split('|'); // new Thread(() => // { // Thread.CurrentThread.IsBackground = true; // Thread.CurrentThread.Priority = ThreadPriority.Highest; // try // { // int n, v, c, l; // if (int.TryParse(words[0], out n) && int.TryParse(words[1], out v) && int.TryParse(words[2], out c) && int.TryParse(words[3], out l)) // { // NoteOut(n,v,c,l, Midi.MidiOutDeviceNumber); // } // else // { // Debug.WriteLine("NoteOut:","Failed to input:"+ allparams); // } // } // catch (Exception ex) // { // Debug.WriteLine("NoteOut:", ex); // } // }).Start(); //} //public static void PatchChange(string allparams) //{ // string[] words = allparams.Split('|'); // new Thread(() => // { // Thread.CurrentThread.IsBackground = true; // try // { // PatchChange(Convert.ToInt16(words[0]), Convert.ToInt16(words[1]), Midi.MidiOutDeviceNumber); // } // catch (Exception ex) // { // Debug.WriteLine("PatchChange:", ex); // } // }).Start(); //} private static void Event_Received(object sender, MidiReceivedEventArgs eargs) { MidiEvent e = MidiEvent.Convert(eargs.Data, 0, eargs.Length).First(); Debug.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(e, Newtonsoft.Json.Formatting.Indented)); Debug.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(MidiEvent.Convert(eargs.Data, 0, eargs.Length).First(), Newtonsoft.Json.Formatting.Indented)); try { //// Exit if the MidiEvent is null or is the AutoSensing command code if (e.EventType == MidiEvent.ActiveSense) { return; } else if (e.EventType == MidiEvent.CC) { //TODO: value is wrong Midi.SetCCValue(e.Channel, (int)e.Msb, (int)e.Lsb); } //else if ( e.EventType == MidiEvent.TimingClock) //{ // rawticks++; // if (rawticks % tickdivider == 0) // { // // if (clockrunning ) // { // Combustion.Tick(); // } // } //} //else if ( e.EventType == MidiEvent.StartSequence) //{ // rawticks = 0; // clockrunning = true; // Combustion.Start(); //} //else if ( e.EventType == MidiEvent.StopSequence) //{ // clockrunning = false; // Combustion.Stop(); //} else { Debug.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(e, Newtonsoft.Json.Formatting.Indented)); Debug.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(MidiEvent.Convert(eargs.Data, 0, eargs.Length).First(), Newtonsoft.Json.Formatting.Indented)); } } catch (Exception ex) { Debug.WriteLine(ex.Message); } }
public AlsaMidiInput(AlsaSequencer seq, AlsaMidiPortDetails appPort, AlsaMidiPortDetails sourcePort) { this.seq = seq; this.port = appPort; byte [] buffer = new byte [0x200]; seq.StartListening(port.PortInfo.Port, buffer, (buf, start, len) => { var args = new MidiReceivedEventArgs() { Data = buf, Start = start, Length = len, Timestamp = 0 }; MessageReceived(this, args); }); }
void OnMidiData(object a, MidiReceivedEventArgs midi) { // If the data is for this control if (IsForMe(midi.Data)) { if (midi.Data[0] == MidiEvent.NoteOn) { NoteOn(midi.Data); } if (midi.Data[0] == MidiEvent.NoteOff) { NoteOff(midi.Data); } } }
private void Input_MessageReceived(object sender, MidiReceivedEventArgs e) { var response = new MidiResponse(e.Data); if (_responseHandlers.TryRemove(e.Timestamp, out var handler)) { handler(response); } if (MidiResponse != null) { MidiResponse(this, new MidiResponseReceivedEventArgs(response)); } }
void OnMidiData(object a, MidiReceivedEventArgs midi) { // If the data is for this control if (IsForMe(midi.Data)) { // IEncoder is being rotated upwards if (IsEncoderUp(midi.Data)) { OnEncoderUp(midi.Data); } // Encoder is being rotated downwards if (IsEncoderDown(midi.Data)) { OnEncoderDown(midi.Data); } } }
private void onMidiMessageReceived(object sender, MidiReceivedEventArgs e) { Debug.Assert(sender is IMidiInput); var senderId = ((IMidiInput)sender).Details.Id; try { for (int i = e.Start; i < e.Length;) { readEvent(e.Data, senderId, ref i, out byte eventType, out byte key, out byte velocity); dispatchEvent(eventType, key, velocity); } } catch (Exception exception) { var dataString = string.Join("-", e.Data.Select(b => b.ToString("X2"))); Logger.Error(exception, $"An exception occurred while reading MIDI data from sender {senderId}: {dataString}"); } }
private void OnMidiMessageReceived(object sender, MidiReceivedEventArgs e) { if (Output == null) { return; } if (Calculator != null && e.Data[0] == MidiEvent.NoteOn) { var note = e.Data[1]; var velocity = e.Data[2]; var newValue = Calculator.Calculate(velocity); Output.Send(new byte[] { MidiEvent.NoteOn, note, Convert.ToByte(newValue) }, e.Start, e.Length, e.Timestamp); OnVelocityConverted?.Invoke(velocity, newValue); } else { Output.Send(e.Data, e.Start, e.Length, e.Timestamp); } }
private void Message_Received(object sender, MidiReceivedEventArgs eargs) { MidiEvent e = MidiEvent.Convert(eargs.Data, 0, eargs.Length).First(); if (e.EventType == MidiEvent.CC) { int CC = (int)e.Msb; int value = (int)e.Lsb; if ((CC >= 48) && (CC <= 55)) { Faders[CC - 48] = value; } return; } int NoteNumber = (int)e.Msb; if (NoteNumber >= 84 && NoteNumber <= 88 && ((int)CurrentPageType) != (NoteNumber - 84)) { pagetypehistory.Add(CurrentPageType); CurrentPageType = (PageType)(NoteNumber - 84); } else if (shiftdown && (NoteNumber == 66 || NoteNumber == 67) && e.EventType == MidiEvent.NoteOn) { pagetypehistory.Add(CurrentPageType); if (NoteNumber == 67) { CurrentPageType = Enum.GetValues(typeof(PageType)).Cast <PageType>().Where(ze => (int)ze > (int)CurrentPageType).OrderBy(ze => ze).FirstOrDefault(); } else if (NoteNumber == 67) { CurrentPageType = Enum.GetValues(typeof(PageType)).Cast <PageType>().Where(ze => (int)ze < (int)CurrentPageType).OrderByDescending(ze => ze).FirstOrDefault(); } } else if (NoteNumber == 98 & (e.EventType == MidiEvent.NoteOn || e.EventType == MidiEvent.NoteOff)) { shiftdown = !shiftdown; } else if (CurrentPageType == PageType.Seq64 && e.EventType == MidiEvent.NoteOn) { if (NoteNumber <= 63) { if (shiftdown) { Seq64Length = NoteNumber + 1; } else { Seq64[NoteNumber] = !Seq64[NoteNumber]; } } if (NoteNumber == 89) { foreach (var x in Seq64.Keys.ToList()) { Seq64[x] = false; } } } else if (CurrentPageType == PageType.Clip && e.EventType == MidiEvent.NoteOn) { if (NoteNumber <= 63) { Clips[NoteNumber] = !Clips[NoteNumber]; } if (NoteNumber == 89) { foreach (var x in Clips.Keys.ToList()) { Clips[x] = false; } } } else if (CurrentPageType == PageType.Seq8a && e.EventType == MidiEvent.NoteOn) { if (NoteNumber <= 63) { Seq8a[(NoteNumber - NoteNumber % 8) / 8][NoteNumber % 8] = !Seq8a[(NoteNumber - NoteNumber % 8) / 8][NoteNumber % 8]; } if (NoteNumber == 89) { foreach (var x in Seq8a.Keys.ToList()) { foreach (var y in Seq8a[x].Keys.ToList()) { Seq8a[x][y] = false; } } } } else if (CurrentPageType == PageType.Seq8b && e.EventType == MidiEvent.NoteOn) { if (NoteNumber <= 63) { Seq8b[(NoteNumber - NoteNumber % 8) / 8][NoteNumber % 8] = !Seq8b[(NoteNumber - NoteNumber % 8) / 8][NoteNumber % 8]; } if (NoteNumber == 89) { foreach (var x in Seq8b.Keys.ToList()) { foreach (var y in Seq8b[x].Keys.ToList()) { Seq8b[x][y] = false; } } } } else if (CurrentPageType == PageType.Chord && e.EventType == MidiEvent.NoteOn) { if (NoteNumber <= 63) { if (Chords[(NoteNumber - NoteNumber % 8) / 8].Contains(NoteNumber % 8)) { Chords[(NoteNumber - NoteNumber % 8) / 8].Remove(NoteNumber % 8); } else { Chords[(NoteNumber - NoteNumber % 8) / 8].Add(NoteNumber % 8); } } if (NoteNumber == 89) { foreach (var x in Chords.Keys.ToList()) { Chords[x].Clear(); } } } DrawPage(); }
private static void Input_MessageReceived(object sender, MidiReceivedEventArgs e) { throw new NotImplementedException(); }
private static RawMidiMessage ConvertMessage(MidiReceivedEventArgs args) => args.Length == args.Data.Length && args.Start == 0 ? new RawMidiMessage(args.Data) : new RawMidiMessage(args.Data.Skip(args.Start).Take(args.Length).ToArray());
public void UpdateState(MidiReceivedEventArgs args) { rawData = args.Data; }
private void Input_MessageReceived(object sender, MidiReceivedEventArgs e) { if (e.Length != 3) { return; } var x = e.Data[0]; var y = e.Data[1]; var z = e.Data[2]; if (x == 0x90) { if (y < 0x18) { var channel = y & 0x07; var mode = (y & 0xFC) >> 3; if (mode < 3 && z != 0) { var value = (Mode)(mode + 1); Channels[channel].Mode = (Channels[channel].Mode == value) ? 0 : value; } if (z == 0x7F) { Channels[channel].ButtonPresses++; } } Backward = (y == 0x5B && z == 0x7F); Forward = (y == 0x5C && z == 0x7F); Stop = (y == 0x5D && z == 0x7F); Play = (y == 0x5E && z == 0x7F); Rec = (y == 0x5F && z == 0x7F); } else if (x == 0xb0) { var channel = y & 0x07; if (z == 0x3F) { Channels[channel].Select = 127; } else if (z == 0x7F) { Channels[channel].Select = 0; } else if ((z & 0x40) > 0) { Channels[channel].Select -= z & 0x03; } else { Channels[channel].Select += z & 0x03; } Channels[channel].Select = Math.Max(Math.Min(Channels[channel].Select, 127), 0); } else if ((x & 0xe0) > 0) { var channel = x & 0x07; var intensity = y; Channels[channel].Intensity = intensity; } Console.SetCursorPosition(0, 0); Console.WriteLine($"{x:X2} {y:X2} {z:X2}."); Console.WriteLine(); Console.WriteLine(" M | I IL | S SL | "); for (var i = 0; i < 8; i++) { Console.WriteLine( $"- " + $"{((int)Channels[i].Mode):000} | " + $"{Channels[i].Intensity:000} " + $"{Channels[i].IntensityLog:000} | " + $"{Channels[i].Select:000} " + $"{Channels[i].SelectLog:000} | " + $"{Channels[i].ButtonPresses}" + $" "); } Console.WriteLine(); Console.WriteLine(Play ? "Play" : " "); Console.WriteLine(Rec ? "Rec" : " "); Console.WriteLine(Stop ? "Stop" : " "); }
private object?ConvertToMidiEvent(MidiReceivedEventArgs message) { var data = message.Data; if (!data.Any()) { return(null); } switch (data[0]) { case MidiEvent.NoteOn: { var keyIndex = data[1]; var velocity = data[2]; // For key up, sometimes NoteOff is not // sent, but instead NoteOn with velocity = 0 if (velocity == 0) { return(new KeyReleased(keyIndex)); } return(new KeyPressed(keyIndex, velocity)); } case MidiEvent.NoteOff: { var keyIndex = data[1]; return(new KeyReleased(keyIndex)); } // Helpful: https://www.midi.org/specifications-old/item/table-1-summary-of-midi-message case MidiEvent.CC: { var pedalId = data[1]; var position = data[2]; switch (pedalId) { case 64: if (position > 0) { return(new SustainPedalPressed()); } return(new SustainPedalReleased()); case 66: if (position > 0) { return(new SostenutoPedalPressed()); } return(new SostenutoPedalReleased()); case 67: if (position > 0) { return(new SoftPedalPressed()); } return(new SoftPedalReleased()); } break; } } // No other events, return null return(null); }