- 初版:2005-03-09
- 改訂:2006-02-09
現下、MUSIC PC さんとのいくつかの実験・情報交換などを経て、この問題が Timescale code に起因するものであることが確認されています。詳細な問題・事情を知るためにはこの記事よりも後の記事を確認する必要があります。
この問題を回避する最も最適な方法としてこのサイトが推奨する方法は MKA 変換機のファイルチェックモードを使用することです。詳細は「mka を簡単に作れる「MKA変換機」」(2005-10-16)を参照してください。
走り書き記事です。ダッシュで調べてみたので誤りがある予感がします。正確かどうかなどは、もちろん保証しません。
MUSIC PC の kazutomo 氏に言われてはじめて気がついたのですが、mkvmerge を使用して mka コンテナに tta を(少なくとも第1トラックに)入れ、その mka から mkvextract で tta を取り出すと最初の tta と内容が一致しない tta が出てきます。たとえば、[input.tta → (mkvmerge) → midway.mka → (mkvextract) → output.tta]という手順を取り、input.tta と output.tta をそれぞれ input.tta.wav と output.tta.wav というファイル名の 16bit 44100kHz PCM-wave に変換すると、output.tta.wav は input.tta.wav よりも必ず 4byte 足りなくなり、MD5 ハッシュが一致しなくなります。厳密には、output.tta.wav は input.tta.wav と比較すると最後が 4byte 消えてしまっており、これはつまりファイルの尻の部分がどこかへ行ってしまっているわけで、全体演奏時間は短くなります。もちろん、wave で 4byte なんてのはあくまでも 0.001 秒未満の世界ですが、短くなっている(=lossy になっている)ことには変わりありません。もちろんこれと同時に wave ヘッダのデータサイズを示す部分にも違いが出ます。
mka にトラックのひとつとして入れるということは tta のヘッダ情報を matroska 空間に合わせるために書き換える必要があるということですので、input.tta と output.tta の MD5 ハッシュが同じでない可能性は十分にあり得ますし、それ自体はそれほど問題なことではないのですけれども、出てきたデータを wave に変換したらちょっと足りなくなってしまっているというのはマズい。ふつーに wav+cue に戻して CD に焼いてしまったりすると気付かない部分で違うものになってしまっているわけで、極めて気味が悪いことになってしまいます。せっかくの lossless audio codec の意味が失われてしまうことにもなります。
なお、使用した mkvToonix と各種 dll は unicode 版 1.4.0 (20050306-3) 、libebml は 0.7.3 で libmatroska は 0.7.5、tta は ttaenc3.2 でエンコードかつ tag を打ち込んでいません。
mka に入れたらダメか
matroska muxer で mka を作ってみたり逆に splitter や DSF などを使用してバラしてみたりいろいろと試してみたのですけれども、どうもはっきりしませんでした。そこでアナログかつ確実めな方法として、データ量が常に0にならない一定の周期が続く wave を作成し、それを tta に圧縮して mkvmerge で mka に格納、さらに[mka → matroska splitter 1.0.2.5 → true audio decorder]の順にフィルタを経由して再生&光出力させ、それを隣の PC で光入力しつつ wave として録音してみたところ、もとの wave と録音先 wave の MD5 は一致しました(事前にこの方法が lossless で確実に録音できることを確認済であり、再生に当たっては cue シートを無視させています)。取り敢えず入れるときにデータが失われてしまうということはない模様です。無論、コンテナにトラックとしてデータを突っ込むときにはヘッダを書き換えますから、その際の書き込み方の問題はあるかもしれません。
ただ、今のところ再生して光出入力で録音する方法しか厳密な取り出し方が見当たりません…
めも
文字だといまひとつ何を試してみたかがわかりにくいので、職場で1人かつ暇だったので考えていたときのメモ。手書きで走り書きな自分用メモなので読みにくいですが…勘弁してください。
どなたか、もっと正確で厳密に extract する方法をご存知だったらご教授いただきたいです。
取り敢えず mka に入れちゃった tta を手作業で元に戻す超強引な方法
extract した tta を wave に変換して、ファイルの最後にバイナリ 00 00 00 00 を加えた上で wave ヘッダのファイルサイズ部分を書き換えた上で tta に再変換すれば、最後の最後まで音が入っている場合でなければ同じになります。ぶっちゃけ強引すぎてありえない方法ですけど…
おかしいな
私が「mka と EAC からダイレクトに tta+cue」(2004-11-27)の記事を書いたとき、つまり2004-11-27 の mkvToolnix 1.0.2(だったかな?)の時点では同じ方法で MD5 が一致することを確認してから記事にしたような気がしますので、おそらく mkvToolnix がバージョンアップしているうちに lossy なものを吐き出すようになったのか、あるいは自分がなんらかのコマンドラインを与え忘れているのか、うーん。
mka は mkv の動画がないだけのものですから問題なく取り出せるものだと信じきっていたのですが、これは困ったな…





