refactor(audio,state): remove dead code (TODO-001,002,004)
Remove unused AudioFrame10ms/20ms structs, disable_failed_vad_backend(), and ServerState dead accessors (replace_from_snapshot, channel_count, client_count). Update tests to use .channels().count()/.clients().count().
This commit is contained in:
@@ -210,17 +210,6 @@ impl AudioProcessingConfig {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Demote a failed VAD backend to the WebRTC fallback.
|
||||
///
|
||||
/// Returns `true` when the config changed.
|
||||
pub fn disable_failed_vad_backend(&mut self, failed_backend: VadBackend) -> bool {
|
||||
if self.vad_backend == failed_backend && failed_backend != VadBackend::WebrtcVad {
|
||||
self.vad_backend = VadBackend::WebrtcVad;
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
@@ -251,18 +240,6 @@ mod tests {
|
||||
|
||||
assert!(config.validate_for_ios().is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn disable_failed_vad_backend_demotes_to_webrtc() {
|
||||
let mut config = AudioProcessingConfig {
|
||||
vad_backend: VadBackend::SileroOnnx,
|
||||
..AudioProcessingConfig::default()
|
||||
};
|
||||
|
||||
assert!(config.disable_failed_vad_backend(VadBackend::SileroOnnx));
|
||||
assert_eq!(config.vad_backend, VadBackend::WebrtcVad);
|
||||
assert!(!config.disable_failed_vad_backend(VadBackend::SileroOnnx));
|
||||
}
|
||||
}
|
||||
|
||||
/// Runtime audio processing stats exposed to bridge/UI diagnostics.
|
||||
|
||||
@@ -16,50 +16,6 @@ pub const FRAME_10MS_SAMPLES: usize = 480;
|
||||
/// Samples in one 20 ms mono frame at 48 kHz.
|
||||
pub const FRAME_20MS_SAMPLES: usize = 960;
|
||||
|
||||
/// 10 ms, 48 kHz, mono f32 processing frame.
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub struct AudioFrame10ms {
|
||||
/// Samples normalized to `[-1.0, 1.0]`.
|
||||
pub samples: [f32; FRAME_10MS_SAMPLES],
|
||||
}
|
||||
|
||||
/// 20 ms, 48 kHz, mono f32 network-frame-sized buffer.
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub struct AudioFrame20ms {
|
||||
/// Samples normalized to `[-1.0, 1.0]`.
|
||||
pub samples: [f32; FRAME_20MS_SAMPLES],
|
||||
}
|
||||
|
||||
impl AudioFrame20ms {
|
||||
/// Convert one 20 ms frame into two 10 ms processing frames.
|
||||
pub fn split(&self) -> (AudioFrame10ms, AudioFrame10ms) {
|
||||
let mut first = [0.0; FRAME_10MS_SAMPLES];
|
||||
let mut second = [0.0; FRAME_10MS_SAMPLES];
|
||||
first.copy_from_slice(&self.samples[..FRAME_10MS_SAMPLES]);
|
||||
second.copy_from_slice(&self.samples[FRAME_10MS_SAMPLES..]);
|
||||
(
|
||||
AudioFrame10ms { samples: first },
|
||||
AudioFrame10ms { samples: second },
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
impl AudioFrame10ms {
|
||||
/// Merge two 10 ms processing frames back into the 20 ms network
|
||||
/// cadence used by the existing Opus path.
|
||||
pub fn merge(first: &Self, second: &Self) -> AudioFrame20ms {
|
||||
let mut samples = [0.0; FRAME_20MS_SAMPLES];
|
||||
samples[..FRAME_10MS_SAMPLES].copy_from_slice(&first.samples);
|
||||
samples[FRAME_10MS_SAMPLES..].copy_from_slice(&second.samples);
|
||||
AudioFrame20ms { samples }
|
||||
}
|
||||
|
||||
/// Compute RMS dBFS for diagnostics and fallback VAD.
|
||||
pub fn dbfs(&self) -> f32 {
|
||||
dbfs(&self.samples)
|
||||
}
|
||||
}
|
||||
|
||||
/// Convert i16 PCM to normalized f32 PCM.
|
||||
pub fn i16_to_f32(sample: i16) -> f32 {
|
||||
sample as f32 / i16::MAX as f32
|
||||
@@ -84,18 +40,4 @@ pub fn dbfs(samples: &[f32]) -> f32 {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn split_merge_preserves_samples() {
|
||||
let mut samples = [0.0; FRAME_20MS_SAMPLES];
|
||||
for (i, s) in samples.iter_mut().enumerate() {
|
||||
*s = i as f32 / FRAME_20MS_SAMPLES as f32;
|
||||
}
|
||||
let original = AudioFrame20ms { samples };
|
||||
let (a, b) = original.split();
|
||||
assert_eq!(AudioFrame10ms::merge(&a, &b), original);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user