自作キーボードを(MIDI鍵盤として)作成しました。

概要

この文章は、キーボード #3 Advent Calendar 2021  7日目の記事になります。
昨日の記事はあたるのさんの100均の300円マウスを魔改造してトラックボールキーボード(仮)を作った話 です。
先人の設計は参考になる部分が沢山ありますよね。(自分も結構他の人の作成物の設計を見ることが多い)

はじめまして、MachiaWorksと申します。

普段はエンジニアしつつ家で創作活動してます。
主にゲーム・ツール・曲・メガデモ・シンセサイザー等を作ってます。

で、今回は自作キーボードをMIDIキーボードとして作成した記録を書いておこうかと。
(MIDI=ざっくり言ってしまうとPCやシンセサイザーで作曲するときの譜面データのようなもの

以下、自作キーボード=そのまま、MIDIキーボードのことは便宜上「MIDI鍵盤」と記載します。
MIDI鍵盤は、文字通り「MIDI出力を行うことができる鍵盤(楽器)」の取扱です。

自作キーボードに手を出したのが11月初旬からという割とド初心者ではありますが。

3行まとめ

  • 手首痛めた状態で作曲するために自作キーボードに手を出しました
  • 試しにMIDI鍵盤としてキーボードを自作してみたところ快適に操作できました
  • 結果自分でレイアウト設計を始めてしまいました

動画

まずこういうのをやりたかったんです。

ファームウェアは以下URLに置いてます。

MachiaWorks/umbra: umbra is MIDI Keyboard made in ProMicro, (github.com)

自作キーボードを作るきっかけ

手を出してみたキッカケは、自分がここ10年くらい手首が腱鞘炎であることが挙げられます。

そのため、

  • 手首を回転させないようにしたい
    (よって、楽器やノブ・マウスを頻繁に使うことなく、手の上下・前後移動・ボタン押下で各種対応したい)

という制約をつけた上で作業できないかとソフトとハードを開発・検証していました。

ある日ハードウェア開発中に実装技術について調べ物していたところ、
音程を入力するためのスイッチとして自作キーボードを作成する事例を知りました。

自作MIDIキーボード — Home-brew MIDI keyboard 0.05 ドキュメント (triring.net)

道具は揃っていたため、試しに一個自作キーボードを作ってみようかとキットを買って組み立ててみました。
ファームウェアについては上記リンクを参考に自作してMIDI鍵盤として動かしたところ、
快適に音楽周りのコントロールが可能になりました。

その後、プログラム書いては試し、同時にキースイッチやキャップについて見識を深め、
割と11月は自作キーボードの調べ物がいっぱいでした。

また、先駆者の方々の事例等もあって、環境の構築やパーツの準備が割と負荷なくできて、
今は文字打ち込みの方やキーレイアウト・基板やプレートの自作にも興味を広げる等、
楽しみつつ色々手を出してる状態です。

作成済みの自作(MIDI鍵盤)キーボード

Nomu30

一度ファームを書き込んでみて、これは凄いコンパクトでいい!と思いました。

キーボードとしてすごい小さいので、机の上に置いても邪魔にならず、
かつ音楽を作るデバイスとして有効活用できるのが嬉しいです。

はんだ付けの量もそれほど多くなく、最初に手を出したのがこのデバイスで良かったと思ってます。

ファームウェアについては前述の通りQMK firmwareをそのまま使わず、
Arduino上で自作してマイコンに書き込み、以下のMIDI鍵盤としての機能を実装してます。

  • NoteOn/Off出力
  • Octave/Velocity変更
  • CC送信機能(CC=コントロールチェンジ。ざっくりいうと細かいニュアンスを数値で送信する機能)
  • シーケンサ機能(自動演奏機能)

キースイッチ・キーキャップ

以下のキースイッチ・キーキャップを付けてます。

キースイッチ:

Cherry MX スイッチ茶軸

キーキャップ:

XDA Blank Atreusの厚みのあるキャップと茶軸スイッチの組み合わせが気持ちいいです。
また、ホーミングキーキャップでうっすら「ド」の音がわかるように配置してます。

無刻印のキーキャップ/ホーミングキーキャップがXDA Blank Atreusと段差になって機能が把握しやすくなってますが、他に選択肢があればちょっと見たいところ。

自作キーボード「umbra – dyo」

色々調べてみると、SU120という基板があり、これなら手元で作ってお試しできそうだなと考え購入し、
SU120が届いてから即作ったキーボードになります。

Planckを意識したOrtholinearになってます。

上記と同様にファームウェアを自分で書いており、
MIDI鍵盤としての以下の機能を実装済み。

  • NoteOn/Off送信
  • Octave/Velocity変更
  • CC送信(CC番号の変更機能も作成中)

具体的には以下の使い方になります。

  • 右手で鍵盤キー+CC番号キーを入力
  • 左手でCC送信(テンキー部分、Min~Max値まで分割した値を入力する形式)
  • 下段でVelocityやオクターブ指定、テンキー部分で数値指定

ただ、使ってみるとF→Bあたりをルートとした和音を演奏できるくらい鍵盤があれば、
割とストレスなく入力ができると思いました。(Nomu30で検証した)
よって、この鍵盤だと1オクターブ分しかないので和音入力に少し制限がありますね。

またLED追加は難易度が高そうなので、まず追加で線を引っ張ってOLEDで
情報を表示できるようにしてます。
(主にVelocityや今使ってるオクターブ・送信するCC番号等の表示で利用)

キーキャップ

NPKC DSA PBT DyeSub キーキャップ セット (ALL 1U/オフホワイト) … (talpkeyboard.net)

これと黒鍵で使っていたキーキャップを流用してます。

自作キーボード「umbra – treis」

現在作成中のドラムパッド風キーボードです。
MIDI出力+シーケンサの実装予定となっております。

2台目(dyo)作成時に強引に仕様変更した部分を整理した上で、SU120を使って作っております。
更にトップ・ボトムプレートを作成中となります。

dyoのときは追加でOLEDを接続しましたが、レイアウト検討当初からOLEDの接続を考慮し配置、
ピンもまだ余ってるのでロータリーエンコーダの追加ができそうです。

キーキャップはdyoと同様のものを使ってます。

実際にMIDI鍵盤作ってみて思ったこと

実際にMIDI鍵盤としてキーボードを自作してみた感想は以下の通り。

  • 実際のMIDI鍵盤と同じく、ボタンを押せば音が鳴る仕組みを作成できた。
    自作キーボードを使うことで指の力の入れ方を細かく制御しなくても一定の音が鳴るため、
    手のコントロールが困難な人でも制御が容易。
  • DMXやOSC、ハードウェアシンセサイザーのコントロール等への応用が可能。
    更に他マイコンへの組み込みも想定すると応用範囲が広い。(スイッチ入力なので)
  • 自分の作曲(打ち込み)におけるEndgameの取っ掛かりが見つかった気がする。
    今まではMIDI鍵盤やマウスで細かくノートやCCを入力していたため手首を痛める原因のひとつになっていたが、
    キーボードで入力することで手首を捻る事に対する痛みを回避できそう。

今後のキーボード改造・作成案

  • (ソフト)プログラムをQMK firmwareに移植
    チャタリングの対策も行われてたり、MIDI出力命令があらかじめ用意されてることもあり、
    QMK firmwareの仕様に則って実装するのでも、MIDI鍵盤の機能を作りやすそうです。
    実際、PlanckEZでMIDIシーケンサが実装されているみたいですし。
  • (ハード)キーキャップを色々試す
    キースイッチは茶軸で満足しているのですが、
    キーキャップについてはどんなのがあるか調べる必要がありそうです。

  • (ハード)キーレイアウトを試行錯誤してみる
    SU120がすごい便利なので、これを使って機能を確認したり、
    思い付いたら即レイアウトを作ってみるような開発ができるんじゃないかと思ってます。
    実際に上記のumbra-treisについては思い付いてから30分くらいでレイアウト作成してます。
    今後は、鍵盤を意識してstaggered layoutにする・ボタンを増やす等
    レイアウトを更新して快適にキー入力が出来るようにしていきたいと思いました。
  • (ハード)各種パーツの制作・発注
    やり方確認したり実際に作ったり発注してみて出来ないことはないと分かってきたので、
    作れるものの領域を増やしていくと楽しそうです。
    KiCadも少しずつ使えるようになってきてます。

終わりに

現状趣味を続ける上で手首に負担をかけないで作業を進めるのが死活問題になっているので、
今後もMIDI鍵盤として、また少しずつ文字打ち込みの道具としても自作キーボード作っていきたいな、と思ってます。

使用しているキーボード

  • 文字打つとき・・・HHKB JP→OLKB Planck
    作業速度が求められる場合は以前から使用していたHHKBを使いますが、Planckを購入し現在移行中です。
    この文章についてはHHKBで大まかに打ち込み、途中でPlanckが届いたためPlanckを使って内容を整えてます。

  • 音楽・・・自作キーボード「umbra – dyo」
    これで曲作ったりシンセサイザー触ってます。
    (DTM詳しい人にはSWAMとかを触るのに向いてますという説明する)

追記20211208

この文章書いたあと、QMK firmwareのAPIを調べてみたりしました。

シーケンサー – QMK

結論を書くと以下の通り。

  • MIDIデータ出力・CC出力は再現可能
  • シーケンサは再現不可能

これは、QMK firmwareで持っているAPI内で、再生するノートを指定できなさそうなのが原因です。
(実際ヘルプにもまずドラムマシンの機能に制限してAPI提供するって書いてありますね)

ということで、ノートを色々変更するシーケンサを作る場合は
QMK firmwareを使わず自前で記述するのが早い気がしてます。