honeylab's blog

各種ハードウェアの改造、主にファミコンミニなどをやってます(ました)

Chord Trackerから楽譜を受信するアプリ「CT Receiver 」ver.2 できた!

honeylab.hatenablog.jp

 

上のリンクにあるように、ChordTrackerの通信プロトコルを掌握したため、
完全にYAMAHAのキーボードのフリをして楽譜を受信できるようになりました。

受信した楽譜はコード情報を抽出したテキストデータ、もしくは
コード情報と和音を配置した楽譜であるMusicXML形式のファイルとして出力できます。

CT Receiver

CT Receiver

  • Hiromitsu Niituma
  • Music
  • Free

apps.apple.com

どうしても、2台の端末が必要になってしまうのが残念ですが、
何かしらで音楽をがっつりやってるならどうにか2台調達できるんじゃないですかね。

ホストPCがMacであれば、Mac上でこのiPhone用アプリを動かして、
USBケーブルでiPhoneを接続してChordTrackerを起動して、
Mac側で楽譜データを受信できます。
Mac側のAudioMIDI設定で、iPhoneをオーディオ・MIDIバイスとして有効にさせると、Mac側で起動したCT ReceiverからiPhoneのChordTracker が見えるようになります。)

AndoridのChordTrackerからでも送信できるはずです。
こんな感じで接続します。


どうにかしてChordTrackerとCT ReceiverをMIDIのレイヤで接続できれば
あとはどうにかなるはずです。

まず、「CT Receiver」を起動し、「BLE Start」でMIDIバイスとして探索させます
ChordTrackerからBLE MIDIバイスを探して接続します。

ChotdTrackerの楽器として「CT Receiver」が表示されたら成功です。
もしくは、BLEではなく、USB-MIDIなどを経由して接続してもいいです。

 

簡単に使ってみる手順の動画を作ってみました

youtu.be

 

CT Receiverで受信したファイルはアプリのデータフォルダ内に保存されています。

Target Fileとして過去に受信したファイルを選択すると、そのデータを開いて
コードデータと楽譜データを出力することができます
(一度転送したデータを開くときはChord Trackerと接続する必要はありません)

さて、これ使ってくれる人いるかな…

わかんなかったらTwitterとかで聞いてね!

twitter.com

 

ChordTrackerとYAMAHAのキーボードを無線(WiFi)で繋ぐ時のMIDI over RTPのメモ(随時追記)

もしかしたら同じようなことを調べる人が20年後に現れるかもしれない

・デバイス検出はAppleMIDI(bonjor)

・ポート番号は5004(RTP-MIDI)と同じ

・セッションプロトコルはAppleMidiと似ているが、

zenn.dev

にある「IN」は「YI」、「OK」は「YO」などの置き換えがある。BYは一緒。

また、[FF]-[FF]-[XX]-[XX]の後の16バイトは全て0で埋まっている

(AppleMidiではプロトコルバージョン、識別IDなどが入れられる)

 

ChordTracker完全掌握

honeylab.hatenablog.jp

前回までの記事で、JAM機能のためのリアルタイムコード送信からコードを拾う方法を実現しましたが、やはりこれだと再生実時間がかかる、テンポが取得できない、
再生カーソルにある位置のコードが出力されるので、動かすとそれが出てしまう、という欠点がありました。

「楽譜送信」機能さえ掴んでしまえば…と悩んで数日、
ありとあらゆる手を尽くして「楽譜送信」プロトコルを掌握し、
標準MIDIファイルとして送信されるデータから店舗とコード進行をデコードすることに成功しました!!

 

このプロトコル、内部的には「MSD」と呼ばれるプロトコルで、『Yamaha SongDownloader』というソフトを使ってPCとキーボードを接続するときに使われるモノらしいです。

とっかかりとして、こちらのブログで一部が解析されていたSysExの続きを必殺逆アセゲフンゲフンと試行錯誤で突破したモノです。

https://sandsoftwaresound.net/hidden-arranger-smarts-file-system-sysex/

Android,iOSのアプリなのでBLEoverMIDIが使われていて、実装先もiOSなので、

始めたばかりのSwiftUIも含めて勉強することになってなかなかよいトレーニングになりました。

リアルタイムコード取得にのみ対応したバージョンのiOSアプリをリリースしたばかりですが…

CT Receiver

CT Receiver

  • Hiromitsu Niituma
  • ミュージック
  • 無料

apps.apple.com

 

この成果を生かした楽譜ごと転送、コード譜作成機能を実装した新バージョンを早いうちにリリースしたいと思っています。
このバージョン、意味がわからないぐらい手間をかけたので、

耳コピコード譜作成の時間をゴリっと圧縮するので、その分を何らかの形で課金していただく、というふうにしたいと思っています。

 

練習も兼ねて、広告課金+app内課金、ただし、一日に一曲ぐらいは使える、といった形でやればアプリの使い方もわかるし、払いたくなければ制限内で使ってもらえれば。

 

新バージョンの動作風景はこちら(UIは変更される予定です)

早いでしょ???使えるでしょ???

 

 

 

ChordTrackerとガチバトルした結果

