Esempio n. 1
0
        internal static async Task <RawMidiClient> CreateAsync(MidiInputDevice inputDevice, MidiOutputDevice outputDevice, Action <RawMidiMessage> messageHandler)
        {
            var input = await MidiAccessManager.Default.OpenInputAsync(inputDevice.SystemDeviceId);

            var output = await MidiAccessManager.Default.OpenOutputAsync(outputDevice.SystemDeviceId);

            return(new RawMidiClient(input, output, messageHandler));
        }
Esempio n. 2
0
        public static async Task <RolandMidiClient> CreateRolandMidiClientAsync(MidiInputDevice inputDevice, MidiOutputDevice outputDevice, DeviceIdentity deviceIdentity, ModuleIdentifier identifier)
        {
            var input = await Manager.OpenInputAsync(inputDevice);

            var output = await Manager.OpenOutputAsync(outputDevice);

            return(new RolandMidiClient(input, output, inputDevice.Name, outputDevice.Name, deviceIdentity.RawDeviceId, identifier));
        }
Esempio n. 3
0
 public void StartMidi()
 {
     _inDevice = new MidiInputDevice(this.cmbMidi.SelectedIndex);
     _inDevice.MessageFilter    = BuildFilter();
     _inDevice.MessageReceived += new MidiMessageEventHandler(InDevice_MessageRecieved);
     _inDevice.Open();
     _inDevice.Start();
 }
Esempio n. 4
0
        public void RefreshDevices()
        {
            if (MidiInputDevice.GetDeviceCount() == 0)
            {
                return;
            }

            this.midiInDevices = MidiInputDevice.GetDeviceDescriptions().ToList();
        }
Esempio n. 5
0
        internal static async Task <RawMidiClient> CreateAsync(MidiInputDevice inputDevice, MidiOutputDevice outputDevice, Action <RawMidiMessage> messageHandler)
        {
            // TODO: Retry this; sometimes it doesn't work first time.
            var input = await OpenInput(inputDevice.SystemDeviceId);

            var output = await MidiAccessManager.Default.OpenOutputAsync(outputDevice.SystemDeviceId);

            return(new RawMidiClient(input, inputDevice.Name, output, outputDevice.Name, messageHandler));
        }
Esempio n. 6
0
//-------------------------------------------Midi Functionality------------------------

        public void InitializeMidi()
        {
            int[] inPorts = MidiInputDevice.GetMidiPorts();

            foreach (int port in inPorts)
            {
                string name = MidiInputDevice.GetDeviceDescription(port);
                this.cmbMidi.Items.Add(name);
            }
        }
Esempio n. 7
0
 private void InputsComboBox_SelectedIndexChanged(object sender, EventArgs e)
 {
     if (null != _device)
     {
         _device.Close();
     }
     _device        = InputsComboBox.SelectedItem as MidiInputDevice;
     _device.Input += device_Input;
     _device.Open();
     _device.Start();
 }
Esempio n. 8
0
        public IMidiInputDevice GetMidiEndpoint(MidiInputDevice device)
        {
            foreach (var inputDevice in MidiDeviceManager.Default.InputDevices)
            {
                if (inputDevice.Name == device.Name)
                {
                    return(inputDevice.CreateDevice());
                }
            }

            return(null);
        }
Esempio n. 9
0
        public void PatchPluginToMidiInput(Guid guid, MidiInputDevice device)
        {
            var plugin = GetPluginByGuid(guid);

            try
            {
                _vstHost.PatchPluginToMidiInput(plugin, device);
            }
            catch (Exception e)
            {
                throw GetFaultException <GenericFault>(e);
            }
        }
Esempio n. 10
0
        internal static async Task <RolandMidiClient> CreateAsync(MidiInputDevice inputDevice, MidiOutputDevice outputDevice, byte rawDeviceId, int modelId)
        {
            // This is all a bit nasty... we can't create a RolandMidiClient instance until we have the raw client, and we can't
            // create the raw client until we've got a method to call. LocalHandleMessage acts as a sort of trampoline.
            // If we could make the constructor asynchronous, it wouldn't be a problem.
            RolandMidiClient ret = null;
            var rawClient        = await RawMidiClient.CreateAsync(inputDevice, outputDevice, LocalHandleMessage);

            ret = new RolandMidiClient(rawClient, rawDeviceId, modelId);
            return(ret);

            void LocalHandleMessage(RawMidiMessage message) => ret?.HandleMessage(message);
        }
