You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When 2 or more inputs sum to values outside the ±1.0 (±32767) range, the mixer output can be erroneous at some (but not all) points in the waveform.
Steps To Reproduce Problem
Consider using just two inputs, with maximum-amplitude square waves of differing frequency applied to them. Input 0 has a gain of 2.0, input 1 a gain of 0.5. The only output values possible from such a system are 2.5, 1.5, -1.5 and -2.5; these should be output, therefore, as either 1.0 or -1.0, depending only on the state of input 0.
Because AudioMixer4 saturates on the fly, though, we can see an effect whereby input 0 is saturated to ±1.0; at a point where the existing value is +1.0, when input 1 is mixed in, if its value is +0.5 then the output remains saturated at +1.0, but if it's at -0.5 then the output becomes an erroneous +0.5. We therefore end up with an incorrect waveform containing values of +1.0, +0.5, -0.5 and -1.0.
Hardware & Software
Any
Arduino Sketch
Shouldn't be necessary, but I could do one if you really want it.
Errors or Incorrect Output
As noted in "steps to reproduce", above
Proposed solution
Mix into an intermediate 32-bit buffer, and only saturate once mixing is complete. This should suffice for inputs with the gains set to any value up to 8192.0, which is a reasonably unlikely value.
Or possibly don't solve it - this may be what would happen with an analogue mixer...
The text was updated successfully, but these errors were encountered:
Description
When 2 or more inputs sum to values outside the ±1.0 (±32767) range, the mixer output can be erroneous at some (but not all) points in the waveform.
Steps To Reproduce Problem
Consider using just two inputs, with maximum-amplitude square waves of differing frequency applied to them. Input 0 has a gain of 2.0, input 1 a gain of 0.5. The only output values possible from such a system are 2.5, 1.5, -1.5 and -2.5; these should be output, therefore, as either 1.0 or -1.0, depending only on the state of input 0.
Because AudioMixer4 saturates on the fly, though, we can see an effect whereby input 0 is saturated to ±1.0; at a point where the existing value is +1.0, when input 1 is mixed in, if its value is +0.5 then the output remains saturated at +1.0, but if it's at -0.5 then the output becomes an erroneous +0.5. We therefore end up with an incorrect waveform containing values of +1.0, +0.5, -0.5 and -1.0.
Hardware & Software
Any
Arduino Sketch
Shouldn't be necessary, but I could do one if you really want it.
Errors or Incorrect Output
As noted in "steps to reproduce", above
Proposed solution
Mix into an intermediate 32-bit buffer, and only saturate once mixing is complete. This should suffice for inputs with the gains set to any value up to 8192.0, which is a reasonably unlikely value.
Or possibly don't solve it - this may be what would happen with an analogue mixer...
The text was updated successfully, but these errors were encountered: