honeylab's blog

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

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

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

ここまで散々体温計付きカメラを分解してきましたが、久しぶりに面白い案件にぶち当たってしまいました。

 

大元の所有者に連絡を投げたつもりですが、お盆進行なのか全然返事が来ませんね。

つまんないので、今回入手した検温カメラからどうやって画像を取り出したかを記録しておきましょう。

このカメラ、普通に立ち上げるだけで、ネットワークインターフェイスは有効化され、

192.168.1.18が割り当てられます。同じセグメントからLAN接続すれば、いろいろできそうですが…

まずポートスキャンしてみたところ、23(telnet)、80(http)、554(RTSP)が空いていることがわかりました。

早速ブラウザでアクセスしてみますが…

Image

認証が必要です。思いついたパスワードを入れてみますが、通りませんでした。

このカメラ、いろいろ探してみると、「AM520RT」というのが見つかりました。

メーカーのサイトを見てみます。

www.aimex.co.jp

みていると、どうやら3月のマスク規制解除のため、ユーザー設定でマスク警報を解除できるようにしてあるとのことです。

そのための管理ソフトが準備してある…と書いてありますが、

なんとリンク切れ。
方法の説明を見ると、アプリをインストールするだけでパスワードなどを入れるところがありませんので、このアプリ内にパスワードが埋まっている可能性があります。

webarchiveなどをみてみましたが、残念ながら見つかりません。

この方法ではダメなようです。

引き続き、telnetアクセスを試してみますが…

Image同様に、パスワードがわかりません。

はい、まぁ最低限、パスワードで守られているため、
簡単には中のデータが見れないようでした。

 

では終わらないわけで。

早速本体を分解していきます。

www.youtube.com

基板をよく見れば、TX,RX,GNDというシルクの書かれた3つの穴があります。

これはシリアル端子、保守UART端子などと呼ばれ、大抵の組み込み機器にはあります。
つけているというよりは、開発やデバッグなどのため、どうしても最後まで削除しにくいセキュリティホールなのです。

ここに配線を取り付け、USBシリアルケーブルでパソコンに接続します。

最近私は作業PCがMacになって今までのTeraTermが使えなくてちょっと不便なのですが、
どうにかやっていきます。

Macのターミナルでscreen コマンドを使用します。

% screen /dev/tty.usbserial-24240 115200

電源を入れると、起動時のメッセージが表示され、本体がLinuxで動作していることがわかります。

(起動時の全メッセージはここにあります)

このまま画面を眺めていると

「ipc login:」というログインプロンプトが現れます。

では、徐に 「root」 Enterターン!!!

…ダメです。ログインパスワードがかかっています。

残念でした。

 

では、次です。

Linuxが起動する前に、u-bootの起動メッセージが出ています。

u-bootとは Linuxを読み込む前に、本体のRAMの初期化やストレージの初期化を行い、

Linux自体を起動させる「ブートローダ」というプログラムの一つです。

そのu-bootにも実は保守モードがあります。
やはり、この保守モードへの入口もなかなか最後まで削除しにくい穴です。

画面に「Hit any key to stop autoboot: 2 1 0 」と出ている間になにかキーを押すと、

このように、u-boot保守モードのプロンプトが現れます。

helpコマンドをタイプしてみましょう。

このように、使えるコマンドのリストが現れます。
このu-bootのコマンドを使って、本体の穴を広げていきます。

Linuxを起動する際に、Linuxに渡すパラメータリストがあります。
これは環境変数bootargsに入っていますので、printenvコマンドで表示します。

いろいろ渡されています。ここで、ルートファイルシステムはmmcblk0p3であること、などが書かれています。
さて、ここには記されていませんが、Linux Kernelはカーネルの読み込み後、最後に「initプロセス」を起動することになっています。

initプロセスは、ルートファイルシステムに配置された実行ファイルですが、初期設定でいくつかの順番で探し、見つかったものを起動するようになっています。
最近のシステムでは/sbin/initを起動します。このinitがルートファイルシステムやユーザディレクトリなどのマウントを仕上げ、/etc/passwdを参照するloginプロセスを立ち上げます。

ところで、ここでじつはinitパラメータとして、他のプロセスを指定することができます。

 init=/bin/sh として値を渡すと、なんと/sbin/init ではなく、パスワードなどを入力する必要のない状態の素のシェルが立ち上がってくれるのです。

さっそくやってみます。

setenv bootargs "mem=512M console=ttyAMA0,115200 root=/dev/mmcblk0p3 rootfstype=ext4 rw rootwait blkdevparts=mmcblk0:1M(boot),4M(kernel),32M(rootfs),256M(appfs),8M(logo),2M(license),6144M(params),1024M(log),6144M(logjpg),-(user) init=/bin/sh"

とすると、環境設定が書き換えられます。

この値をsaveenvコマンドで保存します。

ここで、boot コマンドを実行すると…

#プロンプトが表示されています。さっきまでは起動直後にあれこれ表示が出ていましたが、それも出ていません。

shの正体はbusyboxでした。

使えるコマンドを見てみます。

なんでも使えそうです。
さて、これらを使ってファイルシステムを漁っていきます。

/etc/init.d/の下に起動時のスクリプト類がありますので、ここを確認します。

S02moutfsというのがあります。mountのtypoをほったらかしてますね。

中を見ると

こんな記述があります。eMMCの9thパーティションをjpglogというフォルダにマウントしています。怪しいですね。

そのほかにもいろいろマウントしてそうですので、このスクリプトを実行してしまいましょう。

