ここから本文です

どこの家にもある「アレ」を使ってエフェクターをMIDI制御

2024-08-19

テーマ:音楽ライターのコラム「sound&person」, 楽器

マルチエフェクターや多機能デジタルエフェクターを使う際にあると便利なものの一つがMIDIコントローラーです。エフェクターがMIDIに対応していれば、バンクの切り替えや複数のパラメーターの設定をスイッチ一つで瞬時に行うことができ、操作が簡単になります。しかし、エフェクター用のMIDIコントローラーは高価なものが多く、なかなか気軽に試すことはできません。そこで、家にある「あるもの」を使って手軽にMIDI制御を試す方法を紹介したいと思います。

#MIDIの信号の大本はUART

手軽にMIDI制御を試せる「あるもの」とはずばり、「USB-UART変換ボード」です。

UARTはマイコンなどの通信に頻繁に用いられる回路で、活用範囲が広く、変換ボードも500円程度と廉価ですので、持っている方は多いと思います。USB-UART変換ボードがMIDIと何の関係があるか疑問に思われるかもしれませんが、実はMIDIのデータの送受信はUARTで行われています。「MIDI1.0規格書」を確認すると、MIDIの送受信回路はグランドループ回避のためのオプトアイソレーターを一つ挟んでいるだけのUART送受信回路であることが分かります。

オプトアイソレーターが必要なのは受信回路だけで、送信回路は通常のUARTに抵抗を二つ繋げているだけの構成になっています(回路図にはバッファ回路も描かれていますが、製品として流通しているUSB-UART変換ボードであれば駆動能力は足りているので不要です)。つまり手持ちのUSB-UART変換ボードに220Ωの抵抗をつなげて、そのままエフェクターのMIDI INに接続するだけでMIDI制御は簡単にできます。

#どんなデータを送ればいいのか

USB-UART変換ボードと抵抗2つがあればMIDI送信ができることが分かったところで、どんなデータを送ればエフェクターを制御できるのでしょうか。エフェクターのMIDI制御では主にPC(プログラム・チェンジ)やCC(コントロール・チェンジ)が使われますが、UARTで送るデータは通常は文字列かバイト列で、CCやPCといった区分は存在しません。なのでCCやPCのような制御命令がどんなデータで表現されるのか、規格書を読んで調べる必要があります。

MIDIの制御命令は「メッセージ」と呼ばれ、1つのメッセージは1つの「ステータス・バイト」と0個以上の「データバイト」で構成されます。「ステータス・バイト」がPCやCCの動作を指定する部分で、「データ・バイト」は数値を指定する部分です。例えば、Line 6のHX Stompは「CCの70を0でバイパスに設定」することができますが、ここのMIDI制御の「CC」の部分は「ステータス・バイト」で、「70」と「0」は「データ・バイト」で指定します。ステータス・バイトとデータ・バイトは名前からわかるようにどちらも1バイトのデータです。

ステータス・バイトの構成は、先頭のビット(MSB)が1で固定されていて、続く3ビットで動作の種類を指定し、残りの4ビットがMIDIチャンネルを表します。先頭のビットが1で固定なのは、先頭ビットが0で固定されているデータ・バイトと区別するためです。2番目から4番目の3ビットの組み合わせと動作の対応は上の図の通りで、CCであれば0b011、PCであれば0b100になります。末尾の4ビットは「MIDIチャンネル-1」を表します。1を引く理由は、MIDIチャンネルは1〜16の数字であることに対して4ビットの二進数で表現できる数字は0〜15と1ずれているためです。データ・バイトの構成はシンプルで、先頭のビットが0で固定され、残りの7ビットで数値を指定します。データ・バイトが1バイトでありながらMIDIのPCやCCで指定できる数値が0〜127と7ビット分しかないのは、先頭ビットがデータ・バイトの判別に使われているためです。

#実機でテスト

それでは、本当にUSB-UART変換ボードでMIDI制御ができるのか実機でテストしてみます。テストに使う機材はValetonのGP200-LTというマルチエフェクターです。

VALETON ( ヴェイルトン ) / GP-200LT

VALETON ( ヴェイルトン ) / GP-200LT

まずはブレッドボードにUSB-UART変換ボードと2つの220Ω抵抗を配置します。抵抗はボードのTX端子とVCC端子に接続します。

GP200-LTのMIDI入力端子は3.5mmジャックなので、適当なステレオオーディオケーブルを用意して配線します。MIDI信号の3端子プラグへの配線は、リンク先の「3端子プラグ-MIDI (英語版)」に記されています。ピン5がチップ、ピン4がリング、ピン2がスリーブです。

先ほどのMIDIの回路図を確認するとピン5、4、2はそれぞれがUARTのTX、VCC、GNDにつながることが確認できるので、その通りに配線します。今回はテストなので、少し不安定ですがデュポンワイヤーの先をクリップでプラグに挟む形で固定しています。

オーディオケーブルの反対側をGP200-LTのMIDI入力につなげ、USB-UART変換ボードをUSBケーブルでパソコンにつなげればハードウェアの準備は完了です。次に、UARTからデータを送るためのツールを立ち上げます。パソコンからUARTで通信するためのツールは様々ですが、今回はPythonとpyserialを使います。PythonでUART通信をするためのコードは次のようになります。

import serial
s = serial.Serial('COM3', 31250) # ポート名は適宜変更
s.write([]) # 大かっこの中に書き込むデータが入ります
s.close()

