ugnagブログ

たいした内容はありません。思いつきで書いているだけ。
開発日記がメインかな。

<< ASPIライブラリ実験状況 | main | ASPIライブラリ実験 続編 >>

実験結果報告

今まででわかったこと。
・TOC情報の読みとり
・セクション数の取得
・トラック内のサブチャンネルQの情報

・WAVEファイルの構造


セクション数の取得は、TOCのサブチャンネルQの情報を読むことで取得できる。
また、トラック数は通常のTOC情報読みとりをしただけでは、CD-EXTRAなどの場合データ部が1トラックとして認識されてしまうため問題があることが判明した。
曲のトラック数を取得するには、サブチャンネルQを取得するしかないようだ。

サブチャンネルQだけを読めば、セクション数、トラック数、トラックの開始位置もわかる。結局これだけ読めば済むということだ。

ただ、これはドライブによっては取得できない可能性もあるため、通常のTOC取得もサポートしておくべきだ。


次に、曲の開始位置だが、CCCDではサブチャンネルQの情報もデタラメだった。
となるとトラック中のサブチャンネルQを読み、位置情報を取得する方法が考えられる。
この方法を通常のCDで試したところ、基本的にはうまくいった。
readCDコマンドで、サブチャンネルQ転送フラグをセットして実行すると、音データの後ろにサブチャンネルQの情報が付加されることがわかった。

readSubchannelというコマンドもあったが、こちらは再生中の位置情報を取得するためのものらしく、再生をしていなければ取得できないようだ。

で、トラック中のサブチャンネルQだが、最初はうまく位置情報を取得できなかった。
原因は、途中に変な情報が入っていたため。
10トラック中のデータに突然96トラックなどというデータが存在していた。
また、インデックスというフィールドが0の場合は、曲間を示していてこのときの曲頭からの位置は、徐々に減っていき最後が0になる。

そのようなことを念頭におき、再度作ったテストプログラムはうまくいった。

19曲入りのCDで全トラックの位置情報を取得するのには約3分かかった。
処理性能は、後で調整すればいい。

TOCの情報が正しいかどうかの判断だが、TOCに書かれている位置を読んでみて、その曲頭からの位置が0で、インデックスが1であれば合っていると判断できるはずだ。
まだCCCDでは試していなかったが、恐らく問題ないと思われる。

実際のリッピング作業の直前にこれを行えばいいだろう。

残りは音データ取得だが、これはサブチャンネルQの取得で同時に行っている。
目的がサブチャンネルQの取得だったため、読み捨てていたが仕様ではサブチャンネルQの前にあるのが音データだ。

ただ音データに関しては、見ただけでは正しく読めているのかわからないので、WAVEファイルに出力し再生しないといけない。

そのためにはWAVEファイルの構造がわからないといけないのだが、こちらも既にわかっていて、テストしたところうまくいっている。

あとは、もう少し確認をした後、JNI化すればJCD-RIPPERの完成だ。



ところで、、、、


完全に動作することが確認できたら、詳細を「資料室」にでもアップしたほうがいいのだろうか?

需要があれば書くけど、需要もないような記事をわざわざ書くのは面倒だ。

リクエストがあるのなら考えておきます。
プログラム・開発(CDリッピングツール) | comments (0) | -

Comments

Comment Form

本文に書いて下さい
本文にh抜きで書いて下さい