示例#1
0
        private void midiInConfirmButton_Click(object sender, EventArgs e)
        {
            if (inReady)
            {
                midiInput.Stop();
                midiInput.Close();
                midiInput.Dispose();

                midiInDevicesCB.Enabled        = true;
                refreshMidiInButton.Enabled    = true;
                midiInConfirmButton.ImageIndex = 0;
                inReady = false;
                checkReady(true);
            }
            else
            {
                midiInDevicesCB.Enabled     = false;
                refreshMidiInButton.Enabled = false;

                midiInput = new MidiIn(midiInDevicesCB.SelectedIndex);
                midiInput.MessageReceived += midiInput_MessageReceived;
                midiInput.ErrorReceived   += midiInput_ErrorReceived;
                midiInput.Start();

                midiInConfirmButton.ImageIndex = 1;
                inReady = true;
                checkReady(true);
            }
        }
示例#2
0
        private void MainWindow_FormClosing(object sender, FormClosingEventArgs e)
        {
            audioOutput.Stop();
            audioOutput.Dispose();

            if (midiIn != default(MidiIn))
            {
                midiIn.Stop();
                midiIn.Dispose();
            }
        }
示例#3
0
        public void StartMIDIInMonitoring()
        {
            if (setting.midiKbd.MidiInDeviceName == "")
            {
                return;
            }

            if (midiin != null)
            {
                try
                {
                    midiin.Stop();
                    midiin.Dispose();
                    midiin.MessageReceived -= midiIn_MessageReceived;
                    midiin.ErrorReceived   -= midiIn_ErrorReceived;
                    midiin = null;
                }
                catch
                {
                    midiin = null;
                }
            }

            if (midiin == null)
            {
                for (int i = 0; i < MidiIn.NumberOfDevices; i++)
                {
                    if (!setting.midiKbd.UseMIDIKeyboard)
                    {
                        continue;
                    }
                    if (setting.midiKbd.MidiInDeviceName != MidiIn.DeviceInfo(i).ProductName)
                    {
                        continue;
                    }
                    try
                    {
                        midiin = new MidiIn(i);
                        midiin.MessageReceived += midiIn_MessageReceived;
                        midiin.ErrorReceived   += midiIn_ErrorReceived;
                        midiin.Start();
                    }
                    catch
                    {
                        midiin = null;
                    }
                }
            }
        }
示例#4
0
 partial void Execute_MidiOffCommand()
 {
     MidiEnabled = false;
     midiIn.Stop();
     midiIn.Dispose();
     ResetCanExecute();
 }
 partial void Execute_MidiOffCommand()
 {
     try
     {
         MidiEnabled = false;
         midiIn.Stop();
         midiIn.Dispose();
         for (int i = 0; i < 64; i++)
         {
             if (_oscillators[i] != null)
             {
                 _oscillators[i].Stop();
                 _oscillators[i] = null;
             }
         }
     }
     catch (Exception)
     {
         for (int i = 0; i < 64; i++)
         {
             if (_oscillators[i] != null)
             {
                 _oscillators[i].Stop();
                 _oscillators[i] = null;
             }
         }
     }
 }
示例#6
0
 private void openDevice(int i)
 {
     if (i < 1)
     {
         return;
     }
     if (midiIn != null)
     {
         midiIn.Stop();
         midiIn.Dispose();
         midiIn         = null;
         selectedDevice = 0;
     }
     try
     {
         midiIn = new MidiIn(i - 1);
         midiIn.MessageReceived += MIDIMessageReceived;
         midiIn.ErrorReceived   += MIDIErrorReceived;
         midiIn.Start();
         selectedDevice = i;
     }
     catch (Exception e)
     {
         midiIn         = null;
         selectedDevice = 0;
         owner.logText(string.Format("Error: Cannot Open MIDI Device {0}: {1}",
                                     devices[i], e.Message));
     }
     if (selectedDevice > 0)
     {
         slDev.selectedItem = selectedDevice;
         slDev.Enabled      = false;
         online             = true;
     }
 }
示例#7
0
 /// <summary>
 /// MIDI入力やめ
 /// </summary>
 public void StopMonitoring()
 {
     if (monitoring)
     {
         midiIn.Stop();
         monitoring = false;
     }
 }
