2011-12-22 5 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

答えて

0

「Core Audio Data Types Reference」には、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エルス

、フラグの人間が読める形式を取得するため、このObjective-Cのユーティリティも掲載されています:

別の有用な文書では、「フラグのために行くことは、」これ一つでも前を見て

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

よろしくお願いします。

関連する問題