In my testing, the feather bluefruit can do 12 voices at 48kHz!
This is a simple case (no LFOs, no ring modulation) so other situations might
require a lower sample rate, fewer voices, or both.
The sound is a little artifacty & low-fi but I think that's down to the speaker
& use of PWM instead of I2S.
and re-organize so that esp32 s2/s3 don't do as much at reset
.. it's not necessary (because most data is in esp-idf managed memory)
and doing this saves me from having to debug why reconstruct isn't working
properly on that platform.
This needs to be tested on other platforms again before being merged!
This reduces the stack frame size of mp_builtin___import__ by
limiting the support path length of files from 256 to 96. This
function can be called recursively for nested imports so it adds up.
Also reduce mp_execute_bytecode (vm.c) from 206 a bc call to 124.
This too is recursive and adds up. It is reduced by preventing
some inlining. It may decrease performance slightly when importing
and unpacking.
Adds two new scripts for debugging. One is used from gdb to print
frame sizes in a backtrace. The other prints what pcs use a
particular stack offset. This helps find infrequently used stack
space.
Fixes#8053.
tested:
* board.LED
* neopixel as status LED
* i2c scan finds lis3dh sensor
* psram capacity
not tested:
* rgb matrix o_O
* the gpio pins
Introduce new `board` properties for matrixportal-style boards:
* MTX_COMMON
* MTX_ADDRESS
These are intended to simplify use of the RGBMatrix constructor:
```py
matrix = RGBMatrix(..., addr_pins=MTX_ADDRESS[:3], **MTX_COMMON)
```
removing the need for sending in the following individual parameters:
* rgb_pins
* clock_pin
* latch_pin
* output_enable_pins
and making construction of a 16/32/64-row display easy by slicing a tuple
of all address pins rather than writing out the individual pins. If it
works out it'll be ported back to the matrixportal m4 as well.
Apply envelope & panning after biquad filtering.
This may fix the weird popping problem. It also reduces the number
of operations that are done "in stereo", so it could help performance.
It also fixes a previously unnoticed problem where a ring-modulated
waveform had 2x the amplitude of an un-modulated waveform.
The test differences look large but it's because some values got changed
in the LSB after the mathematical divisions were moved around.