SVX日記
2017-07-22(Sat) RubyでFATを直接に扱う
先日より、ズゴックスピーカや、デンドロビウムスピーカが大活躍なのだが、これらがある意味で便利なところに「赤外線リモコンでダイレクトに選曲できる」という仕様がある。リモコンで「1」「2」「3」と連続的に押せば、すぐさま123曲目の再生を開始することができるのである。
以前にも書いたが、曲順はFATエントリ順、かつ、ディレクトリ後回し……といっても、パンピーには何を言っているのかわからないと思うが、ファイルシステムの仕組みがわかっていれば、むしろ扱いやすく、意図した曲順で再生させることができるという、合理的な仕様である。
だが、やっぱり数百曲もの曲順を覚えてはおけない……ので、FAT上の楽曲ファイルの曲目リストを演奏順に出力させるスクリプトでも作りたいのだが、Linuxでは普通に「ls」するとファイル名順にソートされてしまって、FATエントリ順は知ることができないのであった。
というわけで、RubyでFATアクセスライブラリを実装してしまうことにした……が、ほぼ実装を終わらせたあたりで「ls」に「-U」スイッチがあることに気づいてしまった。オマケに「find」でも似たような結果が得られることに……。
# ls -l /media/fat_microsd/
合計 38748
drwxr-xr-x 2 mitsu mitsu 4096 7月 22 11:34 fire
-rw-r--r-- 1 mitsu mitsu 2747756 7月 22 12:02 honoten.mp3
-rw-r--r-- 1 mitsu mitsu 4102571 7月 22 12:02 mazeruna.mp3
-rw-r--r-- 1 mitsu mitsu 344806 7月 22 12:02 radio_taiso0.mp3
-rw-r--r-- 1 mitsu mitsu 2044750 7月 22 12:02 radio_taiso1.mp3
-rw-r--r-- 1 mitsu mitsu 1784240 7月 22 12:02 taiso_vocal2.mp3
-rw-r--r-- 1 mitsu mitsu 24089369 6月 21 22:37 track06.cdda.flac
-rw-r--r-- 1 mitsu mitsu 4540718 7月 22 12:03 turn_a.mp3
drwxr-xr-x 2 mitsu mitsu 4096 1月 27 22:28 walkure03
# fatman /dev/sdb1
-rwxr-xr-x 344806 2017/07/22 Sat 03:02 radio_taiso0.mp3
-rwxr-xr-x 2044750 2017/07/22 Sat 03:02 radio_taiso1.mp3
-rwxr-xr-x 1784240 2017/07/22 Sat 03:02 taiso_vocal2.mp3
drwxr-xr-x 0 2017/07/22 Sat 02:34 fire
drwxr-xr-x 0 2017/01/27 Fri 13:28 walkure03
-rwxr-xr-x 2747756 2017/07/22 Sat 03:02 honoten.mp3
-rwxr-xr-x 4102571 2017/07/22 Sat 03:02 mazeruna.mp3
-rwxr-xr-x 4540718 2017/07/22 Sat 03:03 turn_a.mp3
-rwxr-xr-x 24089369 2017/06/21 Wed 13:37 track06.cdda.flac
# fatman -x /dev/sdb1
892744 Clusters free
Path name "0:/"
Bin* "0:RADIO_~1 .MP3" '17/07/22 SAT 03:02 344,806
Bin* "0:RADIO_~2 .MP3" '17/07/22 SAT 03:02 2,044,750
Bin* "0:TAISO_~1 .MP3" '17/07/22 SAT 03:02 1,784,240
Dir* "0:FIRE . " '17/07/22 SAT 02:34 0
Dir* "0:WALKUR~1 . " '17/01/27 FRI 13:28 0
Bin* "0:HONOTEN .MP3" '17/07/22 SAT 03:02 2,747,756
Bin* "0:MAZERUNA .MP3" '17/07/22 SAT 03:02 4,102,571
Bin* "0:TURN_A .MP3" '17/07/22 SAT 03:03 4,540,718
Bin* "0:TRACK0~1 .FLA" '17/06/21 WED 13:37 24,089,369
思い返せば、1984年夏に初のマシンであるローズレッドの無印X1を買ってもらい、しばらくしてミニ(5インチ)フロッピーディスクドライブCZ-503Fを入手したその日に、友人からもらったFATの破損したシステムディスクをディスクエディタで復旧させたのが、FAT構造との初めての出会い(?)だったっけなぁ。
# fatplaylist -f /dev/sdb1
1: Various: ラジオ体操の歌
2: Various: ラジオ体操第一、第二
3: Various: 腰痛体操
4: Various: 炎の転校生
5: Various: 混ぜるな危険
6: Various: ターンAターン
7: テレビ朝日 アニメソング Gold: 06:キャプテンハーロック
8: LET'S FIRE !!: 07:SEVENTH MOON
9: LET'S FIRE !!: 04:REMEMBER 16
10: LET'S FIRE !!: 08:SUBMARINE STREET
11: 03:ワルキューレがとまらない: 07:GIRAFFE BLUES ~Kaname Solo Requiem~
12: 03:ワルキューレがとまらない: 06:僕らの戦場 ~Mikumo Solo~
13: 03:ワルキューレがとまらない: 05:ダイアモンド クレバス ~Mikumo Ver.~
14: 03:ワルキューレがとまらない: 01:ようこそ! ワルキューレ・ワールドへ
15: 03:ワルキューレがとまらない: 08:ワルキューレがとまらない
16: 03:ワルキューレがとまらない: 02:涙目爆発音 ~with Claire~
17: 03:ワルキューレがとまらない: 04:僕らの戦場 ~Freyja Solo Edition~
18: 03:ワルキューレがとまらない: 03:星間飛行 ~Freyja Ver.~
# fatcat /dev/sdb1:/radio_taiso0.mp3 | hexdump -C
00000000 49 44 33 03 00 00 00 00 03 76 54 50 45 31 00 00 |ID3......vTPE1..|
00000010 00 05 00 00 00 56 2e 41 00 54 41 4c 42 00 00 00 |.....V.A.TALB...|
00000020 09 00 00 00 56 61 72 69 6f 75 73 00 54 49 54 32 |....Various.TIT2|
00000030 00 00 00 13 00 00 01 ff fe e9 30 b8 30 aa 30 53 |..........0.0.0S|
00000040 4f cd 64 6e 30 4c 6b 00 00 54 43 4f 4e 00 00 00 |O.dn0Lk..TCON...|
00000050 09 00 00 00 56 61 72 69 6f 75 73 00 54 59 45 52 |....Various.TYER|
00000060 00 00 00 06 00 00 00 31 39 37 30 00 54 52 43 4b |.......1970.TRCK|
00000070 00 00 00 05 00 00 00 33 2f 36 00 00 00 00 00 00 |.......3/6......|
00000080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
:
パッケージを置いておく。