diff --git a/platform/posix/btstack_audio_portaudio.c b/platform/posix/btstack_audio_portaudio.c index 28200e707..1a7e846fd 100644 --- a/platform/posix/btstack_audio_portaudio.c +++ b/platform/posix/btstack_audio_portaudio.c @@ -331,6 +331,16 @@ static int btstack_audio_portaudio_source_init( return 0; } +static uint32_t btstack_audio_portaudio_sink_get_samplerate(void) { + const PaStreamInfo *stream_info = Pa_GetStreamInfo(stream_sink); + return stream_info->sampleRate; +} + +static uint32_t btstack_audio_portaudio_source_get_samplerate(void) { + const PaStreamInfo *stream_info = Pa_GetStreamInfo(stream_source); + return stream_info->sampleRate; +} + static void btstack_audio_portaudio_sink_set_volume(uint8_t volume){ sink_volume = volume; } @@ -468,6 +478,7 @@ static void btstack_audio_portaudio_source_close(void){ static const btstack_audio_sink_t btstack_audio_portaudio_sink = { /* int (*init)(..);*/ &btstack_audio_portaudio_sink_init, + /* uint32_t (*get_samplerate)() */ &btstack_audio_portaudio_sink_get_samplerate, /* void (*set_volume)(uint8_t volume); */ &btstack_audio_portaudio_sink_set_volume, /* void (*start_stream(void));*/ &btstack_audio_portaudio_sink_start_stream, /* void (*stop_stream)(void) */ &btstack_audio_portaudio_sink_stop_stream, @@ -476,6 +487,7 @@ static const btstack_audio_sink_t btstack_audio_portaudio_sink = { static const btstack_audio_source_t btstack_audio_portaudio_source = { /* int (*init)(..);*/ &btstack_audio_portaudio_source_init, + /* uint32_t (*get_samplerate)() */ &btstack_audio_portaudio_source_get_samplerate, /* void (*set_gain)(uint8_t gain); */ &btstack_audio_portaudio_source_set_gain, /* void (*start_stream(void));*/ &btstack_audio_portaudio_source_start_stream, /* void (*stop_stream)(void) */ &btstack_audio_portaudio_source_stop_stream, diff --git a/src/btstack_audio.h b/src/btstack_audio.h index b086abb66..6c669ac2c 100644 --- a/src/btstack_audio.h +++ b/src/btstack_audio.h @@ -68,6 +68,12 @@ typedef struct { uint32_t samplerate, void (*playback) (int16_t * buffer, uint16_t num_samples)); + /** + * @brief Get the current playback sample rate, may differ from the + * specified sample rate + */ + uint32_t (*get_samplerate)(void); + /** * @brief Set volume * @param Volume 0..127 @@ -105,6 +111,12 @@ typedef struct { uint32_t samplerate, void (*recording)(const int16_t * buffer, uint16_t num_samples)); + /** + * @brief Get the current recording sample rate, may differ from the + * specified sameple rate + */ + uint32_t (*get_samplerate)(void); + /** * @brief Set Gain * @param Gain 0..127