设置 ClientDataFormat 时出错

Posted

技术标签:

【中文标题】设置 ClientDataFormat 时出错【英文标题】:Error setting ClientDataFormat 【发布时间】:2013-10-01 21:06:13 【问题描述】:

我在对多通道 Apple 无损文件的某些配置进行编码时遇到了一些问题。我对 2、4 和 6 通道配置没有任何问题,但是在生成 12 通道文件时遇到了问题。

使用 ExtAudioFile API,我能够创建具有 12 通道 AudiostreamBasicDescription 和 12 通道 FileChannelLayout 的音频文件。在设置 12 通道 ClientDataFormat 时(在设置客户端布局之前完成,显然也失败了),我得到“fmt?”错误代码。

我的 ClientDataFormat 的 AudioStreamBasicDescription 生成如下:

AudioStreamBasicDescription asbd;

asbd.mSampleRate = m_sampleRate;
asbd.mFormatID = kAudioFormatLinearPCM;
asbd.mFormatFlags = kAudioFormatFlagIsFloat;
asbd.mBytesPerPacket = m_channels * 64 / 8;
asbd.mBytesPerFrame = asbd.mBytesPerPacket;
asbd.mFramesPerPacket = 1;
asbd.mBitsPerChannel = 64;
asbd.mChannelsPerFrame = m_channels;
asbd.mReserved = 0;

采样率为 176.4 kHz,m_channels 设置正确。这适用于 2、4 和 6 通道设置,所以我不认为它有问题。我也尝试过使用 32 位有符号整数而不是 64 位浮点数,但结果是一样的。

我不确定我错过了什么。 Apple Lossless 编解码器是否可能不支持 12 通道编码?

【问题讨论】:

【参考方案1】:

我不确定 MacOSForge 的规范是否确定,但根据 http://alac.macosforge.org/trac/browser/trunk/ReadMe.txt

3. From one to eight channels are supported. Channel orders for the supported formats are described as:
            Num Chan        Order
            1               mono
            2               stereo (Left, Right)
            3               MPEG 3.0 B (Center, Left, Right)
            4               MPEG 4.0 B (Center, Left, Right, Center Surround)
            5               MPEG 5.0 D (Center, Left, Right, Left Surround, Right Surround)
            6               MPEG 5.1 D (Center, Left, Right, Left Surround, Right Surround, Low Frequency Effects)
            7               Apple AAC 6.1 (Center, Left, Right, Left Surround, Right Surround, Center Surround, Low Frequency Effects)
            8               MPEG 7.1 B (Center, Left Center, Right Center, Left, Right, Left Surround, Right Surround,  Low Frequency Effects)

【讨论】:

这是一个有趣的可能性,但我原以为当我传入 12 通道 ASBD 或将 kExtAudioFileProperty_FileChannelLayout 属性设置为 12 通道布局时,ExtAudioFileCreateWithURL 会发生错误。 看起来编码函数检查 kALACMaxChannels 确实是 8。 ExtAudioFileCreateWithURL 验证其参数是有意义的。我会提交一个错误。

以上是关于设置 ClientDataFormat 时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用浮点数遍历二维数组时出错

使用 forge DA 获取访问令牌的问题

在文档目录中保存图像时出错

在命令行中运行 pan.bat 时出错

使用 load_table_from_dataframe 时出错

尝试使用 StackTrace 设置条件断点时出错