読者です 読者をやめる 読者になる 読者になる

S.F. Page

Programming,Music,etc...

nsx-39(ポケミク) & nsx-1を調べた。

ハードウェア WebMIDI ポケミク

nsx-39(ポケミク)とnsx-1の情報を集める

nsx-39はプリセットだけではあまりおもしろくない。能力を引き出すにはPCからのコントロールが不可欠だ。GM音源部分をいじるのもPCからでないとできないしね。まずは仕様に関して情報収集をすることにした。

調べてわかった結果をとりあえず書いておくことにする。

nsx-39の独自モード

nsx-39には独自モードとnsx-1互換モードがある。カーボンキーボード対応のために独自モードを用意したとのことである。この独自モードを使ったWebアプリも4/3にリリースされており、「http://otonanokagaku.net/nsx39/appli/01/」にアクセスすることで利用できる。このアプリはWebMIDIを使って実装されており、このアプリのコードを見ることでいろいろなことがわかる。

nsx-39のシステム・エクスクルーシブ(SysEx)

nsx-39のSysExは下記の構造となっている。

F0 43 79 09 11 (XX) (YY....) F7

XXがコマンドでYY以下がパラメータである。以下各コマンドを調べた結果を書いていくことにする。調べるにあたってはポケミクアプリのソースコードと、「Pocket Miku 部屋」の情報も参考にしている。コマンド調査に使用したツールは「MIDI-OX」である。

※内容については調査によって現在私が把握した部分について記載している。推測部分も含まれ、必ずしも正確ではないことに注意すること。

コマンド01,11

ファームウェアバージョン・リクエストコマンドである。パラメータなしでnsx-39に送信した結果は下記の通りであった。コマンド11がレスポンスである。

 TIMESTAMP IN PORT STATUS DATA1 DATA2 CHAN NOTE EVENT               
 00035C9A  MOX  3     F0  Buffer:     7 Bytes   System Exclusive      
 SYSX: F0 43 79 09 11 01 F7
 00035C9E   2   3     F0  Buffer:    15 Bytes   System Exclusive      
 SYSX: F0 43 79 09 11 11 00 01 00 02 02 05 02 00 F7

レスポンスデータのデータ部分がバージョン番号のようである。ソースコードを見ると「.」で結合しており、上記だと0.1.0.2.2.5.2.0がFirmWareバージョンとなる。

コマンド0A

これは指定した番号のメモリに文字データを送信するコマンドである。

0A XX YY...

XXはメモリ番号であり、0-15までを指定する。実際にボタンがアサインされているのは1-12までである。YYは文字番号列であり最大64文字まで指定することが可能である。

文字番号で発音される言葉の対応表は以下のとおりである。

上位
\下位
4bit
0123456789abcdef
0きゃ
1きゅきょぎゃぎゅぎょすぃ
(づぁ)
ずぃ
(づぃ)

(づ)

(づぇ)

(づぉ)
しゃ
2しゅしぇしょじゃじゅじぇじょてぃとぅでぃ
3どぅてゅでゅちゃちゅちぇちょつぁつぃつぇつぉ
4にゃにゅにょ
5ひゃひゅひょびゃびゅびょぴゃぴゅぴょふぁ
6ふぃふゅふぇふぉみゃみゅみょ
7りゃりゅりょうぃ
(ゐ)
うぇ
(ゑ)
うぉ
(を)
ん”N\”ん"m"ん"N"ん"J"ん"n"

例えばメモリ番号01に「あいうえお」を登録する場合のSysExは下記となる。

F0 43 79 09 11 0A 01 00 01 02 03 04 F7

コマンド0B,1B

Command Slot Request/Responseとなっているが、このコマンドの内容は不明である。

コマンド0c

Command Slot Inputとなっているが、このコマンドの内容は不明である。

コマンド0d

モードセレクトを行う。

