RtMidi(MIDI In/Outライブラリ)を試す
Midoは、Pythonで簡単にMIDI関連の操作ができる
一方、ESP32 S3でUSB MIDI(USB Hostなど)を扱う場合はC言語で書く必要がある(MicroPythonでは書けない)
ESP32 開発ボードですべての実装をすると、コンパイル、転送、書き込みに結構、時間がかかる
ESP32でなくても実装できる部分は、Windowsなどで組みたい
MIDI関連の個人的なライブラリをWindows上のC言語で作って、ESP32向けに移植する想定
Pythonで組むと、C言語に組みなおす必要がでてくる
ということで、WindowsからMIDI Out/InするC/C++環境がほしい
RtMidi(C++とC言語のライブラリ)を調べてみた
動作確認してみる
https://github.com/thestk/rtmidi をCloneする
Windowsの場合は、Visual Studioで、testsディレクトリの「RtMidi.sln」を開き、ソリューション全体をビルドする
特にトラブルなくビルドできた
トラブル
しばらく、Visual Studioから離れていると、Visual Studioの使い方でとまどってしまう
実行対象のプロジェクトを変更するには、ソリューションエクスプローラーで、プロジェクトを右クリックして、「スタートアップ プロジェクトに設定」を行う
開いた直後は、rtmidilibプロジェクトが、「スタートアッププロジェクト」に設定されていて、以下のようなメッセージが表示された
ライブラリのプロジェクトを実行しようとしてエラーとなったと思う
アプリケーションではないので、それを伝えるメッセージ
適当なプロジェクト「midiout」などを「スタートアッププロジェクト」に設定すれば解決する
Microsoft Visual Studio
プログラム'.¥rtmidi¥tests¥x64¥Debug¥rtmidilib.lib'を開始できません。
.¥rtmidi¥tests¥x64¥Debug¥rtmidilib.lib は有効な Win32 アプリケーションではありません。
[ OK ]
サンプル
サンプルプロジェクトを一通り確認してみる
apinames
利用するAPIの名前を取得するサンプル
(複数取得できる場合があり、選択できる)
筆者の環境では、以下の2つが取得できた
UWPの方が新しいと思うが、UWPアプリでなくても使えるのだろうか?
* 4 'winmm': 'Windows MultiMedia'
* 7 'winuwp': 'Windows UWP'
cmidiin
MIDI INの内容を表示するサンプル
MIDIキーボードなどをMIDI INに接続するとメッセージが表示される
先頭の「c」は、callbackを示していると思われる(後ほど確認する)
midiclock
クロックの送受信
テストするのに工夫が必要
midiclock_in.exeと名前を変更すると、INとして機能する
midiclock_out.exeと名前を変更すると、OUTとして機能する
ソースをみて改造してもよいと思う
以下の上部が送信、以下の下部が受信
送信側から送られたクロックを受けて、受信側がBPMの推測をしている
ちょうど、クロックによるビート(BPM)の同期に興味があったのでありがたい
MIDI clock (one beat)
MIDI clock (one beat)
MIDI clock (one beat)
MIDI clock (one beat)
MIDI stop
MIDI continue
MIDI clock (one beat)
MIDI clock (one beat)
MIDI clock (one beat)
MIDI clock (one beat)
MIDI stop
One beat, estimated BPM = 96.1538
STOP received
CONTINUE received
One beat, estimated BPM = 100
One beat, estimated BPM = 100
One beat, estimated BPM = 100
One beat, estimated BPM = 96.1538
STOP received
CONTINUE received
One beat, estimated BPM = 96.1538
One beat, estimated BPM = 96.1538
One beat, estimated BPM = 100
One beat, estimated BPM = 104.167
midiout
MIDI OUTデバイスがあれば、音が鳴る
Windowsの場合、「Microsoft GS Wavetable Synth」などがあると思うので、音が出せる
midiprobe
各種情報を取得
qmidiin
キューを使ってメッセージを処理する場合のサンプル
先頭の「q」は、queueを指していると思われる
callbackをしない場合はキューに入ると理解(まだ詳しくみていない)
メッセージは、getMessage()で行う
sysextest
システムエクスクルーシブ関連のテスト
環境を整えるのに苦労するが、環境ができてしまえば、Pythonで書くのと同じような感覚でプログラミングできそうだ(Pythonの方が楽ではあるが)