示例#8
0
        public void Close()
        {
            _midiInput.MessageReceived -= OnMidiMessage;
            _midiInput.ErrorReceived   -= OnMidiError;

            _midiInput.Stop();
            _midiInput.Dispose();
        }
示例#9
0
        /// <inheritdoc />
        public bool Init()
        {
            bool inited = false;

            DeviceName = "Invalid"; // default

            try
            {
                _midiIn?.Stop();
                _midiIn?.Dispose();
                _midiIn = null;

                // Figure out which device.
                List <string> devices = new();
                for (int i = 0; i < MidiIn.NumberOfDevices; i++)
                {
                    devices.Add(MidiIn.DeviceInfo(i).ProductName);
                }

                int ind = devices.IndexOf(UserSettings.TheSettings.MidiIn);

                if (ind < 0)
                {
                    _logger.Error($"Invalid midi input device:{UserSettings.TheSettings.MidiIn}");
                }
                else
                {
                    _midiIn = new MidiIn(ind);
                    _midiIn.MessageReceived += MidiIn_MessageReceived;
                    _midiIn.ErrorReceived   += MidiIn_ErrorReceived;
                    _midiIn.Start();
                    inited     = true;
                    DeviceName = UserSettings.TheSettings.MidiIn;
                }
            }
            catch (Exception ex)
            {
                _logger.Error($"Init midi in failed: {ex.Message}");
                inited = false;
            }

            return(inited);
        }
示例#10
0
 public void Dispose()
 {
     engine.Dispose();
     if (canRead)
     {
         midiIn.Stop();
         midiIn.Dispose();
         canRead = false;
     }
 }
 private void StopMonitoring()
 {
     if (monitoring)
     {
         midiIn.Stop();
         monitoring                    = false;
         buttonMonitor.Text            = "Monitor";
         comboBoxMidiInDevices.Enabled = true;
     }
 }
示例#12
0
 public void Dispose()
 {
     if (Disposed)
     {
         return;
     }
     MidiIn.Stop();
     MidiIn.Dispose();
     MidiIn = null;
 }
示例#13
0
 private void OnDestroy()
 {
     StopAllCoroutines();
     for (int i = 11; i < 90; i++)
     {
         SendMessage(i, 0);
     }
     controllerIn.Stop();
     controllerIn.Dispose();
     controllerOut.Dispose();
 }
示例#14
0
        /// <summary>
        /// Resource clean up.
        /// </summary>
        /// <param name="disposing"></param>
        protected virtual void Dispose(bool disposing)
        {
            if (!_disposed && disposing)
            {
                _mdev?.Stop();
                _mdev?.Dispose();
                _mdev = null;

                _disposed = true;
            }
        }
示例#15
0
 public void CloseIn()
 {
     if (midiIn != null)
     {
         midiIn.Stop();
         midiIn.OnLongMsg  -= OnLongMessage;
         midiIn.OnShortMsg -= OnShortMessage;
         midiIn.Close();
         midiIn = null;
     }
 }
示例#16
0
        private void MidiInputListener(bool enableListener)
        {
            if (enableListener)
            {
                _mIn.Start();
            }
            else
            {
                _mIn.Stop();
            }

            _userInputCycle = 0;
        }
示例#17
0
 private void MIDIInputTest_FormClosed(object sender, FormClosedEventArgs e)
 {
     try
     {
         midiInput.Stop();
         midiInput.Close();
         midiInput.Dispose();
     }
     catch (NullReferenceException)
     {
         //Do Nothing
     }catch (NAudio.MmException) {
         //MIDI Device was disconnected before stopping
     }
 }
示例#18
0
        private void CleanupMidiPort()
        {
            if (_attachedMidiPort == null)
            {
                return;
            }

            _logService.Information("Disconnecting already attached MIDI port");
            _attachedMidiPort.Stop();
            _attachedMidiPort.Close();
            _attachedMidiPort.Dispose();

            _attachedMidiPort.MessageReceived -= ProcessMidiMessage;
            _attachedMidiPort.ErrorReceived   -= LogMidiError;
        }
 public void Init(int inDeviceNo, int outDeviceNo)
 {
     if (_initialized)
     {
         _inDevice.Stop();
         _inDevice.Close();
         _inDevice.Dispose();
         _outDevice.Close();
         _outDevice.Dispose();
     }
     _inDevice  = new MidiIn(inDeviceNo);
     _outDevice = new MidiOut(outDeviceNo);
     _inDevice.MessageReceived += MessageReceived;
     _inDevice.ErrorReceived   += ErrorReceived;
     _inDevice.Start();
     _initialized = true;
 }
