CoreAudio - kAudioFileUnsupportedDataFormatError

时间:2011-12-22 00:01:13

标签: macos core-audio

我刚开始使用CoreAudio。只是尝试创建一个音频文件,但使用以下内容获取kAudioFileUnsupportedDataFormatError。

有人可以问我为什么?这一切看起来都没问题,但我一定做错了。

// Prepare the format
AudioStreamBasicDescription asbd;
memset(&asbd, 0, sizeof(asbd));

asbd.mSampleRate = SAMPLE_RATE;        // 44100

asbd.mFormatID = kAudioFormatLinearPCM;
asbd.mFormatFlags = kAudioFormatFlagIsBigEndian;
asbd.mBitsPerChannel = 16;
asbd.mChannelsPerFrame = 1;
asbd.mFramesPerPacket = 1;
asbd.mBytesPerFrame = 2;
asbd.mBytesPerPacket = 2;

// Set up the file
AudioFileID audioFile;
OSStatus audioErr = noErr;
audioErr = AudioFileCreateWithURL((CFURLRef)fileURL,
                                 kAudioFileAIFFType,
                                 &asbd,
                                 kAudioFileFlags_EraseFile,
                                 &audioFile);

3 个答案:

答案 0 :(得分:1)

好吧,我通过将mFormatFlags更改为:

来实现它
asbd.mFormatFlags = kLinearPCMFormatFlagIsBigEndian | 
                    kLinearPCMFormatFlagIsSignedInteger | 
                    kLinearPCMFormatFlagIsPacked;

我现在正在寻找Apple文档或其他资源,告诉您哪种格式需要哪些标志,以及原因。

答案 1 :(得分:1)

mFormatFlags 是位字段标志,因此可以使用按位逻辑运算符组合它们,因此密度和可能的理解难度。另一个有用的文件,在"前往标志"可能就是这个:

https://developer.apple.com/library/mac/documentation/MusicAudio/Conceptual/CoreAudioOverview/SupportedAudioFormatsMacOSX/SupportedAudioFormatsMacOSX.html

另外,这个用于获取人类可读形式的标志的Objective-C实用程序也已发布:

https://gist.github.com/eppz/11272305

问候!

答案 2 :(得分:0)

“核心音频数据类型参考”包含AudioStreamBasicDescription的参考资料。但它非常密集且难以理解。

“适用于iOS的音频单元托管指南”有一个名为“使用AudioStreamBasicDescription结构”的部分,它更有帮助。

d