honeylab.hatenablog.jp

 

ここまでの流れが上のブログに書いてありますが、改めて簡単に説明すると

 

耳コピ支援ソフト「ChordTracker」が大変便利

でも、データ書き出し機能がないのでペンで書き写すしかない

力技でAndroid版を動かして生成されたキャッシュをroot権限で引っこ抜いて

MIDIデータに変換することはできていたけど、これではみんなが使えない

 

ことに対して私は全力で立ち向かいました。決して作者に要望するのではなく。

上のブログにあるように、ChordTrackerには「JAM機能」用のリアルタイムコード情報送信と、ミュージックワークステーション用の譜面データとしてソングファイルを送信する、という二つの機能があります。

前者の機能を使うために、iPhoneのアプリとしてBLE Peripheral MIDIバイスを立ち上げ、
SH-300として振る舞うことでリアルタイムコード情報を引っこ抜くことに成功しました。

 

こちらがそのアプリの動作です。

 


ChordTrackerを動かす端末と読み取り用の端末の2台が必要になってしまうのが難点ですが、これまで全く手のつけられなかったデータのままの取得が可能になります。
現在絶賛開発中ですので、なにか機能要望がありましたら教えてください。
審査、うまいこと通るか不安だけどw

 

で、もう一つの「譜面データ」送信機能、こっちもどうにかやりたいんだよねぇ

対応しているキーボード「PSR-SX600」っていうやつらしいんだけど、中古で買っても高い上に買取価格が安くてちょっとパッと試せる値段では…うーん、うーん

kakaku.com

 

ただ、情報によると、「Yamaha Musicsoft Downloader」が使える機種ならもしかしたら同様に送れるのでは、という話もあるので、いまそっちを逆アセゲフンゲフンしてちょっと調べてみています。
https://sandsoftwaresound.net/hidden-arranger-smarts-file-system-sysex/

少なくとも、S950という機種では出来た、みたいなことが書いてありました。

S950…倍ぐらい高いんだけどな!!!!!

 

ところで、ChordTrackerの利用規約には、ChordTrackerを利用したサービスなどの構築禁止、があります。サーバー側でこれを動かしてあれこれするようなのはダメよ、っていうことなんですね。これはChordTrackerを普通に使ってるだけなんで、まぁ問題は起きないでしょう。とは思うのよね。まぁ、もしiOSで配れなかったらAndroidでapk化するなりPCで動かすなりすればいいわ。

 

1年間ChordTrackerをゴニョゴニョした結果!!(実働日数日だけど)

https://honeylab.hatenablog.jp/entry/2022/05/07/224043

前回ChordTrackerの記事を書いてから一年半、
あれやこれやと色々調べてみたところ、どうにかデータを引っこ抜く方法を見つけ出しました。

 

ChordTrackerの外部連携機能として、SH-300やSH-500などのsongnenicショルキーのJAM機能にリアルタイムにデータを送る機能と、PSR-SX600などのミュージックワークステーション・キーボードに譜面データを送るという二つの方法があります。

今回は、前者のリアルタイム機能を使用しました。

kakakumag.com

色々調べてみましたが、やっぱり実機がないとどうしようもないと言うことで、しょうがない買うか、とメルカリを見ていたところ約12000円、たまにヤフオクで8000円ぐらいのが出ていました。うーんと悩んでいたところ、そういえば近所のリサイクルショップにあったはずと見に行ったところまだ残っていました。

 

iPhoneとUSBで接続すればMIDI機器として通信できるはずですが、それだと中身を見ることができません。USB-MIDI対応の機器を使って入力ーTHRUー出力すれば中身を見ることができるはずですが、なぜかそのへんに転がしておいたはずのiPhone-USB アダプタが見つかりません。

仕方がないので分解してみます。

USBでもいいんですが、今回はBLEの方で通信します。
どうやら、USBの場合はLPCマイコンで受けてMIDI信号に、BLE接続の場合はホシデンのBLEモジュールでMIDI信号に変換した後、メインのマイコンに送り込まれているようでした。

その部分からちょっと信号をもらって通信を解析しました。

 

BLE接続認証後、GetIDでSH-300のIDを返した後、名前のクエリを専用コマンドで行い、想定の通りであれば、接続可能機器として使用できるようでした。

 

で、音源ファイルを開き、再生すると、リアルタイムにSysEXが送信されていきます。

これを解析しました。

解析もまぁ長くなりますが、これだけMIDI関連機器をいじってきたので割と簡単にどうにかなりました。

 

最終的に、マイコンにSH-300を騙らせてSysEXを受信し、コード文字列をキーボードに変換してメモ帳に入力できるようになりました。

 

画期的すぎん???これいままで手書きでやるしかなかったんだよ????

ここまでできたら後少し、これを単純なマイコンで行う機械に仕上げるか、もう一つはアプリとしてテキストに変換するかの二種類が考えられます。どうにかなんか作りたいぞ

atomcam_toolsのコマンド制御

久しぶりに強化版のatomcam_toolsのソース見てたら
明確に使用方法が書いてないような便利機能がいつの間にかたくさん実装されていたので紹介しておきます

 