Esempio n. 11
0
        public NanoKontrol2(string midiDeviceName = "nanoKONTROL2")
        {
            Slider = new ControlStateCollection("Slider", _Slider);
            Knob   = new ControlStateCollection("Knob", _Knob);
            Solo   = new ButtonStateCollection(this, ButtonCategory.Solo, _Solo);
            Mute   = new ButtonStateCollection(this, ButtonCategory.Mute, _Mute);
            Record = new ButtonStateCollection(this, ButtonCategory.Record, _Record);

            Input  = MidiInputDevice.OpenByName(midiDeviceName);
            Output = MidiOutputDevice.OpenByName(midiDeviceName);

            Input.OnData += Input_OnData;
        }
Esempio n. 12
0
 private void MidiInComboBox_SelectedIndexChanged(object sender, System.EventArgs e)
 {
     if (null != _inputDevice)
     {
         _inputDevice.Close();
     }
     _inputDevice = MidiInComboBox.SelectedItem as MidiInputDevice;
     if (null != _inputDevice)
     {
         _inputDevice.Input += _inputDevice_Input;
     }
     _inputDevice.Open();
     _inputDevice.Start();
 }
Esempio n. 13
0
        public MidiInputDeviceTests(ITestOutputHelper output) : base(output)
        {
            _inputDeviceMock = new RtMidiInputDeviceMock();
            _sut             = new MidiInputDevice(_inputDeviceMock, string.Empty);

            _sut.NoteOff += (IMidiInputDevice sender, in NoteOffMessage e) => _noteOffMessages.Enqueue(e);
            _sut.NoteOn  += (IMidiInputDevice sender, in NoteOnMessage e) => _noteOnMessages.Enqueue(e);
            _sut.PolyphonicKeyPressure += (IMidiInputDevice sender, in PolyphonicKeyPressureMessage e) => _polyphonicKeyPressureMessages.Enqueue(e);
            _sut.ControlChange         += (IMidiInputDevice sender, in ControlChangeMessage e) => _controlChangeMessages.Enqueue(e);
            _sut.ProgramChange         += (IMidiInputDevice sender, in ProgramChangeMessage e) => _programChangeMessages.Enqueue(e);
            _sut.ChannelPressure       += (IMidiInputDevice sender, in ChannelPressureMessage e) => _channelPressureMessages.Enqueue(e);
            _sut.PitchBend             += (IMidiInputDevice sender, in PitchBendMessage e) => _pitchBendMessages.Enqueue(e);
            _sut.Nrpn += (IMidiInputDevice sender, in NrpnMessage e) => _nrpnMessages.Enqueue(e);
        }
Esempio n. 14
0
        public void PatchPluginToMidiInput(RemoteVstPlugin plugin, MidiInputDevice device)
        {
            _midiTarget = plugin;
            var midiService = new MidiService();
            var midiInput   = midiService.GetMidiEndpoint(device);

            if (midiInput == null)
            {
                throw new Exception(
                          $"Unable to open MIDI device {device.Name} because the device  (currently) doesn't exists");
            }

            midiInput.NoteOn  += MidiInputOnNoteOn;
            midiInput.NoteOff += MidiInputOnNoteOff;
            midiInput.Open();

            _midiInputDevices.Add(midiInput);
        }
Esempio n. 15
0
        public MidiDevices()
        {
            InitializeComponent();

            int[] inPorts = MidiInputDevice.GetMidiPorts();
            foreach (int port in inPorts)
            {
                string name = MidiInputDevice.GetDeviceDescription(port);
                Console.WriteLine("Input : {0}={1}", port, name);
                this.comboBox1.Items.Add(name);
            }

            int[] outPorts = MidiOutputDevice.GetMidiPorts();
            foreach (int port in outPorts)
            {
                string name = MidiOutputDevice.GetDeviceDescription(port);
                Console.WriteLine("Output : {0}={1}", port, name);
            }
        }