(先ほど記述した/sbin/initは/etc/init.d/rcSを起動し、そこからSxxが呼び出されるのが普通の起動ですが、今回は直接sh(busybox)を起動したため、そのようなスクリプト実行がされていません。)

マウントされたかな?

大正解!日付ごとに分かれたフォルダが出てきました。
中身入ってるかな? findコマンドでファイル一覧を取得します。

うん、入ってますね。

さて、しかし、現在このシリアルコンソールしか接続されていない状態、
このようなバイナリファイルを取得して確認するのはちょっと面倒。
この機種はUSBコネクタがありませんのでUSBメモリを使うことは…

もう一回基板を見てみましょう。

なんと、本体にはUSBコネクタはありませんが、
基板上にはUSB用のコネクタが実装されていたのです。

 

たまたま別機種からもぎ取った同等のコネクタがありましたので、その辺にあったUSB延長ケーブルをぶった斬り、配線を合わせてケーブルを作成します。

Image

USBメモリを差し込んでみると…認識しました。


USBメモリをマウントし、cp -r コマンドでjpgファイルを全部コピーします。

あとはこの画像を眺めるだけです。お疲れ様でした。

Image

このように、このような組み込みOSが入っている検温カメラでは、本体UIやWebUIにパスワードがかかっていても、本体を直接分解し、シリアルコンソールなどから制御すればデータの吸い出しが可能になることがあります。

io.cyberdefense.jp

そうでなくても、チップを剥がして読み出せば全部読めてしまうこともあるんですが。

 

改めて、このようなカメラ付き検温計の処分の際には注意してください。
ヤフオクとか、メルカリに出してしまうと、うっかり私が買いますので。

 

ファミマ入店音の装置 パナソニックの「メロディサインW」EC5527W いつの間にか中身がリニューアルしてた件について

てれれれれれーーん てれれれれーーん

 

この音、わかりますよね。ファミマの入店音。

 

実は、ファミマの入店音ではなくて、パナソニックの「メロディサイン」という装置をファミマが導入しているため、この音がしているんです。

 

全く関係ないですが、ゆゆうたの才能が憎らしいです。

 

www.youtube.com

 

で、この音を出してる機械、好きな人は好きなようで、自分で買って手元に置いて居たり、改造(サーキットベンディング)していろいろな音を出したりしてる人がいるほどなじみのある音で、実は機器の初回発売日はなんと

 

1980年!

https://www2.panasonic.biz/scvb/a2A/opnItemDetail?contents_view_flg=1&item_cd=EC5227W&item_no=EC5227W&b_cd=301&vcata_flg=1

 

びっくり。今2023年、発売から43年たった今も、カタログに現行商品として

そのままの型番で掲載されています。

1992年版カタログ

 

2023年版カタログ

あと、そもそも1992年版のカタログがWebで見れるのすげぇ。電工すげぇ。

 

しかし、とある情報を得ました。

中の基板が変わっている。しかも大幅に。

 

え???

私の知る限り、この機器はメロディICを使っていて、そのICの組み込み音源を使っているはず。

www.youtube.com

いったいどうなっているんだ?ということで早速購入して分解してみました。

うっかり旧製品を買わないように、新品在庫が回っているAmazonからの購入です。

 

この機械の末尾についている「W」は、端子が2つあり、それぞれ別の音が鳴る、ということを表しています。

ちなみに、古い基板の外観はこんな感じです。

ImageImage

基板の真ん中にメロディIC「MN6221D」というICが載っています。

データシートがここで見れます。

MN6221 datasheet

ここにわかるように、選択ピン3本の状態によってメロディが再生される
専用ICになっています。

末尾のアルファベットによって内蔵メロディが変わります。

こちらのサイトに系列のICの音源の録音が掲載されていました。

eleken.y-lab.org

で。このIC、発売は1979年。こういった専用IC、もはや生産が継続されていません。しかし、パナソニックはこれを現行商品として売り続けている。どうやっているのか。

これが答えです。

 

どん。

 

Image

部品多すぎやろwwwwなんで??

なにこの基板。

 

基板には二つの主要なICが見えます。

Image Image

…どうやら、同じICの入手ができないため、音源をサンプリング(録音)して、
そのデータを再生することで、もともとの製品と全く同じ音、同じ動作をするように基板をアップグレードし、同一型番としてメーカ製品を供給し続けているようです。

しかも、この音声再生チップはメロディICのようにピン変化で再生するような動作はできません。そのために、わざわざマイコンを搭載し、ボタンの変化があったら音声再生チップにシリアルコマンドで再生要求を行う、というプログラミングをしています。

部品のデータシートなどはこの辺にあります。

 

音声再生LSI 「ML22Q563-XXX」

https://fscdn.rohm.com/lapis/jp/products/databook/datasheet/ic/speech/FJDL2256X.pdf

制御マイコン「SC17W03」

https://global.epson.com/products_and_drivers/semicon/pdf/id002772.pdf

 

 

すごい。普通ここまでやったら「新製品」っていう風にしたくなりません?

でも、たぶんこれ、「廃番」にするコストがでかいんです。
この部品は住宅や企業などに供給するものですからもし型番指定で交換をしたい、と言われたときに、「廃番」になっていたらほかのメーカーのものになってしまうかもしれません。

また、ファミマのように、この音が必要だ、というお客さんもいるでしょう。

そういった需要にこたえるために、わざわざ設計しなおしてまで同じ動作をする製品を供給し続けている。

 

いやー、これすごいね。

松下電工すごい。(のに、システム部門はなんであんなんでしょうかね(?))