使用IMAPI2设置刻录速度

时间:2011-04-11 05:10:02

标签: c# dvd-burning imapi

有谁知道如何使用IMAPI2设置cd / dvd刻录速度(例如4x,10x)?

另外,我首先需要获得媒体支持的速度。我该如何检索它们?

2 个答案:

答案 0 :(得分:1)

  1. 要设置刻录速度,您可以使用IDiscFormat2Data::SetWriteSpeed界面中的IDiscFormat2Data方法。它允许您请求光学介质支持的最大速度或指定所需的刻录速度。

  2. 为了通过刻录设备和当前媒体检索支持的写入速度,您可以使用方法IDiscFormat2Data::get_SupportedWriteSpeeds

  3. 要检查当前的写入速度,您可以使用IDiscFormat2Data::get_CurrentWriteSpeed方法。



  4. 这些方法使用每秒扇区而不是4x,10x等。您可以使用以下常量从一个转换为另一个:

    • IMAPI_SECTOR_SIZE 扇区中的字节数。
    • IMAPI_SECTORS_PER_SECOND_AT_1X_CD CD旋转的基本速率,以每秒扇区数量计算。
    • IMAPI_SECTORS_PER_SECOND_AT_1X_DVD DVD旋转的基本速率,以每秒扇区数量计算。
    • IMAPI_SECTORS_PER_SECOND_AT_1X_BD 蓝光光盘旋转的基本速率,以每秒扇区数量计算。
    来自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
    

答案 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的其他答案已经给出了更多详细信息。