・画質調整機能 (videoコマンド)

https://github.com/mnakada/atomcam_tools/blob/4568a2c5a7a6f0cf9155a627031ec906034e60ba/libcallback/video_callback.c#L321

上下反転・ミラー、コントラスト(cont)、明るさ、サチュレーション、シャープネス、

2D,3Dノイズ低減の強さ、センサーのデジタル/アナログゲイン、等など

 

第一引数 第二引数 役割
flip [normal/flip/mirror/flip_mirror] 上下・ミラー
cont 0-128-255 コントラスト
bri 0-128-255 明るさ
sat 0-128-255
サチュレーション
sharp 0-128-255 シャープネス
sinter 0-128-255 2Dノイズ低減
temper 0-128-255 3Dノイズ低減
aecomp 0-255 AEパラメータ
aeitmax 0-? AEパラメータ
dpc 0-255
drc 0-255
ダイナミックレンジコントロール
hilight 0-10 ハイライト
again

0-?

0表示1x,32表示2x,依次类推

センサゲイン(アナログ)
 
ATOMCam2での初期値205 
dgain

0-?

0表示1x,32表示2x,依次类推

センサゲイン(デジタル)

 

このパラメータはATOMCam内部で4000番ポートにコマンドを送るか、
cmd.cgiにexecコマンドを渡すことで実行できます。

4000番ポートでの制御は127.0.0.1から以外はRejectされてます。

https://github.com/mnakada/atomcam_tools/blob/4568a2c5a7a6f0cf9155a627031ec906034e60ba/libcallback/command.c#L130

第二引数を省略した場合、戻り値として現在の値が返されます

 

ATOMCam内のスクリプトなどで処理する場合

[root@atomcam:~]# echo "video bri 100" | /usr/bin/nc localhost 4000
ok

外部からcurlコマンドでcgiを呼び出す場合

curl -v -X POST -H "Content-Type: application/json"  -d '{"exec":"video bri 128"}' "http://192.168.0.5/cgi-bin/cmd.cgi?port=socket"

※ "exec"と:とコマンドの間にスペースが入ると正しく動きませんでした

 

動かしている例はこんな感じです。

よくわかんない役割も多いですので、実際に調整してみるのがいいと思います。

多分再起動したら標準値に戻ると思います。

何かしらいじったら天体用にいい値が出てくる気がするので私も試してみます。

 

・そのほかのコマンドの実装がここにあるので色々できます

https://github.com/mnakada/atomcam_tools/blob/4568a2c5a7a6f0cf9155a627031ec906034e60ba/libcallback/command.c#L32

使いそうなのは "irled on" "irled off" "irled auto" とかかな

※irled のon/offは実際にはnight mode のon/off で LEDの制御じゃない…?かな?

あと、"aplay <wavファイル名の絶対パス>" でスピーカから音声再生ができました

 

NHKニュースウォッチ9の検温カメラのニュースについて

3ヶ月にわたってお送りしていた検温カメラの案件、この度NHKで放映されました。

https://www.nhk.jp/p/nw9/ts/V94JP16WGN/episode/te/LJGMY49Z1Q/

今回TVに映っていた検温カメラは5種類

①東亜産業「サーモマネージャ」

②高昇「XThermo-C」 https://xthermo.jp/list/c/

③AHA「SmartPass」

マニュアルリンク:https://www.earthcast.co.jp/web/pdf/ASP19/ASP-19_manual.pdf

JVC「SensePass」

⑤AIMEX「AM520RT」 https://www.aimex.co.jp/product/am520rt

です。

このうち、①のサーモマネージャは、先日大阪の児童館で流出したものと同じメーカーです。(該当製品は「サーモマネージャEX」という上位機種ですが、中身は同じです
さらに、説明書に画像の撮影能力や消去方法について記載されていないギルティなメーカーの
ギルティな製品です。これだけ私がブログでボロクソに言っても何も言ってこないし、
対応も変わらないのでそんなもんなメーカーです。


ヤフオクやメルカリでも最も多く取引されているものになります。
出品者も全く意識していないので、ほぼ100%画像が残っていると思われます。

 

②〜⑤に関しては、説明書や設置マニュアルには画像の撮影や消去の方法がきちんと掲載されていますので、それに従って消去すれば、最低限画像が取り出されにくいようにはなっています。
ただし、私みたいなハッカーが本気で画像を取り出そうと思った場合、出てくる可能性もありますので、安易に中古流通に出さない方が賢明かと思われます。

 

また、逆に、このように画像を取り出すことを楽しみたい場合は、
①のメーカの製品を試してみるのがいいと思います。

今回の経緯について、同人誌にまとめてあります。

honeylab.booth.pm

 

ほか、当ブログの体温計分解ページへのリンクです

カメラ付き顔認識体表温度計を中古で買ったら中に全員の顔写真以下略って全部言っちゃった! - honeylab's blog

さらに検温カメラをばらしてみたらの話 - honeylab's blog

そんなにカメラばっかり買ってどうすんのって言われてないとでも思ってます? - honeylab's blog

素性のよくわからない検温カメラから画像を取り出す手口 - honeylab's blog