1

我正在尝试使用 AudioUnit 将 caf 文件转换为 m4a 文件。我已经实现了要转换的代码。当我尝试运行应用程序时,我收到以下错误消息;

无法设置目标客户端格式 (-66672)

我从以下链接获得了示例代码;
http://developer.apple.com/library/ios/#samplecode/iPhoneExtAudioFileConvertTest/Introduction/Intro.html

代码:

size = sizeof(clientFormat);
XThrowIfError(ExtAudioFileSetProperty(sourceFile, kExtAudioFileProperty_ClientDataFormat, size, &clientFormat), "couldn't set source client format");
//UInt32 encoderSpecifier = kAudioFormatMPEG4AAC;
//XThrowIfError(AudioFormatGetPropertyInfo(kAudioFormatProperty_Encoders, sizeof(encoderSpecifier), &encoderSpecifier, &size), "AudioFormatGetPropertyInfo: couldn't get property info");
size = sizeof(clientFormat);
XThrowIfError(ExtAudioFileSetProperty(destinationFile, kExtAudioFileProperty_ClientDataFormat, size, &clientFormat), "couldn't set destination client format");
AudioConverterRef audioConverter;
size = sizeof(audioConverter);
XThrowIfError(ExtAudioFileGetProperty(destinationFile, kExtAudioFileProperty_AudioConverter, &size, &audioConverter), "Couldn't get Audio Converter!");

我没有得到解决方案。我尝试过将属性设置为输出文件。但我遇到了同样的问题。

请帮我解决它。

4

1 回答 1

3

我也遇到了这个 - 它没有很好的文档记录,但原因可能是您必须将音频类别设置为与硬件编码兼容的类别。

特别是,任何在设备上提供与其他声音混合的音频会话都会使编码器停止工作。

我知道 AVAudioSessionCategoryPlayAndRecord、AVAudioSessionCategorySoloAmbient 和 AVAudioSessionCategoryAudioProcessing 肯定可以工作(只要您没有覆盖 kAudioSessionProperty_OverrideCategoryMixWithOthers 属性)。

我实际上已经组装了将任何音频文件编码为 AAC 所需的所有内容到一个异步类中:TPAACAudioConverter

于 2011-04-02T23:07:11.587 回答