示例#20
0
        /// <summary>
        /// Initialize the port.
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public bool Init(string name)
        {
            bool inited = false;

            try
            {
                if (_mdev != null)
                {
                    _mdev.Stop();
                    _mdev.Dispose();
                    _mdev = null;
                }

                if (name != "")
                {
                    for (int device = 0; device < MidiIn.NumberOfDevices && _mdev == null; device++)
                    {
                        if (name == MidiIn.DeviceInfo(device).ProductName)
                        {
                            _mdev = new MidiIn(device);
                            _mdev.MessageReceived += NpMidiIn_MessageReceived;
                            _mdev.ErrorReceived   += NpMidiIn_ErrorReceived;
                            _mdev.Start();
                            inited = true;
                        }
                    }

                    if (_mdev == null)
                    {
                        ErrorInfo = $"Invalid midi input: {name}";
                        inited    = false;
                    }
                }
            }
            catch (Exception ex)
            {
                ErrorInfo = $"Init midi in failed: {ex.Message}";
                inited    = false;
            }

            return(inited);
        }
示例#21
0
    // Use this for initialization
    void OnDestroy()
    {
        if (_midiIn != null)
        {
            _midiIn.MessageReceived -= MidiIn_MessageReceived;
        }

        lock (eventQueueObject)
        {
            eventQueue.Clear();
        }

        if (_midiIn != null)
        {
            _midiIn.Stop();

            _midiIn.Dispose();

            _midiIn = null;
        }
    }
示例#22
0
 public void Stop()
 {
     MidiIn.Stop();
     MidiIn.ReceivedMidiEvent        -= MidiInOnReceivedMidiEvent;
     MidiIn.ReceivedExclusiveMessage -= MidiInOnReceivedExclusiveMessage;
 }
