2011-12-22 31 views
0

我刚刚开始使用CoreAudio。试图创建一个音频文件,但获取kAudioFileUnsupportedDataFormatError与以下。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

那么,我通过将mFormatFlags更改为asbd.mFormatFlags = kLinearPCMFormatFlagIsBigEndian | kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked; – John 2011-12-22 02:55:41

回答

0

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

“适用于iOS的音频单元托管指南”有一个名为“使用AudioStreamBasicDescription结构”的小节,这有点更有帮助。 d)。

1

嗯,我知道了通过改变mFormatFlags到工作:

asbd.mFormatFlags = kLinearPCMFormatFlagIsBigEndian | 
        kLinearPCMFormatFlagIsSignedInteger | 
        kLinearPCMFormatFlagIsPacked; 

现在我正在寻找一个苹果文档或其他资源,告诉你需要什么样的标志为哪种格式,以及为什么。

1

mFormatFlags是位域标志,因此它们可以使用按位逻辑运算符进行组合,因此可以使用按位逻辑运算符进行组合,因此密度和可能的理解困难。另一种有用的文件来看看之前的“去为标志”可能是这一个:

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

否则,这个目标-C实用程序,用于获取标志的人类可读的形式也已公布:

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

问候!