Jeff Epler
994bd2371f
canio: add a doc note about boards like CAN feather that use mcp2515
2023-08-19 12:07:07 -05:00
Dan Halbert
10a022db87
consolidate and shorten some error messages
2023-08-19 12:39:54 -04:00
Dan Halbert
6851faacaa
Merge remote-tracking branch 'adafruit/main' into merge-micropython-v1.19.1
2023-08-18 13:29:39 -04:00
Scott Shawcroft
f93022b142
Two tweaks to mclk
2023-08-17 14:28:33 -07:00
Scott Shawcroft
8c5c73df38
Add I2S MCLK support to iMX RT
2023-08-17 11:39:14 -07:00
Dan Halbert
8cf5b6e707
fixes to unix port support; thanks @jepler
2023-08-14 09:51:52 -04:00
Dan Halbert
d582407b06
pre-commit fixes
2023-08-14 00:59:22 -04:00
Dan Halbert
2171e67c1b
merge latest adafruit/main
2023-08-13 19:43:54 -04:00
Dan Halbert
850877a85f
wip; fix generators; typos
2023-08-13 00:30:59 -04:00
Dan Halbert
10b94796c0
wip; fix more m_malloc and gc_alloc
2023-08-11 00:30:34 -04:00
Dan Halbert
fe0e2f13bc
wip; fix qstr processing
2023-08-10 20:06:32 -04:00
Melissa LeBlanc-Williams
db23a9c9fe
Disable floppyio for feather m4 express + update docstring
2023-08-09 09:15:17 -07:00
Dan Halbert
2ff8667e75
wip; remove long-lived functionality; remove PR#2614
...
Trinket M0 compile has no compilation errors, but has link errors to fix.
2023-08-08 20:41:17 -04:00
Melissa LeBlanc-Williams
ea39d7089f
Updated docstring stuff
2023-08-08 14:21:55 -07:00
Melissa LeBlanc-Williams
b25d3131a3
Update doc string
2023-08-08 12:54:14 -07:00
Melissa LeBlanc-Williams
549bbdc31c
Alphablend changes
2023-08-08 12:42:48 -07:00
Dan Halbert
0d2c3c3f08
wip: continuing compilation fixes; mp_obj_alloc everywhere
2023-08-07 20:45:57 -04:00
Jeff Epler
ddeb27d335
the note is in its attack phase
2023-08-04 18:40:30 -05:00
Scott Shawcroft
9152659912
Merge remote-tracking branch 'adafruit/main' into cache_config_desc
2023-08-03 13:37:53 -07:00
Scott Shawcroft
59e6cab252
Cache configuration descriptor
...
We use it to open endpoints as they are used. Fetching the descriptor
as needed can cause issues with devices that we're expecting a control
packet while another transaction was ongoing. Specifically, a usb
thumb drive didn't expect a control transaction while doing a SCSI
transaction.
This PR also aborts transactions on timeout or ctrl-c interrupt. It
doesn't always recover though...
2023-08-02 14:26:11 -07:00
Jeff Epler
16937b8a0d
Fix markup of bitmaptools.blit stubs
...
this prevented bitmaptools.blit from properly appearing in documentation.
2023-08-02 10:54:47 -05:00
Dan Halbert
0d4bc8c163
initial v1.19.1 merge; not compiled yet
2023-08-01 13:50:05 -04:00
Scott Shawcroft
03261fe188
Merge pull request #8191 from gaweng/main
...
displayio: added Mapping to bits_per_value getter
2023-07-24 10:18:56 -07:00
Scott Shawcroft
be0028ec16
Merge pull request #8192 from gaweng/ssl
...
ssl: Mapping python None to NULL in cadata var
2023-07-24 10:18:09 -07:00
Scott Shawcroft
516a242344
Merge pull request #8208 from dhalbert/8.2.x-backport-8180-ip4v-addressdoc
...
8.2.x backport: docs: wifi.radio.ipv4_address_ap is read-only
2023-07-24 10:09:46 -07:00
Scott Shawcroft
44c6563028
Merge pull request #8206 from dhalbert/8.2.x-backport-8169-getenv-notimplemented
...
8.2.x backport: throw an exception if os.getenv is used on a board without settings.t…
2023-07-24 10:08:34 -07:00
Scott Shawcroft
613dda89f2
Merge pull request #8205 from dhalbert/8.2.x-backport-8165-network-docs
...
8.2.x backport 8165 network docs
2023-07-24 10:07:58 -07:00
anecdata
bbf5e67fbb
docs: wifi.radio.ipv4_address_ap is read-only
2023-07-23 12:24:22 -04:00
Jeff Epler
aba171656d
throw an exception if os.getenv is used on a board without settings.toml support
2023-07-23 12:16:06 -04:00
anecdata
939149bb2f
formatting fix
2023-07-23 12:10:02 -04:00
anecdata
104cf0bb3a
raspberrypi: start AP before set IPv4
2023-07-23 12:10:02 -04:00
anecdata
3d212f70eb
mdns: can't use web workflow port
2023-07-23 12:10:02 -04:00
Jim Mussared
90ec0f2ee0
shared-bindings/zlib: Fix docs for zlib.decompress.
...
The docs say the method is called `zlib_decompress` but should be
just `decompress`.
Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
2023-07-23 10:08:31 -04:00
Gaweng Tan
8140d0cb03
Mapping python None to NULL in cadata var
2023-07-22 14:34:06 +02:00
Gaweng Tan
e58496feb2
added Mapping to bits_per_value getter
2023-07-22 13:26:34 +02:00
Scott Shawcroft
924422eff8
Merge remote-tracking branch 'adafruit/main' into three_small
2023-07-21 09:37:26 -07:00
Jeff Epler
60b233f160
document EnvelopeState
2023-07-20 16:26:07 -05:00
Jeff Epler
29a4364ba7
fix method signature
2023-07-20 14:05:56 -05:00
Scott Shawcroft
5f082561b3
Unify some error strings
2023-07-20 11:20:32 -07:00
Jeff Epler
346f08f8b9
synthio: Add Synthesizer.note_state
...
This enables the specific use case of checking whether a note's release
phase has ended, but is also potentially useful to implement a sort of
"voice stealing" algorithm in Python code, which can take account of
the note's envelope state as well as other factors specific to the
program.
2023-07-20 13:16:00 -05:00
Jeff Epler
f15eceb24c
Document more classes that can be separately enabled
2023-07-20 11:16:49 -05:00
Jeff Epler
6a2499227a
render the board support list within the docs of os.getenv
2023-07-20 11:16:48 -05:00
Scott Shawcroft
305303996d
Merge pull request #8182 from tannewt/usb_host_singleton
...
Make usb_host.Port a singleton
2023-07-19 15:04:19 -07:00
Dan Halbert
74eb360922
Merge pull request #8143 from kolkmvd/ShiftRegister-multi-data-pin
...
Extended ShiftRegisterKeys to support multiple data pins with shared clock and latch
2023-07-18 23:30:13 -04:00
Jeff Epler
3ec9f8a118
Merge pull request #8136 from FoamyGuy/blit_skip_self_index
...
adding skip_self_index argument to bitmap.blit()
2023-07-18 15:17:28 -05:00
Scott Shawcroft
1629faf8b3
Make usb_host.Port a singleton
...
This allows you to initialize usb_host.Port once successfully and
then returns the same object as long as you pass the same arguments
in. It does allow you to fix incorrect pins but not switching from
one valid set to another. (It needs a reset for that.)
This also moves hcd cache operations to RAM so that they don't
access the cache when doing maintenance.
2023-07-18 10:40:54 -07:00
Scott Shawcroft
a2002e364c
Merge pull request #8165 from anecdata/wifi_docs
...
Networking docs updates: Access Point, MDNS
2023-07-17 14:58:28 -07:00
Scott Shawcroft
2a83657b6f
Merge pull request #8161 from jepler/usb_host_keyboard
...
usb host: add keyboard map control in usb workflow
2023-07-17 14:57:13 -07:00
Jeff Epler
fd1fdee312
move set_user_keymap to usb_host module
2023-07-17 09:08:13 -05:00
Dan Halbert
fddb582390
Merge pull request #8180 from anecdata/ipv4_address_ap-read-only
...
docs: wifi.radio.ipv4_address_ap is read-only
2023-07-16 23:54:42 -04:00
anecdata
8289722679
docs: wifi.radio.ipv4_address_ap is read-only
2023-07-16 20:35:49 -05:00
Jeff Epler
235983652f
throw an exception if os.getenv is used on a board without settings.toml support
2023-07-13 09:47:38 -05:00
anecdata
69d2f5ec2a
formatting fix
2023-07-12 23:53:52 -05:00
anecdata
d4ac8e75e8
raspberrypi: start AP before set IPv4
2023-07-12 23:41:14 -05:00
anecdata
cf5028e85b
mdns: can't use web workflow port
2023-07-12 23:32:44 -05:00
anecdata
efd4fffea6
start_ap max_connections ignored
2023-07-12 22:49:39 -05:00
Jeff Epler
910fcf1c93
usb host keyboard: add keymap support
...
This is confined to pure ASCII, but does support Alt Gr. This is enough
to make a French keyboard layout work:
* home row is "qsdfghjklm"
* numerals are all shifted
* keys like {} require Alt Gr
While not tested, this should also support layouts like Colemak with
the necssary keymap file.
Layouts can be produced from Neradoc's keyboard layout modules on the
device & loaded at runtime. Code to do so is at
https://gist.github.com/jepler/597c0a00e0eb014a433e03c0ae363a08
as well as a sketch of how an extended format could support dead keys &
the full Unicode BMP instead of just ASCII.
2023-07-12 07:04:56 -05:00
Marco van der Kolk
bdf9336b80
Improved help text
...
Signed-off-by: Marco van der Kolk <marco.git@vdkolk.nl>
2023-07-11 12:09:51 +02:00
Marco van der Kolk
0c606c534c
Documentation: Sequences are supported, not just Lists
...
Signed-off-by: Marco van der Kolk <marco.git@vdkolk.nl>
2023-07-11 11:18:29 +02:00
Scott Shawcroft
2686beab36
Basic USB host support and keyboard workflow
...
Connects up read, write and ctrl_transfer to TinyUSB. USB Host
support is available on iMX RT and RP2040.
Fixes #6527 (imx) and fixes #5986 (rp2).
2023-07-10 14:22:21 -07:00
Marco van der Kolk
f8edecf473
corrected formatting
2023-07-10 22:16:22 +02:00
kolkmvd
2860593425
fixed missing comma
2023-07-10 12:28:36 +02:00
Marco van der Kolk
21d08646e1
updated documentation
2023-07-10 12:04:26 +02:00
Marco van der Kolk
5fcd90d8fb
Extended to support multiple data pins
...
Signed-off-by: Marco van der Kolk <marco.git@vdkolk.nl>
2023-07-06 23:40:47 +02:00
foamyguy
72857994f2
change skip_index to skip_source_index
2023-07-05 17:27:41 -05:00
foamyguy
16d92ddd34
docs fix
2023-07-02 14:57:44 -05:00
foamyguy
96d3e662b3
refactor bitmap.blit into bitmaptools
2023-07-02 14:35:40 -05:00
foamyguy
abf15125ff
adding skip_self_index argument to bitmap.blit()
2023-07-01 11:50:24 -05:00
MicroDev
25bacc3042
Merge pull request #8125 from jimmo/zlib-docs
...
shared-bindings/zlib: Fix docs for zlib.decompress.
2023-06-28 08:30:58 +05:30
Jim Mussared
d3aea0e15a
shared-bindings/zlib: Fix docs for zlib.decompress.
...
The docs say the method is called `zlib_decompress` but should be
just `decompress`.
Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
2023-06-28 07:59:45 +10:00
foamyguy
c4b57dc2fe
fix shape.set_boundary()
2023-06-24 12:42:00 -05:00
Dan Halbert
a84551afb7
Merge pull request #8105 from dhalbert/authmode-doc
...
improve start_ap() doc; make "authmode" use consistent internally
2023-06-23 12:51:26 -04:00
Dan Halbert
dc13a8036b
Merge pull request #8104 from dhalbert/rp2040-countio-doc
...
note RP2040 countio limitations
2023-06-22 18:37:49 -04:00
Dan Halbert
540bf58102
improve start_ap() doc; make "authmode" use consistent internally
2023-06-22 16:24:18 -04:00
Dan Halbert
8acc8581df
note RP2040 countio limitations
2023-06-22 14:56:46 -04:00
Dan Halbert
1f2a1a6e78
Improve OnDiskGif doc; check image width
2023-06-22 14:24:48 -04:00
Scott Shawcroft
4789508629
Merge pull request #8087 from anecdata/ap_chan
...
validate wifi Access Point channel
2023-06-20 13:14:04 -07:00
Dan Halbert
f5c03e64e5
fix typos: "CTX mode" -> "CTR mode"
2023-06-20 12:50:36 -04:00
anecdata
b0e0b4adce
ap channel validation
2023-06-15 20:20:17 -05:00
Jeff Epler
666fb94ca3
Merge pull request #8056 from jepler/matrixportal-s3
...
Add Adafruit MatrixPortal S3 board def & update protomatter
2023-06-13 19:34:08 -05:00
Jeff Epler
d4913b04e0
rgbmatrix: update protomatter
...
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!
2023-06-08 10:43:32 -05:00
Jeff Epler
3151656f4b
synthio: more fir-filter removal; fix biquad logic errors
2023-05-30 09:24:26 -05:00
Jeff Epler
1d58b550b5
synthio: fix doc build
2023-05-29 13:07:15 -05:00
Jeff Epler
51027974e5
synthio: apply biquad filters during synthesis
2023-05-29 10:53:48 -05:00
Jeff Epler
fed8d5825b
synthio: add biquad filter type & basic filter calculations
...
the filter cannot be applied as yet.
2023-05-29 09:50:18 -05:00
Jeff Epler
9f138dc188
synthio: list filter in the constructor
2023-05-23 19:38:25 -05:00
Jeff Epler
11d8a6ec3a
synthio: rename synthesizer.lfos to .blocks
...
.. since math blocks can be placed in it too (and that's useful)
2023-05-23 19:38:25 -05:00
Jeff Epler
c20e862790
synthio: note frequency can only be a float, for now
2023-05-23 19:38:24 -05:00
Jeff Epler
1847c2b72a
synthio: fix, rename voct_to_hz
...
todbot discovered that this function wasn't working right, and wasn't
well-named.
2023-05-23 19:38:24 -05:00
Jeff Epler
2b42783301
Apply suggestions from code review
...
Co-authored-by: Dan Halbert <halbert@adafruit.com>
2023-05-23 08:57:16 -05:00
Jeff Epler
122e00bdb3
document ring arguments to constructor
...
thanks Mark!
2023-05-22 21:59:39 -05:00
Jeff Epler
af40a173ba
synthio: midi_to_hz: remove arbitrary note number limitation
...
The underlying routine can return numbers for higher and lower
octaves. Other bits of the code might have frequency limitations
but that doesn't mean we shouldn't let someone get a ~4Hz "note"
by sending in (-12), because that's actually totally plausible as
an LFO frequency.
2023-05-22 21:58:09 -05:00
Jeff Epler
1b174f8b3d
synthio: remove "1-octave" caveat, is false now
2023-05-22 21:58:09 -05:00
Jeff Epler
5b4d621fd2
synthio: explicitly cast away const to satisfy compiler
2023-05-22 21:58:08 -05:00
Jeff Epler
167aa30f12
synthio: remove if0'd code
...
thanks tannewt
2023-05-22 21:58:04 -05:00
Jeff Epler
8626130af7
synthio: Add default triangle waveform to LFO, improve docs
2023-05-22 10:53:29 -05:00
Jeff Epler
4f671dab6f
synthio: one more doc fix
2023-05-21 19:15:34 -05:00
Jeff Epler
4d60c4608e
synthio: doc fixes
2023-05-21 17:49:30 -05:00
Jeff Epler
c5615995d9
synthio: fix docstring
2023-05-21 13:22:49 -05:00
Jeff Epler
c084ab92c8
synthio: Enable synthio.MathOperation.SUM(3,4,5)
2023-05-21 13:22:48 -05:00
Jeff Epler
4ff08e02eb
synthio: lfo: bugfixes & improvements
...
LFO waveforms are now linearly interpolated by default, but a new
property (interpolated=False) can disable this.
The 'once' logic was improved
2023-05-21 13:22:47 -05:00
Jeff Epler
e6c4d12eaf
synthio: doc improvement
2023-05-21 13:22:47 -05:00
Jeff Epler
e0cfae1d05
synthio: add (untested) phase offset
2023-05-21 13:22:46 -05:00
Jeff Epler
bd2a153eae
synthio: there is a midi note 0
2023-05-17 16:37:12 -05:00
Jeff Epler
391438102b
synthio: Finish implementing Math blocks
2023-05-17 16:32:20 -05:00
Jeff Epler
5de4d197a2
synthio: start generalizing LFO to Block
2023-05-17 15:05:34 -05:00
Jeff Epler
3d2db5dbe0
synthio: improve documentation, simplify synthio_lfo_obj_tick_scaled
2023-05-17 11:13:15 -05:00
Jeff Epler
d4294de62b
synthio: Allow bends of more than one octave
...
up to +-12 sounds good, right?
2023-05-16 16:58:04 -05:00
Jeff Epler
0b926f8fd4
synthio: improve release/press/change
...
Semi-incompatible name change: The method `release_then_press`
is now `change`. For now a compatibility alias is supported.
Everywhere a `NoteSequence` was accepted, a single note is now accepted.
So for instance, `synth.press(30)` can be written instead of requiring
``synth.press((30,))`. The same goes for `change.retrigger`, which
will accept a single LFO or a sequence.
2023-05-16 10:26:56 -05:00
Jeff Epler
b2c6f9b1a4
synthio: add Synthesizer.lfo, retrigger option
2023-05-16 10:07:07 -05:00
Jeff Epler
f83212314e
synthio: Add LFOs
2023-05-15 21:15:39 -05:00
Dan Halbert
fe386e7c73
adafruit_bus_device SPIDevice can have None for chip select
2023-05-12 15:29:59 -04:00
Scott Shawcroft
0a3faf8c9d
Merge pull request #7959 from jepler/synthio-bend-pan-ring
...
Synthio: next round of features
2023-05-12 08:54:49 -07:00
Scott Shawcroft
db8bd56c6c
Merge pull request #7946 from anecdata/ap_ipv4
...
Allow Access Point static IPv4 on the espressif port
2023-05-12 08:47:07 -07:00
Jeff Epler
7845a1b13b
synthio: Add filter
boolean property to Note objects
2023-05-11 17:58:09 -05:00
Jeff Epler
33fb771b76
synthio: Add filter
argument to Synthesizer constructor
...
as step 1/n of adding FIR filtering
2023-05-11 17:56:11 -05:00
Jeff Epler
d3eda0ad52
synthio: fix a typing error
2023-05-11 17:32:42 -05:00
Jeff Epler
53e13f15a3
synthio: Finish ading SWEEP_IN
2023-05-11 16:53:40 -05:00
Jeff Epler
17df238145
synthio: doc fixes, rename BendType to BendMode
2023-05-11 15:23:54 -05:00
Jeff Epler
89080564b4
synthio: Fix release time of zero-sustain envelopes
...
When there's no sustain, the release step needs to be calculated from
the attack level, not the sustain level. Otherwise, contrary to intent,
this leads to the actual release taking a loooonnngg time.
2023-05-11 10:19:48 -05:00
Jeff Epler
095e020809
synthio: Add ring modulation
2023-05-11 09:31:18 -05:00
Jeff Epler
e87e7ee54f
synthio: add stereo & Note.panning
...
A note can be placed in the center (panning=0) or moved to just the left
(panning=1) or right (panning=-1) channels. Fractional panning values
place it partially in both channels.
2023-05-11 09:31:18 -05:00
Jeff Epler
1d1907b98b
synthio: Generalize vibrato into bend
...
bend can be static, sweep, or vibrato
2023-05-11 09:31:07 -05:00
Jeff Epler
c48d385e94
synthio: Add synthio.BendType
2023-05-11 09:31:07 -05:00
foamyguy
c9bb53b48a
adding __iter__ stub to displayio.Group
2023-05-11 07:52:03 -05:00
foamyguy
7c685477ba
adding __contains__ stub to displayio.Group
2023-05-08 16:41:57 -05:00
anecdata
82c173e8cf
assuming the answer to that is 'yes'
2023-05-08 14:26:01 -05:00
anecdata
d78e5bd64c
fix accidental indent
2023-05-08 14:18:06 -05:00
anecdata
7581d3d0b0
Fix docstring
2023-05-08 13:30:32 -05:00
anecdata
2f2a9e7e28
Allow Access Point static IPv4 on the espressif port.
2023-05-08 13:25:52 -05:00
Jeff Epler
9a9f3229fa
synthio: Perform vibrato in pitch, not as frequency ratio
...
Now the vibrato 'units' are 1.0 = one octave, 1/12 = one semitone,
1/1200 = one cent. Before, the units were somewhat arbitrary and were not
perceptually "symmetrical" around the base frequency.
For vibrato_depth = 1/12 and base frequency of 440,
before: pitch from 403.33 to 476.67Hz, not corresponding to any notes
after: pitch from 415.30 to 466.16Hz, corresponding to G# and A#
2023-05-06 21:35:20 -05:00
Jeff Epler
a53c0ed066
synthio: add onevo_to_hz, implement midi_to_hz in terms of it
...
this has the side effect of making some notes more accurate, the new
frequency= value in the test is closer to the true midi frequency of
830.609...Hz.
2023-05-06 21:35:19 -05:00
Jeff Epler
a854e554f4
synthio: add midi_to_hz to docs
2023-05-06 21:35:16 -05:00
Jeff Epler
a94031d094
synthio: make most Note constructor args kw-only
...
for similar reasons as Envelope. The mandatory frequency argument can
still be given as a positional argument.
2023-05-04 10:16:19 -05:00
Jeff Epler
1701552dec
synthio: make sustain level relative to attack level
...
and re-vamp overall envelope calculation again.
Now, if you set a low overall attack level like 0.2 this avoids the
"diminishing volume" effect when many notes sound at once. You need
simply choose a maximum attack level that is appropriate for the max
number of voices that will actually be played.
2023-05-04 07:23:50 -05:00
Jeff Epler
a7da245ad0
synthio: Add synthio.Note
...
This class allows much more expressive sound synthesis:
* tremolo & vibrato
* arbitrary frequency
* different evelope & waveform per note
* all properties dynamically settable from Python code
2023-05-04 07:23:49 -05:00
Jeff Epler
bc03e03b9e
util: Add properties_print_helper
2023-05-04 07:23:48 -05:00
Jeff Epler
5514e3065d
synthio: add midi_to_hz
...
to convert notes in the MIDI 1-127 note scale to floating point Hz
2023-05-04 07:23:48 -05:00
Jeff Epler
bd9aca2526
Merge pull request #7862 from jepler/synthio-envelope
...
Synthio envelope
2023-05-03 12:42:56 -05:00
Jeff Epler
1fafa4dc24
synthio: improve Envelope constructor
2023-05-03 09:37:04 -05:00
Jeff Epler
eea9b62978
synthio: MidiTrack: sample_rate is always available
2023-05-03 09:37:02 -05:00
Jeff Epler
dd262258e0
synthio: Add MidiTrack.error_location
to record errors
...
.. instead of just printing the unraiseable error on the repl
2023-05-03 09:37:02 -05:00
Jeff Epler
b2f32a5397
Apply suggestions from code review
...
Co-authored-by: Scott Shawcroft <scott@tannewt.org>
2023-05-02 19:22:10 -05:00
Jeff Epler
c369527ace
remove line added while debugging failed doc builds
...
Co-authored-by: Scott Shawcroft <scott@tannewt.org>
2023-05-02 19:17:51 -05:00
Scott Shawcroft
750615f2da
Merge pull request #7430 from Lanzaa/rp2040_cpu_frequency
...
Add frequency setting for RP2040 boards.
2023-05-02 09:52:28 -07:00
Dan Halbert
c333e61681
small wording change
2023-04-26 14:58:45 -04:00
anecdata
6e8031faf8
Note limitation of next_stack_limit on espressif boards
...
Open to better wording.
2023-04-26 13:53:33 -05:00
Dan Halbert
34f565dd89
Merge pull request #7891 from tannewt/fix_epd_uc
...
Add address_little_endian and fix display memory reuse
2023-04-26 00:27:59 -04:00
Scott Shawcroft
75046b3a58
Save space with consolidated errors
2023-04-25 13:26:48 -07:00
Jeff Epler
12c1a72f03
synthio: implement envelope
...
This works for me (tested playing midi to raw files on host computer, as
well as a variant of the nunchuk instrument on pygamer)
it has to re-factor how/when MIDI reading occurs, because reasons.
endorse new test results
.. and allow `-1` to specify a note with no sustain (plucked)
2023-04-25 12:05:53 -05:00