我刚开始使用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);
答案 0 :(得分:1)
好吧,我通过将mFormatFlags更改为:
来实现它asbd.mFormatFlags = kLinearPCMFormatFlagIsBigEndian |
kLinearPCMFormatFlagIsSignedInteger |
kLinearPCMFormatFlagIsPacked;
我现在正在寻找Apple文档或其他资源,告诉您哪种格式需要哪些标志,以及原因。
答案 1 :(得分:1)
mFormatFlags 是位字段标志,因此可以使用按位逻辑运算符组合它们,因此密度和可能的理解难度。另一个有用的文件,在"前往标志"可能就是这个:
另外,这个用于获取人类可读形式的标志的Objective-C实用程序也已发布:
https://gist.github.com/eppz/11272305
问候!
答案 2 :(得分:0)
“核心音频数据类型参考”包含AudioStreamBasicDescription的参考资料。但它非常密集且难以理解。
“适用于iOS的音频单元托管指南”有一个名为“使用AudioStreamBasicDescription结构”的部分,它更有帮助。
d