示例#23
0
        static void Main(string[] args)
        {
            Console.WriteLine("待機:なんか入力");
            Console.ReadKey();

            if (MidiIn.NumberOfDevices == 0)
            {
                return;
            }

            for (var i = 0; i < MidiIn.NumberOfDevices; i++)
            {
                var d = MidiIn.DeviceInfo(i).ProductName;
                Console.WriteLine($"i : {d}");
            }

            var deviceName = MidiIn.DeviceInfo(1).ProductName;

            Console.WriteLine($"接続 : {deviceName}");

            var midiIn    = new MidiIn(0);
            var stopWatch = new Stopwatch();


            var midiStream = Observable.FromEventPattern <MidiInMessageEventArgs>(
                h => midiIn.MessageReceived += h,
                h => midiIn.MessageReceived -= h);


            var onStream = midiStream.Where(x => x.EventArgs.MidiEvent.CommandCode == MidiCommandCode.NoteOn)
                           .Select(x => (x, stopWatch.ElapsedMilliseconds));
            var offStream = midiStream.Where(x => x.EventArgs.MidiEvent.CommandCode == MidiCommandCode.NoteOff);
            var noteList  = new List <NoteData>();
            var list      = new List <List <NoteData> >();

            var list1 = noteList;

            onStream.Zip(offStream)
            .Subscribe(x =>
            {
                var endTime = stopWatch.ElapsedMilliseconds;
                var note1   = x.First.x.EventArgs.MidiEvent;
                var length  = endTime - x.First.ElapsedMilliseconds;
                if (!(note1 is NoteOnEvent noe))
                {
                    return;
                }
                Console.WriteLine($"*********************************");
                Console.WriteLine($"コマンド : {noe.CommandCode}");
                Console.WriteLine($"ノーツ名 : {noe.NoteName}");
                Console.WriteLine($"長さ : {length}");
                Console.WriteLine($"Time : {x.First.ElapsedMilliseconds}");
                Console.WriteLine($"強さ : {noe.Velocity}");
                var note = new NoteData()
                {
                    AbsoluteTime = x.First.ElapsedMilliseconds,
                    NoteNumber   = noe.NoteNumber,
                    Length       = length,
                    NoteName     = noe.NoteName,
                    Velocity     = noe.Velocity
                };

                list1.Add(note);
            });
            midiIn.Start();

            stopWatch.Start();
            for (var i = 0; i < 10; i++)
            {
                Console.WriteLine($"キーを押すとデータ収集を開始します。 {i + 1}/10");
                Console.WriteLine($"再びキーを押すと次のデータ収集に移行します。");
                Console.ReadKey();
                noteList = new List <NoteData>();
                stopWatch.Restart();

                Console.ReadKey();
                list.Add(noteList);
            }

            list.ForEach(notes =>
            {
                if (notes.Count == 0)
                {
                    return;
                }
                var baseTime = notes[0].AbsoluteTime;
                Console.WriteLine("====================================================");
                notes.ForEach(x =>
                {
                    x.RelativeTime = x.AbsoluteTime - baseTime;
                    Console.WriteLine($"コード:{x.NoteName} 強さ:{x.Velocity}");
                    Console.WriteLine($"長さ:{x.Length} 相対的時間:{x.RelativeTime}");
                });
            });

            Console.ReadKey();
            stopWatch.Stop();
            midiIn.Stop();
            midiIn.Dispose();

            using var stream = new StreamWriter("./midi.csv", false, Encoding.UTF8);

            foreach (var note in noteList)
            {
                stream.Write($"{note.NoteName} Velocity, Length, RelativeTime, ");
            }
            stream.WriteLine();

            foreach (var nodeList in list)
            {
                foreach (var note in nodeList)
                {
                    stream.Write($"{note.Velocity}, {note.Length}, {note.RelativeTime}, ");
                }
                stream.WriteLine();
            }
        }
        public bool UpdateCurrentMidiDevice(string name)
        {
            if (currentMidiDevice is not null)
            {
                try
                {
                    currentMidiDevice.Stop();
                    currentMidiDevice.Dispose();
                    currentMidiDevice     = null;
                    currentMidiDeviceName = "";
                }
                catch (Exception ex)
                {
                    communication.SendWarningMessage($"Exception closing Midi Device: {ex}");
                    currentMidiDevice     = null;
                    currentMidiDeviceName = "";
                }

                //try
                //{
                //    currentMidiDeviceOut?.Close();
                //    currentMidiDeviceOut?.Dispose();
                //    currentMidiDeviceOut = null;
                //}
                //catch (Exception ex)
                //{
                //    communication.SendWarningMessage($"Exception closing Midi Out Device: {ex}");
                //    currentMidiDeviceOut = null;
                //}
            }

            if (string.IsNullOrEmpty(name))
            {
                return(true);
            }

            int newDevice = -1;

            for (int i = 0; i < MidiIn.NumberOfDevices; i++)
            {
                if (MidiIn.DeviceInfo(i).ProductName == name)
                {
                    newDevice = i;
                    break;
                }
            }

            if (newDevice == -1)
            {
                //Not found
                return(false);
            }

            try
            {
                currentMidiDeviceName              = MidiIn.DeviceInfo(newDevice).ProductName;
                currentMidiDevice                  = new MidiIn(newDevice);
                currentMidiDevice.MessageReceived += MidiMessageReceived;
                currentMidiDevice.ErrorReceived   += MidiErrorReceived;
                currentMidiDevice.Start();
            }
            catch (Exception ex)
            {
                communication.SendErrorMessage($"Exception starting Midi Device: {ex}");
                currentMidiDevice     = null;
                currentMidiDeviceName = "";
                return(false);
            }

            RecreateAudioStream();

            //Success
            return(true);
        }
示例#25
0
 /// <summary>
 /// Resource clean up.
 /// </summary>
 public void Dispose()
 {
     _mdev?.Stop();
     _mdev?.Dispose();
     _mdev = null;
 }
示例#26
0
 private void StopMonitoring()
 {
     btnMIDIIn.Text = "MonitorOn";
     _midiin.Stop();
     monitoring = false;
 }