|
ascii-chat 0.6.0
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) |
| Get default configuration. | |
| 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) |
| Destroy a client audio pipeline. | |
| void | client_audio_pipeline_set_flags (client_audio_pipeline_t *pipeline, client_audio_pipeline_flags_t flags) |
| Set component enable flags. | |
| client_audio_pipeline_flags_t | client_audio_pipeline_get_flags (client_audio_pipeline_t *pipeline) |
| Get current component enable flags. | |
| int | client_audio_pipeline_capture (client_audio_pipeline_t *pipeline, const float *input, int num_samples, uint8_t *opus_out, int max_opus_len) |
| Process captured audio and encode to Opus. | |
| int | client_audio_pipeline_playback (client_audio_pipeline_t *pipeline, const uint8_t *opus_in, int opus_len, float *output, int num_samples) |
| Decode Opus packet and process for playback. | |
| int | client_audio_pipeline_get_playback_frame (client_audio_pipeline_t *pipeline, float *output, int num_samples) |
| Get audio frame from jitter buffer for playback callback. | |
| 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. | |
| int | client_audio_pipeline_jitter_margin (client_audio_pipeline_t *pipeline) |
| Get jitter buffer margin (buffered time in ms) | |
| void | client_audio_pipeline_reset (client_audio_pipeline_t *pipeline) |
| Reset pipeline state. | |
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 66 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 | ||
| ) |
Process captured audio and encode to Opus.
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 431 of file client_audio_pipeline.cpp.
References client_audio_pipeline_t::encoder, client_audio_pipeline_t::frame_size, and log_error.
| client_audio_pipeline_t * client_audio_pipeline_create | ( | const client_audio_pipeline_config_t * | config | ) |
Create and initialize a client audio pipeline.
Create a new client audio pipeline.
This function:
Definition at line 153 of file client_audio_pipeline.cpp.
References client_audio_pipeline_t::aec3_capture_buffer, client_audio_pipeline_t::aec3_render_buffer, client_audio_pipeline_t::capture_fadein_remaining, client_audio_pipeline_default_config(), client_audio_pipeline_config_t::comp_attack_ms, client_audio_pipeline_config_t::comp_makeup_db, client_audio_pipeline_config_t::comp_ratio, client_audio_pipeline_config_t::comp_release_ms, client_audio_pipeline_config_t::comp_threshold_db, client_audio_pipeline_t::compressor, compressor_init(), compressor_set_params(), client_audio_pipeline_t::config, client_audio_pipeline_t::debug_wav_aec3_in, client_audio_pipeline_t::debug_wav_aec3_out, client_audio_pipeline_t::decoder, client_audio_pipeline_flags_t::echo_cancel, client_audio_pipeline_t::echo_canceller, client_audio_pipeline_t::encoder, client_audio_pipeline_config_t::flags, client_audio_pipeline_t::flags, client_audio_pipeline_t::frame_size, client_audio_pipeline_config_t::frame_size_ms, client_audio_pipeline_config_t::gate_attack_ms, client_audio_pipeline_config_t::gate_hysteresis, client_audio_pipeline_config_t::gate_release_ms, client_audio_pipeline_config_t::gate_threshold, client_audio_pipeline_t::highpass, highpass_filter_init(), client_audio_pipeline_config_t::highpass_hz, client_audio_pipeline_t::initialized, log_error, log_info, log_warn, client_audio_pipeline_t::lowpass, lowpass_filter_init(), client_audio_pipeline_config_t::lowpass_hz, client_audio_pipeline_t::noise_gate, noise_gate_init(), noise_gate_set_params(), OPUS_APPLICATION_VOIP, client_audio_pipeline_config_t::opus_bitrate, client_audio_pipeline_t::playback_noise_gate, SAFE_CALLOC, SAFE_FREE, client_audio_pipeline_config_t::sample_rate, and wav_writer_open().
Referenced by audio_client_init().
| client_audio_pipeline_config_t client_audio_pipeline_default_config | ( | void | ) |
Get default configuration.
Definition at line 100 of file client_audio_pipeline.cpp.
References CLIENT_AUDIO_PIPELINE_FLAGS_ALL, CLIENT_AUDIO_PIPELINE_FRAME_MS, CLIENT_AUDIO_PIPELINE_SAMPLE_RATE, and client_audio_pipeline_config_t::sample_rate.
Referenced by audio_client_init(), and client_audio_pipeline_create().
| void client_audio_pipeline_destroy | ( | client_audio_pipeline_t * | pipeline | ) |
Destroy a client audio pipeline.
| pipeline | Pipeline to destroy (can be NULL) |
Frees all resources including SpeexDSP states, Opus codec, and all work buffers.
Definition at line 360 of file client_audio_pipeline.cpp.
References client_audio_pipeline_t::aec3_capture_buffer, client_audio_pipeline_t::aec3_render_buffer, client_audio_pipeline_t::debug_wav_aec3_in, client_audio_pipeline_t::debug_wav_aec3_out, client_audio_pipeline_t::decoder, client_audio_pipeline_t::echo_canceller, client_audio_pipeline_t::encoder, SAFE_FREE, and 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 | ) |
Get current component enable flags.
| pipeline | Pipeline instance |
Definition at line 414 of file client_audio_pipeline.cpp.
References CLIENT_AUDIO_PIPELINE_FLAGS_MINIMAL, and client_audio_pipeline_t::flags.
| int client_audio_pipeline_get_playback_frame | ( | client_audio_pipeline_t * | pipeline, |
| float * | output, | ||
| int | num_samples | ||
| ) |
Get audio frame from jitter buffer for playback callback.
Get a processed playback frame (currently just returns decoded frame)
Definition at line 482 of file client_audio_pipeline.cpp.
| int client_audio_pipeline_jitter_margin | ( | client_audio_pipeline_t * | pipeline | ) |
Get jitter buffer margin (buffered time in ms)
Get jitter buffer margin
Definition at line 664 of file client_audio_pipeline.cpp.
References client_audio_pipeline_t::config, and client_audio_pipeline_config_t::jitter_margin_ms.
| int client_audio_pipeline_playback | ( | client_audio_pipeline_t * | pipeline, |
| const uint8_t * | opus_in, | ||
| int | opus_len, | ||
| float * | output, | ||
| int | num_samples | ||
| ) |
Decode Opus packet and process for playback.
Process network playback (decode and register with echo canceller as reference)
Definition at line 452 of file client_audio_pipeline.cpp.
References client_audio_pipeline_t::decoder, log_error, noise_gate_process_buffer(), and client_audio_pipeline_t::playback_noise_gate.
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.
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 509 of file client_audio_pipeline.cpp.
References client_audio_pipeline_t::aec3_capture_buffer, client_audio_pipeline_t::aec3_render_buffer, audio_analysis_set_aec3_metrics(), client_audio_pipeline_t::capture_fadein_remaining, client_audio_pipeline_flags_t::compressor, client_audio_pipeline_t::compressor, compressor_process_sample(), client_audio_pipeline_t::config, copy_buffer_with_gain(), client_audio_pipeline_t::debug_wav_aec3_in, client_audio_pipeline_t::debug_wav_aec3_out, client_audio_pipeline_flags_t::echo_cancel, client_audio_pipeline_t::echo_canceller, client_audio_pipeline_t::flags, client_audio_pipeline_flags_t::highpass, client_audio_pipeline_t::highpass, highpass_filter_process_buffer(), log_info, log_warn, log_warn_every, client_audio_pipeline_flags_t::lowpass, client_audio_pipeline_t::lowpass, lowpass_filter_process_buffer(), client_audio_pipeline_flags_t::noise_gate, client_audio_pipeline_t::noise_gate, noise_gate_process_buffer(), platform_getenv(), client_audio_pipeline_config_t::sample_rate, smoothstep(), soft_clip(), soft_clip_buffer(), and wav_writer_write().
| void client_audio_pipeline_reset | ( | client_audio_pipeline_t * | pipeline | ) |
Reset pipeline state.
Reset pipeline state
Definition at line 673 of file client_audio_pipeline.cpp.
References log_info.
| void client_audio_pipeline_set_flags | ( | client_audio_pipeline_t * | pipeline, |
| client_audio_pipeline_flags_t | flags | ||
| ) |
Set component enable flags.
| pipeline | Pipeline instance |
| flags | New flags to set |
Thread-safe. Changes take effect on next capture/playback call.
Definition at line 407 of file client_audio_pipeline.cpp.
References client_audio_pipeline_t::flags.