3

我一直在关注 Apple 的文档,使用AVAudioSession该类在 iPhone 上录制音频。我可以设置多个属性而不会出错(,,, setActivesetCategorysetPreferredHardwareSampleRate但我无法让 Apple 的示例代码为setPreferredIOBufferDuration.

这是我的代码:

- (void) initX {
 NSError *setPreferenceError = nil;
 NSTimeInterval preferredBufferDuration = 0.005;

 [[AVAudioSession sharedInstance]
  setPreferredIOBufferDuration: preferredBufferDuration
  error: &setPreferenceError];

 if (setPreferenceError != nil) {
  NSLog( @"%@", setPreferenceError );
 }
}

它产生以下输出:

错误域 = NSOSStatusErrorDomain 代码 = 561211770 “操作无法完成。(OSStatus 错误 561211770。)”

作为方法的一部分,我从主应用程序委托调用此applicationDidFinishLaunching方法。我所做的只是在这个阶段初始化事物。在将 AVFoundation.framework 添加到项目后,我已经导入了 AVFoundation/AVFoundation.h。

4

1 回答 1

1

这似乎是苹果代码中的一个错误;改用纯 C 接口:

OSStatus propertySetError = 0;
Float32 preferredBufferDuration = 0.005;
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, sizeof(preferredBufferDuration), &preferredBufferDuration);

然后检查错误使用

if (propertySetError) NSLog(@"Failed to set shorter I/O buffer on AVAudioSession, code %d", propertySetError);
于 2010-03-27T20:03:03.720 回答