Euterpea Change Log

Last modified: Sep 9, 2017 @ 9:43 am

Notable changes from Euterpea 1.1.1 to Euterpea 2.0.0

Note: this is not a complete list of changes. Euterpea 2 underwent massive restructuring, so many modules have been merged, split differently, etc.

New functions and data types:

  • playS
  • playDev
  • playDevS
  • shiftPitches
  • scaleDurations
  • changeInstrument
  • removeInstruments
  • ToMusic1 (type class)
  • musicToMEvents
  • perform (significantly altered from previous definition)
  • writeWav and writeWavNorm

Data type changes/extensions:

  • More constructors for Mode, including a custom option. (Added in version 2.0.4)

Renamed functions and datatypes:

  • timesM → times
  • repeatM → forever
  • takeM → cut
  • delayM → offset
  • revM → retro
  • Event → MEvent

Removed functions:

  • test
  • (=:=)
  • graceNote, trill, prefixes, etc. from Interlude chapter in HSoM

Removed modules, the definitions of which have not been merged or otherwise preserved:

  • Experimental
  • All modules in Examples folder (moved to HSoM library)
  • Performance (moved to HSoM library)

Other removed files/folder:

  • HSoM folder
  • Tests folder

Significant behavior changes:

  • Rendering an audio stream with values that exceed +/-1.0 will now result in clipping rather than overflowing. In Euterpea 1.x, overflowing manifested as either a flat line at -1.0, zig-zags from -1.0 to +1.0, and other wrap-around-like behaviors. In these older versions, the exact problem observed depended on the particular case, GHC version, and operating system. The new clipping behavior caps signals at +/-1.0, which basically shaves off peaks outside the acceptable range. Clipping is a more standard behavior than overflowing or wrap-around in the audio domain and will also ensure more uniform generation across different systems.

Dependency changes:

  • Versions for all major dependencies are now strictly bounded, either being limited to a specific version or with specific upper/lower bounds. Upper bounds are set at the highest known versions that were working at the time of the particular release (whether Hackage or GitHub). These restrictions were put in place to avoid the need for urgent updates to Euterpea whenever a newer version of a dependency changes its API.