自作キーボードでMIDIキーボードを作成した。

関連記事:
自作キーボードについて色々書く。 – MachiaWorks (machiaworx.net)

ソースコードは以下。

MachiaWorks/AcquaAlta (github.com)

概要・目次

  • 自作キーボードを利用してMIDIキーボードを作る
  • メリデメの記述
  • 作成した機能
  • 今後の展望

自作キーボードを利用してMIDIキーボードを作る

今の所自作キーボードをMIDIキーボード(+便利機能を追加している)にして机に置いてます。

理由・経緯は以下の通り。

  • 自分(Machia)の手首の酷使が困難になってきて、楽器はおろかマウスを使うことすら怪しくなってきた
  • 上記に伴ってキーボードのショートカットだけで曲を作りたいんだけど、それができるDAWは殆どない
  • 色々試した中でAbletonLiveが一番マシだったんだけど、それでも無理がある(シーケンスは入力できるけど、オートメーションの送信が困難等)
  • もう仕方ないのでワンオフでボタンで弄れるシンセサイザー+シーケンサを作成し始めた
  • シンセの処理やボタンの実装をしている中ではんだ付けが必要になってて、回路図の設計が必要だったりボタンが足りなかったり抵抗が必要とかダイオードの実装が必要とかで割と調べることが多い
  • 同じようなことしてないかなーと色々調べていると、自作キーボードがマイコン(ProMicro)で制御しているのを知る
  • 自作キーボードで利用していることが多いQMK firmwareはどうもbeta扱いでMIDI信号を出せるとのこと
  • 「そもそも自作キーボードはキーマトリクス搭載+マイコンで制御してんだから、マイコンから直でMIDI信号を出すように制御すれば解決するじゃねえか!」という発想に至った
  • 調べてみると、どうも使われてるマイコンがUSB-MIDIデバイスとして使える模様
  • MIDI出力をMIDI端子から行うのもマイコン経由で行うか、最初はmidiglueかPC接続を前提にして行えば問題ないことを確認
  • 自分に必要なキー処理を追加していくのもそれほどプログラム的に負荷ではないので、問題ないものと考え始めた
  • 作業に対し手に補助(サポーター等)を入れればはんだ付け等の作業が可能なので、これなら自作キーボードを作ることもできる
  • 1個作ってみて問題ないどころか理想的な環境が揃ったのを確認した

MIDIキーボード自作するメリデメ

メリット

  • 力の制御が不要で想定したVelocityやコントロールを入力できる
  • だいたいのDAWでキーボードだけの入力が可能
  • DAWの設定に依存することなくコントロールが可能。
    他のプログラムでもMIDI受信に対応していればコントロール可能
  • ソースコードをカスタマイズすることで、他のプロトコル送信にも対応可能。
    これによって操作範囲の幅が広がる。

デメリット

  • ハードを準備するまでに求められる知識・技術が多すぎる
    自作キーボードなので、PCBやケース、ボタンは準備が必要だし、はんだ付けも必要。
    自分はキーボードキットを利用したけど、販売していない場合は各パーツの自作も必要と思料。
    (その場合ピンの利用状況の確認要)
    また、画面制御が必要な場合、パーツの追加等更に要素が複雑になる。
    一から始める場合、時間がかかることを覚悟する必要がある。
  • ハードが準備できても今度はプログラム制御が必要
    組み込みプログラムなので、Windows側のプログラムとは求められるノウハウが一部違う。
    つまりハード・ソフト両方の知識が求められるので、割とやることが多い。
  • 出費がヤバい
    各種リソースはパーツ単位で買うので結構お値段が張る傾向にある。
    いや、鍵盤買うよりはマシだと思うんですけどね!

とは言っても自分も組み込みのお勉強はじめて1ヶ月半くらいのはずなので、
割と1ヶ月あればできることが多いよね!と考えます。

1ヶ月目にめでたくIC爆発させました。泣きたい。

キー入力割当

と言っても何をしているのか、という話ですが、
今のところ以下機能を追加済み。(2021/11/15時点)

  • 鍵盤入力
    1オクターブ+5鍵盤の17個で構成、キーを押すとVelocity100で演奏可能。
  • オクターブ上下キー
    オクターブ上下の情報をマイコン内部で保存するようにして、このキーを押すことでMIDIメッセージに依存することなくオクターブを変更することが可能。
  • Velocity変更
    オクターブ上下と同様の仕組みでVelocityを変更可能とした。
  • シーケンス再生
    キーボードのほうでシーケンスを保存できるようにして、再生可能にした。
    ただ現状まだ入力の仕組みは未作成なので、現在は固定シーケンスの再生にとどまる。
  • CCの送信
    特定のCC番号に絞って送信可能にした。
    鍵盤12個で0-127までの値を等分してValを送信、
    後半の鍵盤5個でCC番号を選択可能にした。(今の所Sustain/Expression/Modulationを選択可能)
    これで今までできなかったことができるようになったので楽。

あとはCCのValを1ずつ値を更新できれば調整も楽ではあります。
(今の所10単位とかで出力されてくるので)

今後の展望

まず画面つけることかなと考えます。

これは、以下の理由によるもの。

  • 視覚情報で見れるものがあると楽
  • そもそもCC番号が固定なのは不便
  • 少なくとも電源つけてる間はCC番号を複数保存しておきたいし内容確認したい

ただ、1個めに買ったキーボードは画面付与が困難なので、
現在もう1台買ったキーボードに付与しようかな、と。