アプリ用のプラットフォームモジュールを作り直し
RP2040 zeroを積んだ8HPサイズのユーロラックモジュール「Eurorack Playground MkI」 を設計して、その上で動くステップシーケンサー、エンベロープジェネレーター、オシレーター、ユークリッドリズムシーケンサーとソフトウェアを作ってきましたが、ハードウェアに不満が出てきたので作り直しました。
MkIIの主な仕様
- 入出力
- CV入力x2
- 各ch バイポーラ/ユニポーラ切り替え付
- V/OCT入力専用x1
- ユニポーラ固定(0-5V)
- ゲート入力x1
- PWM出力x6
- 各ch バイポーラ/ユニポーラ切り替え付
- 10Vpp以上も可(±12V駆動)
- CV入力x2
- 操作系
- アナログポットx1
- ロータリーエンコーダーx1
- ボタンx3(うち一つはロータリーエンコーダーのプッシュ操作)
- 表示系
- OLED
- プログラム可能なLEDx2(自照ボタン内のもの)
- PWM出力確認LEDx6
- サイズ
- 10HP(基板2段)
(参考)MkI
- 入出力
- ADC入力x2(回路のパーツ付け直しで出力も可)
- PWM出力x2(オペアンプ付)
- DC出力x1
- ACカップリング出力x1
- MAX4-5Vpp程度(5Vor12V単電源駆動)
- ※拡張基板でSPIの2chDAC出力をGPIOの代わりにオペアンプに入れられる機構を装備
- MIDI IN/OUT
- 操作系
- アナログポットx2
- ロータリーエンコーダーx2
- レバースイッチx1(SPDTなので2ボタン相当)
- 表示系
- OLED
- サイズ
- 8HP(基板1段)
不満点は
- 入出力が弱い
- LFOやオシレーターをそのまま受けられるバイポーラな入力が欲しい
- オシレーターアプリなんかはバイポーラ出力が欲しいし、でもトリガーやゲートはユニポーラ出力がしたいし、もっと多チャンネル化したい
- 操作性がイマイチ悪い
- MIDIもう要らない
なので、RP2040 ZeroとSSD1306を使うこと以外は見直しました。
入出力
入出力はパーツ組み換えでの入出力切り替えをやめて固定にして、ユニポーラ・バイポーラ切り替え機能をつけました。LFOやEGを入力したり出力したいのですべてカップリングコンデンサレスで作っています。ソフトウェアから切り替えることも検討したんですがそれはせず、背面のジャンパピンをショートさせる方式にしました。MIDIは結局使わなかったので削除。
入力系は複数種。
V/OCT入力はユニポーラ固定、多回転タイプの半固定抵抗で5V→3.3Vに調整して0-5Vまで対応。この抵抗分圧を調整すれば0-8Vとかもイケるとは思うけど、ADCの解像度的に厳しくなるかも。
CV入力は2つ。アッテネータとポーラー切り替え付き。
GATE入力は単純にデジタル入力を割り当て。
出力は6つすべて2次パッシブフィルターを付けたPWM出力。
バイアスとゲインを調整して整えればバイポーラ時は10Vpp以上。ユニポーラなら8Vppくらい。ユニポーラ設定にしてPWM最大出力時を5Vに調整すればV/OCT出力も出来るかと。
パッシブフィルターは2次で8kHzくらいに設定。
またPWM出力にはLEDを付けてどこが出力されているのかわかるようにしました。GPIO出力につけてるのでバイポーラ出力時はバイアス値出力のため常に光っちゃいますが、トリガーやゲート、エンベロープ、LFOの時は出力の状態がわかりやすいかなと。
OUT1~OUT4はHWSPIが割り当てられているピンを使っているので、3.3V電源とSPI DACを追加したDAC化基板を別途作成することも出来るかな?と。
表示・操作系
表示系はOLEDのほかに2つある自照式ボタンのLEDをプログラム出来るようにしました。このLEDはHWシリアルのTX,RX指定のピンを使っているので、LEDで光らせる代わりにMIDI送受信回路の基板やパネルを作って繋げて、アプリを書けばMIDItoCVを作ることも可能。
自分でグリグリ動かすよりもCVやトリガーで動かせた方がとなったので操作子類は減らしました。プログラム可能なエンコーダーとポットは1つずつ。エンコーダーはプッシュボタン付きのものを。SPDTの両側モーメンタリスイッチはやめて自照式ボタンを2個。
使い方的にはポットはリアルタイム向きな操作を割り当てる用、ボタンは画面遷移やメニュー操作に、エンコーダーは設定値の変更に、という想定。
回路など
回路とアプリはgithubで公開しています。
回路図は基板の1段目の回路、基板の2段目の回路、2段目の入出力回路の4枚。
アプリの解説は特にしませんがVSCodeでplatformIOの拡張を入れればビルド出来ます。
Arduino IDEと違って設定に書いておけばライブラリやコアを選択してくれるので便利ですね。
https://github.com/marksard/EurorackPlaygroundMkII/tree/main
モデリング
仕上がり想像図。各層接合部の位置あわせはkicad上での重ね合わせで十分なんですけど、厚み方向で問題はないかとか、勘合をみたり雰囲気確認したり、配線作業とか回路図書いていくモチベをアゲるのに使ったりしています。
実機
届いた基板を組んだ。
最後まで検討してたのが自照式ボタンで、そのボタン径が違うのでとりあえず小さいほうの径でパネル面に入れてたのですが、最終的に大きい径のボタンを使うって決めたのにパネル面のデザインそのままで発注…したので仕方なくステップドリルで6mm径くらいに拡大して取り付けてます…基板発注後にボタンのオブジェクト追加したレンダ絵作って眺めて完了にするかーと作業してたときに気づいたというね…
OLEDは7mmだったかな?のソケットを使って、OLED側のピン付属のプラを除去した上でピンを少しカットして載せています。これでパネル面との空間11mm前後にツラで収まります。ピンだけだとグラグラなので7mmスペーサーでOLEDと基板を固定。
MkIの時はプラ軸のエンコーダーとポットを使ってたんですが、今回押し込むタイプの操作になり、基板や操作子とパネル面との剛性確保と、プラ軸は軸がグラついて操作感を損ねてたのでナット締め出来る金属軸のものに変更。人差し指とか中指一本で押さえつけるような操作も出来て快適。
自照式ボタンは基板付けタイプで基板面から11mm内に構造が収まりつつ、パネル面にボタンが突き出るようなやつっていうのが国内のパーツ屋さんでは見かけなかったのでアリエクで購入。押し心地は重めでカチカチ五月蝿いのが難といえば難かも。
背面はこんな。
MkIの時は厚みを抑えるためOLEDと基板の間に挟みこむようなレイアウトにしてたんですが、ソフトウェアリセット・ブートが効かない時に物理BOOT/RESETボタンを押せなかったのが辛かったので今回は押せるように。
2段目の基板に立っているピンはバイアス設定ピン。GNDにするかバイアス電圧にするかをジャンパピンの切り替えで設定します。
RP2040のそばにあるジャンパピンは3V3、GND、TX、RXを出してて、通常はLED1,2にショートしてボタンのLED制御に使います。上にも書きましたがMIDI入出力の基板とアプリを作って拡張出来ます。
背の低い半固定は各出力のゲイン調整用。背の高い多回転タイプはバイアス電圧調整とV/OCT分圧設定用。
(参考MkI)
(MkIはパネル|OLED|RP2040|実装基板の4層構造でした)
アプリと実機動画
すでに4つほどアプリを作ったので、かるく動画だけでも。
3VCO
MkIのSimpleVCOアプリを移植した上でMkII用に機能追加しました。VCO/VCLFO切替x2、VCLFOx1、ホワイトノイズx1。設定でVCOやLFOのピッチをCVで操作するよう割り当てて調整すれば和音ならしたり独立したVCOとして。
波形選択をCVでやらせれば、1VCOだけでドラムっぽい音を出せたりも。
BD,SD,HH,ベースとなる元の音を一台で出してみた
— 𓊬 ᙢᗩᖇḰ 𓊬 (@marksard) June 23, 2024
BDはVCLFOと、CV2に入れたEGでビッチを変化
SDはホワイトノイズとスナッピー音のVCO Bをミックス
HHはホワイトノイズをHPF通して
ベースはVCO Aで演奏しつつLPF通し、CV1に入れた外部LFOでシェイプ変化させてる
ボタンのLEDはCV1,CV2チェック用に表示 pic.twitter.com/1ouWJuhYSU
3VCOとホワイトノイズを使ってベース音(ノコギリ波)とベースドラム(三角波・サイン波)、スネア(サイン波形でスナッピー音+ホワイトノイズ)、ハイハット(ホワイトノイズ)の要素を一台で出して、外部モジュール(エンベロープジェネレーター、ローパスフィルター、ハイパスフィルター、VCA)で音作りをしています。
レイブなサウンドが出てきたんだが pic.twitter.com/cIuQZ4g0Gk
— 𓊬 ᙢᗩᖇḰ 𓊬 (@marksard) June 26, 2024
これは3VCOの音程をそれぞれずらしてチューニングして鳴らしてます。キーを意識せずサンプラーから出したようなワンコード演奏だけどハウスとかハードコアテクノ的にはこれでも十分ですよね…
クロックディバイダー
MkII用新作。外部からクロックを入力したものを分割出力。ドラム音源のトリガーに使ったり、メロディのEGタイミングにしたり…ソフトウェア実装でそこまで速い処理させているわけではないけど普通のレンジで使う分には問題ないはず。/3や/5みたいな奇数出力が簡単に出るのと、内部でリセットをかけて32小節単位でリズムを繰り返す、とか裏拍を刻ませる、みたいなことも簡単に出来ました。
マルチプライヤーは内部でオシレーターを持ってクロックで受けた間隔で周波数だしてその2倍3倍の周波数で動かしてトリガーさせれば2連符とか3連符は出来そうかな。やってないけど。
ドラム音源用の定番パターンのプリセット作ったり、プロバビリティー機能を追加するのも楽しいかもしれない。まだやってないけど。
リズムボックス
MkII用新作。外部トリガーによるワンショットの発音で、現時点では4ボイスだけど実装は軽いので6ボイス出せそう。各ボイスはディケイタイムとピッチを設定可能。再生周波数とビットは44.1kHz 11bit。pythonで44.1kHz16bitのwavファイルを11bitのc形式配列に変換するコンバーターを使って音色セットを作る感じにしています。RP2040のUSBストレージ機能を使ってドラッグドロップしたものを内部で使えるようにしても良いかも。
シーケンサー内臓して64ステップで定番パターン鳴らす機能みたいなのを持たせても楽しいかもしれない。
EurorackPlaygroundMkIIと命名したRP2040シンセモジュール上で動く
— 𓊬 ᙢᗩᖇḰ 𓊬 (@marksard) June 29, 2024
クロックディバイダーとウェーブテーブルドラム音源アプリが出来た!
オシレーターのパルスを分周してドラム音源のトリガーにして演奏してます
音色は定番の909
まだ波形追加出来るし選択式にしたいな#自作モジュラーシンセ pic.twitter.com/hXvNEgGGdC
16ステップシーケンサー
MkIの16ステップシーケンサーをMkIIへざっくり移植
— 𓊬 ᙢᗩᖇḰ 𓊬 (@marksard) July 22, 2024
メニュー体系はもうちょっと考えないとかなぁ… pic.twitter.com/SiGf11ayRs
MkIを移植。操作子類が少なくなったのでそれに合わせて使いやすくしたうえで、一番多用しているランダム生成でのオクターブ範囲やゲート長さ範囲を変更出来るようにして、使っていない機能を削除したりと手を加えてます。
ほか
まだ記事を書いている途中のEPMkIIIも加えたプレイした動画。
音がたくさん鳴るようになってきたので嬉しい☺️#自作モジュラーシンセ pic.twitter.com/eIIcHQcqto
— 𓊬 ᙢᗩᖇḰ 𓊬 (@marksard) July 18, 2024
ステップシーケンサをマスタークロックにしてベースシーケンス、ユークリッドリズムシーケンサーは上物シーケンス、クロックディバイダーのトリガーをミキサーで混ぜてリズムボックスを叩いて鳴らしています。