마이크 데이터에 FFT를 실행하는 응용 프로그램을 만들려고합니다. 예를 들면 다음과 같습니다. 입력에서 가장 큰 주파수.AVCaptureAudioDataOutput 데이터를 vDSP/Accelerate.framework에 전달합니다.
오디오 입력 (RemoteIO AudioUnit, AudioQueue 서비스 및 AVFoundation)을 가져 오는 데는 여러 가지 방법이 있지만 AVFoundation이 가장 단순한 것처럼 보입니다. 이 설치 프로그램이 있습니다 :
// Configure the audio session
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryRecord error:NULL];
[session setMode:AVAudioSessionModeMeasurement error:NULL];
[session setActive:YES error:NULL];
// Optional - default gives 1024 samples at 44.1kHz
//[session setPreferredIOBufferDuration:samplesPerSlice/session.sampleRate error:NULL];
// Configure the capture session (strongly-referenced instance variable, otherwise the capture stops after one slice)
_captureSession = [[AVCaptureSession alloc] init];
// Configure audio device input
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:NULL];
[_captureSession addInput:input];
// Configure audio data output
AVCaptureAudioDataOutput *output = [[AVCaptureAudioDataOutput alloc] init];
dispatch_queue_t queue = dispatch_queue_create("My callback", DISPATCH_QUEUE_SERIAL);
[output setSampleBufferDelegate:self queue:queue];
[_captureSession addOutput:output];
// Start the capture session.
[_captureSession startRunning];
(오류 검사, 읽기 쉽도록 생략 됨).
그런 다음 나는 다음과 같은 AVCaptureAudioDataOutputSampleBufferDelegate 메소드를 구현 :- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
{
NSLog(@"Num samples: %ld", CMSampleBufferGetNumSamples(sampleBuffer));
// Usually gives 1024 (except the first slice)
}
내가 다음 단계가 될해야하는지 확실 해요. CMSampleBuffer
형식이 정확히 무엇을 설명합니까? (있을 경우 어떤 가정을 할 수 있습니까?) 가능한 여분의 전처리가 가능한 최소량의 오디오 데이터를 vDSP_fft_zrip
으로 어떻게 가져올 수 있습니까? (내가 본 원시 데이터가 정확한지 확인하기 위해 무엇을 권하고 싶습니다.)
"iPhone 마이크의 기본 오디오 형식은 16 비트 정수의 단일 채널입니다."-이 정보는 어디에서 유래됩니까? 나는 이와 같은 가정을하는 것이 일반적으로 서로 다른 장치 하드웨어를 통해 안전하지 않을 것이라고 우려하고 있습니다. – jtbandes
맞습니다. 어쨌든 가정은 사실 거짓이었습니다. 오디오 형식을 확인하기 위해 업데이트했습니다. AVCapture 기본값에 대한 일부 의견은 다음과 같습니다. http://developer.apple.com/library/ios/#samplecode/AVCaptureToAudioUnit/Listings/CaptureSessionController_mm.html – Tark