Esempio n. 16
0
        protected override void OnClosed(EventArgs e)
        {
            base.OnClosed(e);
            if (null != _inputDevice && _inputDevice.IsOpen)
            {
                // attempt to prevent any further
                // events from firing
                _inputDevice.Stop();
                _inputDevice.Reset();

                _inputDevice.Close();
                _inputDevice = null;
            }
            if (null != _outputDevice && _outputDevice.IsOpen)
            {
                _outputDevice.Close();
                _outputDevice = null;
            }
        }
Esempio n. 17
0
        public MidiInputDeviceTests(ITestOutputHelper output) : base(output)
        {
            _inputDeviceMock = new RtMidiInputDeviceMock();
            _sut             = new MidiInputDevice(_inputDeviceMock, string.Empty);

            _sut.NoteOff += (IMidiInputDevice sender, in NoteOffMessage e) => _noteOffMessages.Enqueue(e);
            _sut.NoteOn  += (IMidiInputDevice sender, in NoteOnMessage e) => _noteOnMessages.Enqueue(e);
            _sut.PolyphonicKeyPressure += (IMidiInputDevice sender, in PolyphonicKeyPressureMessage e) => _polyphonicKeyPressureMessages.Enqueue(e);
            _sut.ControlChange         += (IMidiInputDevice sender, in ControlChangeMessage e) => _controlChangeMessages.Enqueue(e);
            _sut.ProgramChange         += (IMidiInputDevice sender, in ProgramChangeMessage e) => _programChangeMessages.Enqueue(e);
            _sut.ChannelPressure       += (IMidiInputDevice sender, in ChannelPressureMessage e) => _channelPressureMessages.Enqueue(e);
            _sut.PitchBend             += (IMidiInputDevice sender, in PitchBendMessage e) => _pitchBendMessages.Enqueue(e);
            _sut.Nrpn  += (IMidiInputDevice sender, in NrpnMessage e) => _nrpnMessages.Enqueue(e);
            _sut.SysEx += (IMidiInputDevice sender, in SysExMessage e) => _sysExMessages.Enqueue(e);
            _sut.MidiTimeCodeQuarterFrame += (IMidiInputDevice sender, in MidiTimeCodeQuarterFrameMessage e) => _midiTimeCodeQuarterFrameMessages.Enqueue(e);
            _sut.SongPositionPointer      += (IMidiInputDevice sender, in SongPositionPointerMessage e) => _songPositionPointerMessages.Enqueue(e);
            _sut.SongSelect  += (IMidiInputDevice sender, in SongSelectMessage e) => _songSelectMessages.Enqueue(e);
            _sut.TuneRequest += (IMidiInputDevice sender, in TuneRequestMessage e) => _tuneRequestMessages.Enqueue(e);
        }
Esempio n. 18
0
 private void StartDevice(int deviceID)
 {
     this.textBoxMsg.Clear();
     _inDevice = new MidiInputDevice(deviceID);
     _inDevice.AutoPairController = this.checkBoxAutoPair.Checked;
     _inDevice.MessageFilter      = BuildFilter();
     _inDevice.MessageReceived   += new MidiMessageEventHandler(InDevice_MessageReceived);
     if (_inDevice.Open())
     {
         this.buttonStop.Enabled  = true;
         this.buttonStart.Enabled = false;
         if (!_inDevice.Start())
         {
             MessageBox.Show(this, "Midi device could not be started! Error " + _inDevice.LastErrorCode.ToString(), "Midi Error");
         }
     }
     else
     {
         MessageBox.Show(this, "Midi device could not be opened! Error " + _inDevice.LastErrorCode.ToString(), "Midi Error");
     }
 }
Esempio n. 19
0
 private MidiOutputDevice OpenDevice(int indevice, int outdevice)
 {
     buttons    = Helper.GetButtons();
     _outDevice = new MidiOutputDevice(indevice);
     _inDevice  = new MidiInputDevice(outdevice);
     if (!_outDevice.Open())
     {
         throw new Exception("Midi Open Error");
     }
     else
     {
         isReady = true;
     }
     if (!_inDevice.Open())
     {
         throw new Exception("Midi Open Error " + _inDevice.LastErrorCode.ToString() + _inDevice.Device);
     }
     else
     {
         isReady = true;
     }
     return(_outDevice);
 }
