Copperbox revision 255.
Major changes to the internal note list representation and the EventList interface.
The external event list and internal note list were previously parametric - the internal note list ScNoteList which is really a tree that could have the type of its leaves changed (as Abc glyphs seemed different to LilyPond ones). The external event list was parametric through the type class Event - anything that implemented Event could be rendered.
I've now changed this - the new version is more like the pretty printing libraries PPrint and Text.PrettyPrint.HughesPJ. There is a simple internal format (ScNoteList) plus a functional interface to build it (note, chord, gracenotes etc).
Unfortunately some of the new code is quite messy and not all of the examples that used to work still do (the LilyPond Bulgarian6 example works properly). While the changes have simplified HNotate's internals, there is more work to do to unify the traversals and add metrical grouping so that notes that should be beamed will get beamed.
Friday, September 12, 2008
HNotate
Copperbox revision 253.
Some work towards implementing unmetered music (aka LilyPond's \cadenzaOn and \cadenzaOff). But it is incomplete as I'm thinking that the intermediate score format might be better of tracking some 'inline marks' like barnumber check (currently they are generated in the final render process). If I do add a mechanism for inline marks they should be able to handle ties and beam grouping as well.
Some work towards implementing unmetered music (aka LilyPond's \cadenzaOn and \cadenzaOff). But it is incomplete as I'm thinking that the intermediate score format might be better of tracking some 'inline marks' like barnumber check (currently they are generated in the final render process). If I do add a mechanism for inline marks they should be able to handle ties and beam grouping as well.
Thursday, September 11, 2008
HNotate
Copperbox revision 252.
I've added a rudimentary interface to Haskore. One of the simplest examples in Haskore produces equivalent output (t251), but more complex examples produce musical gibberish (Children's Song 6, Stars and Stripes Forever).
Working with Haskore's trills is going to be difficult as they are rendered directly to notes (with short durations). In Abc and LilyPond grace notes, which would accommodate trills, are a special case in that they aren't counted in a bars duration.
I've added a rudimentary interface to Haskore. One of the simplest examples in Haskore produces equivalent output (t251), but more complex examples produce musical gibberish (Children's Song 6, Stars and Stripes Forever).
Working with Haskore's trills is going to be difficult as they are rendered directly to notes (with short durations). In Abc and LilyPond grace notes, which would accommodate trills, are a special case in that they aren't counted in a bars duration.
Tuesday, September 9, 2008
HNotate
Copperbox revision 251.
I've added bar number checking to the LilyPond and Abc output.
This certainly makes the generated scores much more readable, but currently the check is printed every bar. It would be better to make this configurable, but this would mean putting the back ends back into a reader monad.
I've added bar number checking to the LilyPond and Abc output.
This certainly makes the generated scores much more readable, but currently the check is printed every bar. It would be better to make this configurable, but this would mean putting the back ends back into a reader monad.
HNotate
Copperbox revision 250.
The intermediate note list (before it is translated to LilyPond) can now be printed for debugging.
This is making the type signatures in OutputMain rather overgrown, but I'll probably try to add support for generating 'spacer lists' first (see the LilyPond manual section 9.2.2 Creating contexts - the music / arts example). If I tidy up OutputMain first I'll only have to change it again to support spacer lists.
Monday, September 8, 2008
HNotate
Copperbox revision 249.
Some tidying up of OutputMain the score generation module.
It's still deficient - the evaluation that builds 'plugs' (indexed documents to fill holes in templates) has the generation strategy hard-wired. The generation performs two steps - render to a common format (the score data types) then output to a either LilyPond or Abc. I want it to be able to just render to the common score format for debugging purposes, but to do that will mean so rethinking of the code.
Some tidying up of OutputMain the score generation module.
It's still deficient - the evaluation that builds 'plugs' (indexed documents to fill holes in templates) has the generation strategy hard-wired. The generation performs two steps - render to a common format (the score data types) then output to a either LilyPond or Abc. I want it to be able to just render to the common score format for debugging purposes, but to do that will mean so rethinking of the code.
Subscribe to:
Posts (Atom)
Blog Archive
About Me
- Stephen Tetley
- 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.