3

有谁知道如何使用 IMAPI2 设置 CD/DVD 刻录速度(例如 4x、10x)?

另外,我首先需要获得媒体支持的速度。我怎样才能找回它们?

4

2 回答 2

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

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

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



这些方法使用每秒扇区而不是 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
于 2013-11-14T08:03:00.803 回答
0

微软最初发布了 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 的其他答案已经给出了更多细节。

于 2019-03-07T08:21:31.400 回答