Esempio n. 20
0
        private void SetCurrentDevice(string value)
        {
            if (this.currentMidiInDevice != null)
            {
                this.midiIn.Stop();
                this.midiIn.Close();
                this.midiIn.MessageReceived -= this.OnMidiMessageReceived;
            }

            this.currentMidiInDevice = value;
            int index = this.midiInDevices.IndexOf(value);

            this.midiIn = new MidiInputDevice(index);
            this.midiIn.AutoPairController = true;
            this.midiIn.MessageFilter      = MIDIMessageType.SystemRealtime | MIDIMessageType.SystemExclusive;
            this.midiIn.MessageReceived   += this.OnMidiMessageReceived;

            string error = null;

            if (this.midiIn.Open())
            {
                if (!this.midiIn.Start())
                {
                    error = this.midiIn.LastErrorCode.ToString();
                }
            }
            else
            {
                error = this.midiIn.LastErrorCode.ToString();
            }

            if (error != null)
            {
                this.AddMessageToMonitor("Midi device could not be started! Error: " + error);
            }
        }
Esempio n. 21
0
 public static Task <RolandMidiClient> CreateRolandMidiClientAsync(MidiInputDevice input, MidiOutputDevice output, DeviceIdentity deviceIdentity, ModuleIdentifier identifier) =>
 RolandMidiClient.CreateAsync(input, output, deviceIdentity.RawDeviceId, identifier);
Esempio n. 22
0
 internal MidiMessageBroker(MidiInputDevice sender, BitArray channelListeners)
 {
     _sender           = sender;
     _channelListeners = channelListeners;
 }
Esempio n. 23
0
 public void PatchPluginToMidiInput(Guid guid, MidiInputDevice device)
 {
 }
Esempio n. 24
0
        public static async Task <IReadOnlyList <DeviceIdentity> > ListDeviceIdentities(MidiInputDevice input, MidiOutputDevice output, TimeSpan timeout)
        {
            List <DeviceIdentity> identities = new List <DeviceIdentity>();

            using (var client = await RawMidiClient.CreateAsync(input, output, HandleMessage))
            {
                // Identity request message for all devices IDs.
                client.Send(new RawMidiMessage(new byte[] { 0xf0, 0x7e, 0x7f, 0x06, 0x01, 0xf7 }));
                await Task.Delay(timeout);
            }
            return(identities.AsReadOnly());

            void HandleMessage(RawMidiMessage message)
            {
                // TODO: Handle 17-byte messages for "long" manufacturer IDs
                var data = message.Data;

                if (data.Length == 15 &&
                    data[0] == 0xf0 && // SysEx
                    data[1] == 0x7e && // Universal non-realtime message
                    data[3] == 0x06 && // General information
                    data[4] == 0x02)   // Identity reply
                {
                    byte rawDeviceId      = data[2];
                    var  manufacturerId   = (ManufacturerId)data[5];
                    int  familyCode       = data[6] + (data[7] << 8);
                    int  familyNumberCode = data[8] + (data[9] << 8);
                    int  revision         = data[10] + (data[11] << 8) + (data[12] << 16) + (data[13] << 24);
                    identities.Add(new DeviceIdentity(rawDeviceId, manufacturerId, familyCode, familyNumberCode, revision));
                }
            }
        }
Esempio n. 25
0
 public static Task <RolandMidiClient> CreateRolandMidiClientAsync(MidiInputDevice input, MidiOutputDevice output, DeviceIdentity deviceIdentity, int modelId) =>
 RolandMidiClient.CreateAsync(input, output, deviceIdentity.RawDeviceId, modelId);
Esempio n. 26
0
 public Task <IMidiInput> OpenInputAsync(MidiInputDevice input) =>
 Task.FromResult((IMidiInput) new WebMidiInput(inputs[input]));
Esempio n. 27
0
 public void PatchPluginToMidiInput(MidiInputDevice device)
 {
     _remoteVstService.PatchPluginToMidiInput(_guid, device);
 }