実験結果報告
・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の完成だ。
ところで、、、、
完全に動作することが確認できたら、詳細を「資料室」にでもアップしたほうがいいのだろうか?
需要があれば書くけど、需要もないような記事をわざわざ書くのは面倒だ。
リクエストがあるのなら考えておきます。
・セクション数の取得
・トラック内のサブチャンネル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の完成だ。
ところで、、、、
完全に動作することが確認できたら、詳細を「資料室」にでもアップしたほうがいいのだろうか?
需要があれば書くけど、需要もないような記事をわざわざ書くのは面倒だ。
リクエストがあるのなら考えておきます。
Comments