IMAPI2を使用してCD/DVDの書き込み速度(4x、10xなど)を設定する方法を知っている人はいますか?
また、最初にメディアでサポートされている速度を取得する必要があります。どうすればそれらを取得できますか?
IMAPI2を使用してCD/DVDの書き込み速度(4x、10xなど)を設定する方法を知っている人はいますか?
また、最初にメディアでサポートされている速度を取得する必要があります。どうすればそれらを取得できますか?
書き込み速度を設定するには、IDiscFormat2DataインターフェイスのメソッドIDiscFormat2Data::SetWriteSpeedを使用できます。光メディアでサポートされている最大速度を要求したり、必要な書き込み速度を指定したりできます。
書き込みデバイスと現在のメディアでサポートされている書き込み速度を取得するには、メソッド IDiscFormat2Data::get_SupportedWriteSpeedsを使用できます。
現在の書き込み速度を確認するには、IDiscFormat2Data::get_CurrentWriteSpeedメソッドを使用します。
これらのメソッドは、4x、10x などではなく、1 秒あたりのセクターを使用します。次の定数を使用して、あるセクターから別のセクターに変換できます。
imapi2.h ヘッダーから:
#define IMAPI_SECTORS_PER_SECOND_AT_1X_CD 75 #define IMAPI_SECTORS_PER_SECOND_AT_1X_DVD 680 #define IMAPI_SECTORS_PER_SECOND_AT_1X_BD 2195 #define IMAPI_SECTORS_PER_SECOND_AT_1X_HD_DVD 4568
Microsoft は、最初に C# 用の IMAPI インターフェイスをリリースしました。それには多くの問題がありました。詳細については、こちらをご覧ください。そのため、Microsoft がリリースしたコピーの代わりに、このソース コード (Code Project で Eric Haddan によって作成されたもの) を使用しています。そのため、ドキュメントに関していくつかの違いが見られる場合があります。
書き込み速度を操作する (取得/設定) 前に、レコーダーの設定などの初期アクションを実行する必要があります。このすべてを知っていると仮定し、この回答ではスキップして長さを短くしています。
書き込み速度を設定するには、必要に応じて、最初にサポートされている書き込み速度を取得する必要があります。
private string[] GetSupportedWriteSpeeds()
{
string[] list = new string[msftDiscFormat2Data.SupportedWriteSpeedDescriptors.Length];
for(int i = 0; i < msftDiscFormat2Data.SupportedWriteSpeedDescriptors.Length; i++)
{
IWriteSpeedDescriptor objIWriteSpeedDescriptor = (IWriteSpeedDescriptor)msftDiscFormat2Data.SupportedWriteSpeedDescriptors[i];
list[i] = objIWriteSpeedDescriptor.WriteSpeed.ToString();
}
return list;
}
次に、上記のサポートされている値に基づいて、書き込み速度を設定できます。
private void SetWriteSpeed(int requestedSectorsPerSecond, bool rotationTypeIsPureCAV)
{
/*selectedWritingSpeed
Unit = Disc sectors per second.
Values: -
-1 = "Default OR Fastest" as documented in IMAPI documentation.
[ANY VALUE] = Actual writing speed to set.
*/
msftDiscFormat2Data.SetWriteSpeed(requestedSectorsPerSecond, rotationTypeIsPureCAV);
}
上記の方法では、パラメーターrequestedSectorsPerSecond
は、前の方法で受け取った文字列配列のインデックス (書き込み速度) です。ローテーション タイプ (純粋な CAV) を に設定できfalse
ます。
以下はマイクロソフトからのものです:
RequestedSectorsPerSecond
1 秒あたりのディスク セクター数で測定された、要求された書き込み速度。
0xFFFFFFFF (-1) の値は、メディアでサポートされている最速の速度を使用して書き込みを行うことを要求します。これがデフォルトです。
RotationTypeIsPureCAV
要求回転数制御タイプ。VARIANT_TRUE に設定して、角速度一定 (CAV) の回転速度制御タイプを要求します。レコーダーがサポートする別の回転速度制御タイプを使用するには、VARIANT_FALSE に設定します。デフォルトは VARIANT_FALSE です。
上記のコードで使用されているオブジェクトの名前は、IMAPI 自体に従っています。そのため、IMAPI インターフェイスについてはこれ以上説明を追加しません。詳細は、@rmp からの他の回答で既に与えられています。