From b0a4e2ea93fafc4d65d474f3ada616a0ad5e19d5 Mon Sep 17 00:00:00 2001
From: Ariver <ar@Arm1.local>
Date: Sun, 12 Jul 2026 11:39:35 +0800
Subject: [PATCH] feat: bind helper stream timing markers
---
src/audio.rs | 34 ++++++++++++++++++++++++++++++----
1 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/src/audio.rs b/src/audio.rs
index 34415a7..cec22f0 100644
--- a/src/audio.rs
+++ b/src/audio.rs
@@ -1012,10 +1012,7 @@
assert_eq!(5, frames.len());
assert_eq!(
4_800,
- frames
- .iter()
- .map(|frame| frame.samples.len())
- .sum::<usize>()
+ frames.iter().map(|frame| frame.data.len()).sum::<usize>()
);
assert!(frames.iter().all(|frame| frame.sample_rate == 48_000));
assert!(frames.iter().all(|frame| frame.num_channels == 1));
@@ -1040,4 +1037,33 @@
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.data.len()).sum::<usize>()
+ );
+ }
}
--
Gitblit v1.9.3