OscPocketO - コンパクトなArduinoシンセサイザー&ドラムマシン
必要な部品と材料
| Arduino UNO | ×1 |
| オーディオジャック(メス、3.5mm) | ×1 |
| メス-メス ジャンパーワイヤー | ×2 |
| オス-オス ジャンパーワイヤー | ×2 |
必要な工具と機器
- はんだごて(汎用)
プロジェクト概要
最新のコードとビルド手順はこちら: https://oscillator.se/arduino/
他のポータブル音楽制作機器に触発され、優れたMozziライブラリを調査しました。複数のシンセサイザーやドラムマシンを作成し、テンポで同期できたら便利ではないかと考え、OscPocketOが誕生しました。ArduinoとLCDキーパッドシールドのみを使用したポータブル音楽スタジオです。
基本操作
OscPocketOはSELECTボタンでモードを切り替えて操作します。UPボタンで値を増やし、DOWNで減らし、LEFT/RIGHTでカーソルを移動します。
- Arduino内蔵LEDは、OscPocketOが音を再生するたびに点滅します。
- OscPocketOを直接ホームステレオに接続すると過負荷になる可能性があります。ヘッドフォンやミキサーを使用してください。
- LCD表示が乱れた場合は、Toolsメニューを通過するまでボタンを繰り返し押してください。LCDがリセットされます。
OscPocketO Synth(シンセサイザー)
モード一覧
- START: シーケンサーの開始/停止
- SYNC: 同期モードの設定。NONE=同期信号なし、INT=内部クロック使用(指揮者モード)、EXT=外部信号で制御(プレイヤーモード)
- PATTERN: 現在のパターンを選択
- EDIT: 現在のパターンを編集。音符は1小節(16分音符×16)でMIDI値として格納
- STATE: 音符の状態を編集。X=オン、O=オフ
- TEMPO: シーケンサーのテンポ設定
- GATE: 再生される音符のゲート長。16分音符に対するパーセントで表現
- SHIFT: 転調(UP/DOWN)とシーケンスのシフト(LEFT/RIGHT)
- WAVEFORM: 第1オシレーターの波形設定。SIN(正弦波)、TRI(三角波)、SAW(鋸歯波)、SQUARE(矩形波)
- ATTACK: アタックタイム(ms)
- RELEASE: リリースタイム(ms)
- FILTERMODE: ローパスフィルターのカットオフ変調モード
- FIXED: 変調なし。カットオフとレゾナンスの値を使用
- RANDOM: 0からカットオフ値までランダムに変調
- SLOW: 約4小節かけて0から255まで変調。カットオフ値を変更
- FAST: 約1小節かけて0から255まで変調。カットオフ値を変更
- CUTOFF: フィルターのカットオフ周波数(0〜255)
- RESONANCE: フィルターのレゾナンス(0〜255)
- WAVEFORM2: 第2オシレーターの有効化と波形設定。NONE(オフ)、SIN、TRI、SAW、SQUARE
- DETUNE2: 第2オシレーターを第1オシレーターに対してデチューン。値はHzで、第1オシレーターの周波数に加算
- PLAY: キーボードモード。シーケンサー停止中、現在のパターンの最初の4音がLEFT、UP、DOWN、RIGHTにマッピング
- TOOLS: ユーティリティ。UPで起動
- S: シンセ設定とパターンをEEPROMに保存(電源オフ後も復元可能)
- L: EEPROMから設定とパターンを読み込み
- R: ランダムパターン生成
- B: 現在の音符に基づくベースラインパターン生成
- C: 現在のパターンを次のパターン位置にコピー
OscPocketO Drums(ドラムマシン)
OscPocketO Drumsは、Mozziライブラリによるバーチャルアナログシンセシスで生成される5つの音(キック、スネア、ハイハット、クラップ、クラッシュ)を同時に再生できます。
モード一覧
- START: シーケンサーの開始/停止
- SYNC: シンセサイザーと同様
- PATTERN: 現在のパターンを選択
- EDIT: 現在のパターンを編集。音符値は各音に対応する値を加算して構成
- Kick = 1
- Snare = 2
- Hihat = 4
- Clap = 8
- Crash = 16
- Tom = 32
例: 値17 = Kick(1) + Crash(16)
- TEMPO: シーケンサーのテンポ設定
- GATE: SYNC OUT信号のゲート長(16分音符に対するパーセント)
- EDITKICK: キックの周波数、リリースタイム、スロープ(周波数低下の速さ。値が大きいほど急速)
- EDITSNARE: スネアの周波数、リリースタイム、スロープ
- EDITHIHAT: ハイハットの周波数(段階的な値)とリリースタイム
- EDITCLAP: クラップのリリースタイム
- EDITCRASH: クラッシュのリリースタイム
- EDITTOM: トムの周波数、リリースタイム、スロープ
- PLAY: ソロモード。LEFT=Kick、UP=Snare、DOWN=Tom、RIGHT=Crash
- TOOLS: ユーティリティ。UPで起動
- S: パターンをEEPROMに保存
- L: EEPROMからパターンを読み込み
- R: ランダムパターン生成
- B: 現在の音符に基づく繰り返しパターン生成
- C: 現在のパターンを次のパターン位置にコピー
複数のOscPocketOを同期させる
1. セットアップ
- 接続するすべてのOscPocketOのGNDを共通接続
- Conductor(指揮者): Start=Stop、Sync=Internal
- Player(s): Start=Stop、Sync=External、Start=Play(順序重要)
- ConductorのSYNC OUTを最初のPlayerのSYNC INに接続
- 複数のPlayerがある場合、前のPlayerのSYNC OUTを次のPlayerのSYNC INに接続(デイジーチェーン)
2. 演奏
- Conductor: Start=Play
- すべてのOPOでサウンド調整とパターン切り替えが可能。テンポ変更はConductorのみ
ハードウェアの組み立て
1. LCDキーパッドシールド
LCDキーパッドシールドを取り付ける前に、Arduinoのピン10(D10)と接続されないようにする必要があります。D10は通常LCDバックライト制御に使われますが、ここではオーディオ出力に使用します。
シールドのD10に入るピンを90度曲げます。これでArduinoのD10に接触しなくなります。その後、シールドを取り付けます。
接続ピン割り当て:
- LCD: D4, D5, D6, D7, D8, D9
- ボタン: A1
RST(リセット)ボタンはArduinoを再起動するだけで、ソフトウェアでは使用しません。
2. オーディオジャック
オーディオジャックをArduinoのD10とGNDに接続します。MozziライブラリはデフォルトでD9を使用しますが、LCDキーパッドシールドがD9を使用しているため、Mozziライブラリの設定変更が必要です(ソフトウェアセクションで説明)。
- オーディオジャックの「チップ(先端)」に信号用の色付きワイヤーをはんだ付け
- スリーブ(GND)に黒いワイヤーをはんだ付け
- 色付きワイヤーをArduinoのD10のはんだ付けポイントに接続(シールド背面)
- 黒いワイヤーをシールド上部のArduino GNDに接続
3. SYNC IN/OUT
メス-メス パッチケーブルを半分に切り、一方をD11(SYNC IN)、もう一方をD12(SYNC OUT)、もう一方をGNDにはんだ付けします。
4. ケースへの収納
耐久性のため、OscPocketOをケースに収納し、ケーブルとオーディオジャックを固定します。
5. 同期用グラウンドケーブルの作成
長いオス-オス パッチケーブルの中央部分の被覆を剥き、切ったオスケーブルをはんだ付けします。これで3つ(以上)の端子ピンがすべて接続されます。
ソフトウェアのインストール
1. Mozziライブラリのインストールと設定
Mozziライブラリをダウンロード・インストール: https://sensorium.github.io/Mozzi/download/
デフォルトではMozziはD9に出力しますが、LCDキーパッドシールドがD9を使用しているため、D10に変更する必要があります。
Mozziライブラリフォルダ内の AudioConfigStandardPlus.h をテキストエディタで開き、以下の4行のAとBを入れ替えます:
// Used internally. If there was a channel2, it would be OCR1B.
#define AUDIO_CHANNEL_1_OUTPUT_REGISTER OCR1B
#define AUDIO_CHANNEL_2_OUTPUT_REGISTER OCR1A
(...)
#define AUDIO_CHANNEL_1_PIN TIMER1_B_PIN //defined in TimerOne/config/known_16bit_timers.h
#define AUDIO_CHANNEL_2_PIN TIMER1_A_PIN
2. OscPocketOスケッチのインストール
Arduino IDEで code_synth/code_synth.ino (シンセサイザー)または code_drums/code_drums.ino (ドラムマシン)を開き、Arduinoにアップロードします。
回路図

製造プロセス