SCAMP 0.9.2 Released!

Hi all, I’ve just pushed SCAMP 0.9.2 to pip/PyPI, along with updated versions of its associated packages (clockblocks, expenvelope, pymusicxml, and scamp_extensions)! The highlights from a user perspective are:

  • Updating to work with the most recent abjad releases (3.17 and 3.18). This necessitated having SCAMP depend on python 3.10, since that’s what the more recent releases of abjad depend on. I’ve resisted this for a while, but I think it’s time now, since Python 3.10 is becoming more standard. If you use Thonny (as I often suggest in my workshops), the most recent version uses Python 3.10, so you should be fine.
  • I added a simple fast_forward method to Clock that fast forwards indefinitely. This is useful if all you want to do is generate notation. So if your Session is called s, instead of writing s.fast_forward_in_beats(1000) or some other large number, you can just write s.fast_forward().
  • I restored the functionality where you can use a tuple for note duration to force the note to be split into tied segments. E.g. piano.play_note(67, 0.8, (1.5, 0.5)) to get a dotted quarter tied to an eighth.
  • Various new scamp_extensions additions (detailed below).

More under-the-hood changes that are helpful for further development:

  • Tried to make it easier for scamp to discover LilyPond on Windows, MacOS. (Still not perfect, I think, but it’s a little hard for me to test.)
  • Simplified the packaging to use a setup.cfg file instead of a
  • Added pyinstaller hooks to the setup.cfg so that SCAMP can be more easily used within a built app using pyinstaller.
  • Various bug fixes and cleanup.

Finally, here are the new features of scamp_extensions!

  • Added the convenience functions wrap_to_range and atan_warp in scamp_extensions.utilities. These make it easier to keep pitches, for instance, within a desired range. wrap_to_range does so by wrapping or mirroring at the boundaries, and atan_warp does do by warping an infinite range into a finite range using the atan function.
  • MIDI parsing utilities. This is what I use when I want to scrape a MIDI file. Ultimately, I think I want to incorporate this into the main SCAMP package by making it possible to parse a MIDI file into a Performance object. But this is useful for now!
  • Updated scamp_extensions.process.markov to make it easier to train on multiple sources.
  • Added a BooleanStreamer module, which I talk about in my rhythm strategies seminar. Among other things, this can be used for Xenakis’ sieve-style approaches.

Whew! So there you go.

If you’re interested in learning more about how to use the various scamp_extensions modules, I’m planning on setting up some regular group lessons in which we go through them systematically. Let me know if you’re interested, since I’m looking to find a critical mass!

Also, as always, I hope you’ll consider supporting my work on scamp via my Patreon! It’s a pretty significant amount of work to do all of this.