circuitpython-synthtools 0.8.0__tar.gz → 0.8.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. {circuitpython_synthtools-0.8.0/circuitpython_synthtools.egg-info → circuitpython_synthtools-0.8.1}/PKG-INFO +1 -1
  2. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1/circuitpython_synthtools.egg-info}/PKG-INFO +1 -1
  3. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/pyproject.toml +1 -1
  4. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/synthtools/__init__.py +1 -1
  5. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/synthtools/bassline_synth.py +3 -2
  6. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/test_mono.py +14 -0
  7. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/.gitattributes +0 -0
  8. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/.github/PULL_REQUEST_TEMPLATE/adafruit_circuitpython_pr.md +0 -0
  9. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/.github/workflows/build.yml +0 -0
  10. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/.github/workflows/failure-help-text.yml +0 -0
  11. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/.github/workflows/release_gh.yml +0 -0
  12. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/.github/workflows/release_pypi.yml +0 -0
  13. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/.gitignore +0 -0
  14. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/.pre-commit-config.yaml +0 -0
  15. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/.pylintrc +0 -0
  16. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/.readthedocs.yaml +0 -0
  17. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/CODE_OF_CONDUCT.md +0 -0
  18. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/LICENSE +0 -0
  19. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/LICENSES/CC-BY-4.0.txt +0 -0
  20. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/LICENSES/MIT.txt +0 -0
  21. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/LICENSES/Unlicense.txt +0 -0
  22. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/README.rst +0 -0
  23. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/README.rst.license +0 -0
  24. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/circuitpython_synthtools.egg-info/SOURCES.txt +0 -0
  25. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/circuitpython_synthtools.egg-info/dependency_links.txt +0 -0
  26. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/circuitpython_synthtools.egg-info/requires.txt +0 -0
  27. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/circuitpython_synthtools.egg-info/top_level.txt +0 -0
  28. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/conftest.py +0 -0
  29. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/docs/_static/custom.css +0 -0
  30. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/docs/_static/favicon.ico +0 -0
  31. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/docs/_static/favicon.ico.license +0 -0
  32. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/docs/api.rst +0 -0
  33. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/docs/api.rst.license +0 -0
  34. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/docs/conf.py +0 -0
  35. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/docs/examples.rst +0 -0
  36. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/docs/examples.rst.license +0 -0
  37. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/docs/index.rst +0 -0
  38. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/docs/index.rst.license +0 -0
  39. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/docs/requirements.txt +0 -0
  40. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/REUSE.toml +0 -0
  41. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/arpeggiator_demo.py +0 -0
  42. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/synth_setup.py +0 -0
  43. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/synthinst_code1.py +0 -0
  44. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/synthinst_fenv_demo.py +0 -0
  45. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/synthinst_pad_demo.py +0 -0
  46. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/synthinst_pitch_demo.py +0 -0
  47. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/synthinst_wave_demo.py +0 -0
  48. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/synthtools_ahr_envelope_bend.py +0 -0
  49. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/synthtools_bassline_accent_demo.py +0 -0
  50. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/synthtools_bassline_filter_demo.py +0 -0
  51. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/synthtools_bassline_fx_demo.py +0 -0
  52. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/synthtools_fm_demo.py +0 -0
  53. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/synthtools_harmony_demo.py +0 -0
  54. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/synthtools_midi_demo.py +0 -0
  55. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/synthtools_simpletest.py +0 -0
  56. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/synthtools_stepsequencer_demo.py +0 -0
  57. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/synthtools_swarm_demo.py +0 -0
  58. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/synthtools_wavetable_chords.py +0 -0
  59. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/synthtools_wavetable_simple.py +0 -0
  60. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/trig_sequencer_demo.py +0 -0
  61. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/ui/synthtools_gaugecluster_test.py +0 -0
  62. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/ui/synthtools_paramscaler_demo.py +0 -0
  63. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/wavetables/BRAIDS02.WAV +0 -0
  64. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/wavetables/PLAITS02.WAV +0 -0
  65. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/wavs/kit0_909/00_909kick4.wav +0 -0
  66. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/wavs/kit0_909/01_909snare2.wav +0 -0
  67. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/wavs/kit0_909/02_909hatclosed2a.wav +0 -0
  68. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/wavs/kit0_909/03_909hatopen5.wav +0 -0
  69. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/wavs/kit0_909/04_909clap1.wav +0 -0
  70. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/wavs/kit0_909/05_909tommed.wav +0 -0
  71. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/wavs/kit0_909/06_909blip.wav +0 -0
  72. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/wavs/kit0_909/07_909cym2.wav +0 -0
  73. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/examples/wavs/kit0_909/readme.txt +0 -0
  74. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/optional_requirements.txt +0 -0
  75. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/requirements.txt +0 -0
  76. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/ruff.toml +0 -0
  77. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/setup.cfg +0 -0
  78. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/synthtools/ahr_envelope.py +0 -0
  79. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/synthtools/arpeggiator.py +0 -0
  80. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/synthtools/audio_fx.py +0 -0
  81. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/synthtools/blocks.py +0 -0
  82. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/synthtools/fm_synth.py +0 -0
  83. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/synthtools/gauge_cluster.py +0 -0
  84. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/synthtools/harmony.py +0 -0
  85. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/synthtools/param_scaler.py +0 -0
  86. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/synthtools/paramset.py +0 -0
  87. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/synthtools/patch.py +0 -0
  88. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/synthtools/pitch_glider.py +0 -0
  89. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/synthtools/step_sequencer.py +0 -0
  90. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/synthtools/subtractive_synth.py +0 -0
  91. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/synthtools/swarm_synth.py +0 -0
  92. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/synthtools/synth.py +0 -0
  93. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/synthtools/trig_sequencer.py +0 -0
  94. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/synthtools/utils.py +0 -0
  95. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/synthtools/waves.py +0 -0
  96. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/synthtools/wavetable.py +0 -0
  97. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/synthtools/wavetable_synth.py +0 -0
  98. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/README.md +0 -0
  99. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/hw/run_on_device.py +0 -0
  100. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/hw/test_device.py +0 -0
  101. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/hw/test_display_cost.py +0 -0
  102. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/hw/test_trig_sequencer_timing.py +0 -0
  103. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/hw/test_wavetable_cost.py +0 -0
  104. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/plot_env.py +0 -0
  105. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/render/FINDINGS.md +0 -0
  106. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/render/README.md +0 -0
  107. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/render/analyze_renders.py +0 -0
  108. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/render/check_wavetable.py +0 -0
  109. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/render/check_wavetable_synth.py +0 -0
  110. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/render/render_chords.py +0 -0
  111. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/render/run.sh +0 -0
  112. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/render/wavhdr.py +0 -0
  113. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/run_tests.sh +0 -0
  114. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/stubs/synthio.py +0 -0
  115. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/stubs/ulab/__init__.py +0 -0
  116. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/stubs/ulab/numpy.py +0 -0
  117. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/stubs_fx/audiodelays.py +0 -0
  118. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/stubs_fx/audiofilters.py +0 -0
  119. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/test_arpeggiator.py +0 -0
  120. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/test_audio_fx.py +0 -0
  121. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/test_env_shapes.py +0 -0
  122. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/test_fm_synth.py +0 -0
  123. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/test_harmony.py +0 -0
  124. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/test_param_scaler.py +0 -0
  125. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/test_paramset.py +0 -0
  126. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/test_patch.py +0 -0
  127. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/test_pytest_smoke.py +0 -0
  128. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/test_swarm_synth.py +0 -0
  129. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/test_trig_sequencer.py +0 -0
  130. {circuitpython_synthtools-0.8.0 → circuitpython_synthtools-0.8.1}/tests/test_wiring.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: circuitpython-synthtools
