有谁知道如何使用 IMAPI2 设置 CD/DVD 刻录速度(例如 4x、10x)?
另外,我首先需要获得媒体支持的速度。我怎样才能找回它们?
要设置刻录速度,您可以使用 IDiscFormat2Data 接口中的IDiscFormat2Data :: SetWriteSpeed方法。它允许您请求光学媒体支持的最大速度或指定所需的刻录速度。
为了通过刻录设备和当前媒体检索支持的写入速度,您可以使用方法 IDiscFormat2Data::get_SupportedWriteSpeeds
要检查当前的写入速度,您可以使用IDiscFormat2Data::get_CurrentWriteSpeed方法。
这些方法使用每秒扇区而不是 4x、10x 等。您可以使用以下常量从一个转换为另一个:
从 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
微软最初发布了 C# 的 IMAPI 接口。它有很多问题。你可以在这里阅读更多关于它的信息。所以我使用这个源代码(由 Eric Haddan 在 Code Project 上编写)而不是 Microsoft 发布的副本。因此,您可能会在文档方面看到一些差异。
在与写入速度(获取/设置)进行交互之前,您需要执行一些初始操作,例如设置记录器。我假设您知道所有这些并在此答案中跳过它以缩短长度。
要设置刻录速度,您可以选择首先获取支持的写入速度:
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
以每秒磁盘扇区为单位测量的请求写入速度。
值 0xFFFFFFFF (-1) 请求使用媒体支持的最快速度进行写入。这是默认设置。
RotationTypeIsPureCAV
请求的转速控制类型。设置为 VARIANT_TRUE 以请求恒定角速度 (CAV) 转速控制类型。设置为 VARIANT_FALSE 以使用记录仪支持的另一种转速控制类型。默认值为 VARIANT_FALSE。
上面代码中使用的对象的名称是根据 IMAPI 本身。这就是为什么,我没有添加更多关于 IMAPI 接口的描述。@rmp 的其他答案已经给出了更多细节。