| | |
| | | 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>() |
| | | ); |
| | | } |
| | | } |