MIDIの規格書にはスタートビットやストップビットの仕様なども書かれていますが、それらの設定はデフォルト設定と同じなので別途設定を変える必要はありません。通信のボーレートだけMIDIの仕様である31.25kbpsに指定すれば大丈夫です。送信するデータはGP200-LTのユーザーマニュアルから調べて決めます。メーカーのサイトからダウンロードできるユーザーマニュアルの52~53ページにMIDI制御のデータ対応表があります。

CCとPCの両方を試したいので、CC#49番の「DST Module on/off」と、CC#0番の「BANK MSB」の制御を試します。
「DST Module on/off」を行うためのMIDIメッセージのステータスバイトはまず先頭が1、続く3bitはコントロール・チェンジなので011です。MIDIチャンネルは、とりあえず本体の設定で入力チャンネルを6にしたので 6-1 = 5 = 0b0101です。まとめるとステータス・バイトは0b10110101になります。

続く1つ目のデータ・バイトはCC番号49で、2つ目のデータ・バイトはディストーションを無効にする場合は0?63の任意の値、有効にする場合は64〜127の任意の値を指定します。テストでは、無効時には0、有効時には127を使用します。まとめると、ディストーションを無効にするには [0b10110101, 49, 0] を、ディストーションを有効にするには [0b10110101, 49, 127] を送信すれば良いことになります。これらのデータを送信することで、エフェクターのディストーションブロックがオンオフする様子は下の動画で確認できます。

次に、GP200-LTのPC(プログラム・チェンジ)を使ったバンク切り替えについてです。マニュアルの対応表によると、バンク切り替えにはまずCC#0を送信する必要があります。マニュアルにはCC#0の2つ目のデータ・バイトが1の場合、バンクは01-Aから32-Dまでを、0の場合は33-Aから64-Dまでを切り替えると記載されていますが、実際に試すと逆で、0の時が01-Aから32-Dまでの切り替えであることが確認できました。

今回は、適当な別のバンクから9-Cのバンクに切り替えるテストを行います。バンク切り替えはPC制御で行いますが、先にCC制御を行う必要があります。CC#0のバンク切り替えを指定するために [0b10110101, 0, 0] を送信します。ここで、0b10110101 は「チャンネル6へのCC制御」を示すステータス・バイトで、続く2つの0は「01-Aから32-Dまでのバンク切り替えモード」を示します。その後、PC制御データを送信します。
PC制御のステータス・バイトは、先頭ビットが1、動作ビットが100、チャンネルは6なので、0b11000101 です。データ・バイトはバンクの番号を元に計算する必要があります。バンク番号9-Cのデータ・バイトは0から数えて行ってもいいですが、次の手順で求めることもできます。
GP200-LTのバンクのアルファベット部分はA~Dの4通りあるのでこの部分がデータ・バイトの下位2ビットに対応し、数字部分が上位5ビットに対応することになります。上位5ビットで表現できる整数は0〜31でバンクの数字は1〜32なので、バンクの数字から1を引いた値が上位5ビットになります。アルファベット部分は16進数で10?13を表すため、アルファベットをそのまま16進数と見なして10を引けば下位2ビットを求めることができます。したがって、バンク9-Cを選択するためのデータ・バイトは「((9-1)<<2) + 0xc - 10」で求めることができ、計算すると34になります。

まとめると、PCでバンクを9-Cに切り替えるには [0b11000101, 34] を送信すれば良いわけです。これらのCCとPC制御を連続で送信することで、バンクが切り替わる様子は動画の後半部で確認できます。

#3.3V系ボードの場合

ここまで読んで、「試してみたいけど3.3V系のボードしか持っていない、5V信号が出せない!」という方もいらっしゃるかもしれません。3.3VのUARTと抵抗の間にレベルシフターを挟んでもいいですが、別の方法があります。実はMIDIには3.3V用の規格もあり、詳細はリンク先の「MIDI 1.0 電気的仕様改訂(日本語版)」の2ページに記載されています。3.3V系を使う場合はVCCにつながる抵抗を33Ω、TXにつながる抵抗を10Ωにすればよいとされており、検証動画は割愛しますが、10Ω抵抗と100Ω抵抗を3つ組み合わせて試したところ、3.3V信号でもエフェクターを制御できました。

#実用性が課題

敷居が高そうにみえるMIDI制御ですが、どこの家にもあるUSB-UART変換ボードを使えば簡単かつ低コストで実現できることがわかっていただけたでしょうか。しかし、パソコンで制御できるとはいえ、ギター演奏中にノートパソコンを横に置いて足でキーボードを踏むのは現実的ではなく、演奏中に使えなければ意味がないという課題が残ります。つまり、パソコンほどかさばらずに自由にUART通信ができるデバイスがあれば、自作のMIDIコントローラーも実現可能です。現在はまだ調査段階ですが、形にすることができれば、またサウンドハウスで共有したいと考えています。ここまで読んでいただき、ありがとうございました。


コラム「sound&person」は、皆様からの投稿によって成り立っています。
投稿についての詳細はこちら

662611034

バンド物のソシャゲがきっかけでギターを始めた会社員。 学生時代に勉強した電子回路がギター機材の理解に役立ちすぎることに戦慄を覚え、なぜもっと早く始めなかったのかという後悔で夜しか眠れない日々を送っている。

VALETON / GP-200LT

VALETON

GP-200LT

¥45,980(税込)

ギター用マルチエフェクター

評価00000

ブログ有り

お取寄せ

数量
 
 
 

カテゴリーから探す

翻訳記事

ブログカレンダー

2024年9月

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

ブランドから探す

ブランド一覧を見る
FACEBOOK LINE YouTube X Instagram TikTok