|
ascii-chat 0.8.38
Real-time terminal-based video chat with ASCII art conversion
|
Unified client-side audio processing pipeline with WebRTC AEC3. More...
Go to the source code of this file.
Data Structures | |
| struct | WebRTCAec3Wrapper |
| C++ wrapper for WebRTC AEC3 (opaque to C code) More... | |
Macros | |
| #define | WEBRTC_APM_DEBUG_DUMP 0 |
| #define | WEBRTC_MODULE_AUDIO_PROCESSING 1 |
| #define | __STDC_NO_ATOMICS__ 1 |
Functions | |
| client_audio_pipeline_config_t | client_audio_pipeline_default_config (void) |
| client_audio_pipeline_t * | client_audio_pipeline_create (const client_audio_pipeline_config_t *config) |
| Create and initialize a client audio pipeline. | |
| void | client_audio_pipeline_destroy (client_audio_pipeline_t *pipeline) |
| void | client_audio_pipeline_set_flags (client_audio_pipeline_t *pipeline, client_audio_pipeline_flags_t flags) |
| client_audio_pipeline_flags_t | client_audio_pipeline_get_flags (client_audio_pipeline_t *pipeline) |
| int | client_audio_pipeline_capture (client_audio_pipeline_t *pipeline, const float *input, int num_samples, uint8_t *opus_out, int max_opus_len) |
| int | client_audio_pipeline_playback (client_audio_pipeline_t *pipeline, const uint8_t *opus_in, int opus_len, float *output, int num_samples) |
| int | client_audio_pipeline_get_playback_frame (client_audio_pipeline_t *pipeline, float *output, int num_samples) |
| void | client_audio_pipeline_process_duplex (client_audio_pipeline_t *pipeline, const float *render_samples, int render_count, const float *capture_samples, int capture_count, float *processed_output) |
| int | client_audio_pipeline_jitter_margin (client_audio_pipeline_t *pipeline) |
| void | client_audio_pipeline_reset (client_audio_pipeline_t *pipeline) |
Unified client-side audio processing pipeline with WebRTC AEC3.
Implements production-grade echo cancellation using WebRTC AEC3 (Acoustic Echo Cancellation v3) with automatic network delay estimation, adaptive filtering, and residual echo suppression.
Uses WebRTC directly via C++ API - no wrapper layer.
Definition in file client_audio_pipeline.cpp.
| #define __STDC_NO_ATOMICS__ 1 |
Definition at line 67 of file client_audio_pipeline.cpp.
| #define WEBRTC_APM_DEBUG_DUMP 0 |
Definition at line 20 of file client_audio_pipeline.cpp.
| #define WEBRTC_MODULE_AUDIO_PROCESSING 1 |
Definition at line 21 of file client_audio_pipeline.cpp.
| int client_audio_pipeline_capture | ( | client_audio_pipeline_t * | pipeline, |
| const float * | input, | ||
| int | num_samples, | ||
| uint8_t * | opus_out, | ||
| int | max_opus_len | ||
| ) |
Encode already-processed audio to Opus.
In full-duplex mode, AEC3 and DSP processing are done in process_duplex(). This function just does Opus encoding.
Definition at line 432 of file client_audio_pipeline.cpp.
| client_audio_pipeline_t * client_audio_pipeline_create | ( | const client_audio_pipeline_config_t * | config | ) |
Create and initialize a client audio pipeline.
This function:
Definition at line 154 of file client_audio_pipeline.cpp.
References client_audio_pipeline_default_config(), compressor_init(), compressor_set_params(), highpass_filter_init(), lowpass_filter_init(), noise_gate_init(), noise_gate_set_params(), and wav_writer_open().
Referenced by audio_client_init().
| client_audio_pipeline_config_t client_audio_pipeline_default_config | ( | void | ) |
Definition at line 101 of file client_audio_pipeline.cpp.
Referenced by audio_client_init(), and client_audio_pipeline_create().
| void client_audio_pipeline_destroy | ( | client_audio_pipeline_t * | pipeline | ) |
Definition at line 361 of file client_audio_pipeline.cpp.
References wav_writer_close().
Referenced by audio_cleanup(), and audio_client_init().
| client_audio_pipeline_flags_t client_audio_pipeline_get_flags | ( | client_audio_pipeline_t * | pipeline | ) |
Definition at line 415 of file client_audio_pipeline.cpp.
| int client_audio_pipeline_get_playback_frame | ( | client_audio_pipeline_t * | pipeline, |
| float * | output, | ||
| int | num_samples | ||
| ) |
Get a processed playback frame (currently just returns decoded frame)
Definition at line 483 of file client_audio_pipeline.cpp.
| int client_audio_pipeline_jitter_margin | ( | client_audio_pipeline_t * | pipeline | ) |
Get jitter buffer margin
Definition at line 685 of file client_audio_pipeline.cpp.
| int client_audio_pipeline_playback | ( | client_audio_pipeline_t * | pipeline, |
| const uint8_t * | opus_in, | ||
| int | opus_len, | ||
| float * | output, | ||
| int | num_samples | ||
| ) |
Process network playback (decode and register with echo canceller as reference)
Definition at line 453 of file client_audio_pipeline.cpp.
References noise_gate_process_buffer().
Referenced by audio_decode_opus().
| void client_audio_pipeline_process_duplex | ( | client_audio_pipeline_t * | pipeline, |
| const float * | render_samples, | ||
| int | render_count, | ||
| const float * | capture_samples, | ||
| int | capture_count, | ||
| float * | processed_output | ||
| ) |
Process AEC3 inline in full-duplex callback (REAL-TIME SAFE).
This is the PROFESSIONAL approach to AEC3 timing:
This function does ALL AEC3 processing inline:
Returns processed capture samples in processed_output. Opus encoding is done separately by the encoding thread.
Definition at line 510 of file client_audio_pipeline.cpp.
References audio_analysis_set_aec3_metrics(), compressor_process_sample(), copy_buffer_with_gain(), highpass_filter_process_buffer(), lowpass_filter_process_buffer(), noise_gate_process_buffer(), platform_getenv(), smoothstep(), soft_clip(), soft_clip_buffer(), and wav_writer_write().
| void client_audio_pipeline_reset | ( | client_audio_pipeline_t * | pipeline | ) |
Reset pipeline state
Definition at line 694 of file client_audio_pipeline.cpp.
| void client_audio_pipeline_set_flags | ( | client_audio_pipeline_t * | pipeline, |
| client_audio_pipeline_flags_t | flags | ||
| ) |
Definition at line 408 of file client_audio_pipeline.cpp.