Introduces several new headers (such as total-ms-per-pulse-beat, beat-unit and more) to ease high-level interpretation and to reinforce domain semantics.
Also optimizes the format of bach.track/normalize-measures to allow high-level interpretation to be more pragmatic and generic.
The grammar/syntax was also updated to enable bach to be applied to any rhythm-based problem, instead of locking into concrete constructs such as Note, Chord, etc. More specifically, this allows headers and beat elements to use any name binding containing non-special chars.
This syntax update does not subtract from semantics, as Note, Chord, Scale and the like are still reserved for their original use cases. This change simply allows users to be more free and to establish their own constructs and semantics to sync with rhythms.
Using a SNAPSHOT version because the software is still considered pre-alpha and not production ready, however I need to be able to track breaking versions between various integration modules.
Changes
:art: Added various new semantic headers to ease parsing (breaking change)
:recycle: Renamed lowest-beat to pulse-beat throughout (breaking change)
:recycle: Renamed notes to items in resulting bach.track/normalize-measures beat elements (breaking change)
:recycle: Ensured that items (previously notes) are always returned as a collection (breaking change)
:recycle: Removed redundant surrounding atom object in resulting items (breaking change)
:recycle: Renamed bach.track/compile-track to bach.track/provision and added bach.track/compose, a smart wrapper around provision (breaking change)
:scroll: Updated syntax to allow headers and keywords to be arbitrary strings of text containing non-special characters; only - and _ are "special" chars allowed in name bindings. (breaking change)
:scroll: Renamed @Time header to @Meter (breaking change)
:scroll: Updated documentation verbiage, examples, descriptions, etc.
:microscope: Wrote tons of tests (now over 100)
:bug: Fixed lots of little issues with parsing, validation, normalization, and more.
Future
:shipit: Release to Clojars after merge
:scroll: Document all of the headers thoroughly and add "Interpretation" section that describes how to integrate them
:wrench: Allow durations resulting from bach.track/normalize-measures to be normalized to either beat-unit, beat, orpulse-unit(currently locked intopulse-unit`, since it's optimized for iteration)
:bug: Prevent lists and pairs from being nested at any level
Tickets
:ticket: #20 :heavy_check_mark:
:ticket: #19 :heavy_check_mark: (handled in 1.1.0-SNAPSHOT)
Summary
Major improvements and fixes to
bach.track
.Introduces several new headers (such as
total-ms-per-pulse-beat
,beat-unit
and more) to ease high-level interpretation and to reinforce domain semantics.Also optimizes the format of
bach.track/normalize-measures
to allow high-level interpretation to be more pragmatic and generic.The grammar/syntax was also updated to enable
bach
to be applied to any rhythm-based problem, instead of locking into concrete constructs such asNote
,Chord
, etc. More specifically, this allows headers and beat elements to use any name binding containing non-special chars.This syntax update does not subtract from semantics, as
Note
,Chord
,Scale
and the like are still reserved for their original use cases. This change simply allows users to be more free and to establish their own constructs and semantics to sync with rhythms.Using a
SNAPSHOT
version because the software is still considered pre-alpha and not production ready, however I need to be able to track breaking versions between various integration modules.Changes
lowest-beat
topulse-beat
throughout (breaking change)notes
toitems
in resultingbach.track/normalize-measures
beat elements (breaking change)items
(previously notes) are always returned as a collection (breaking change)atom
object in resultingitems
(breaking change)bach.track/compile-track
tobach.track/provision
and addedbach.track/compose
, a smart wrapper aroundprovision
(breaking change)headers
andkeywords
to be arbitrary strings of text containing non-special characters; only-
and_
are "special" chars allowed inname
bindings. (breaking change)@Time
header to@Meter
(breaking change)Future
durations
resulting frombach.track/normalize-measures
to be normalized to eitherbeat-unit
,beat, or
pulse-unit(currently locked into
pulse-unit`, since it's optimized for iteration)lists
andpairs
from being nested at any levelTickets
1.1.0-SNAPSHOT
)