ascii-chat 0.11.33
Video chat in your terminal
Loading...
Searching...
No Matches
audio.h File Reference

🔊 Audio Capture and Playback Interface for ascii-chat More...

Go to the source code of this file.

Data Structures

struct  audio_context_t
 Audio context for full-duplex capture and playback. More...
 
struct  audio_device_info_t
 Audio device information structure. More...
 
struct  audio_batch_info_t
 Parsed audio batch packet header information. More...
 

Macros

#define AUDIO_SAMPLE_RATE   48000
 Audio sample rate (48kHz professional quality, Opus-compatible)
 
#define AUDIO_FRAMES_PER_BUFFER   480
 Audio frames per buffer (480 = 10ms at 48kHz, matches WebRTC AEC3 frame size)
 
#define AUDIO_CHANNELS   1
 Number of audio channels (1 = mono)
 
#define AUDIO_BUFFER_SIZE   (AUDIO_FRAMES_PER_BUFFER * AUDIO_CHANNELS)
 Total audio buffer size (frames × channels)
 
#define AUDIO_DEVICE_NAME_MAX   256
 Maximum length of audio device name.
 

Functions

asciichat_error_t audio_init (audio_context_t *ctx)
 Initialize audio context and PortAudio.
 
void audio_destroy (audio_context_t *ctx)
 Destroy audio context and clean up resources.
 
void audio_terminate_portaudio_final (void)
 Terminate PortAudio and free all device resources.
 
void audio_set_pipeline (audio_context_t *ctx, void *pipeline)
 Set audio pipeline for echo cancellation.
 
asciichat_error_t audio_start_duplex (audio_context_t *ctx)
 Start full-duplex audio (simultaneous capture and playback)
 
asciichat_error_t audio_stop_duplex (audio_context_t *ctx)
 Stop full-duplex audio.
 
asciichat_error_t audio_read_samples (audio_context_t *ctx, float *buffer, int num_samples)
 Read captured audio samples from capture buffer.
 
asciichat_error_t audio_write_samples (audio_context_t *ctx, const float *buffer, int num_samples)
 Write audio samples to playback buffer.
 
asciichat_error_t audio_set_realtime_priority (void)
 Request real-time priority for current thread.
 
asciichat_error_t audio_list_input_devices (audio_device_info_t **out_devices, unsigned int *out_count)
 List available audio input devices (microphones)
 
asciichat_error_t audio_list_output_devices (audio_device_info_t **out_devices, unsigned int *out_count)
 List available audio output devices (speakers)
 
void audio_free_device_list (audio_device_info_t *devices)
 Free device list allocated by audio_list_input_devices/audio_list_output_devices.
 
asciichat_error_t audio_dequantize_samples (const uint8_t *samples_ptr, uint32_t total_samples, float *out_samples)
 Dequantize network audio samples from int32 to float.
 
audio_ring_buffer_t * audio_ring_buffer_create (void)
 Create a new audio ring buffer (for playback with jitter buffering)
 
audio_ring_buffer_t * audio_ring_buffer_create_for_capture (void)
 Create a new audio ring buffer for capture (without jitter buffering)
 
void audio_ring_buffer_destroy (audio_ring_buffer_t *rb)
 Destroy an audio ring buffer.
 
void audio_ring_buffer_register_atomics (audio_ring_buffer_t *rb, const char *context_name)
 Register audio ring buffer atomic fields for debug tracking.
 
void audio_ring_buffer_unregister_atomics (audio_ring_buffer_t *rb)
 Unregister audio ring buffer atomic fields.
 
void audio_ring_buffer_clear (audio_ring_buffer_t *rb)
 Clear all audio samples from ring buffer.
 
void audio_ring_buffer_discard_pending (audio_ring_buffer_t *rb)
 
asciichat_error_t audio_ring_buffer_write (audio_ring_buffer_t *rb, const float *data, int samples)
 Write audio samples to ring buffer.
 
size_t audio_ring_buffer_read (audio_ring_buffer_t *rb, float *data, size_t samples)
 Read audio samples from ring buffer.
 
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)
 Get number of samples available for reading.
 
size_t audio_ring_buffer_available_write (audio_ring_buffer_t *rb)
 Get number of sample slots available for writing.
 
void resample_linear (const float *src, size_t src_samples, float *dst, size_t dst_samples, double src_rate, double dst_rate)
 Resample audio using linear interpolation.
 
asciichat_error_t audio_parse_batch_header (const void *data, size_t len, audio_batch_info_t *out_batch)
 Parse an audio batch packet header from raw packet data.
 
asciichat_error_t audio_validate_batch_params (const audio_batch_info_t *batch)
 Validate audio batch parameters for sanity.
 
bool audio_is_supported_sample_rate (uint32_t sample_rate)
 Check if a sample rate is a standard/supported rate.
 
void audio_flush_playback_buffers (audio_context_t *ctx)
 Flush all audio buffers to synchronize with seek operations.
 
bool audio_should_enable_microphone (audio_capture_source_t source, bool has_media_audio)
 Determine if microphone should be enabled based on audio source setting and media state.
 

Detailed Description

🔊 Audio Capture and Playback Interface for ascii-chat

Definition in file include/ascii-chat/audio/audio.h.

Macro Definition Documentation

◆ AUDIO_DEVICE_NAME_MAX

#define AUDIO_DEVICE_NAME_MAX   256

Maximum length of audio device name.

Definition at line 390 of file include/ascii-chat/audio/audio.h.

Function Documentation

◆ audio_ring_buffer_discard_pending()

void audio_ring_buffer_discard_pending ( audio_ring_buffer_t *  rb)

Definition at line 1087 of file lib/audio/audio.c.

1087 {
1088 if (rb) {
1089 // Capture the current producer position before the caller writes its new
1090 // samples. The consumer can drop everything through this point while
1091 // preserving samples appended afterward.
1092 unsigned int write_idx = atomic_load_u64(&rb->write_index);
1093 atomic_store_u64(&rb->discard_to_index, write_idx);
1095 }
1096}
void atomic_store_bool(atomic_t *a, bool value)
Atomically store a boolean value.
Definition atomic.c:177
void atomic_store_u64(atomic_t *a, uint64_t value)
Atomically store a uint64_t value.
Definition atomic.c:241
uint64_t atomic_load_u64(atomic_t *a)
Atomically load a uint64_t value.
Definition atomic.c:233
atomic_t discard_pending
Consumer should discard queued samples before its next read.
Definition ringbuffer.h:213
atomic_t discard_to_index
Producer position at which the stale queue ends.
Definition ringbuffer.h:215
atomic_t write_index
Write index (producer position) - LOCK-FREE with atomic operations.
Definition ringbuffer.h:209

References atomic_load_u64(), atomic_store_bool(), atomic_store_u64(), audio_ring_buffer::discard_pending, audio_ring_buffer::discard_to_index, and audio_ring_buffer::write_index.

Referenced by audio_ring_buffer_write().