Ariver
2026-07-12 b0a4e2ea93fafc4d65d474f3ada616a0ad5e19d5
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>()
        );
    }
}