ExH nnH vvHってピッチベンドなんですけど
00 40って…。騙された感の漂うキャプチャです。
MIDIポートからの入力を取得するには、IMidiInPortを使います。
VB.net
Imports System Imports System.Threading Imports System.Windows.Forms Imports Avenue Imports NextMidi.DataElement Imports NextMidi.MidiInPort Public Class frmMain Public Sub New() ' この呼び出しは、Windows フォーム デザイナで必要です。 InitializeComponent() ' InitializeComponent() 呼び出しの後で初期化を追加します。 EnumPorts() End Sub Private Sub frmMain_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles MyBase.FormClosing If port IsNot Nothing Then ' ポートを閉じる port.Close() End If End Sub Dim port As MidiInPort = Nothing Private Sub EnumPorts() 'ポートを列挙する Dim portList As New MidiInPortList() cmbPortList.Items.AddRange(portList.Items.ToArray()) End Sub Private Sub cmbPortList_SelectedValueChanged(ByVal sender As Object, ByVal e As EventArgs) Handles cmbPortList.SelectedValueChanged '使用しているポートがあれば、閉じる If port IsNot Nothing Then txtData.Text += port.Name + "を閉じました。" + vbCrLf port.Close() End If 'ポートを設定する port = cmbPortList.SelectedItem '受信イベントを拾う AddHandler port.Received, AddressOf port_Received 'ポートを開く port.Open() txtData.Text += port.Name + "を開きました。" + vbCrLf End Sub Private Sub port_Received(ByVal sender As Object, ByVal e As DataEventArgs(Of NextMidiData)) Dim processMethod As New Action(Of NextMidiData)(AddressOf ShowData) Dim params() As NextMidiData = {e.Value} txtData.Invoke(processMethod, params) End Sub Private Sub ShowData(ByVal data As NextMidiData) 'データの表示 txtData.Text += BitConverter.ToString(data.ToMidiData()).Replace("-"c, " "c) + _ " (" + data.GetType().Name + ")" + vbCrLf End Sub End Class
C#
using System; using System.Linq; using System.Threading; using System.Windows.Forms; using Avenue; using NextMidi.DataElement; using NextMidi.MidiInPort; namespace Receive { public partial class frmMain : Form { public frmMain() { InitializeComponent(); // ポートを列挙する MidiInPortList portList = new MidiInPortList(); cmbPortList.Items.AddRange(portList.Items.ToArray()); } private void frmMain_FormClosing(object sender, FormClosingEventArgs e) { if (port != null) { // ポートを閉じる port.Close(); } } IMidiInPort port = null; private void cmbPortList_SelectedIndexChanged(object sender, EventArgs e) { // 使用しているポートがあれば、閉じる if (port != null) { txtData.Text += port.Name + "を閉じました。\r\n"; port.Close(); } // ポートを設定する port = cmbPortList.SelectedItem as IMidiInPort; // 受信イベントを拾う port.Received += new EventHandler<DataEventArgs<NextMidiData>>(port_Received); // ポートを開く port.Open(); txtData.Text += port.Name + "を開きました。\r\n"; } void port_PreProcess(object sender, DataEventArgs<NextMidiData> e) { txtData.Invoke(new ThreadStart(delegate() { // データの表示 txtData.Text += BitConverter.ToString(e.Value.ToMidiData()).Replace('-', ' ') + " (" + data.GetType().Name + ")" + "\r\n"; })); } } }