事の起こり
WindowsのAudacityで1時間くらい録音した後、mp3に書き出そうとしてらそのまま固まりました。
このタコOS!! (注: OSの問題なのかは不明です)
その後しばらく放置しても何の反応もなく、泣く泣くシャットダウン処理に行くと強制終了するか尋ねられたので、
NO!! と回答したら、プロジェクトの保存するか聞かれたのでした。
しめた!! と思ったのですが、保存されたディレクトリを見てみると、
└── e00
├── d00
│ ├── e0000005.au
│ ├── e0000006.au
│ ├── e0000013.au
│ ├── e0000024.au
│ ├── e000003a.au
│ ├── e000003d.au
│ ├── e0000061.au
│ ├── e0000070.au
│ ├── e000008f.au
│ ├── e00000b1.au
│ ├── e00000c6.au
│ ├── e00000ce.au
│ ├── e00000e6.au
│ ├── e00000e9.au
│ ├── e00000f9.au
│ ├── e0000104.au
...
│ ├── e0000fba.au
│ ├── e0000fd0.au
│ ├── e0000fd6.au
│ ├── e0000fe9.au
│ ├── e0000fec.au
│ ├── e0000ff2.au
│ ├── e0000ff7.au
│ └── e0000ffe.au
├── d01
│ ├── e000100f.au
│ ├── e0001011.au
│ ├── e0001018.au
│ ├── e000101d.au
│ ├── e000103c.au
│ ├── e0001072.au
│ ├── e000107f.au
│ ├── e0001096.au
│ ├── e000109e.au
│ ├── e00010c0.au
│ ├── e00010dc.au
│ ├── e00010e5.au
...
│ ├── e0001fb5.au
│ ├── e0001fc1.au
│ └── e0001fe1.au
└── d02
├── e0002025.au
├── e0002029.au
├── e000203e.au
├── e000204c.au
├── e000205d.au
├── e000206d.au
├── e0002071.au
├── e000207f.au
├── e00020c0.au
...
├── e0002e56.au
├── e0002e6c.au
├── e0002e6e.au
├── e0002e76.au
├── e0002e84.au
├── e0002e88.au
├── e0002e93.au
├── e0002efc.au
├── e0002f13.au
├── e0002f30.au
├── e0002f41.au
├── e0002f71.au
├── e0002f84.au
├── e0002f89.au
├── e0002f97.au
├── e0002fcc.au
├── e0002feb.au
└── e0002ff4.au
と、大量のauファイルだけ残されておりました……。
なんとか一本の音声として復旧したい、というのが本記事の主旨です。
そして、一応私の場合は復旧できました。
auファイルとは?
Wikpedia によると、 今は亡き サン・マイクロシステムズのオーディオフォーマットのようです。
(0オリジンで数えて)4バイト目からの4バイトが、データへのオフセットのようです。
hexdumpすると以下みたいな感じ。
% hexdump -C e00/d00/e0000005.au | head -20
00000000 64 6e 73 2e 5c 30 00 00 ff ff ff ff 06 00 00 00 |dns.\0..........|
00000010 44 ac 00 00 01 00 00 00 41 75 64 61 63 69 74 79 |D.......Audacity|
00000020 42 6c 6f 63 6b 46 69 6c 65 31 31 32 00 80 3f bc |BlockFile112..?.|
00000030 00 00 de 3b f2 95 61 3b 00 20 85 bd 00 a0 46 3d |...;..a;. ....F=|
00000040 07 3d 20 3c 00 80 5c bc 00 00 4a 3c 2d 67 a5 3b |.= <..\...J<-g.;|
00000050 00 40 f9 bc 00 40 cd 3c 31 e4 ee 3b 00 00 cb bb |.@...@.<1..;....|
00000060 00 00 c0 b9 30 92 89 3b 00 00 30 ba 00 00 f8 3a |....0..;..0....:|
00000070 1b a8 6e 3a 00 00 d7 bb 00 00 c0 39 7e 51 8c 3b |..n:.......9~Q.;|
00000080 00 00 c0 bb 00 00 7a 3b 4d 76 57 3b 00 00 a0 b9 |......z;MvW;....|
00000090 00 00 52 3b 38 a4 0f 3b 00 80 23 bc 00 00 d0 b9 |..R;8..;..#.....|
000000a0 8f e7 ba 3b 00 00 0b bc 00 00 b0 39 64 5e 78 3b |...;.......9d^x;|
000000b0 00 00 36 bb 00 00 b8 3a a6 20 74 3a 00 00 04 bc |..6....:. t:....|
000000c0 00 00 20 bb 23 37 d2 3b 00 00 e5 bb 00 00 80 39 |.. .#7.;.......9|
000000d0 48 1c 6c 3b 00 00 4e bb 00 00 30 3a 2c 49 9b 3a |H.l;..N...0:,I.:|
000000e0 00 00 c1 bb 00 00 30 bb 29 a3 97 3b 00 00 4a bb |......0.)..;..J.|
000000f0 00 00 04 3b 9c c5 9f 3a 00 00 a2 bb 00 00 00 3b |...;...:.......;|
00000100 34 28 03 3b 00 00 d8 bb 00 00 38 ba 9f ab a7 3b |4(.;......8....;|
00000110 00 00 10 ba 00 00 bc 3b 66 39 7a 3b 00 00 66 bb |.......;f9z;..f.|
00000120 00 00 ba 3b 88 13 5c 3b 00 00 b7 bb 00 00 30 ba |...;..\;......0.|
00000130 1d 95 8a 3b 00 00 c4 ba 00 00 06 3b 6d 85 90 3a |...;.......;m..:|
".snd"ではなく"dns."となってるので、エンディアンを考慮するとデータ自体は0x305cから始まっている、と読めます。
実は、できあがってるたくさんauファイルのサイズも、それぞれ0x10305cバイトになっているという、いかにも0x100000バイト単位なファイルなのでした。
結合してみる
ひとまず、ファイルを名前順に聞いても時系列になっていないようでした。
なので、ファイルのタイムスタンプでなんとかします。
(タイムスタンプが飛んでいたら大変かも……。auファイルのヘッダにいるとよいですが……。)
% \ls --color=never -rt */*/* > list.txt
これでタイムスタンプ順のリストをつくり……、
% for f in `cat list.txt`; do dd if=$f ibs=1 skip=12380 of=$f.bin; done
で全てのファイルのヘッダを省いたデータ部分のみのファイルを作成し(12380=0x305c)、
% dd if=e00/d00/e0000005.au bs=1 count=12380 of=head.bin
で、ひとまず先頭のファイルのヘッダーを拝借して、
% cat head.bin > output.bin
% for f in `cat list.txt`; do (cat $f.bin >> output.au); done
な感じで結合しました。
このできあがったoutput.auをAudacityに読ませたところ、長いファイルだったので全て確認してませんが、しばらく聞いた感じだとうまく復旧できたっぽいです。
これをmp3やらに変換してめでたしめでたし。
ところで
最初、Audacityの特殊形式なのかと思ったので上記処理にしましたが、普通にauファイルを結合できるツールがあるんじゃないかな……。
なお、Audacity自体でやろうとすると大変そうでした。コマンドラインからいけたかもですが。