1#![allow(dead_code)]
2
3use crate::{
4 frame::{Frame, N2},
5 Mixer, Writer,
6};
7use euphony_dsp::sample::Sample;
8
9#[derive(Clone, Copy, Debug, Default)]
10pub struct Config {}
11
12#[derive(Debug)]
13pub struct Stereo<W: Writer> {
14 writer: W,
15 config: Config,
16}
17
18impl<W: Writer> Stereo<W> {
19 #[inline]
20 pub fn new(writer: W) -> Self {
21 Self {
22 writer,
23 config: Default::default(),
24 }
25 }
26
27 #[inline]
28 pub fn with_config(writer: W, config: Config) -> Self {
29 Self { writer, config }
30 }
31
32 #[inline]
33 pub fn finish(self) -> W {
34 self.writer
35 }
36}
37
38impl<W: Writer> Mixer for Stereo<W>
39where
40 W::Frame: Frame<NumChannels = N2>,
41{
42 type Error = W::Error;
43
44 #[inline]
45 fn skip(&mut self, frames: usize) -> Result<(), Self::Error> {
46 self.writer.skip(frames)
47 }
48
49 #[inline]
50 fn mix(&mut self, samples: &[crate::SpatialSample]) -> Result<(), Self::Error> {
51 let mut frame = [0.0f64, 0.0f64];
52 for s in samples.iter() {
53 let x = 0.5;
55 frame[0] += s.value * x;
56 frame[1] += s.value * x;
57 }
58
59 let frame = W::Frame::from_fn(|idx| unsafe { frame.get_unchecked(idx).to_sample() });
60 self.writer.write(frame)?;
61
62 Ok(())
63 }
64}