Как получить векторные значения PCM во время записи звука? - PullRequest
1 голос
/ 09 мая 2011

Я пытаюсь получить массив значений данных PCM из звука, записываемого микрофоном ... и затем отправить его на сервер, но я не понимаю, как получить эти данные.Я попытался найти какой-нибудь совет по образцу «speakHere», но он мне не помог, я не хочу никакой информации из аудиопакета, только значения данных PCM. У кого-нибудь есть идея?Это не из файла, мне нужно получить звук с микрофона, получить массив и отправить его ..

Так как SpeechHere слишком сложный .. Я попробовал другое решение ..

AVCaptureDevice *audioDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
AVCaptureDeviceInput *audioInput = [AVCaptureDeviceInput deviceInputWithDevice:audioDevice error:&error];

[session addInput:audioInput];



AVCaptureAudioDataOutput *audioOutput = [[[AVCaptureAudioDataOutput alloc] init] autorelease];
[session addOutput:audioOutput];

// Configure your output. 
dispatch_queue_t audioQueue = dispatch_queue_create("audioQueue", NULL);
[audioOutput setSampleBufferDelegate:self queue:audioQueue];
dispatch_release(audioQueue);

и эта реализация вызывает этот метод:

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer 
   fromConnection:(AVCaptureConnection *)connection

, но проблема в том, что эти выходные данные генерируются с этой конфигурацией:

mSampleRate: 44100.000000 mFormatID: 'lpcm' mBitsPerChannel: 16

Но мне нужно 8000 sampleRate с 8 битамиPerChannel.

Итак ... как преобразовать или сжать его ??

1 Ответ

0 голосов
/ 09 мая 2011

Буфер, заданный функцией обратного вызова записи Audio Queue, может быть просто массивом C значений данных PCM.Примеры приложений Apple SpeakHere показывают, как настроить формат данных Audio Queue и как получить буфер.Затем пример приложения сохраняет эти данные PCM в файл, но вместо этого вы можете делать с данными все, что пожелаете (поставить их в очередь для воспроизведения, анализа DSP, визуализации музыки, пользовательского сжатия, передачи по сети и т.* Альтернативой является использование обратного вызова Audio Unit RemoteIO для захвата аналогичных массивов C значений PCM, записанных с того же микрофона, но с немного меньшей задержкой и немного большей сложностью в настройке.Посмотрите пример приложения Apple aurioTouch для примера исходного кода.

...