3
- Version: 0.8.0
3
+ Version: 0.8.1
4
4
  Summary: CircuitPython helper library to do help doing synthio
5
5
  Author-email: Tod Kurt <tod@todbot.com>
6
6
  License: MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: circuitpython-synthtools
3
- Version: 0.8.0
3
+ Version: 0.8.1
4
4
  Summary: CircuitPython helper library to do help doing synthio
5
5
  Author-email: Tod Kurt <tod@todbot.com>
6
6
  License: MIT
@@ -13,7 +13,7 @@ requires = [
13
13
  [project]
14
14
  name = "circuitpython-synthtools"
15
15
  description = "CircuitPython helper library to do help doing synthio"
16
- version = "0.8.0"
16
+ version = "0.8.1"
17
17
  readme = "README.rst"
18
18
  authors = [
19
19
  {name = "Tod Kurt", email = "tod@todbot.com"}
@@ -36,7 +36,7 @@ Anything not listed below is still importable by its module path::
36
36
 
37
37
  import sys
38
38
 
39
- __version__ = "0.8.0"
39
+ __version__ = "0.8.1"
40
40
  __repo__ = "https://github.com/todbot/CircuitPython_SynthTools.git"
41
41
 
42
42
  #: Public name -> the submodule that defines it. Every entry is loaded on
@@ -306,8 +306,8 @@ class BasslineSynth(Synth):
306
306
  self._accent_sweep_decay = getattr(p, "accent_sweep_decay", 0.55)
307
307
  self._accent_sweep_max = getattr(p, "accent_sweep_max", 1.6)
308
308
  self._slide_time = getattr(p, "slide_time", 0.06)
309
- self._decay = p.fenv_attack # super() already wrote it into the block
310
- self._fall = p.fenv_attack # ...and that is what the block holds
309
+ self._decay = getattr(p, "decay", p.fenv_attack)
310
+ self._fall = p.fenv_attack # what super() wrote into the block
311
311
  get_wave(self._wave_name) # warm the cache; note-on only reads it
312
312
  self._accent_on = False
313
313
  self._accent_sweep = 0.0
@@ -368,6 +368,7 @@ class BasslineSynth(Synth):
368
368
  peak, rest = self._env_endpoints() # un-accented: no sweep widening
369
369
  p.fenv_amount = rest - peak
370
370
  p.fenv_attack = self._decay
371
+ p.decay = self._decay
371
372
  p.fx_filter_stages = self._fx_filter_stages
372
373
  p.fx_filter_mix = self._fx_filter_mix
373
374
  p.fx_hpf_f = self._fx_hpf_f
@@ -674,6 +674,20 @@ ck(
674
674
  "outlive the sweep, which is what makes the sweep audible",
675
675
  )
676
676
 
677
+ # `decay` is the 303-facing patch field; fenv_attack is the fallback for
678
+ # patches written before it was read
679
+ dk = make(decay=0.09)
680
+ ck(dk.decay == 0.09, "a patch's decay must load, got %r" % dk.decay)
681
+ ck(dk._fenv.attack == 0.09, "...and reach the block, got %r" % dk._fenv.attack)
682
+ ck(make(fenv_attack=0.2).decay == 0.2, "no decay field must fall back to fenv_attack")
683
+ dk.decay = 0.12
684
+ dk.save_patch()
685
+ ck(
686
+ dk.patch.decay == 0.12 and dk.patch.fenv_attack == 0.12,
687
+ "decay must save as both fields, got decay=%r fenv_attack=%r"
688
+ % (dk.patch.decay, dk.patch.fenv_attack),
689
+ )
690
+
677
691
  # --- keyboard tracking on the ONE shared mono cutoff node ----------------
678
692
  # BasslineSynth reuses a single cutoff node across notes, re-aiming its
679
693
  # spare .b/.c inputs. That makes a STALE slot the real hazard: turning