AVCaptureAudioDataOutput К AudioUnit iOS
| Последняя версия: | Версия 1.0, 2012-10-08 Демонстрирует, как использовать CMSampleBufferRefs, продаваемый получением AVFOUNDATION объект AVCaptureAudioDataOutput с различным CoreAudio APIs. |
| Требования сборки: | Xcode 4.5, iOS 6.0 SDK или позже. |
| Требования во время выполнения: | iOS 6.0 SDK или позже. Требует устройства на iOS, Получение AVFoundation не работает в средстве моделирования. |
AVCaptureToAudioUnit для iOS демонстрирует, как использовать CMSampleBufferRefs, продаваемый получением AVFOUNDATION объект AVCaptureAudioDataOutput с различным CoreAudio APIs. Приложение использует AVCaptureSession с AVCaptureAudioDataOutput для получения аудио от ввода по умолчанию, применяет эффект к тому аудио с помощью простого эффекта задержки AudioUnit и пишет измененное аудио в файл с помощью CoreAudio ExtAudioFile API. Это также демонстрирует использование и AUGraph, содержащий AUConverter для преобразования формата предоставленных данных AVCaptureAudioDataOutput в подходящий формат для эффекта задержки.
Класс CaptureSessionController ответственен за установку и выполнение AVCaptureSession и за передачу полученных аудио буферов к CoreAudio AudioUnit и ExtAudioFile. setupCaptureSession метод ответственен за установку AVCaptureSession, в то время как captureOutput:didOutputSampleBuffer:fromConnection: передает полученные аудиоданные через AudioUnit через AudioUnitRender в использование файла ExtAudioFileWriteAsync при записи.
CoreMedia обеспечивает два удобных метода легко использовать полученные аудиоданные с CoreAudio APIs. CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer API заполняет AudioBufferList с данными от CMSampleBuffer и возвращает CMBlockBuffer, какие ссылки (и управляет временем жизни), данные в том AudioBufferList. Этот AudioBufferList может использоваться непосредственно AudioUnits и другими объектами CoreAudio. CMSampleBufferGetNumSamples API возвращает число кадров аудио, содержавшего в демонстрационном буфере, значение, которое может также быть передано непосредственно CoreAudio APIs.
Поскольку аудиоданные процесса CoreAudio AudioUnits с помощью модели «получения по запросу», но объекта AVCaptureAudioDataOutput «продвигают» буферы аудиосэмпла на клиент в режиме реального времени, полученные буферы должны быть отправлены, хотя AudioUnit через AudioUnit представляют обратный вызов, запрашивающий входные аудиоданные каждый раз, когда AudioUnitRender вызывают для получения выходных аудиоданных. Каждый раз captureOutput:didOutputSampleBuffer:fromConnection: получает новый демонстрационный буфер, это получает и хранит буфер как Ввод AudioBufferList (так, чтобы обратный вызов рендеринга мог получить доступ к нему), и затем сразу вызывает AudioUnitRender, синхронно вытягивающий сохраненный список входного буфера через AudioUnit через обратный вызов рендеринга. Выходные данные доступны в выводе AudioBufferList, переданном AudioUnitRender. Этот список буфера вывода может быть передан ExtAudioFile для заключительного преобразования формата и пишущий в файл.