自作デジタルシンセ開発まとめ
製品名「RP-DS16」
開発の様子(Rev.2.0の基板とRoland Rubix22)
RP-DS16 は、RP2040 マイコンを使用して制作した自作のデジタルシンセサイザーです。
低価格かつコンパクトで実用的なシンセにすることを目標に、開発を進めています。
この記事では、RP-DS16 の開発経緯をまとめています。
開発のきっかけ
DTM を触っているうちに、ハード機材にも興味が湧き始めました。
ハードウェアシンセには様々なものがありますが、一般的に高価なものが多いです。
そこで、マイコンを利用すれば低価格でシンセサイザーが作れるのではないかと考えました。
過去に Raspberry Pi Pico で作られたシンセの記事を見たことがあり、
Pico でシンセを作ったら面白いだろうなと思い、シンセ作りを始めました。
開発環境
普段から VSCode を使っているので、拡張機能の PlatformIO IDE を導入して開発しています。
Arduino 互換の開発環境にするために、 Arduino-Pico も導入しています。
GitHub
ハードウェア構成
- 電源: USB Type-C (5V)
- SoC: RP2040
- Flash: 128Mbit (16MB)
- DAC: PCM5102A
- ディスプレイ: 1.3inch OLED 128x64 White I2C (SH1106)
- 外部ストレージ: MicroSDカード
ソフトウェア仕様
- ポリフォニックモード(最大8音)
- モノフォニックモード
- 2つの基本 OSC と Sub、Noise オシレータ
- ユニゾン機能(最大8ボイス)
- ポルタメント機能(モノフォニックモードのみ)
- 加算/リングモジュレーション
- ローパス/ハイパスフィルター
- ディレイエフェクト
- MIDI1.0 互換
- MIDIコネクタは DIN5 と 3.5mmTRS に対応
- MIDIプレイヤー搭載(使用ライブラリ:MD_MIDIFile)
2024/07/20 時点での機能です。
今後、さらに多くの機能を追加予定です。
接続図
RP2040を4つ使用して、役割分担をしています。
DISPはOLEDの制御とCTRLへの命令を行っています。
CTRLはMIDI信号の受信と、SYNTHへの命令を送信します。
SYNTHは命令を受け取ったら波形の計算を行い、DACへ信号を送っています。
波形生成の手順
MIDIの情報から周波数を決定し、OSC(オシレータ)で元となる波形を生成します。
AMP(アンプリファイア)で音量レベルを調節し、エフェクターで様々な音響効果を付与します。
AEGとはアンプエンベロープジェネレータの略で、AMPを時間的にコントロールします。
波形合成の例
オシレータが2つある場合、それぞれで生成した波形を加算合成すると
新しい波形を作り出すことができます。
開発のタイムライン
開発の進捗をテーマ別に記事にまとめて投稿します。
2023/11~2024/1
ブレッドボード上での実験から1代目の基板を作るまで。
矩形波などのシンプルな音を同時に8音まで出せるようになりました。
筆者は電子工作の知識もシンセの知識も基板設計の知識も全くありませんでしたが、
この期間を通して様々なことを学ぶことができました。
1. Raspberry Pi Picoで音を鳴らす
まずは Raspberry Pi Pico と Pico Audio Pack を使って音を鳴らしました。
その後、PCM5102A を使って音声出力をしました。
2. MIDI信号で演奏できるシンセ
MIDI信号を受け取り、音を生成して出力するプログラムを書きました。
3. UI部分の実装とユニバーサル基板
タクトスイッチと OLED を取り付けて LovyanGFX で画面出力をしました。
回路を安定させるためにブレッドボード上の回路をユニバーサル基板に実装しました。
4. オリジナル基板を設計・製造する
コンパクトな基板を KiCad で設計し、PCBGOGO に製造依頼をしました。
2024/2~2024/7
ソフトウェアの改良から3代目の基板を作るまで。
波形合成やエフェクトなどの機能を加えて、さらに多くの音色を出せるようになりました。
この期間では計算の速度や効率を上げるコードの書き方について学べました。
5. 機能の追加と2代目の基板
6. エフェクトの実装と処理の高速化
7. さらにコンパクトな基板を作る
2024/8/8「RP2350発表」
RP2040の新型が出ました。
Cortex-M0+からCortex-M33になり、FPUも搭載されています。
入手可能になったらシンセ部にRP2350を使ってみたいと思います。
Discussion