From 6981cefcd1db2b3241f479f7a8fe80217bd76d6e Mon Sep 17 00:00:00 2001 From: Martin Pulec Date: Fri, 22 Feb 2019 18:26:54 +0100 Subject: [PATCH] CoreAudio: capture 128 frames Capture only 128 frames at once (implicit value was 512). + param to allow user to set it manually --- src/audio/capture/coreaudio.c | 15 +++++++++++++++ src/host.cpp | 2 ++ 2 files changed, 17 insertions(+) diff --git a/src/audio/capture/coreaudio.c b/src/audio/capture/coreaudio.c index ae8eb9122..1a0e1f661 100644 --- a/src/audio/capture/coreaudio.c +++ b/src/audio/capture/coreaudio.c @@ -61,6 +61,7 @@ #include "utils/ring_buffer.h" #define DISABLE_SPPEX_RESAMPLER 1 +#define MODULE_NAME "[CoreAudio] " struct state_ca_capture { #if OS_VERSION_MAJOR <= 9 @@ -229,6 +230,13 @@ error: fprintf(stderr, "[CoreAudio] error obtaining device list.\n"); } +#define CHECK_OK(cmd, msg, action_failed) do { int ret = cmd; if (!ret) {\ + log_msg(LOG_LEVEL_WARNING, MODULE_NAME "%s\n", (msg));\ + action_failed;\ +}\ +} while(0) +#define NOOP ((void)0) + static void * audio_cap_ca_init(const char *cfg) { if(cfg && strcmp(cfg, "help") == 0) { @@ -430,6 +438,13 @@ static void * audio_cap_ca_init(const char *cfg) fprintf(stderr, "[CoreAudio] Error setting input callback.\n"); goto error; } + uint32_t numFrames = 128; + if (get_commandline_param("audio-cap-frames")) { + numFrames = atoi(get_commandline_param("audio-cap-frames")); + } + CHECK_OK(AudioUnitSetProperty(s->auHALComponentInstance, kAudioDevicePropertyBufferFrameSize, + kAudioUnitScope_Global, 0, &numFrames, sizeof(numFrames)), + "[CoreAudio] Error setting frames.", NOOP); } ret = AudioUnitInitialize(s->auHALComponentInstance); diff --git a/src/host.cpp b/src/host.cpp index 825ede421..85d539657 100644 --- a/src/host.cpp +++ b/src/host.cpp @@ -395,6 +395,8 @@ bool register_mainloop(mainloop_t m, void *u) // some common parameters used within multiple modules ADD_TO_PARAM(audio_buffer_len, "audio-buffer-len", "* audio-buffer-len=\n" " Sets length of software audio playback buffer (in ms, ALSA/Coreaudio/Portaudio)\n"); +ADD_TO_PARAM(audio_cap_frames, "audio-cap-frames", "* audio-cap-frames=\n" + " Sets number of audio frames captured at once (CoreAudio)\n"); ADD_TO_PARAM(low_latency_audio, "low-latency-audio", "* low-latency-audio\n" " Try to reduce audio latency at the expense of worse reliability\n"); ADD_TO_PARAM(window_title, "window-title", "* window-title=\n"