From e1612a0151ef28c4e02c0f1843dd725a92d4c268 Mon Sep 17 00:00:00 2001
From: cai <cai@nbcai.cc>
Date: Wed, 08 Jul 2026 12:35:21 +0800
Subject: [PATCH] feat: default combrabo voice bot audio to 16k

---
 src/audio.rs |   32 ++++++++++++++++++++++++++++++++
 1 files changed, 32 insertions(+), 0 deletions(-)

diff --git a/src/audio.rs b/src/audio.rs
index 34415a7..46613eb 100644
--- a/src/audio.rs
+++ b/src/audio.rs
@@ -1040,4 +1040,36 @@
         assert_eq!(960, second.frames[0].samples_per_channel);
         assert_eq!(0, second.buffered_source_samples);
     }
+
+    #[test]
+    fn pcm_s16le_stream_decoder_can_keep_16k_native_audio_profile() {
+        let mut decoder = PcmS16leStreamDecoder::new(16_000, 1, 16_000, 1).expect("stream decoder");
+        let mut pcm = Vec::new();
+        for index in 0..1_600 {
+            let sample = if index % 2 == 0 { 768_i16 } else { -768_i16 };
+            pcm.extend_from_slice(&sample.to_le_bytes());
+        }
+
+        let mut frames = Vec::new();
+        let chunk_size = 250 * 2;
+        for (index, chunk) in pcm.chunks(chunk_size).enumerate() {
+            let last = (index + 1) * chunk_size >= pcm.len();
+            let result = decoder
+                .push_bytes(chunk, 16_000, 1, last)
+                .expect("push pcm chunk");
+            frames.extend(result.frames);
+        }
+
+        assert_eq!(5, frames.len());
+        assert!(frames.iter().all(|frame| frame.sample_rate == 16_000));
+        assert!(frames.iter().all(|frame| frame.num_channels == 1));
+        assert!(frames.iter().all(|frame| frame.samples_per_channel == 320));
+        assert_eq!(
+            1_600,
+            frames
+                .iter()
+                .map(|frame| frame.samples.len())
+                .sum::<usize>()
+        );
+    }
 }

--
Gitblit v1.9.3