Sunshine master
Self-hosted game stream host for Moonlight.
av_audio.mm File Reference

Implementation of macOS audio capture with dual input paths. More...

import "av_audio.h"
#include "coreaudio_helpers.h"
#include "src/logging.h"
#include "src/utility.h"
import <AudioToolbox/AudioConverter.h>
import <CoreAudio/CATapDescription.h>
Include dependency graph for av_audio.mm:

Functions

OSStatus platf::audioConverterComplexInputProc (AudioConverterRef inAudioConverter, UInt32 *ioNumberDataPackets, AudioBufferList *ioData, AudioStreamPacketDescription **outDataPacketDescription, void *inUserData)
 Real-time AudioConverter input callback for format conversion. Provides audio data to AudioConverter during format conversion process using pure C++ for optimal performance. This function must avoid all Objective-C runtime calls to meet real-time audio constraints.
 
OSStatus platf::systemAudioIOProc (AudioObjectID inDevice, const AudioTimeStamp *inNow, const AudioBufferList *inInputData, const AudioTimeStamp *inInputTime, AudioBufferList *outOutputData, const AudioTimeStamp *inOutputTime, void *inClientData)
 Real-time audio processing function for Core Audio IOProc callbacks. Handles system-wide audio capture with format conversion and buffering using pure C++ for optimal performance. This function must avoid all Objective-C runtime calls to meet real-time audio constraints.
 

Detailed Description

Implementation of macOS audio capture with dual input paths.

This file implements the AVAudio class which provides two distinct audio capture methods:

  1. Microphone capture - Uses AVFoundation framework to capture from specific microphone devices
  2. System-wide audio tap - Uses Core Audio taps to capture all system audio output (macOS 14.0+)

The implementation handles format conversion, real-time audio processing, and provides a unified interface for both capture methods through a shared circular buffer.

Function Documentation

◆ audioConverterComplexInputProc()

OSStatus platf::audioConverterComplexInputProc ( AudioConverterRef inAudioConverter,
UInt32 * ioNumberDataPackets,
AudioBufferList * ioData,
AudioStreamPacketDescription ** outDataPacketDescription,
void * inUserData )

Real-time AudioConverter input callback for format conversion. Provides audio data to AudioConverter during format conversion process using pure C++ for optimal performance. This function must avoid all Objective-C runtime calls to meet real-time audio constraints.

Parameters
inAudioConverterThe audio converter requesting input data
ioNumberDataPacketsNumber of data packets to provide
ioDataBuffer list to fill with audio data
outDataPacketDescriptionPacket description for output data
inUserDataUser data containing AudioConverterInputData structure
Returns
OSStatus indicating success (noErr) or error code

◆ systemAudioIOProc()

OSStatus platf::systemAudioIOProc ( AudioObjectID inDevice,
const AudioTimeStamp * inNow,
const AudioBufferList * inInputData,
const AudioTimeStamp * inInputTime,
AudioBufferList * outOutputData,
const AudioTimeStamp * inOutputTime,
void * inClientData )

Real-time audio processing function for Core Audio IOProc callbacks. Handles system-wide audio capture with format conversion and buffering using pure C++ for optimal performance. This function must avoid all Objective-C runtime calls to meet real-time audio constraints.

Parameters
inDeviceThe audio device identifier
inNowCurrent audio time stamp
inInputDataInput audio buffer list from the device
inInputTimeTime stamp for input data
outOutputDataOutput audio buffer list (not used in our implementation)
inOutputTimeTime stamp for output data
inClientDataClient data containing AVAudioIOProcData structure
Returns
OSStatus indicating success (noErr) or error code