AVCaptureToAudioUnitでの"Failed to setup audio file"
こんにちは。
現在、マイク入力からaudioUnitを通ったデバイス内部の音声の録音機能を持つアプリを作りたいと考えています。
そこでアップル社のサンプルAVCaptureToAudioUnit
https://developer.apple.com/library/ios/samplecode/AVCaptureToAudioUnit/Introduction/Intro.html
をダウンロードし、ビルドしたのですが以下のようなエラーが出て
録音の設定や録音ファイルが再生ができません。
AudioStreamBasicDescription: 0 ch, 0 Hz, 'lpcm' (0x0000000E) 16-bit
signed integer
2015-03-17 14:57:41.900 AVCaptureToAudioUnit[1618:181222] Failed to setup audio file! (29759)
このログの該当箇所はCaptureSessionController.mmの以下のメソッドです
- (void)startRecording
{
if (!self.isRecording) {
OSErr err = kAudioFileUnspecifiedError;
@synchronized(self) {
if (!extAudioFile) {
/*
Start recording by creating an ExtAudioFile and configuring it with the same sample rate and
channel layout as those of the current sample buffer.*/
// recording format is the format of the audio file itself
CAStreamBasicDescription recordingFormat(currentInputASBD.mSampleRate,
currentInputASBD.mChannelsPerFrame,
CAStreamBasicDescription::kPCMFormatInt16,
true);
recordingFormat.mFormatFlags |= kAudioFormatFlagIsBigEndian;
NSLog(@"Recording Audio Format:");
recordingFormat.Print();
err = ExtAudioFileCreateWithURL(_outputFile,
kAudioFileAIFFType,
&recordingFormat,
currentRecordingChannelLayout,
kAudioFileFlags_EraseFile,
&extAudioFile);
if (noErr == err)
// client format is the output format from the delay unit
err = ExtAudioFileSetProperty(extAudioFile,
kExtAudioFileProperty_ClientDataFormat,
sizeof(graphOutputASBD),
&graphOutputASBD);
if (noErr != err) {
if (extAudioFile) ExtAudioFileDispose(extAudioFile);
extAudioFile = NULL;
}
}
} // @synchronized
if (noErr == err) {
self.recording = YES;
NSLog(@"Recording Started");
} else {
NSLog(@"Failed to setup audio file! (%ld)", (long)err);
}
}
}
xcodeのバージョンは6.1でシミュレーターはiphone6で動作させています。
currentInputASBDの取り出しがうまくいってないようなので、
同クラスのメソッド
- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
{
OSStatus err = noErr;
CMFormatDescriptionRef formatDescription = CMSampleBufferGetFormatDescription(sampleBuffer);
CAStreamBasicDescription sampleBufferASBD(*CMAudioFormatDescriptionGetStreamBasicDescription(formatDescription));
if (kAudioFormatLinearPCM != sampleBufferASBD.mFormatID) { NSLog(@"Bad format or bogus ASBD!");
return; }
if ((sampleBufferASBD.mChannelsPerFrame != currentInputASBD.mChannelsPerFrame) || (sampleBufferASBD.mSampleRate != currentInputASBD.mSampleRate)) {
NSLog(@"AVCaptureAudioDataOutput Audio Format:");
sampleBufferASBD.Print();
currentInputASBD = sampleBufferASBD;
....続く
のsampleBufferなる変数が取り出せていないのではないかと疑っているのですが
その解決方法の見当がつきません。
原因がわかる方がいましたら、教えていただけるととても助かります。
また他にaudioUnitを通った入力を任意のurlに録音できるサンプルや方法をご存知の方からの指南も、とても助かります。
質問に不足がたくさんあると思いますが、よろしくお願いします。