自作MIDIアルペジエーター:Arduino Nanoでユークリッド・リズム/モジュラー・ファームウェア対応
概要
Arduino NanoベースのハードウェアMIDIアルペジエーター。7つのポテンショメータと7つのボタンで、スケール/モード/ルート音/オクターブ/アルペジオ・スタイル/ステップ数/テンポを直感制御し、DIN MIDI出力でシンセサイザー(Korg Volca Keys等)を駆動。2019年アップデートでファームウェアをモジュラー化し、ユークリッド・リズム生成等の高度機能を追加。GitHubでソース公開中。
必要なパーツ
- Arduino Nano R3 ×1
- ロータリー・ポテンショメータ(10kΩ推奨) ×7
- タクト・スイッチ 12mm ×7
- MIDI DINコネクタ(5ピン) ×1
- 220Ω 抵抗 ×4(MIDI出力/LED用)
- LED ×2(ステータス表示)
- ブレッドボード、ジャンパー・ワイヤー
コントロール割り当て
| ポテンショメータ | パラメータ | 範囲 |
|---|---|---|
| POT1 | トニック(ルート)音程 | C〜B(12半音) |
| POT2 | トニック・オクターブ | 0〜7 |
| POT3 | コード・オクターブ | 0〜7 |
| POT4 | テンポ(BPM) | 約30〜300 |
| POT5 | アルペジオ・ステップ数 | 1〜5 |
| POT6 | モード(スケール) | イオニアン、ドリアン、フリジアン、リディアン、ミクソリディアン、エオリアン、ロクリアン |
| POT7 | アルペジオ・スタイル | 上昇、下降、上昇+下降、ランダム、ユークリッド等 |
ボタン7個:各ボタン押下でI〜VII度のコード・アルペジオをトリガー(ダイアトニック・コード進行に対応)。
音楽理論の基礎(実装背景)
- 12音階(半音×12=1オクターブ)
- ダイアトニック・スケール(全全半全全全半)から7音選択
- 各度数上に3和音(トライアド)を構築 → アルペジオ=分散和音
- コード進行(I-IV-V-vi等)をボタンで即時再生
理論詳細は記事内「Basic music theory」セクション(Reddit kmmeerts氏解説の和訳)参照。
同期機能
Korg VolcaシリーズのSYNC OUT(パルス信号)をArduinoの外部割り込みピンへ入力し、テンポ同期可能。スケッチ内で#define EXT_SYNC / INT_SYNC切替。
ハードウェア構成
- MIDI出力:D1(TX)→ 220Ω → MIDI OUTピン5、GND→ピン2
- ポテンショメータ:A0〜A6(アナログ入力)
- ボタン:D2〜D8(内蔵プルアップ使用
INPUT_PULLUP) - LED:D9, D10(PWM可)
Fritzingファイル(.fzz)で配線図公開済み。
ファームウェア・アーキテクチャ(Ver.2以降)
- モジュラー構造:
Arpeggiatorコア・クラスをプラットフォーム非依存化 - スケール/コード/リズム生成を独立モジュール化
- ユークリッド・リズム(Bjorklundアルゴリズム)実装
- Arduino以外(Teensy, STM32, PCシミュレータ等)へ移植容易
リポジトリ:github.com/raszhivin/arpeggio2
デモ動画
- 機能説明・コントロール・デモ
- Volca Keysとのジャム・セッション
- 新ハードウェア版(筐体組み込み)
拡張アイデア
- MIDI IN追加で外部クロック/シーケンス同期
- OLEDディスプレイでパラメータ可視化
- ロータリー・エンコーダー+ディスプレイでメニュー操作
- CV/Gate出力追加でモジュラー・シンセ対応
- プリセット保存/呼び出し(EEPROM/SD)
まとめ
音楽理論をコード化し、物理コントローラーで直感的にアルペジオ/コード進行を演奏できるMIDIデバイス。「コード進行アルペジエーター」Webアプリに触発され、ハードウェア化した好例。モジュラー・ファームウェア設計により拡張性が高く、ユークリッド・リズム等の現代的アルゴリズムも実装。電子楽器自作の優れた学習教材です。
製造プロセス
- Arduinoデジタルダイス: LCD表示の乱数ジェネレーター自作
- Unopad: Ableton Live連携シームレスなArduino MIDIコントローラー
- Arduinoでアイアンマンを自作:部品・センサー・手順ガイド
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- USB-MIDI機器をBluetooth LEでiOSに無線接続 ─ Arduinoベースの3つのアダプター設計
- Arduino駆動3Dプリントロボットアームの製作:ステップバイステップガイド
- DIY Arduino加湿器コントローラー:リレーを用いた安全な高電圧制御
- 非接触温度スクリーニングゲート:Arduino MKR1000で迅速・高精度な検温
- Arduino Nanoで作るNeoPixelマトリックス版Pongゲーム
- ゲーム用カスタムArduinoジョイスティックハンドルの製作
- ArduinoとTEA5767で作る高性能FMラジオ受信機