ノーマル:0a 08 00 00
ノーマルモード。通常の演奏モードである。
ドレミ:0a 08 01 00
ドレミモード。カーボンキーボードを押した場合音階を発声する。
スロットセレクト:09 03 00 00 09 03 00 (スロット番号)
スロット番号のデータに切り替える。
歌詞再生位置の設定:09 02 00 00 09 02 00 (位置)
スロット中の再生位置を(位置)に設定する。
ノート・オン:08 09 00 00 08 09 (ノート) (ベロシティ)
(ノート番号)(ベロシティ)で発声する。
ノート・オフ:08 08 00 00
発声を停止する。

コマンド0e/1E

現在のスロット番号、歌詞の位置を取得する。

リクエスト:0E (パラメータはなし)
戻り値:1E (スロット番号) (再生位置)

0eでリクエストし、1eでレスポンス(スロット番号と再生位置)が帰ってくる。実行例は下記の通り。

リクエスト:F0 43 79 09 11 0E F7
戻り値: F0 43 79 09 11 1E 02 02 F7

コマンド0F/1F

指定したスロット番号の歌詞データを取得する。

リクエスト:
0F (スロット番号)
レスポンス:
1F (文字数) (歌詞データ)

スロット番号を指定すると、登録されている歌詞データが文字数分返ってくる。実行例は下記の通り

リクエスト:
SYSX: F0 43 79 09 11 0F 01 F7
レスポンス:
SYSX: F0 43 79 09 11 1F 40 00 00 00 00 00 00 00 00 00 00 00
SYSX: 00 00 00 00 00 01 01 01 01 01 01 01 01 01 01 01 01 01
SYSX: 01 01 01 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
SYSX: 02 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 F7

コマンド20

nsx-39の各キーを押すとPCに送られるコマンドである。

20 (XX) (YY)

XX・YYはビット単位で下記キーが割り当てられており、押すとビットが1になり、離すとビットが0になるようになっている。押すときと離すときにそれぞれSysExが送られる。このような仕様なので複数同時押しも検知できる。

XX bit 0 ...「VOLUME↑」キー
XX bit 1 ...「VOLUME↓」キー

YY bit 0 ...「A」キー
YY bit 1 ...「I」キー
YY bit 2 ...「U」キー
YY bit 3 ...「E」キー
YY bit 4 ...「O」キー
YY bit 5 ...「VIBRATO」キー
YY bit 6 ...「SHIFT」キー

ついでに言っとくと、カーボンキーボードはマニュアルに書いてある通り、下記の情報が送られていた。

ノートON 「F#4」固定(オクターブ切り替え時は-1=F#3,+1=F#5)・ベロシティ63固定
同時にピッチベンドデータが送られる。
ノートOFFも送られる。

コマンド21

コマンドを実行したときのステータスを返却する。このステータスが返されるのがわかっているコマンドは今のところ0Aのみである。

21 (ステータス) 

ステータスの意味は02がエラー、01が処理中、00が処理完了のようである。

コマンド70/71

eVocaloidのデータ設定およびデータのレスポンスである。内容はまだ未調査である。おそらくはnsx-1における「Phonetic symbols」SysExコマンド相当ではないかと推測する。

nsx-1互換モード

nsx-1に関してはポータル「Welcome to Yamaha-WebMusic !」があり、そこにはnsx-1のMIDI仕様書もPDFでアップされている。

YMW820(NSX-1) MIDI仕様書 (802kB)

またnsx-1の仕様に関しては下記サイトが詳しい。

ポータルにはWebMIDI経由でのアプリも何個かアップされている。これを使用するにはnsz-39をnsx-1互換モードにする必要がある。互換モードにするにはボリュームキーを両方押しながら「U」を押す。「ちっ」というハイハット音が鳴ればセット完了である。

nsx-1互換モードも調べたいがMIDI仕様書が膨大なのでまだ読んでいない。これからじっくり読むことにする。本当はGM音源のところを調べたかったのだが、ボーカロイド部分で今日は力尽きた。。