有谁知道如何使用IMAPI2设置cd / dvd刻录速度(例如4x,10x)?
另外,我首先需要获得媒体支持的速度。我该如何检索它们?
答案 0 :(得分:1)
要设置刻录速度,您可以使用IDiscFormat2Data::SetWriteSpeed界面中的IDiscFormat2Data方法。它允许您请求光学介质支持的最大速度或指定所需的刻录速度。
为了通过刻录设备和当前媒体检索支持的写入速度,您可以使用方法IDiscFormat2Data::get_SupportedWriteSpeeds
要检查当前的写入速度,您可以使用IDiscFormat2Data::get_CurrentWriteSpeed方法。
这些方法使用每秒扇区而不是4x,10x等。您可以使用以下常量从一个转换为另一个:
:
#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
答案 1 :(得分:0)
Microsoft最初发布了C#的IMAPI接口。它有很多问题。您可以详细了解here。所以我正在使用此源代码(由 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
。
以下来自Microsoft:
RequestedSectorsPerSecond
请求的写入速度,以每秒磁盘扇区为单位。
0xFFFFFFFF(-1)值要求使用最快的介质支持速度进行写入。这是默认设置。
RotationTypeIsPureCAV
请求的转速控制类型。设置为VARIANT_TRUE以请求恒定角速度(CAV)转速控制类型。设置为VARIANT_FALSE以使用记录器支持的另一种转速控制类型。默认值为VARIANT_FALSE。
以上代码中使用的对象名称根据IMAPI本身而定。因此,我没有添加有关IMAPI接口的更多描述。来自@rmp的其他答案已经给出了更多详细信息。