|
ascii-chat 0.8.38
Real-time terminal-based video chat with ASCII art conversion
|
🔊 Audio capture and playback using PortAudio with buffer management More...
Go to the source code of this file.
Macros | |
| #define | WORKER_BATCH_FRAMES 128 |
| #define | WORKER_BATCH_SAMPLES (WORKER_BATCH_FRAMES * AUDIO_CHANNELS) |
| #define | WORKER_TIMEOUT_MS 1 |
Functions | |
| void | audio_terminate_portaudio_final (void) |
| Terminate PortAudio and free all device resources. | |
| void | resample_linear (const float *src, size_t src_samples, float *dst, size_t dst_samples, double src_rate, double dst_rate) |
| audio_ring_buffer_t * | audio_ring_buffer_create (void) |
| audio_ring_buffer_t * | audio_ring_buffer_create_for_capture (void) |
| void | audio_ring_buffer_destroy (audio_ring_buffer_t *rb) |
| void | audio_ring_buffer_clear (audio_ring_buffer_t *rb) |
| asciichat_error_t | audio_ring_buffer_write (audio_ring_buffer_t *rb, const float *data, int samples) |
| size_t | audio_ring_buffer_read (audio_ring_buffer_t *rb, float *data, size_t samples) |
| size_t | audio_ring_buffer_peek (audio_ring_buffer_t *rb, float *data, size_t samples) |
| Peek at available samples without consuming them (for AEC3 render signal) | |
| size_t | audio_ring_buffer_available_read (audio_ring_buffer_t *rb) |
| size_t | audio_ring_buffer_available_write (audio_ring_buffer_t *rb) |
| asciichat_error_t | audio_init (audio_context_t *ctx) |
| void | audio_destroy (audio_context_t *ctx) |
| void | audio_set_pipeline (audio_context_t *ctx, void *pipeline) |
| void | audio_flush_playback_buffers (audio_context_t *ctx) |
| asciichat_error_t | audio_start_duplex (audio_context_t *ctx) |
| asciichat_error_t | audio_stop_duplex (audio_context_t *ctx) |
| asciichat_error_t | audio_read_samples (audio_context_t *ctx, float *buffer, int num_samples) |
| asciichat_error_t | audio_write_samples (audio_context_t *ctx, const float *buffer, int num_samples) |
| asciichat_error_t | audio_list_input_devices (audio_device_info_t **out_devices, unsigned int *out_count) |
| asciichat_error_t | audio_list_output_devices (audio_device_info_t **out_devices, unsigned int *out_count) |
| void | audio_free_device_list (audio_device_info_t *devices) |
| asciichat_error_t | audio_dequantize_samples (const uint8_t *samples_ptr, uint32_t total_samples, float *out_samples) |
| asciichat_error_t | audio_set_realtime_priority (void) |
| asciichat_error_t | audio_parse_batch_header (const void *data, size_t len, audio_batch_info_t *out_batch) |
| asciichat_error_t | audio_validate_batch_params (const audio_batch_info_t *batch) |
| bool | audio_is_supported_sample_rate (uint32_t sample_rate) |
| bool | audio_should_enable_microphone (audio_source_t source, bool has_media_audio) |
🔊 Audio capture and playback using PortAudio with buffer management
Definition in file lib/audio/audio.c.
| #define WORKER_BATCH_FRAMES 128 |
Definition at line 132 of file lib/audio/audio.c.
| #define WORKER_BATCH_SAMPLES (WORKER_BATCH_FRAMES * AUDIO_CHANNELS) |
Definition at line 133 of file lib/audio/audio.c.
| #define WORKER_TIMEOUT_MS 1 |
Definition at line 134 of file lib/audio/audio.c.
| asciichat_error_t audio_dequantize_samples | ( | const uint8_t * | samples_ptr, |
| uint32_t | total_samples, | ||
| float * | out_samples | ||
| ) |
Definition at line 1918 of file lib/audio/audio.c.
Referenced by handle_audio_batch_packet().
| void audio_destroy | ( | audio_context_t * | ctx | ) |
Definition at line 1270 of file lib/audio/audio.c.
References asciichat_thread_join(), audio_ring_buffer_destroy(), audio_stop_duplex(), and mutex_destroy().
Referenced by audio_cleanup(), audio_client_init(), session_audio_destroy(), and session_client_like_run().
| void audio_flush_playback_buffers | ( | audio_context_t * | ctx | ) |
Definition at line 1334 of file lib/audio/audio.c.
References audio_ring_buffer_clear().
Referenced by session_handle_keyboard_input().
| void audio_free_device_list | ( | audio_device_info_t * | devices | ) |
Definition at line 1914 of file lib/audio/audio.c.
| asciichat_error_t audio_init | ( | audio_context_t * | ctx | ) |
Definition at line 1132 of file lib/audio/audio.c.
References audio_ring_buffer_create(), audio_ring_buffer_create_for_capture(), audio_ring_buffer_destroy(), mutex_destroy(), mutex_init(), and WORKER_BATCH_SAMPLES.
Referenced by audio_client_init(), session_audio_create(), and session_client_like_run().
| bool audio_is_supported_sample_rate | ( | uint32_t | sample_rate | ) |
Definition at line 2014 of file lib/audio/audio.c.
Referenced by audio_validate_batch_params().
| asciichat_error_t audio_list_input_devices | ( | audio_device_info_t ** | out_devices, |
| unsigned int * | out_count | ||
| ) |
Definition at line 1906 of file lib/audio/audio.c.
| asciichat_error_t audio_list_output_devices | ( | audio_device_info_t ** | out_devices, |
| unsigned int * | out_count | ||
| ) |
Definition at line 1910 of file lib/audio/audio.c.
| asciichat_error_t audio_parse_batch_header | ( | const void * | data, |
| size_t | len, | ||
| audio_batch_info_t * | out_batch | ||
| ) |
Definition at line 1948 of file lib/audio/audio.c.
References audio_batch_info_t::batch_count, audio_batch_info_t::channels, audio_batch_info_t::sample_rate, and audio_batch_info_t::total_samples.
Referenced by handle_audio_batch_packet().
| asciichat_error_t audio_read_samples | ( | audio_context_t * | ctx, |
| float * | buffer, | ||
| int | num_samples | ||
| ) |
Definition at line 1791 of file lib/audio/audio.c.
References audio_ring_buffer_read().
Referenced by session_audio_read_captured().
| size_t audio_ring_buffer_available_read | ( | audio_ring_buffer_t * | rb | ) |
Definition at line 1106 of file lib/audio/audio.c.
Referenced by audio_process_received_samples(), audio_ring_buffer_available_write(), and client_audio_render_thread().
| size_t audio_ring_buffer_available_write | ( | audio_ring_buffer_t * | rb | ) |
Definition at line 1123 of file lib/audio/audio.c.
References audio_ring_buffer_available_read().
| void audio_ring_buffer_clear | ( | audio_ring_buffer_t * | rb | ) |
Definition at line 842 of file lib/audio/audio.c.
Referenced by audio_flush_playback_buffers(), audio_stop_duplex(), and media_source_seek().
| audio_ring_buffer_t * audio_ring_buffer_create | ( | void | ) |
Definition at line 826 of file lib/audio/audio.c.
Referenced by audio_init(), and session_audio_add_source().
| audio_ring_buffer_t * audio_ring_buffer_create_for_capture | ( | void | ) |
Definition at line 830 of file lib/audio/audio.c.
Referenced by add_client(), add_webrtc_client(), audio_init(), and audio_start_duplex().
| void audio_ring_buffer_destroy | ( | audio_ring_buffer_t * | rb | ) |
Definition at line 834 of file lib/audio/audio.c.
References buffer_pool_free(), and mutex_destroy().
Referenced by add_client(), add_webrtc_client(), audio_destroy(), audio_init(), audio_start_duplex(), audio_stop_duplex(), cleanup_client_media_buffers(), session_audio_destroy(), and session_audio_remove_source().
| size_t audio_ring_buffer_peek | ( | audio_ring_buffer_t * | rb, |
| float * | data, | ||
| size_t | samples | ||
| ) |
Peek at available samples without consuming them (for AEC3 render signal)
This function reads samples from the jitter buffer WITHOUT advancing the read_index. Used to feed audio to AEC3 for echo cancellation even during jitter buffer fill period.
| rb | Ring buffer to peek from |
| data | Output buffer for samples |
| samples | Number of samples to peek |
Definition at line 1069 of file lib/audio/audio.c.
| size_t audio_ring_buffer_read | ( | audio_ring_buffer_t * | rb, |
| float * | data, | ||
| size_t | samples | ||
| ) |
Definition at line 939 of file lib/audio/audio.c.
Referenced by audio_read_samples(), client_audio_render_thread(), mixer_process(), mixer_process_excluding_source(), session_audio_mix_excluding(), and session_capture_read_audio().
| asciichat_error_t audio_ring_buffer_write | ( | audio_ring_buffer_t * | rb, |
| const float * | data, | ||
| int | samples | ||
| ) |
Definition at line 856 of file lib/audio/audio.c.
Referenced by audio_write_samples(), handle_audio_batch_packet(), handle_audio_opus_batch_packet(), handle_audio_opus_packet(), handle_audio_packet(), and session_audio_write_source().
| void audio_set_pipeline | ( | audio_context_t * | ctx, |
| void * | pipeline | ||
| ) |
Definition at line 1328 of file lib/audio/audio.c.
Referenced by audio_cleanup(), and audio_client_init().
| asciichat_error_t audio_set_realtime_priority | ( | void | ) |
Definition at line 1934 of file lib/audio/audio.c.
Referenced by audio_start_duplex().
Definition at line 2037 of file lib/audio/audio.c.
Referenced by session_client_like_run().
| asciichat_error_t audio_start_duplex | ( | audio_context_t * | ctx | ) |
Definition at line 1353 of file lib/audio/audio.c.
References asciichat_thread_create(), audio_ring_buffer_create_for_capture(), audio_ring_buffer_destroy(), audio_set_realtime_priority(), and paNoError.
Referenced by audio_client_init(), session_audio_start_duplex(), and session_client_like_run().
| asciichat_error_t audio_stop_duplex | ( | audio_context_t * | ctx | ) |
Definition at line 1703 of file lib/audio/audio.c.
References asciichat_thread_join(), audio_ring_buffer_clear(), audio_ring_buffer_destroy(), and paNoError.
Referenced by audio_cleanup(), audio_destroy(), session_audio_stop(), and session_client_like_run().
| void audio_terminate_portaudio_final | ( | void | ) |
Terminate PortAudio and free all device resources.
This must be called to actually free device structures allocated by ALSA/libpulse. It should be called AFTER all audio contexts are destroyed and session cleanup is complete.
Definition at line 114 of file lib/audio/audio.c.
Referenced by audio_cleanup(), and session_client_like_run().
| asciichat_error_t audio_validate_batch_params | ( | const audio_batch_info_t * | batch | ) |
Definition at line 1973 of file lib/audio/audio.c.
References audio_is_supported_sample_rate(), audio_batch_info_t::batch_count, audio_batch_info_t::channels, audio_batch_info_t::sample_rate, and audio_batch_info_t::total_samples.
| asciichat_error_t audio_write_samples | ( | audio_context_t * | ctx, |
| const float * | buffer, | ||
| int | num_samples | ||
| ) |
Definition at line 1802 of file lib/audio/audio.c.
References audio_ring_buffer_write().
Referenced by audio_process_received_samples(), and session_audio_write_playback().
| void resample_linear | ( | const float * | src, |
| size_t | src_samples, | ||
| float * | dst, | ||
| size_t | dst_samples, | ||
| double | src_rate, | ||
| double | dst_rate | ||
| ) |
Simple linear interpolation resampler. Resamples from src_rate to dst_rate using linear interpolation.
| src | Source samples at src_rate |
| src_samples | Number of source samples |
| dst | Destination buffer at dst_rate |
| dst_samples | Number of destination samples to produce |
| src_rate | Source sample rate (e.g., 48000) |
| dst_rate | Destination sample rate (e.g., 44100) |
Definition at line 574 of file lib/audio/audio.c.