たびたびお世話になっております。
(前回は本当に助かりました。)
IMPAIv2を使用して、CD/DVDの書込みアプリケーションを作成しています。
書込む際に、常にハードの最高速度(倍率)を取得して、
書き込みを行う処理をしたいと思っているのですが、
どのプロパティ(メソッド)を
使えばいいのかが分からなくて困っています。
どなたか知っていらっしゃる方がいれば、
教えて下さい。
よろしくお願い致します。
下記URLのサンプル参照・・・
C#です。
http://www.codeproject.com/KB/cs/IsoBurner.aspx
速度設定は、ドライブにメディアをセットすると有効
になります。
以上。
この辺を使うのかもしれませんが、
http://msdn.microsoft.com/en-us/library/aa364891.aspx
だとすると、
> A value of 0xFFFFFFFF (-1) requests that the write occurs using the
> fastest supported speed for the media. This is the default.
ということなので、特に何も設定しなくてもいいような?
aetos様
そうですね。
値の意味は全く分かりませんが、何も設定しないと、
常に最高速になっているようですね。
書込み速度を自在に変更する方法は分かりませんが、
今回は常に最高速であれば問題ないので、
この件は、これで解決とさせていただきます。
貴重なご意見ありがとうございました。
> 値の意味は全く分かりませんが、
> Requested write speed measured in disc sectors per second.
って書いてありますね。
1 秒間に何セクタ書くかという値を指定するようです。
650MB(74分)の CD-R は、1 枚あたり 333,000 セクタあります。
1 倍速とは、650MB のデータを 74 分かけて書き込むことですから、1 秒あたり 75 セクタになります。
つまり、1 倍速なら 75、2 倍速なら 150、4 倍速なら 300…になるんじゃないかと思います。
たぶんね。
…と思いましたが。
そんな計算をせずとも、get_SupportedWriteSpeedDescriptors とか get_SupportedWriteSpeeds で取得できそうですね。
ちなみに豆知識として。
CD はもともと、音楽データ(CD-DA)を記録するために作られたものです。
CD-DAは、16bit、2チャンネル、44.1kHzで音を記録しています。これを74分記録できますから、
16 * 2 * 44,100 * 60 * 74 / 8 = 783,216,000 バイトの記録が可能です。
CD は 1 セクタあたり 2,352 バイトなので、783,216,000 / 2,352 = 333,000 セクタになります。
ただし、CD-R にデータを記録する場合、2,352 バイトのうち 2,048 バイトしか使えません。
残りの領域には、多少傷がついても読めるようにするため、読み取りエラーを補正するためのデータ等が含まれています。
ですから、ユーザが意図したデータを書き込める領域のサイズは、2,048 * 333,000 = 681,984,000 バイト。
これを、1kB = 1,024 バイト、1MB = 10,24 キロバイトとして計算すると、
681,984,000 / 1,024 / 1,024 = 650.390625
で、約 650MB となるわけです。
80 分 700MB のメディアでも計算方法は同じで、
16 * 2 * 44,100 * 60 * 80 / 8 = 846,720,000
846,720,000 / 2,352 = 360,000
360,000 * 2,048 = 737,280,000
737,280,000 / 1,024 / 1,024 = 703.125
で約 700MB、と。
aetos様
さらに貴重な情報誠にありがとうございます。
非常によく理解できました。
また、
get_SupportedWriteSpeedDescriptors と、
get_SupportedWriteSpeeds
についてですが、
get_SupportedWriteSpeedsには、3000, 2400, 1800...
などの数字が入っていました。
おっしゃる通り、この値を使えば簡単に速度の指定できますね。
SupportedWriteSpeedDescriptorsについては、
調査中です。
何か分かればまた書込みます。
ツイート | ![]() |