Sunday, August 31, 2014

majalan

Copperbox revision 3253.

I've added a notelist module to base. Unlike the notelists in Majalan.Symbolic, this notelist is simply a list of bars containing notes or rests - it is not built within a monad.

The purpose of this notelist is to support developmental transformations - inversion, retrograde etc. None of these transformations has been implemented yet...

Friday, August 29, 2014

majalan

Copperbox revision 3252.

I've added a second pitch type - Centaur. This is Kraig Grady's 12-note scale.

Having an alternative pitch type to ET12, should hopefully help with coding "musically useful" transformations to Base.Melody - i.e. it should stop me thinking with an ET12 bias.

Thursday, August 28, 2014

majalan

Copperbox revision 3251.

I've moved the ET12 pitch modules into their own namespace and renamed the Base.PitchString module to Base.Melody.  

Base.Melody now allows rests in the pitch string, my expectation is that this will let it represent more "musically useful" sequences without being burdened by note duration - all notes in a melody are unit length until they are transposed with a beat pattern or impulse map.

Wednesday, August 27, 2014

majalan

Copperbox revision 3250.

Some simplification of beat and arpeggio patterns.

Beat patterns no longer contain rests - handling rests should be devolved to an object representing melody.

Arpeggio patterns are now a pair of the as-played notes and the pattern the arpeggiation follows.

Chain is now broken, but it was a bad abstraction anyway, so it will be replaced not fixed.

Monday, August 25, 2014

majalan

Copperbox revision 3249.

I've simplified arpeggiator patterns, removing the introspective operations and the list-like ones. These removed operations would seem to make more sense operating on a general pitch string object, rather than an arpeggio which musically speaking is coupled to it's generating pitch set.

Sunday, August 24, 2014

majalan

Copperbox revision 3248.

I've simplified ET12Chords, making it just functional rather than a weird monadic "command language".

It's disappointing that it has taken some reflection to realize the original design was so horrible (partial mitigation: I was trying to get a postfix notation without adding my own postfix application operator). It would be fair to expect that I've enough experience now to reject gawky, over-complicated code when I write it, rather than need a fortnight's hindsight to reveal it's problems.

Thursday, August 21, 2014

majalan

Copperbox revision 3247.

I've simplified Arpa so arpeggios are basically just lists. There is one inelegance as the primitive combinators (up, down, asplayed) must always be seeded with the pitch set, even if they use the same same within an extended pattern. Otherwise, though, the new version looks like a fair improvement.

Side note - work on Majalan has slowed down, I've started to work with C# as my professional skillset needs enhancing.

Saturday, August 16, 2014

majalan

Copperbox revision 3246.

Minor work on Chain rephrasing the troublesome bar parsers. However, Chain (vis parsing) now looks like the wrong abstraction - it just doesn't seem to be a musical abstraction. A rethink is needed.

As a side note, I've missed the essence of TikZ's chains in both Wumpus and currently Majalan. Chains aren't about consumption - stepping through a trail or parsing a beat pattern. They are a way of making a trial not following one.

Friday, August 15, 2014

majalan

Copperbox revision 3245.

I've added memorable versions of event and eventFw. Plus more work on Chain.

majalan

Copperbox revision 3244.

I've been reworking Chain so it is based on parsing rather than stepping. The current version is very prototypical - there are enough differences to classic parser combinators (e.g. Parsec) that I can't crib Parsec's API wholesale.

Wednesday, August 13, 2014

majalan

Copperbox revision 3243.

I've moved the Bar and GenDivision datatypes from Base.BeatPattern into Base.Internal.Beat.

This is prelude to reworking Chain to consume bars rather than impulses. Impulses don't seem to have enough information to step through as a Chain - we can't do anything musically useful with the impulses other than transpose them. Stepping through bars appears to have more potential as we have an idea of the metrical structure.

majalan

Copperbox revision 3242.

Some tidying up and the first commit of (what should eventually be) a more substantial example.

At the moment the example is particularly monotonous, but it is a bit thrilling to hear it rattle through at such a brisk tempo.

Tuesday, August 12, 2014

majalan

Copperbox revision 3241.

Work on the Arpa (arpeggiator) module's API - hopefully improving it. In fact, the changes are quite minor but they seemed to take a lot of time to work out.

majalan

Copperbox revision 3240.

I've changed BeatPattern to use a simpler notion of division. Division now divides the whole bar, rather than subdivides the beats given by the time signature.

majalan

Copperbox revision 3239.

I've wrapped Score into a data structure ScoreObj so clients have a better API - previously building Scores and and rendering them to text were mixed together, now they are separate.

The trick I've used for this will likely be useful in improving Majalan's API in other places as well.

majalan

Copperbox revision 3238.

