ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
audio_ring_buffer Struct Reference

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

#include <include/ascii-chat/ringbuffer.h>

Data Fields

unsigned channels
 Frame width, configured before the first read/write.
float data [192000]
 Audio sample data buffer.
atomic_t write_index
 Write index (producer position) - LOCK-FREE with atomic operations.
atomic_t read_index
 Read index (consumer position) - LOCK-FREE with atomic operations.
atomic_t discard_pending
 Consumer should discard queued samples before its next read.
atomic_t discard_to_index
 Producer position at which the stale queue ends.
atomic_t jitter_buffer_filled
 True after initial jitter buffer fill.
atomic_t crossfade_samples_remaining
 Samples remaining in crossfade (0 = no crossfade active).
atomic_t 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_t underrun_count
 Count of underrun events for diagnostics.
bool jitter_buffer_enabled
 Whether jitter buffering is enabled (false for capture, true for playback).
uint32_t jitter_target_samples
uint32_t jitter_initial_samples
uint64_t jitter_stable_samples
double jitter_drift_phase
 Consumer-owned fractional clock correction.
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

◆ channels

unsigned audio_ring_buffer::channels

Frame width, configured before the first read/write.

Definition at line 209 of file ringbuffer.h.

Referenced by audio_ring_buffer_create_format(), audio_ring_buffer_read(), audio_ring_buffer_set_jitter_target(), audio_ring_buffer_write(), and mixer_add_source().

◆ crossfade_fade_in

atomic_t audio_ring_buffer::crossfade_fade_in

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

Definition at line 225 of file ringbuffer.h.

Referenced by audio_ring_buffer_clear(), audio_ring_buffer_read(), audio_ring_buffer_register_atomics(), and audio_ring_buffer_unregister_atomics().

◆ crossfade_samples_remaining

atomic_t audio_ring_buffer::crossfade_samples_remaining

Samples remaining in crossfade (0 = no crossfade active).

Definition at line 223 of file ringbuffer.h.

Referenced by audio_ring_buffer_clear(), audio_ring_buffer_read(), audio_ring_buffer_register_atomics(), and audio_ring_buffer_unregister_atomics().

◆ data

float audio_ring_buffer::data[192000]

◆ discard_pending

atomic_t audio_ring_buffer::discard_pending

Consumer should discard queued samples before its next read.

Definition at line 217 of file ringbuffer.h.

Referenced by audio_ring_buffer_clear(), audio_ring_buffer_discard_pending(), audio_ring_buffer_read(), audio_ring_buffer_register_atomics(), and audio_ring_buffer_unregister_atomics().

◆ discard_to_index

atomic_t audio_ring_buffer::discard_to_index

◆ jitter_buffer_enabled

bool audio_ring_buffer::jitter_buffer_enabled

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

Definition at line 231 of file ringbuffer.h.

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

◆ jitter_buffer_filled

atomic_t audio_ring_buffer::jitter_buffer_filled

True after initial jitter buffer fill.

Definition at line 221 of file ringbuffer.h.

Referenced by audio_ring_buffer_clear(), audio_ring_buffer_read(), audio_ring_buffer_register_atomics(), and audio_ring_buffer_unregister_atomics().

◆ jitter_drift_phase

double audio_ring_buffer::jitter_drift_phase

Consumer-owned fractional clock correction.

Definition at line 236 of file ringbuffer.h.

Referenced by audio_ring_buffer_clear(), audio_ring_buffer_read(), and audio_ring_buffer_set_jitter_target().

◆ jitter_initial_samples

uint32_t audio_ring_buffer::jitter_initial_samples

◆ jitter_stable_samples

uint64_t audio_ring_buffer::jitter_stable_samples

◆ jitter_target_samples

uint32_t audio_ring_buffer::jitter_target_samples

Consumer-owned adaptive target and stable-playback counter (48 kHz samples).

Definition at line 233 of file ringbuffer.h.

Referenced by audio_ring_buffer_clear(), audio_ring_buffer_create_format(), audio_ring_buffer_read(), and audio_ring_buffer_set_jitter_target().

◆ 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 227 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 238 of file ringbuffer.h.

Referenced by audio_ring_buffer_clear(), and audio_ring_buffer_destroy().

◆ read_index

atomic_t audio_ring_buffer::read_index

◆ underrun_count

atomic_t audio_ring_buffer::underrun_count

Count of underrun events for diagnostics.

Definition at line 229 of file ringbuffer.h.

Referenced by audio_ring_buffer_read(), audio_ring_buffer_register_atomics(), and audio_ring_buffer_unregister_atomics().

◆ write_index


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