15#import <AudioToolbox/AudioToolbox.h>
16#import <AVFoundation/AVFoundation.h>
17#import <CoreAudio/AudioHardwareTapping.h>
18#import <CoreAudio/CoreAudio.h>
21#include "third-party/TPCircularBuffer/TPCircularBuffer.h"
23NS_ASSUME_NONNULL_BEGIN
27@class CATapDescription;
30 OSStatus audioConverterComplexInputProc(AudioConverterRef _Nullable inAudioConverter, UInt32 *_Nonnull ioNumberDataPackets, AudioBufferList *_Nonnull ioData, AudioStreamPacketDescription *_Nullable *_Nullable outDataPacketDescription,
void *_Nonnull inUserData);
31 OSStatus systemAudioIOProc(AudioObjectID inDevice,
const AudioTimeStamp *_Nullable inNow,
const AudioBufferList *_Nullable inInputData,
const AudioTimeStamp *_Nullable inInputTime, AudioBufferList *_Nullable outOutputData,
const AudioTimeStamp *_Nullable inOutputTime,
void *_Nullable inClientData);
67@interface AVAudio: NSObject <AVCaptureAudioDataOutputSampleBufferDelegate> {
73 AudioObjectID tapObjectID;
74 AudioObjectID aggregateDeviceID;
75 AudioDeviceIOProcID ioProcID;
80@property (nonatomic, assign, nullable) AVCaptureSession *audioCaptureSession;
81@property (nonatomic, assign, nullable) AVCaptureConnection *audioConnection;
82@property (nonatomic, assign) BOOL hostAudioEnabled;
88+ (NSArray<AVCaptureDevice *> *)microphones;
94+ (NSArray<NSString *> *)microphoneNames;
101+ (nullable AVCaptureDevice *)findMicrophone:(nullable NSString *)name;
111- (int)setupMicrophone:(nullable AVCaptureDevice *)device sampleRate:(UInt32)sampleRate frameSize:(UInt32)frameSize channels:(UInt8)channels;
121- (int)setupSystemTap:(UInt32)sampleRate frameSize:(UInt32)frameSize channels:(UInt8)channels;
128- (void)initializeAudioBuffer:(UInt8)channels;
133- (void)cleanupAudioBuffer;
139- (void)cleanupSystemTapContext:(nullable
id)tapDescription;
148- (int)initializeSystemTapContext:(UInt32)sampleRate frameSize:(UInt32)frameSize channels:(UInt8)channels;
155- (nullable CATapDescription *)createSystemTapDescriptionForChannels:(UInt8)channels;
164- (OSStatus)createAggregateDeviceWithTapDescription:(CATapDescription *)tapDescription sampleRate:(UInt32)sampleRate frameSize:(UInt32)frameSize;
Core Audio capture class for macOS audio input and system-wide audio tapping. Provides functionality ...
Definition av_audio.h:67
TPCircularBuffer audioSampleBuffer
Shared circular buffer for both audio capture paths.
Definition av_audio.h:69
dispatch_semaphore_t audioSemaphore
Real-time safe semaphore for signaling audio sample availability.
Definition av_audio.h:70
IOProc client data structure for Core Audio system taps. Contains configuration and conversion data f...
Definition av_audio.h:50
UInt32 conversionBufferSize
Size of the conversion buffer in bytes.
Definition av_audio.h:59
UInt32 aggregateDeviceSampleRate
Sample rate of the aggregate device.
Definition av_audio.h:55
UInt32 clientRequestedFrameSize
Frame size requested by client.
Definition av_audio.h:54
UInt32 aggregateDeviceChannels
Number of channels in aggregate device.
Definition av_audio.h:56
UInt32 clientRequestedSampleRate
Sample rate requested by client.
Definition av_audio.h:53
UInt32 clientRequestedChannels
Number of channels requested by client.
Definition av_audio.h:52
AVAudio * avAudio
Reference to AVAudio instance.
Definition av_audio.h:51
float *_Nullable conversionBuffer
Pre-allocated buffer for audio conversion.
Definition av_audio.h:58
AudioConverterRef _Nullable audioConverter
Audio converter for format conversion.
Definition av_audio.h:57