SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|

2017-07-22(Sat) RubyでFATを直接に扱う

  先日より、ズゴックスピーカや、デンドロビウムスピーカが大活躍なのだが、これらがある意味で便利なところに「赤外線リモコンでダイレクトに選曲できる」という仕様がある。リモコンで「1」「2」「3」と連続的に押せば、すぐさま123曲目の再生を開始することができるのである。

  もちろん数百曲もの曲順は覚えてはおけないが、その場合は「次曲」「前曲」ボタンで移動すればいい。ダダダッと10回押せば、サッと10曲分移動するのでストレスはない。

  以前にも書いたが、曲順はFATエントリ順、かつ、ディレクトリ後回し……といっても、パンピーには何を言っているのかわからないと思うが、ファイルシステムの仕組みがわかっていれば、むしろ扱いやすく、意図した曲順で再生させることができるという、合理的な仕様である。

  だが、やっぱり数百曲もの曲順を覚えてはおけない……ので、FAT上の楽曲ファイルの曲目リストを演奏順に出力させるスクリプトでも作りたいのだが、Linuxでは普通に「ls」するとファイル名順にソートされてしまって、FATエントリ順は知ることができないのであった。

  というわけで、RubyでFATアクセスライブラリを実装してしまうことにした……が、ほぼ実装を終わらせたあたりで「ls」に「-U」スイッチがあることに気づいてしまった。オマケに「find」でも似たような結果が得られることに……。

  まぁ、でも、それはそれとして、FATの実装はそれほど難しくなかったし、それなりに楽しかったのでよしとしよう。mountしなくても「ls」できてしまうのは楽しいしね。こんな感じ。

# 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

  遊びで、X1/turboっぽく出力できるオプションもつけてみた。

# 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.~

  ミッション成功。ちなみに、直接に「cat」もできる。こんな感じ。ニャハハハハ。

# 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  |................|
  :

  パッケージを置いておく。