Beispiel #1
0
        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;
                }
            }
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
 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;
 }
Beispiel #6
0
        public Midi(IMidiListener midiListener)
        {
            this.midiListener = midiListener;

            midiInProc    = new NativeMethods.MidiInProc(MidiProc);
            midiInHandle  = IntPtr.Zero;
            midiOutHandle = IntPtr.Zero;
        }
Beispiel #7
0
        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;
        }
Beispiel #9
0
        /// <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();
        }
Beispiel #11
0
        /// <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);
        }
Beispiel #13
0
 public InStream()
 {
     midiInProc = new NativeMethods.MidiInProc(MidiProc);
     Handle     = IntPtr.Zero;
 }
Beispiel #14
0
 public InputPort()
 {
     this.midiInProc = new NativeMethods.MidiInProc(this.MidiProc);
     this.handle     = IntPtr.Zero;
 }
Beispiel #15
0
 public Win32MidiInPort()
 {
     midiInProc = new NativeMethods.MidiInProc(MidiProc);
     handle     = IntPtr.Zero;
 }
Beispiel #16
0
 public MidiInput()
 {
     midiInProc = new NativeMethods.MidiInProc(MidiProc);
     handle = IntPtr.Zero;
 }
Beispiel #17
0
 public MidiInput()
 {
     midiInProc = MidiProc;
     handle = IntPtr.Zero;
 }
Beispiel #18
0
 public Win32InputDevice(int portId)
 {
     this.proc = this.MidiProc;
     NativeMethods.midiInOpen(out this.Handle, portId, this.proc, 0, NativeConstants.CALLBACK_FUNCTION);
     NativeMethods.midiInStart(this.Handle);
 }
Beispiel #19
0
 public Win32MidiInPort()
 {
     midiInProc = new NativeMethods.MidiInProc(MidiProc);
     handle = IntPtr.Zero;
 }
Beispiel #20
0
 public Midi()
 {
     midiInProc = new NativeMethods.MidiInProc(MidiProc);
     handle     = IntPtr.Zero;
 }
Beispiel #21
0
 public Midi(CLISynth s)
 {
     synth      = s;
     midiInProc = new NativeMethods.MidiInProc(MidiProc);
     handle     = IntPtr.Zero;
 }