设置 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 时出错的主要内容,如果未能解决你的问题,请参考以下文章