public void start(MappingConfig mappingConfig) { this.mappingConfig = mappingConfig; int count = NativeMethods.midiInGetNumDevs(); int deviceIndexSelected = -1; for (int deviceIndex = 0; deviceIndex < count; deviceIndex++) { var caps = new MidiInCaps(); int error = NativeMethods.midiInGetDevCaps(deviceIndex, ref caps, Marshal.SizeOf(caps)); String inputDeviceKeyTmp = deviceIndex + "_" + caps.name; if (!inputDeviceKeyTmp.Equals(mappingConfig.inputDeviceKey)) { continue; } deviceIndexSelected = deviceIndex; break; } if (deviceIndexSelected > -1) { if (IntPtr.Zero == inputDeviceHandle) { midiInProc = new NativeMethods.MidiInProc(MidiInEventProc); bool opened = NativeMethods.midiInOpen(out inputDeviceHandle, deviceIndexSelected, midiInProc, IntPtr.Zero, NativeMethods.CALLBACK_FUNCTION) == NativeMethods.MMSYSERR_NOERROR; bool startet = NativeMethods.midiInStart(inputDeviceHandle) == NativeMethods.MMSYSERR_NOERROR; } } }
/// <summary> /// サンプリング周波数とデバイス ID を指定して新しい MidiInConnector クラスのインスタンスを初期化します。 /// </summary> /// <param name="id">オープンされる MIDI-IN デバイスの ID。</param> public MidiIn(int id) { CheckPlatform(); midiInProc = MidiProc; handle = IntPtr.Zero; exclusiveQueue = new Queue <byte[]>(); if (!Open(id)) { throw new InvalidOperationException(); } headerSize = (uint)Marshal.SizeOf(typeof(NativeMethods.MIDIHDR)); midiHeader = new NativeMethods.MIDIHDR { data = Marshal.AllocHGlobal(BufferSize), bufferLength = BufferSize }; Marshal.Copy(new byte[BufferSize], 0, midiHeader.data, BufferSize); ptrHeader = Marshal.AllocHGlobal((int)headerSize); Marshal.StructureToPtr(midiHeader, ptrHeader, true); NativeMethods.midiInPrepareHeader(handle, ptrHeader, headerSize); NativeMethods.midiInAddBuffer(handle, ptrHeader, headerSize); }
/// <summary> /// サンプリング周波数とデバイス ID を指定して新しい MidiInConnector クラスのインスタンスを初期化します。 /// </summary> /// <param name="id">オープンされる MIDI-IN デバイスの ID。</param> public MidiIn(int id) { CheckPlatform(); midiInProc = MidiProc; handle = IntPtr.Zero; exclusiveQueue = new Queue<byte[]>(); if (!Open(id)) throw new InvalidOperationException(); headerSize = (uint)Marshal.SizeOf(typeof(NativeMethods.MIDIHDR)); midiHeader = new NativeMethods.MIDIHDR { data = Marshal.AllocHGlobal(BufferSize), bufferLength = BufferSize }; Marshal.Copy(new byte[BufferSize], 0, midiHeader.data, BufferSize); ptrHeader = Marshal.AllocHGlobal((int)headerSize); Marshal.StructureToPtr(midiHeader, ptrHeader, true); NativeMethods.midiInPrepareHeader(handle, ptrHeader, headerSize); NativeMethods.midiInAddBuffer(handle, ptrHeader, headerSize); }
public InputPort(GameWindow gw, MyIPlay myIPlay) { this.gw = gw; this.myIPlay = myIPlay; midiInProc = new NativeMethods.MidiInProc(MidiProc); handle = IntPtr.Zero; }
protected override void DisconnectInternal(bool isNormal) { if (_outBuffer != null) { _outBuffer.Dispose(); _outBuffer = null; } if (_inDeviceHandle != IntPtr.Zero) { if (IsConnected) { NativeMethods.midiInStop(_inDeviceHandle); } NativeMethods.midiInClose(_inDeviceHandle); _inDeviceHandle = IntPtr.Zero; _inputClosed.Wait(2500); } if (_outDeviceHandle != IntPtr.Zero) { NativeMethods.midiOutClose(_outDeviceHandle); _outDeviceHandle = IntPtr.Zero; _outputClosed.Wait(2500); } _inputCallback = null; _outputCallback = null; _inDeviceId = 0; _outDeviceId = 0; }
public Midi(IMidiListener midiListener) { this.midiListener = midiListener; midiInProc = new NativeMethods.MidiInProc(MidiProc); midiInHandle = IntPtr.Zero; midiOutHandle = IntPtr.Zero; }
public Midi(IMidiListener midiListener) { this.midiListener = midiListener; midiInProc = new NativeMethods.MidiInProc(MidiProc); midiInHandle = IntPtr.Zero; midiOutHandle = IntPtr.Zero; }
public InputPort() { midiInProc = MidiProc; handle = IntPtr.Zero; midiOutProc = MidiProc; handleOut = IntPtr.Zero; }
/// <summary> /// サンプリング周波数とデバイス ID を指定して新しい MidiInConnector クラスのインスタンスを初期化します。 /// </summary> /// <param name="samplingFreq">サンプリング周波数。</param> /// <param name="id">オープンされる MIDI-IN デバイスの ID。</param> public MidiInConnector(float samplingFreq, int id) : base(samplingFreq) { if (Environment.OSVersion.Platform != PlatformID.Win32NT) throw new PlatformNotSupportedException(); this.midiInProc = new NativeMethods.MidiInProc(MidiProc); this.handle = IntPtr.Zero; if (!this.Open(id)) throw new InvalidOperationException(); this.Reset(); }
/// <summary> /// Construct a new midi input port. /// </summary> /// <param name="id">Id of the port, between 0 and the number returned by InputCount</param> private WindowsMidiInputPort(uint id) { // Id of this port this.id = id; // Native callback calling MidiProc() midiInProc = new NativeMethods.MidiInProc(MidiProc); // Init this.handle = IntPtr.Zero; this.buffers = null; this.partialSysex = null; // Get the capabilities of this device GetAndParseMidiInCaps(); }
/// <summary> /// サンプリング周波数とデバイス ID を指定して新しい MidiInConnector クラスのインスタンスを初期化します。 /// </summary> /// <param name="samplingFreq">サンプリング周波数。</param> /// <param name="id">オープンされる MIDI-IN デバイスの ID。</param> public MidiInConnector(float samplingFreq, int id) : base(samplingFreq) { if (Environment.OSVersion.Platform != PlatformID.Win32NT) { throw new PlatformNotSupportedException(); } this.midiInProc = new NativeMethods.MidiInProc(MidiProc); this.handle = IntPtr.Zero; if (!this.Open(id)) { throw new InvalidOperationException(); } this.Reset(); }
protected override bool ConnectInternal(bool isNormal) { int inDeviceCount = NativeMethods.midiInGetNumDevs(); uint?inDeviceId = null; for (uint i = 0; i < inDeviceCount; i++) { var caps = new MIDIINCAPS(); NativeMethods.midiInGetDevCaps(i, ref caps, MIDIINCAPS.Size); if (caps.szPname == Id) { inDeviceId = i; break; } } if (inDeviceId == null) { return(false); } int outDeviceCount = NativeMethods.midiOutGetNumDevs(); uint?outDeviceId = null; for (uint i = 0; i < outDeviceCount; i++) { var caps = new MIDIOUTCAPS(); NativeMethods.midiOutGetDevCaps(i, ref caps, MIDIOUTCAPS.Size); if (caps.szPname == Id.Replace("MIDIIN", "MIDIOUT")) { outDeviceId = i; break; } } if (outDeviceId == null) { return(false); } if (NativeMethods.midiInOpen(out var inDeviceHandle, inDeviceId.Value, _inputCallback, 0, 0x00030000) != 0) { return(false); } if (NativeMethods.midiOutOpen(out var outDeviceHandle, outDeviceId.Value, _outputCallback, 0, 0x00030000) != 0) { return(false); } if (NativeMethods.midiInStart(inDeviceHandle) != 0) { return(false); } _outBuffer = new MidiBuffer(outDeviceHandle, SysEx.MaxMessageLength); _inDeviceId = inDeviceId.Value; _outDeviceId = outDeviceId.Value; _inDeviceHandle = inDeviceHandle; _outDeviceHandle = outDeviceHandle; _inputCallback = InputEvent; _outputCallback = OutputEvent; _inputClosed.Reset(); _outputClosed.Reset(); return(true); }
public InStream() { midiInProc = new NativeMethods.MidiInProc(MidiProc); Handle = IntPtr.Zero; }
public InputPort() { this.midiInProc = new NativeMethods.MidiInProc(this.MidiProc); this.handle = IntPtr.Zero; }
public Win32MidiInPort() { midiInProc = new NativeMethods.MidiInProc(MidiProc); handle = IntPtr.Zero; }
public MidiInput() { midiInProc = new NativeMethods.MidiInProc(MidiProc); handle = IntPtr.Zero; }
public MidiInput() { midiInProc = MidiProc; handle = IntPtr.Zero; }
public Win32InputDevice(int portId) { this.proc = this.MidiProc; NativeMethods.midiInOpen(out this.Handle, portId, this.proc, 0, NativeConstants.CALLBACK_FUNCTION); NativeMethods.midiInStart(this.Handle); }
public Win32MidiInPort() { midiInProc = new NativeMethods.MidiInProc(MidiProc); handle = IntPtr.Zero; }
public Midi() { midiInProc = new NativeMethods.MidiInProc(MidiProc); handle = IntPtr.Zero; }
public Midi(CLISynth s) { synth = s; midiInProc = new NativeMethods.MidiInProc(MidiProc); handle = IntPtr.Zero; }