数年前にリリースされ、一部界隈では非常に便利に使用されている
YAMAHA製のChordTrackerというアプリがあります。
このアプリは、手持ちのスマホに入っている音楽を解析し、
簡単にコード譜を作成してくれ、耳コピや弾き語りなどを強力に支援してくれるソフトで、私も大変便利に使用しています。
基本的にはスマホ専用のアプリですが、AndroidエミュレータをPCに入れることで、PC上で使用することもできます。
手抜き耳コピ用にChord Tracker使いたかったんだけど、手持ちのAndroidタブレットはモッサモッサだしファイルwavにして持っていくの面倒、とかでどうしようかと思ってたの、ふと思い出してSurface2にBluestacks入れて動かしてみたらサクサク動いたわ。これでええやん。 pic.twitter.com/nlwnJAt6jr
— ひろみつ (@bakueikozo) January 1, 2022
少し前までは自分でピアノを弾いて楽しむだけだったのですが、最近は
「nana」という音楽コラボSNSに伴奏として音源をアップロードしたりしています。
そんな便利なChordTrackerですが、一つだけどうしてもできないことがあります。
作成したコード譜を外部にファイルとして出力できないのです。
ごく一部のYAMAHAの電子楽器などに、データを送出することはできるようなのですが、該当楽器を持っていないため、試すことすらできません。
上の動画のように、コードを見ながら練習をする、という用途では十分なのかもしれませんが、この解析結果をもとに、別の楽譜ソフトにコードを打ち込んでアレンジ用の楽譜を作成したりしたい場合、画面を見ながらちまちま手入力する方法しかありません。
これは不便!!!
ということで、どうにかこの解析済みデータを取り出すことに挑戦しました。
まずは、純正の機能の、対応楽器への送信部分を解析してみました。
iOS版では、Blutooth-MIDI経由で楽器と接続する、ということなのでBLE-MIDI変換モジュールを購入して試してみました。
my new gear..
— ひろみつ (@bakueikozo) April 27, 2022
愛用しているChord Tracker、すごい便利なんだけど、解析結果をエクスポートする機能がないのよ。せめてテキストででも出ればいいのに。
で、データぶっこ抜きも無理そうなんだけど、どうやらBLEMIDIで何かしら出せるようなので、ここから取り出そうとしてみるけど上手くいくかな。 pic.twitter.com/apl5obo09D
この基板を使用してMIDI出力を見ながら「対応楽器への送信」を選択すると、
SystemExclusiveメッセージ「ID Request」が送出されました。
どうやら、対応機種であるかどうかを確認しているようです。
試しに判明しているYAMAHAの電子楽器のIDをいくつか返してみましたが、接続が確立される様子はありませんでした。
結局わからんのでとりあえずYAMAHAの適当なデバイスのIDを返してみたけど駄目だ pic.twitter.com/RLIiyEyU8n
— ひろみつ (@bakueikozo) April 27, 2022
あれやこれや調べた結果、対応機種は割と最近出た3機種のみでhttps://t.co/J12dGzD9y3
— ひろみつ (@bakueikozo) May 4, 2022
ID Responseの値もわからず、そのあとも独自プロトコルで通信してそうなのであきらめることになった
対応しているという機器はPSR-SX600、SHS-500、SHS-300のわずか3機種、
また、これらの機種のマニュアルを調べてみたのですが、ID Requestに対するResponseが明確に記載されている部分はありませんでした。
さらに、実行バイナリをあれこれ覗いてみたのですが、機種との接続確立後も、なにやらめんどくさそうなプロトコルで通信していそうなため、あきらめることにしました。
さて、次の手段です。
このアプリ、ある曲を一度「解析」を行うためには多少時間がかかりますが、
二回目の読み込みからは解析済みのデータを参照しているようですぐにコードが表示されます。
ということは、端末内にキャッシュファイルが保存されているはずです。
これを探すために、Android端末に接続し、アプリからのデータを保存しているはずの場所を探してみましたが、OSの保護機能のため見ることができませんでした。
そこで、root化を試みます。
手元にroot化できるAndroid端末が無いため、ChordTrackerをインストールしたAndroidエミュレータ「BlueStacks」をroot化します。
その結果、/data/data以下のアプリストレージ領域に、解析済みのjsonファイルを発見しました!!!
さらにいろいろして、AndroidエミュレータBluestacksをroot化した上でChordTracker動かして、/data/dataの下漁ったらjsonファイルが出てきたので、これを開いてみたところ見事にコード解析キャッシュファイルを発見した!これで勝つる!!!! pic.twitter.com/uR0HRbTzrk
— ひろみつ (@bakueikozo) May 4, 2022
サンプルのjsonファイルを一つおいておきます。
https://gist.github.com/bakueikozo/239bdab15367ffdc72a16c9acdd9784b
これを読んでいくと、こんな記述があります。
"1": {
"root": "10",
"type": "0",
"onBass": "127",
"originalRoot": "10",
"originalType": "0",
"originalOnBass": "127",
"accidentalRoot": "0",
"accidentalOnBass": "0",
"mahaRoot": "10",
"mahaType": "0",
"mahaOnBass": "127"
},
これは、曲内の第一拍目のコードのルートが、C(ド)を基準とした10半音上、つまり「B♭」であること、typeはコードの形、ここでは(普通の)メジャーコードであることが示されています。
コードの形のIDはYAMAHAがシンセサイザーなどで使用している定義順になっているようでした。(音楽理論的に、もしかしたらそれが定義されてるのかもしれませんが、私にはよくわかりませんでした。)
コードタイプの値はさすがYAMAHAのシンセで使われてる並びと同じのようで助かった。 pic.twitter.com/kJp2tWyDme
— ひろみつ (@bakueikozo) May 6, 2022
このようにして、解析済みの画面に表示された内容と、jsonファイルを照らし合わせながら内容を解読していきます。
解読ができたら、これをエクスポートします。
界隈で、楽譜の清書によく使われるオープンソースの「MuseScore」というアプリがあります。
このソフトで読み込めるように、ソースコードを解析していくと、どうやら普通のSMFに出力してやるのがよさそうだ、という結論になりました。
ソースコードによると、YAMAHA独自のシステムエクスクルーシブのバイナリデータで、タイムスタンプに対してコード情報を付けられるように読めるのですが、どうにもうまくいきません。
仕方がないので、とりあえずは「歌詞」としてコードネームを入れていきます。
変換プログラムはC#で記述しています。
SMFファイルの書き出しにはdrywetmidiというライブラリを使用しています。
コード名だけを入れると、突然難しいコードで躓くかもしれませんので、
実際に押さえる音符も入れることにします。
コード名(ID)から和音の生成のために、コード表を見ながらこんなテーブルを作成します。
int chordtype_member = {
new int{ 0,4,7 }, // Maj
new int{ 0,4,7,9}, // Maj6
new int{ 0,4,7,11},
new int{ 0,4,6,7,11 }, // Maj7(#11)
new int{ 0,2,4,7,11}, // Maj(9)
new int{ 0,2,4,5,9 }, // Maj7(9)
new int{ 0,2,4,7,9}, // Maj6(9)
new int{ 0,4,8 },
new int{ 0,3,7}, // min
new int{ 0,3,9}, // min6
new int{ 0,3,7,10} , // min7
new int{ 0,3,6,10} , // min7b5
new int{ 0,2,3,7}, // min(9)
new int{ 0,2,3,7,10}, // min7(9)
new int{ 0,3,5,7,10}, // min7(11)
new int{ 0,3,7,11}, // minMaj7
new int{ 0,2,3,7,11} , // minMaj7(9)
new int{ 0,3,6 },
new int{ 0,3,6,9 },
new int{ 0,4,7,10}, // 7th
new int{ 0,5,7,10},
new int{ 0,4,6,10},
new int{ 0,2,4,7,10}, // 7(9)
new int{ 0,4,6,7,10} , // 7(#11)
new int{ 0,4,7,9,10 } ,
new int{ 0,1,4,7,11}, // 7(b9)
new int{ 0,4,7,8,10 }, // 7(b13)
new int{ 0,3,4,7,10}, // 7(#9)
new int{ 0,4,8,11}, // Maj7aug
new int{ 0,4,8,10}, // 7aug
new int{ 0,8}, // 1+8
new int{ 0,7}, // 1+5
new int{ 0,5,7},
new int{ 0,2,7}, // 1+2+5};
このようにしてSMFにして出力し、MuseScoreで読み込み、
段数や繰り返し記号などを入れていくと…
あっという間にコード譜の出来上がりです。
リズムは1拍基準のため、細かいプレイのアレンジは反映されていませんが、
これをもとに修正していくだけで完成するのは非常に便利です。
何しろ、今までは目で見ながら小節にコードを配置していくことしかできなかったんですから。
ここに、例えばイントロのメロを拾って追加してやる、とかコメントを追加する、と化すれば、あっという間に伴奏用の楽譜が完成します。
さて、そんな便利なソフトを作っているわけですが、まだまだ調整中です。
もしもこういうソフトがホントにリリースされたら絶対使う!という声があればリリースは考えますが、今のところ自分で使うぐらいしかないですかねw
ここまでの解析のつぶやきのTwitterをここに貼っておきます。
もうちょっと詳しく見たい方はこちらへ。
my new gear..
— ひろみつ (@bakueikozo) April 27, 2022
愛用しているChord Tracker、すごい便利なんだけど、解析結果をエクスポートする機能がないのよ。せめてテキストででも出ればいいのに。
で、データぶっこ抜きも無理そうなんだけど、どうやらBLEMIDIで何かしら出せるようなので、ここから取り出そうとしてみるけど上手くいくかな。 pic.twitter.com/apl5obo09D