+fn copy_audio<T:Clone+Copy>(dst: &mut [T], dstride: usize,
+ src: &[T], sstride: usize,
+ len: usize, channels: usize)
+{
+ match (sstride == 1, dstride == 1) {
+ (false, false) => {
+ for (dchan, schan) in dst.chunks_mut(dstride).zip(
+ src.chunks(sstride)).take(channels) {
+ dchan[..len].copy_from_slice(&schan[..len]);
+ }
+ },
+ (false, true) => {
+ for (ch, schan) in src.chunks(sstride).take(channels).enumerate() {
+ for (dchunk, &samp) in dst[ch..].chunks_mut(channels).zip(schan.iter()).take(len / channels) {
+ dchunk[0] = samp;
+ }
+ }
+ },
+ (true, false) => {
+ for (i, frame) in src.chunks_exact(channels).take(len).enumerate() {
+ for (&samp, dchan) in frame.iter().zip(dst[i..].chunks_mut(dstride)) {
+ dchan[0] = samp;
+ }
+ }
+ },
+ (true, true) => {
+ dst[..len].copy_from_slice(&src[..len]);
+ },
+ }
+}
+