IMAPIv2で書込み速度を設定するには?

解決


KO  2009-03-24 21:35:12  No: 145820

たびたびお世話になっております。
(前回は本当に助かりました。)

IMPAIv2を使用して、CD/DVDの書込みアプリケーションを作成しています。

書込む際に、常にハードの最高速度(倍率)を取得して、
書き込みを行う処理をしたいと思っているのですが、
どのプロパティ(メソッド)を
使えばいいのかが分からなくて困っています。

どなたか知っていらっしゃる方がいれば、
教えて下さい。

よろしくお願い致します。


オショウ  2009-03-25 03:16:56  No: 145821

下記URLのサンプル参照・・・
C#です。

http://www.codeproject.com/KB/cs/IsoBurner.aspx

速度設定は、ドライブにメディアをセットすると有効
になります。

以上。


aetos  2009-03-25 22:27:00  No: 145822

この辺を使うのかもしれませんが、
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.

ということなので、特に何も設定しなくてもいいような?


KO  2009-03-27 02:39:46  No: 145823

aetos様

そうですね。
値の意味は全く分かりませんが、何も設定しないと、
常に最高速になっているようですね。

書込み速度を自在に変更する方法は分かりませんが、
今回は常に最高速であれば問題ないので、
この件は、これで解決とさせていただきます。

貴重なご意見ありがとうございました。


aetos  2009-03-27 22:04:47  No: 145824

> 値の意味は全く分かりませんが、

> 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、と。


KO  2009-03-28 00:47:25  No: 145825

aetos様

さらに貴重な情報誠にありがとうございます。
非常によく理解できました。

また、
get_SupportedWriteSpeedDescriptors と、
get_SupportedWriteSpeeds

についてですが、
get_SupportedWriteSpeedsには、3000, 2400, 1800...
などの数字が入っていました。
おっしゃる通り、この値を使えば簡単に速度の指定できますね。

SupportedWriteSpeedDescriptorsについては、
調査中です。
何か分かればまた書込みます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加