I've simplified Timeline - free metered sections can synthesized with a metered region in 1/4 time. I've also generalized Beat Patterns so they can be labelled with accents.

Monday, August 11, 2014

majalan

Copperbox revision 3237.

I've removed impulse logging from EventList. This simplifies type signatures and reduces API bloat. At some point impulse logging should be recovered in a more limited scenario - Advance looks like the ideal candidate.

majalan

Copperbox revision 3236.

Some tidying up.

I've started to work on a longer example (nothing substantial to commit to Copperbox yet) as a means to evaluate whether the abstractions in Majalan.Base are useful, expressive, etc. This round of tidying up is the first action resulting from working on the longer example. Another problem it has identified is that impulses add too much clutter - having just one notelist like object generating impulses is probably sufficient.


majalan

Copperbox revision 3235.

Initial work on supporting FRP style behaviors which should allow time varying articulation.

The code has been cribbed directly from a previous version of Majalan where it wasn't really worked out - it is possible that it just won't work well for the current Majalan.

Sunday, August 10, 2014

majalan

Copperbox revision 3234.

I've changed the internal representation of Trail so that the accumulation is built as per writer (rather than passed around as state). Although this is less efficient, it allows a remapping operation that can change the type of the trail's impulses.




majalan

Copperbox revision 3233.

I've added some combinators to build Trails. Plus I've made a distinct type for fixed-width events - this seems the right thing to do, but it obliges me to think more carefully about the APIs for trill etc. Currently the code is messier for introducing fixed-width events rather than improved.

Saturday, August 9, 2014

majalan

Copperbox revision 3232.

I've reworked ImpulseMap, removing the InterimIM datatype.

I've added a module Trail for building proto ImpulseMaps, but Trail has monadic type so it can't fully replace InterimIM. Next I'll have to code some combinators that justify the introduction of Trial - for instance Trail should be building block for trills and tremolos (and should allow accelerating and decelerating onsets of trill notes).

Thursday, August 7, 2014

majalan

Copperbox revision 3231.

I've made the Event type monadic so compound events like trills, tremolos can divide the duration for staggered onsets.

I've added a first draft of a library of objects (chords and tremolos so far) implementing compound events.

Wednesday, August 6, 2014

majalan

Copperbox revision 3230.

I've removed the width answer from the Event datatype (and EventAns).

Having Event return width was patterned after characters in PostScript having implicit advance / width vectors; but in music Events are always specified with their duration (width) at the call site, so returning width again was not meaningful.


Tuesday, August 5, 2014

majalan

Copperbox revision 3229.

I've split EventList out from the Event module and put it into its own module.

Also, I've had the first proper look at fixed duration events. Some instruments, like gongs, have sounding times that are much longer than notes played on them and others have sounding times much shorter than the note played on them e.g. a hi-hat. In both cases the duration of event is independent of the length of the note being played (from the score). I had partially thought about this the Advance module but the rightful place should be Event. 

Monday, August 4, 2014

majalan

Copperbox revision 3228.

I've changed the representation of Event to allow multiple Csound events per an Event (previously an Event generated exactly one Csound event). This allows music objects like trills and chords to be treated as atomic events rather than event lists.

Sunday, August 3, 2014

majalan

Copperbox revision 3227.

I've added a mini-DSL for creating chords. This DSL is monadic; the previous version of Majalan had a version that used just function composition. There isn't a great difference between them, but it seems consistent with the current Majalan to favor monads.

Saturday, August 2, 2014

majalan

Copperbox revision 3226.

Some work tidying up the Arpa module - adding proper import list, removing unused functions.

I really need an EDSL for constructing chords, I had this somewhere in one of Majalan's precursors so I'll have to track it down...

Friday, August 1, 2014

majalan

Copperbox revision 3225.

I've changed Timeline building to use a monad - this is inline with beat- and arpeggiator patterns.

At some point I should add the means to define labels (cf. anchors in TikZ) as Timelines are built.

majalan

Copperbox revision 3224.

I've improved the Score API - EventLists now get metrical information from the point they are queued (following meter / tempo changes in the score) and I've made the placement combinator `at` symbolic - placement is musical position (bar and beat number). There is a new combinator `onset` that uses absolute time for placement apropos the previous behavior of `at`.

majalan

Copperbox revision 3223.

Work towards improving the Score / Part API. Particularly I want EventLists to inherit tempo and time signature from the timeline rather than an independent context.

Blog Archive

About Me

My photo
Disambiguating biog as there are a few Stephen Tetley's in the world. I'm neither a cage fighter or yachtsman. I studied Fine Art in the nineties (foundation Bradford 1992, degree Cheltenham 1992 - 95) then Computing part-time at Leeds Met graduating in 2003. I'm the Stephen Tetley on Haskell Cafe and Stackoverflow.