ポケット・ミク
「ポケット・ミク」昨日早速分解してみましたが、改造はちょっと難しそうだったのでひとまず置いておいて。まずは正攻法で攻めてみることにしました。
今日は正式発売日ということで、正式な歌詞入力アプリポケミクアプリ | 歌うキーボード ポケット・ミク | 大人の科学.netがダウンロード開始したりしたようですが、私はとりあえずそんなものには目もくれず明後日の方向に向かおうかと思います。
Arduinoと「ポケット・ミク」接続
まずは手軽なところでテルミン化から初めてみようと思います。昔Arduino使ってMIDI機器と繋げるテルミンとか作ったことあるのですが、「ポケット・ミク」は残念ながら直接MIDIを繋げる口がありません。ただ、USB経由でMIDI通信ができるようなのでこれを使うことにします。具体的どうするかというと、下図のようにパソコンを間に経由することでArduinoと「ポケット・ミク」を改造することなく接続することができます。
具体的な処理の流れは以下のようになります。
- Arduinoが赤外線センサで受けた距離情報をデジタルデータに変換しシリアルデータを出力
- パソコンはシリアルデータを受けて、MIDI信号に変換して「ポケット・ミク」にUSB経由で出力
- 「ポケット・ミク」はパソコンから受けたMIDI信号を元に歌う
Arduinoのセンサをシリアルデータ出力する部分と、パソコンのシリアルデータを受けてMIDI信号に変換して出力する部分は、Processingというプログラミング言語でソフトを自作することになります。
回路と接続
面倒くさいので、回路図は省略(回路というようなものは無いですし)。写真貼っておきます。
「ポケット・ミク」テルミンを試奏してみた動画
こんな感じです。チューニングすればもうちょいよい感じになると思います。やっぱりパソコンは邪魔だなー。改造してeVY1みたいに直接ポケット・ミクのMIDIポートにアクセスしたいです。
参考リンク
建築発明工作ゼミ2008: Arduino-Processing シリアル通信2
eVY1シールド(ピンヘッダ有り)--販売終了 - スイッチサイエンス
上記2つのサイトのプログラム参考にしました。というかほとんどコピペ
関連記事
歌うキーボード「ポケット・ミク」が届いたので早速分解しました - karaage. [からあげ]
大人の科学から初音ミクが歌うキーボードが発売すると聞いて即予約しました - karaage. [からあげ]
5188円で始めるフィジカルコンピューティング 最終回 〜テルミンつくってみるミン まとめの巻〜 - karaage. [からあげ]
昔Arduinoで作ったテルミン。全然Arduino分からない人はまずこれを読んでみるとよいかもしれません。
Amazonリンク
- 出版社/メーカー: スイッチサイエンス
- メディア: Personal Computers
- 購入: 2人 クリック: 15回
- この商品を含むブログを見る
歌うキーボード ポケット・ミク (学研ムック 大人の科学マガジンシリーズ)
- 作者: 大人の科学マガジン編集部
- 出版社/メーカー: 学研プラス
- 発売日: 2014/04/03
- メディア: ムック
- この商品を含むブログ (24件) を見る
ソースコードとか欲しい人は、続きを読んでみて下さい。
ソースコード
ノークレームノーリターンでお願いいたします。ProcessingのVersionは2.0.3、ArduinoのVersionは1.0.3です。
Arduinoを動かしてからProcessingを実行して、スペースキーをクリックすると、うまくいくと音が出ます。
Arduinoのソースコード
int x=0; void setup(){ Serial.begin(9600); } void loop(){ x=ReadAverageSensor(); if(Serial.available()>0){ Serial.write(x); Serial.read(); } } int ReadAverageSensor(){ int i; int sval; for (i = 0; i < 5; i++){ if(analogRead(0) < 10){ sval += 10; }else{ sval = sval + analogRead(0); } } sval = sval / 5; sval = sval / 4; sval = (int)(sval / 1.5); // for miku return sval; }
Processingのソースコード
ライブラリのインポートの仕方はグーグル先生に聞いてみて下さい。
myPort=new Serial(this,"/dev/tty.usbmodem1421",9600);の部分は環境によって変わるはずです、これもグーグル先生に調べ方を聞いてみて下さい。
import themidibus.*; import processing.serial.*; Serial myPort; int x=0; MidiBus vocaloid; int channel = 0; //0:eVocaloid int pitch = 0; int velocity = 64; void setup() { size(800, 300); background(255); MidiBus.list(); vocaloid = new MidiBus(this, "NSX-39 " , "NSX-39 "); myPort=new Serial(this,"/dev/tty.usbmodem1421",9600); } void draw() { vocaloid.sendNoteOn(channel, pitch, velocity); background(60); fill(255); text("pitch ->", 15, 10); pushMatrix(); rotate(HALF_PI); text("velocity ->", 15, -5); popMatrix(); // update status String status; status = "pitch:" + str(pitch) + " velocity" + str(velocity); frame.setTitle(status); } void serialEvent(Serial p){ if(myPort.available()>0){ pitch=myPort.read(); myPort.write(65); } } void mousePressed(){ myPort.clear(); myPort.write(65); } void exit() { vocaloid.sendNoteOff(channel, pitch, velocity); vocaloid.close(); // bye bye! super.exit(); }