0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Arudino MIDIライブラリ Control-Surfaceの使い方メモ

Last updated at Posted at 2022-07-08

はじめに

ArduinoのMIDIライブラリ自体は結構色々あるのですが、色々使ってみてControl-Surfaceというライブラリが使いやすく機能も豊富だったので、自分が使える範囲でメモ書き程度に使い方を書いていこうと思います。あまり理解できてない部分も多いのでちゃんとした解説にはならなそうですが、、、

簡易的な説明

とりあえず特徴的なことを挙げると、他のライブラリだとsetup()やloop()などの中には色々処理を書く必要のあったのですが、Control-Surfaceはそれぞれの中には下記のものを書くだけでセットアップが完了になるところです。

void setup() { Control_Surface.begin(); }
void loop() { Control_Surface.loop(); }

そして機能を追加するのには、その機能をインスタンスを生成してあげるだけで良さそうです。(ここの表現が正しいのかは謎)
例えばノート信号(60, C4)を送る機能を追加する場合の全体的なコードは以下のようになります。

例.ino
#include <Control_Surface.h>

USBMIDI_Interface midi;

NoteButton button { 
   4,              // pin番号
   {60, CHANNEL_1} // ノート番号、チャンネル
};

void setup() { Control_Surface.begin(); }
void loop() { Control_Surface.loop(); }

というような感じで記述すれば、4番のpinに入力があった場合にCh1,60番のMIDI情報を送信することができる感じになっています。
このようにシンプルな機能を作るのにも役立ち、あとは同様にCCButonやCCPotentiometer(コントロールチェンジメッセージを送る機能)、Bank(Chや送信番号の切り替え)などを組み合わせることで多彩な機能を持つMIDIコントローラーをクリーンなコードで製作することができるようになっています。

各機能の説明

とりあえずここでは自分が使ってみたことがある機能を軽く解説してみようと思います。
まぁ説明自体はドキュメントからのコピペですが。

NoteButton
瞬間的なプッシュボタンまたはスイッチの入力を読み取り、 MIDIノートイベントを送信するクラス
書き方は上述の通り

CCButton
瞬間的なプッシュボタンまたはスイッチの入力を読み取り、 MIDIコントロールチェンジイベントを送信するクラス

CCButton.ino
CCButton ccButton { 
   5,              // pin番号
   {74, CHANNEL_1} // アドレス番号、チャンネル
};

CCPotentiometer
ポテンショメータまたはフェーダーからアナログ入力を読み取り、 7ビットのMIDIコントロールチェンジイベントを送信するクラス

CCPotentiometer.ino
CCPotentiometer potentiometers { 
    0,              // アナログpin番号
    {71, CHANNEL_1} //  アドレス番号、チャンネル
};

SwitchSelector
トグルまたはモーメンタリスイッチの状態に基づいて、2つの設定のいずれかを選択するセレクタ。
ちょっとここら辺から説明に自身がないですが、自分の現時点での解釈で言うと後述で説明するBank(chやアドレス番号の切り替え)機能を使用する場合などにこれを使うことで、実現できるものと解釈しています。Bankのところと一緒に書ければと思います。

SwitchSelector.ino
SwitchSelector switchSelector = {
      bank,      //  バンク名
      8          // pin番号
};

Bank
上述などで設定した機能をグループ化し、これらの要素のアドレスを変更できるクラス
とりあえず書き方的には以下の感じになります。

Bank.ino
Bank<2> bank(1);
//Bank<2> → <>の中に入れる数値があまり理解できていない、
//bank(1)  → chやアドレス番号を()内の数値分切り替える

使い方は適当な機能にBankable::というものを記述し、先ほど説明したSwitchSelectorとBankType(何を切り替えるか)を定義します。
書き方の例は以下になります。

Bankable例.ino
Bank<2> bank(1);
SwitchSelector selector = {bank, 8};

Bankable::CCButton bankButton {
   {bank, BankType::CHANGE_CHANNEL}, //バンク名、 切り替えるタイプ(この場合チャンネル)
       1,                               // pin番号
       {71, CHANNEL_1}                  // アドレス番号, チャンネル
};

これで8pinに接続したトグルスイッチなどを使い、ONになればch設定が2chになり、オフにすることで1chに切り替わるような動きを作れます。
もしBankTypeをCHANGE_ADDRESSにすると、ONで72、OFFで71になるといった感じです。
うまく説明できてるかわかりませんが、こんな解釈です。

終わりに

一応これらを使えばある程度の機能を持ったMIDIコントローラーを自作できると思います。
機能自体はまだまだ豊富にあるのですが、如何せん電子工作や言語になれていないのとあまり記事もなさそうなので駆使するのは難しそうです。。。
が、もしお役に立てれば幸いです。

自分が自作したやつの解説もNoteに書いてみてたりするのでもしよかったらこちらもどうぞ。
https://note.com/paraixo/n/n0edbc0eaf45f

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?