ascii-chat 0.6.0
Real-time terminal-based video chat with ASCII art conversion
Loading...
Searching...
No Matches
audio_ring_buffer Struct Reference

Audio ring buffer for real-time audio streaming. More...

#include <lib/ringbuffer.h>

Data Fields

float data [192000]
 Audio sample data buffer.
 
atomic_uint write_index
 Write index (producer position) - LOCK-FREE with atomic operations.
 
atomic_uint read_index
 Read index (consumer position) - LOCK-FREE with atomic operations.
 
atomic_bool jitter_buffer_filled
 True after initial jitter buffer fill.
 
atomic_int crossfade_samples_remaining
 Samples remaining in crossfade (0 = no crossfade active)
 
atomic_bool crossfade_fade_in
 True if we're fading in (recovering from underrun)
 
float last_sample
 Last sample value for smooth fade-out during underrun - NOT atomic (only written by reader)
 
atomic_uint underrun_count
 Count of underrun events for diagnostics.
 
bool jitter_buffer_enabled
 Whether jitter buffering is enabled (false for capture, true for playback)
 
mutex_t mutex
 Mutex for SLOW PATH only (clear/destroy operations, not regular read/write)
 

Detailed Description

Audio ring buffer for real-time audio streaming.

Specialized ring buffer for audio samples with jitter buffering to compensate for network latency and packet timing variations. Uses mutex-protected operations for thread-safe audio access.

Features:

  • Jitter buffering: waits for threshold fill before starting playback
  • Low water mark: resets jitter state when buffer runs low
  • Crossfade: smoothly fades audio in/out during underrun recovery
  • Underrun tracking: counts underruns for diagnostics

Definition at line 208 of file ringbuffer.h.

Field Documentation

◆ crossfade_fade_in

atomic_bool audio_ring_buffer::crossfade_fade_in

True if we're fading in (recovering from underrun)

Definition at line 220 of file ringbuffer.h.

Referenced by audio_ring_buffer_read().

◆ crossfade_samples_remaining

atomic_int audio_ring_buffer::crossfade_samples_remaining

Samples remaining in crossfade (0 = no crossfade active)

Definition at line 218 of file ringbuffer.h.

Referenced by audio_ring_buffer_read().

◆ data

float audio_ring_buffer::data[192000]

Audio sample data buffer.

Definition at line 210 of file ringbuffer.h.

Referenced by audio_ring_buffer_clear(), audio_ring_buffer_peek(), audio_ring_buffer_read(), and audio_ring_buffer_write().

◆ jitter_buffer_enabled

bool audio_ring_buffer::jitter_buffer_enabled

Whether jitter buffering is enabled (false for capture, true for playback)

Definition at line 226 of file ringbuffer.h.

Referenced by audio_ring_buffer_read().

◆ jitter_buffer_filled

atomic_bool audio_ring_buffer::jitter_buffer_filled

True after initial jitter buffer fill.

Definition at line 216 of file ringbuffer.h.

Referenced by audio_ring_buffer_read().

◆ last_sample

float audio_ring_buffer::last_sample

Last sample value for smooth fade-out during underrun - NOT atomic (only written by reader)

Definition at line 222 of file ringbuffer.h.

Referenced by audio_ring_buffer_clear(), and audio_ring_buffer_read().

◆ mutex

mutex_t audio_ring_buffer::mutex

Mutex for SLOW PATH only (clear/destroy operations, not regular read/write)

Definition at line 228 of file ringbuffer.h.

Referenced by audio_ring_buffer_clear(), and audio_ring_buffer_destroy().

◆ read_index

atomic_uint audio_ring_buffer::read_index

Read index (consumer position) - LOCK-FREE with atomic operations.

Definition at line 214 of file ringbuffer.h.

Referenced by audio_ring_buffer_available_read(), audio_ring_buffer_clear(), audio_ring_buffer_peek(), audio_ring_buffer_read(), audio_ring_buffer_write(), and mixer_process_excluding_source().

◆ underrun_count

atomic_uint audio_ring_buffer::underrun_count

Count of underrun events for diagnostics.

Definition at line 224 of file ringbuffer.h.

Referenced by audio_ring_buffer_read().

◆ write_index

atomic_uint audio_ring_buffer::write_index

Write index (producer position) - LOCK-FREE with atomic operations.

Definition at line 212 of file ringbuffer.h.

Referenced by audio_ring_buffer_available_read(), audio_ring_buffer_clear(), audio_ring_buffer_peek(), audio_ring_buffer_read(), and audio_ring_buffer_write().


The documentation for this struct was generated from the following file: