AVCaptureAudioDataOutput к OS X AudioUnit
| Последняя версия: | Версия 1.0, 2012-10-04 Демонстрирует, как использовать CMSampleBufferRefs, продаваемый получением AVFOUNDATION объект AVCaptureAudioDataOutput с различным CoreAudio APIs. |
| Требования сборки: | XCode 4.4.1 или позже, OS X 10.7.4 или позже. |
| Требования во время выполнения: | OS X 10.7.4 или позже. |
AVCaptureToAudioUnitOSX демонстрирует, как использовать CMSampleBufferRefs, продаваемый получением AVFOUNDATION объект AVCaptureAudioDataOutput с различным CoreAudio APIs. Созданное приложение использует AVCaptureSession с AVCaptureAudioDataOutput для получения аудио от системного устройства ввода данных по умолчанию, применяет эффект к тому аудио с помощью простого эффекта задержки AudioUnit и пишет измененное аудио в файл с помощью CoreAudio ExtAudioFile API.
Класс CaptureSessionController ответственен за установку и выполнение AVCaptureSession и за передачу полученных аудио буферов к CoreAudio AudioUnit и ExtAudioFile. applicationDidFinishLaunching метод ответственен за установку и выполнение 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 для заключительного преобразования формата и пишущий в файл.
CaptureSessionController также определяет свойства и метод действия, использующиеся для привязки пользовательского интерфейса и действий.