3

AVAudioSessionクラスを使用してiPhoneでオーディオを録音するために、Appleのドキュメントに従っています。エラーなしでいくつかのプロパティを設定できます ( setActive, setCategory, setPreferredHardwareSampleRate) が、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。)」

メソッドの一部として、メインの Application Delegate からこのメソッドを呼び出していapplicationDidFinishLaunchingます。私がやっているのは、この段階で物事を初期化することだけです。AVFoundation.framework をプロジェクトに追加した後、AVFoundation/AVFoundation.h をインポートしました。

4

1 に答える 1

1

これは Apple のコードのバグのようです。代わりに純粋な 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 に答える