これは何?
Pocket Operator(ポケットオペレーター)という音楽ガジェットをご存知でしょうか?
Teenage Engineering ポケットオペレーター 8bitシンセ PO-28 robot 【正規輸入品】
- 出版社/メーカー: Teenage Engineering
- 発売日: 2017/02/22
- メディア: エレクトロニクス
- この商品を含むブログを見る
電卓のようなボタンをポチポチ押すことで素敵なビートを奏でてくれるガジェットです。
このPocket Operator、他の音楽ガジェットと同期する機能があります。
同期機能
Pocket Operatorの裏側にはオーディオジャックが2つ搭載されています。
1つは出力用で、ヘッドホンやスピーカにつなげます。もう一つは入力用で、デフォルトの動作はミキサーのように振舞います。
この入力用のオーディオジャックは設定によって、同期信号を受け取るようにできます。そうすることで複数のPocket Operatorのリズムを同期させることができます。
(https://www.youtube.com/watch?v=IApamM65si4 より)
今回は、この同期機能をArduinoから利用する方法を紹介します。(この方法は場合によってはPocket Operatorを壊してしまうかもしれません。実験する際は自己責任でお願いします。)
マイコンなしで実験
Arduinoなしでも、同期機能を試すことができます。
pocket operators – frequently asked questions
このページに詳細が記載されていますが、同期信号は5V以内で入れてくれ、とのこと。
また、同期信号は基本的にはオーディオの左チャンネルから送り、右チャンネルはオーディオを流すこともできます。
これらの機能は切り替えることができます。モードはSY<数字>という表記で表されます。
- SY0 入力はステレオで受け取り、ミックスした結果をステレオ出力
- SY1 入力はステレオで受け取り、ミックス結果を右チャンネル、同期信号を左チャンネル
- SY2 入力は同期信号、出力はステレオ出力
- SY3 入力は同期信号、ミックス結果を右チャンネル、同期信号を左チャンネル
- SY4 モノラル入力を右チャンネルで受け取り、左チャンネルは同期信号。ミックス結果をステレオ出力
- SY5 モノラル入力を右チャンネルで受け取り、左チャンネルは同期信号。ミックス結果を右チャンネル、同期信号を左チャンネル
さて、今回はリズムを別で作成してPocket Operatorを同期させるので、SY2 - SY5のどれかを設定するのがよさそうです。
とりあえずSY4にします。切り替えるのは「bpm」を押しつつ、右ノブの下のボタンを押します。
そして次のような回路を用意します。
何でも良いのですが5Vを作って、その信号をスイッチを押したときだけ左チャンネルに流すようにします。スイッチを押していないときはGNDレベルにしたいので、1KΩでプルダウンさせます。
この回路のオーディオジャックとPocket Operatorの入力側のオーディオジャックをケーブルで接続します。
すると、ボタンをカチカチすると、Pocket Operatorのリズムが進むようになります。
これで、手動でリズムを制御することができました。
手でPocket Operatorのリズムを同期する遊び。 pic.twitter.com/CKRl8xODVe
— ina_ani (@ina_ani) 2019年5月18日
Arduinoから制御する
ここまでくればArduinoで実行するのも簡単です。DigirtalWriteでLow Highを繰り返すことで、Pocket Operatorのリズムを制御することができます。
#define LEFT_CH 5
#define LED 13
void setup() {
pinMode(LEFT_CH, OUTPUT);
pinMode(LED, OUTPUT);
}
void loop() {
digitalWrite(LEFT_CH, HIGH);
digitalWrite(LED, HIGH);
delay(100);
digitalWrite(LEFT_CH, LOW);
digitalWrite(LED, LOW);
delay(100);
}
こんなソースコードを書くことでArduinoのLEDの点滅に合わせてPocket Operatorのリズムをならすことができます。
ArduinoからPocket Operatorにリズムを送る(LEDと同期しているのに注目! pic.twitter.com/GueWWNhQLr
— ina_ani (@ina_ani) 2019年5月18日
さらに下記のようにすると8ステップごとにテンポを変更するというわけのわからないリズムを作ったりもできます。
#define LEFT_CH 5
#define LED 13
void setup() {
Serial.begin(9600);
pinMode(LEFT_CH, OUTPUT);
pinMode(LED, OUTPUT);
}
int wait =150;
void loop() {
for(int i = 0; i < 8; i ++){
digitalWrite(LEFT_CH, HIGH);
digitalWrite(LED, HIGH);
delay(wait);
digitalWrite(LEFT_CH, LOW);
digitalWrite(LED, LOW);
delay(wait);
}
wait = random(50, 400);
}
まとめ
ArduinoなどのマイコンからPoecket Operatorのテンポを制御する方法を紹介しました。音楽系のガジェットを作っている方は、ぜひPocket Operatorとの同期機能を実装してみてください。