summaryrefslogtreecommitdiff
path: root/shared-module/struct
diff options
context:
space:
mode:
authorJeff Epler <jepler@gmail.com>2020-01-12 11:02:47 -0600
committerJeff Epler <jepler@gmail.com>2020-01-16 10:48:38 -0600
commit449dbea4567dbc27a01ae695b9cebf776a6927f0 (patch)
tree298f427ca031ce8b945d0ff8f0ca717919ef0b62 /shared-module/struct
parente6869c8983ba732f77076242c86041aa77a047e0 (diff)
Mixer: Rework for performance, particularly of the S16 case
This removes downscaling (halving-add) when multiple voices are being mixed. To avoid clipping, and get similar behavior to before, set the "level" of each voice to (1/voice_count). Slow paths that were applicable to only M0 chips were removed. As a side effect, the internal volume representation is now 0 .. 0x8000 (inclusive), which additionally makes a level of exactly 0.5 representable. Testing performed, on PyGamer: For all 4 data cases, for stereo and mono, for 1 and 2 voices, play pure sign waves represented as RawSamples and view the result on a scope and through headphones. Also, scope the amount of time spent in background tasks. Code size: growth of +272 bytes Performance (time in background task when mixing 2 stereo 16-bit voices): 76us per down from 135us (once per ~2.9ms long term average) (Decrease from 4.7% to 2.4% of all CPU time)
Diffstat (limited to 'shared-module/struct')
0 files changed, 0 insertions, 0 deletions