<feed xmlns='http://www.w3.org/2005/Atom'>
<title>suspect-devices/circuitpython/shared-module/audiomixer, branch 6.1.x</title>
<subtitle>CircuitPython - a Python implementation for teaching coding with microcontrollers</subtitle>
<id>https://git.suspectdevices.com/suspect-devices/circuitpython/atom?h=6.1.x</id>
<link rel='self' href='https://git.suspectdevices.com/suspect-devices/circuitpython/atom?h=6.1.x'/>
<link rel='alternate' type='text/html' href='https://git.suspectdevices.com/suspect-devices/circuitpython/'/>
<updated>2020-06-02T00:14:38+00:00</updated>
<entry>
<title>audiomixer: Fix garbled playback when voice 0 is stopped, audio pops</title>
<updated>2020-06-02T00:14:38+00:00</updated>
<author>
<name>Jeff Epler</name>
<email>jepler@gmail.com</email>
</author>
<published>2020-06-02T00:10:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.suspectdevices.com/suspect-devices/circuitpython/commit/?id=0722dafc2464b414e680fab700f3f84cd54879df'/>
<id>urn:sha1:0722dafc2464b414e680fab700f3f84cd54879df</id>
<content type='text'>
There were two main problems
 - word_buffer was being filled as though with unsigned samples,
   but during mixing all samples are kept in signed mode
 - If the first buffer was stopped, the voices_active flag got set
   anyway, even though the output buffer wasn't initialized yet,
   so the samples were mixed with indeterminate data

We also cover the case where no buffer was playing, and ensure
the output buffer is filled.

This now works much better.  Tested on neotrellis m4 playing back
4 mp3 streams at a time in signed-16, 22050Hz
</content>
</entry>
<entry>
<title>Mixer: rename function based on review comment</title>
<updated>2020-01-20T20:08:56+00:00</updated>
<author>
<name>Jeff Epler</name>
<email>jepler@gmail.com</email>
</author>
<published>2020-01-20T20:06:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.suspectdevices.com/suspect-devices/circuitpython/commit/?id=b4ddee2bb6ae40a73efe15e30de8d33ab9ce8011'/>
<id>urn:sha1:b4ddee2bb6ae40a73efe15e30de8d33ab9ce8011</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Mixer: use MP_LIKELY macro instead of locally brewed one</title>
<updated>2020-01-20T20:08:32+00:00</updated>
<author>
<name>Jeff Epler</name>
<email>jepler@gmail.com</email>
</author>
<published>2020-01-20T20:08:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.suspectdevices.com/suspect-devices/circuitpython/commit/?id=982c63a71712fc9092b35fca3ef34e4b404c03cb'/>
<id>urn:sha1:982c63a71712fc9092b35fca3ef34e4b404c03cb</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Mixer: Rework for performance, particularly of the S16 case</title>
<updated>2020-01-16T16:48:38+00:00</updated>
<author>
<name>Jeff Epler</name>
<email>jepler@gmail.com</email>
</author>
<published>2020-01-12T17:02:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.suspectdevices.com/suspect-devices/circuitpython/commit/?id=449dbea4567dbc27a01ae695b9cebf776a6927f0'/>
<id>urn:sha1:449dbea4567dbc27a01ae695b9cebf776a6927f0</id>
<content type='text'>
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)
</content>
</entry>
<entry>
<title>mixer: factor out mix_one_voice</title>
<updated>2020-01-16T16:31:26+00:00</updated>
<author>
<name>Jeff Epler</name>
<email>jepler@gmail.com</email>
</author>
<published>2020-01-12T16:12:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.suspectdevices.com/suspect-devices/circuitpython/commit/?id=e6869c8983ba732f77076242c86041aa77a047e0'/>
<id>urn:sha1:e6869c8983ba732f77076242c86041aa77a047e0</id>
<content type='text'>
</content>
</entry>
<entry>
<title>audiosample: convert to use a protocol</title>
<updated>2019-12-04T15:31:52+00:00</updated>
<author>
<name>Jeff Epler</name>
<email>jepler@gmail.com</email>
</author>
<published>2019-12-04T15:31:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.suspectdevices.com/suspect-devices/circuitpython/commit/?id=feb8eb935bd69ce855533bf9a4316e3025602c1a'/>
<id>urn:sha1:feb8eb935bd69ce855533bf9a4316e3025602c1a</id>
<content type='text'>
This eases addition of new sample sources, since the manual virtual
function dispatch functions are just calls via a protocol
</content>
</entry>
<entry>
<title>audiomixer: Supply constants in a way "-Og" optimization expects</title>
<updated>2019-09-09T02:18:15+00:00</updated>
<author>
<name>jepler</name>
<email>jepler@gmail.com</email>
</author>
<published>2019-09-09T02:17:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.suspectdevices.com/suspect-devices/circuitpython/commit/?id=8768896d6b0ddb35568ad996781a33fd3a0df94f'/>
<id>urn:sha1:8768896d6b0ddb35568ad996781a33fd3a0df94f</id>
<content type='text'>
These arguments are constrained to be compile-time constants, a fact
that gcc complains about under "-Og" optimization, but not in normal
builds.  Declare them as enumerated types
</content>
</entry>
<entry>
<title>remove leftover debug print</title>
<updated>2019-09-04T03:25:27+00:00</updated>
<author>
<name>sommersoft</name>
<email>sommersoft@gmail.com</email>
</author>
<published>2019-09-04T03:25:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.suspectdevices.com/suspect-devices/circuitpython/commit/?id=edfcee29ff88faa35a75a979cb74ad64553289a6'/>
<id>urn:sha1:edfcee29ff88faa35a75a979cb74ad64553289a6</id>
<content type='text'>
</content>
</entry>
<entry>
<title>use more accurate ARMv7 prepocessor flags; TODOs for asm instructions</title>
<updated>2019-09-01T22:36:29+00:00</updated>
<author>
<name>sommersoft</name>
<email>sommersoft@gmail.com</email>
</author>
<published>2019-09-01T22:36:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.suspectdevices.com/suspect-devices/circuitpython/commit/?id=362c1664ae5979f288e8cb12d528f8cd44100410'/>
<id>urn:sha1:362c1664ae5979f288e8cb12d528f8cd44100410</id>
<content type='text'>
</content>
</entry>
<entry>
<title>include CMSIS instrinsic addition functions for M4; cleanup C math funcs</title>
<updated>2019-08-31T22:36:54+00:00</updated>
<author>
<name>sommersoft</name>
<email>sommersoft@gmail.com</email>
</author>
<published>2019-08-31T22:36:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.suspectdevices.com/suspect-devices/circuitpython/commit/?id=3c7c3c98d7f497df33f0503162fb7b1721ef7ecd'/>
<id>urn:sha1:3c7c3c98d7f497df33f0503162fb7b1721ef7ecd</id>
<content type='text'>
</content>
</entry>
</feed>
