From 55b06fe771462ac7a28d4d2912dd3cc3446d5047 Mon Sep 17 00:00:00 2001 From: tzim Date: Wed, 13 Nov 2013 11:15:34 +0000 Subject: [PATCH] Mise au point de l'interrop avec la lib midi --- DMX-2.0/MidiEventProvider.PInvoke.cs | 53 ++++++++++++++++++++++------ DMX-2.0/MidiEventProvider.cs | 21 ++++------- 2 files changed, 49 insertions(+), 25 deletions(-) diff --git a/DMX-2.0/MidiEventProvider.PInvoke.cs b/DMX-2.0/MidiEventProvider.PInvoke.cs index 379e810..b302e49 100644 --- a/DMX-2.0/MidiEventProvider.PInvoke.cs +++ b/DMX-2.0/MidiEventProvider.PInvoke.cs @@ -5,7 +5,7 @@ namespace DMX2 { public partial class MidiEventProvider { - const string ASOUND_LIB_NAME = "libasound.so.2"; + const string ASOUND_LIB_NAME = "libasound.so"; const int SND_SEQ_NONBLOCK = 1; const int SND_SEQ_OPEN_INPUT = 1; const int SND_SEQ_OPEN_OUTPUT = 2; @@ -160,6 +160,37 @@ namespace DMX2 public byte port; } + [StructLayout(LayoutKind.Sequential)] + struct snd_seq_ev_ctrl_t { + public byte channel; + public byte unused1; + public byte unused2; + public byte unused3; + public uint param; + public int value; + } + + [StructLayout(LayoutKind.Sequential)] + struct snd_seq_ev_note_t { + public byte channel; + public byte note; + public byte velocity; + public byte off_velocity; + public uint duration; + } + + [StructLayout(LayoutKind.Sequential)] + struct snd_seq_connect_t { + public snd_seq_addr_t sender; + public snd_seq_addr_t dest; + } + + [StructLayout(LayoutKind.Sequential)] + struct snd_seq_result_t { + public int eventt; + public int result; + } + [StructLayout(LayoutKind.Explicit)] struct snd_seq_event_t { [FieldOffset(0)] @@ -172,18 +203,18 @@ namespace DMX2 public byte queue; [FieldOffset(4)] public uint time; - [FieldOffset(8)] - public snd_seq_addr_t source; - [FieldOffset(10)] - public snd_seq_addr_t dest; [FieldOffset(12)] - public byte data_control_channel; - [FieldOffset(13)] - public byte data_control_unused; + public snd_seq_addr_t source; [FieldOffset(14)] - public uint data_control_param; - [FieldOffset(18)] - public int data_control_value; + public snd_seq_addr_t dest; + [FieldOffset(16)] + public snd_seq_ev_ctrl_t data_ev_ctrl; + [FieldOffset(16)] + public snd_seq_ev_note_t data_ev_note; + [FieldOffset(16)] + public snd_seq_connect_t data_connect; + [FieldOffset(16)] + public snd_seq_result_t data_result; } [DllImport(ASOUND_LIB_NAME, CallingConvention = CallingConvention.Cdecl)] diff --git a/DMX-2.0/MidiEventProvider.cs b/DMX-2.0/MidiEventProvider.cs index 282d2db..7583e41 100644 --- a/DMX-2.0/MidiEventProvider.cs +++ b/DMX-2.0/MidiEventProvider.cs @@ -11,7 +11,7 @@ namespace DMX2 public MidiEventProvider () { - snd_seq_open(out midi_seq_handle, "default",SND_SEQ_OPEN_INPUT,0); + snd_seq_open(out midi_seq_handle, "default",SND_SEQ_OPEN_DUPLEX,0); snd_seq_set_client_name(midi_seq_handle,"DMX2"); midiport = snd_seq_create_simple_port(midi_seq_handle,"dmx_ctrl", SND_SEQ_PORT_CAP_WRITE + SND_SEQ_PORT_CAP_SUBS_WRITE, @@ -22,21 +22,14 @@ namespace DMX2 public void Process () { - int i= snd_seq_event_input_pending(midi_seq_handle,1); - if( i!=0)Info.Publish(string.Format("i={0}",i)); - IntPtr ev; - - /* - while (snd_seq_event_input_pending(midi_seq_handle,1)>0) { - - + int i; IntPtr ev; + while ((i = snd_seq_event_input_pending(midi_seq_handle,1))>0) { + //Console.WriteLine(i); + i=snd_seq_event_input(midi_seq_handle, out ev); snd_seq_event_t evS =(snd_seq_event_t) Marshal.PtrToStructure(ev,typeof(snd_seq_event_t)); - - Info.Publish(evS.data_control_value.ToString()); - + Info.Publish(string.Format ("event {0} {1}", evS.type, evS.data_ev_ctrl.value) ); snd_seq_free_event(ev); - }*/ - + } } #region IDisposable implementation