手持ちのシンセに追加できるD-BeamっぽいMIDIコントローラ作った

M5Stack

 なんでも、Rolandの現行シンセにD-Beam搭載モデルはないんだそうだ。楽しいのに。というわけで、毎年恒例のM5Stackのコンテストに向け、MIDIコントローラを作った。Roland D-Beamっぽいタッチレスで操作するMIDIコン。自作。自作。

 動画を見ればわかるとおり、コントロールチェンジを送出するのがメイン。距離を測るToFセンサーというものに手をかざして、その距離でCC値を決める。動画ではKORG NTS-1のフィルターを操作すべくカットオフ周波数を操作するコントロールチェンジ信号を送っている。

 おまけでノートを送る機能も加えた(動画後半にあり)。サウンドに変化を加えるだけでなく、メロディの演奏もできるというわけだ。スケールとキーが選択できるので、まあまあ遊べると思う。

 詳しくはコンテスト応募用のHackster.ioのプロジェクトページを見てほしい。

 GesticatorMIDI – Roland inspired controler

 英語だけど。もちろん、英語が書けるわけがないので、応募用ページ作成にはもちろん最初に日本語で書いて、GoogleのAIに英語にしてもらった。以下、その元原稿。

プロジェクト概要と紹介

 Roland D-Beam のような非接触のMIDIコントローラーをあなたのシンセサイザーやエフェクターに加えたいと思ったことはありませんか? M5Stackと同社のUnitシリーズを組み合わせれば、はんだづけなどの作業なしに、あなたのシステムにD-Beamのようなコントローラをアドオンできます。
 任意のコントロールチェンジを送出できるほか、おまけとしてノートを送出できるのでちょっとした演奏も楽しめます。

主な機能と特長

  1. ToF(距離)センサーによるMIDI制御機能
  2. 2種類の動作モード(全13バリエーション)

ボタン操作で以下のモードをリアルタイムに切り替え可能。

●コントロール・チェンジ(CC)モード(8種):

  • CUTOFF(NTS-1) [CC#43]
  • MODULATION [CC#1]
  • BREATH [CC#2]
  • VOLUME [CC#7]
  • PAN [CC#10]
  • EXPRESSION [CC#11]
  • PORTAMENTO SW [CC#65]
  • CUTOFF FR [CC#74]

●ノート(演奏)モード(5種):

距離を15段階に量子化し、指定したスケールでノートオン/オフを送信
選択可能スケール:

  • メジャー
  • マイナー
  • ブルース
  • メジャーペンタトニック
  • マイナーペンタトニック

ボタン操作・UI機能(M5Stack 3ボタン構成)

 ・BtnA 動作モードを順送りで変更、長押しで逆送り(順・逆はBtnBも同様)
 ・BtnB [CCモード] MIDIチャンネル順・逆送り
     [NOTEモード] ルートキー順・逆送り
 ・BtnC MIDI送信の ON / OFF トグル切り替え

ハードウェア & MIDI通信制御

 ・HardwareSerial (Serial2) 経由でMIDI信号を送出し、SAM2695音源モジュールを制御
 ・5-ピンMIDIとTRS MIDIに対応し、多くのシンセ、エフェクツ製品に対応

組み立て手順ガイド

 ・M5Stack FIREにUnit MIDI、Unit Tofをつなげる。
 ・Unit MIDIからあたなのシンセやエフェクツにUnit MIDIを5ピンMIDIケーブルまたはTRS MIDIケーブルで接続する。

以上。

プログラムと苦労したところなど

 プログラムはGitHubにある。

 M5_GesticatorMIDI

 ボードでM5Stack FIREを選ぶほか、ライブラリの導入が必要(プログラム冒頭に記述してある)。また、ビルド時にPSRAMは無効にする必要がある。

 最初はArduino IDEで作ってて、途中からVSCodeに移行したら動かなくてはまった。Arduino IDEではPSRAMをOFFにしなくても動いたのが、VSCodeでは動かなかったのだ。調べてみると、PORT Cを使うにはPSRAMが無効ではならない、Arduino IDEはたまたまうまくいっても、VSCodeはフルに機能を使おうとするため、明示的にOFFにする必要があるのだという(よくわかってない)。

 メインの動作ができてから、描画周りはGoogleのAIに手伝ってもらった。Geminiじゃなくて、検索ページのAIモードから行くやつ。それでも中身はGeminiなのかな。

 センサーで読み取った値を棒グラフで表しているのだけど、最初はチカチカしていた。黒で塗りつぶしてから必要な分水色で塗る、という動作によるものだった。そこで、全体を塗りつぶすのをやめ、水色部分塗って、黒部分塗って、という動作に変更したら見た目満足いくものになった。

 UIもちょっと苦労した。途中でノートモードを加えて、スケールやキーも変えられるようにしたいという欲が出てきたりして。追加で指示を与えるとAIが前のコードを忘れたりする。Geminiは去年くらいから触り始めたのだけど、これが困る。前よりも忘れる頻度は減ったような気もするけど、プログラムの内容によるのかもしれない。

 とりあえず、できたので満足。

シンセがなくても

 冒頭の動画ではシンセをつないでいるのだけど、実は本体だけでも遊べる。本体といっても、M5Stack FIRE + Unit MIDI + Unit ToF の組み合わせだけ、ということで。

 Unit MIDIがシンセ内蔵なので、これで音を出すのだ。その際に使用するのはノートモード。Aボタンを押していけばプリセット名がオレンジになるのですぐわかるはず。プリセットにスケール名を入れてあるので、好きなものを選んで演奏する。

 おっと。忘れてはならないのがスピーカー。Unit MIDIはスピーカーを内蔵してないので、別途つなげる必要がある。こんな感じ。

 これを始めるとプログラムチェンジも欲しくなるけど、それは別プロジェクトにしたほうがいいかも。とか思ってやめた。

コメント

タイトルとURLをコピーしました