見出し画像

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の方が楽ではあるが)

いいなと思ったら応援しよう!