diff --git a/audio/compositors.go b/audio/compositors.go index 5fe7c36..d965f0b 100644 --- a/audio/compositors.go +++ b/audio/compositors.go @@ -42,17 +42,17 @@ func Seq(s ...Streamer) Streamer { // Mix takes zero or more Streamers and returns a Streamer which streames them mixed together. func Mix(s ...Streamer) Streamer { return StreamerFunc(func(samples [][2]float64) (n int, ok bool) { - var tmp, mix [512][2]float64 + var tmp [512][2]float64 for len(samples) > 0 { - toStream := len(mix) + toStream := len(tmp) if toStream > len(samples) { toStream = len(samples) } - // clear the mix buffer - for i := range mix[:toStream] { - mix[i] = [2]float64{} + // clear the samples + for i := range samples[:toStream] { + samples[i] = [2]float64{} } snMax := 0 // max number of streamed samples in this iteration @@ -65,18 +65,13 @@ func Mix(s ...Streamer) Streamer { ok = ok || sok for i := range tmp[:sn] { - mix[i][0] += tmp[i][0] - mix[i][1] += tmp[i][1] + samples[i][0] += tmp[i][0] + samples[i][1] += tmp[i][1] } } - // copy mix buffer into samples - for i := range mix[:snMax] { - samples[i] = mix[i] - } - n += snMax - if snMax < len(mix) { + if snMax < len(tmp) { break } samples = samples[snMax:] diff --git a/audio/mixer.go b/audio/mixer.go index 6445654..607b6a9 100644 --- a/audio/mixer.go +++ b/audio/mixer.go @@ -13,25 +13,25 @@ func (m *Mixer) Play(s ...Streamer) { } func (m *Mixer) Stream(samples [][2]float64) (n int, ok bool) { - var tmp, mix [512][2]float64 + var tmp [512][2]float64 for len(samples) > 0 { - toStream := len(mix) + toStream := len(tmp) if toStream > len(samples) { toStream = len(samples) } - // clear the mix buffer - for i := range mix[:toStream] { - mix[i] = [2]float64{} + // clear the samples + for i := range samples[:toStream] { + samples[i] = [2]float64{} } for si := 0; si < len(m.streamers); si++ { // mix the stream sn, sok := m.streamers[si].Stream(tmp[:toStream]) for i := range tmp[:sn] { - mix[i][0] += tmp[i][0] - mix[i][1] += tmp[i][1] + samples[i][0] += tmp[i][0] + samples[i][1] += tmp[i][1] } if !sok { // remove drained streamer @@ -42,11 +42,6 @@ func (m *Mixer) Stream(samples [][2]float64) (n int, ok bool) { } } - // copy mix buffer into samples - for i := range mix[:toStream] { - samples[i] = mix[i] - } - samples = samples[toStream:] n += toStream }