Page 1 of 1

Idea for a new notation editor

Posted: Sat Jan 31, 2009 1:21 pm
by raboof
One thing that has always irked me about the popular notation editors is that a lot of the 'structure' of your song gets lost: when notes are copy-pasted (common in pop music :) ), their relationship is not recorded.

In programmers' terms, this violates the "don't repeat yourself" mantra, and like when programming, it is error-prone and makes your score less maintainable. The one `notation editor' that is of help here is Lilypond, but editing Lilypond by hand is rather cumbersome, and most frontends either don't support these features or don't present enough guidance to use them effectively.

I'm exploring the idea of building up a score out of 'fragments', where each 'fragment' might appear many times in a composition, sometimes 'processed' (merged with other fragments, transposed, etc). The main point is when you modify a fragment, this affects all locations in the song where the fragment is (directly or indirectly) used.

I mocked up a small example to demonstrate how a simple 12-bar accompaniment can be built up by applying some simple operations (transposition, merging, repetition and concatenation) on a 2-bar fragment.

http://arnout.engelen.eu/files/dev/linu ... mockup.png

When you'd now alter the 2-bar fragment at the bottom, the entire 12-bar block should change accordingly.

This mockup serves only to show the general idea: the rendered notes aren't quite right and it doesn't show what the UI to interact with such a piece should look like. More on that later :).

Re: Idea for a new notation editor

Posted: Sat Jan 31, 2009 2:16 pm
by studio32
Isn't it possible to implement it in a existent notation editor to avoid having a lot of tools which are all in a alpha or beta state?

Re: Idea for a new notation editor

Posted: Sat Jan 31, 2009 4:13 pm
by raboof
studio32 wrote:Isn't it possible to implement it in a existent notation editor to avoid having a lot of tools which are all in a alpha or beta state?
I see what you mean, this approach is so different that I don't see much room for reuse without hauling in enormous amounts of extra work. That said, I do try to keep the project focused on notation, and connect to external apps where possible. I'm even sourcing out the rendering to lilypond right now ;).

Re: Idea for a new notation editor

Posted: Sat Jan 31, 2009 9:30 pm
by nils
I will forward this to the Denemo mailing list. Denemo is the Notation-Editor which has already many unique and innovative features and the scripting-interface is very powerful. Additionally we work closly with lilypond. So when it can be done with lilypond it can be done more easier with Denemo.

Nils

Re: Idea for a new notation editor

Posted: Sun Feb 01, 2009 7:24 pm
by nathan
This is an intriguing idea; I think this is a cool idea for compositional tool. I'm looking forward to seeing where it goes, either as standalone project or as an addition to an existing code base.

Re: Idea for a new notation editor

Posted: Tue Feb 03, 2009 1:39 pm
by nils

Re: Idea for a new notation editor

Posted: Tue Feb 03, 2009 6:56 pm
by studio32
Take also a look at Impro-Visor, java compozing app

Re: Idea for a new notation editor

Posted: Tue Feb 03, 2009 11:17 pm
by raboof
NilsGey wrote:I will forward this to the Denemo mailing list.
Thanks! I'm exploring on my on in Java for a bit now, but if this turns into something solid I'd be great to try and roll it into Denemo!
studio32 wrote:Take also a look at Impro-Visor, java compozing app
Interesting - until now I was using lilypond for rendering the notes, but its output can be rather ugly on-screen (quite contrary to on paper). I'll certainly check whether the code in jMusic/Impro-Visor is powerful enough to build on. Thanks for the pointer!

Re: Idea for a new notation editor

Posted: Thu Feb 05, 2009 9:59 am
by studio32
no problem... build also jack and lilypond support for impro-visor please! ;)

Re: Idea for a new notation editor

Posted: Thu Feb 05, 2009 12:51 pm
by raboof
studio32 wrote:build also jack and lilypond support for impro-visor please! ;)
I recently made a patch for jjack (jack connection library for Java) which adds JACK MIDI support - though it might not be `neat' enough for inclusion in the official distro, it's a start: http://arnout.engelen.eu/files/dev/linu ... k/midiout/

Re: Idea for a new notation editor

Posted: Thu Jul 16, 2009 5:35 pm
by raboof
The mockup I created got a bit abandoned as other projects asked for attention, but I figured to publish it anyway.

This is *very rough*, and meant only to show the general idea of a notation editor where 'reuse' is made possible by building up the composition as a 'tree' where the same building block may appear many times.

This example shows a simple 2-trumpet accompaniment to a blues chord progression. It is built up from the following 'building blocks':
- a 'fragment' containing a 1-trumpet figure (in lilypond notation)
- 'transpositions', which produce a transposed version of their underlying block
- 'repeats', which repeat their underlying block
- 'concatenations', which concatenate their underlying blocks.
- 'merges', which merge their underlying blocks

The whole piece is built up around one fragment, which is transposed, then merged with the un-transposed instance of the fragment, yielding a 2-trumpet version. Then this block is further repeated, transposed etc. to produce the whole tree.

On the left, you see a traditional 'tree view' of the structure. The main window shows a representation that is more easily navigated. The vertical line is the 'cursor', and by dragging you can move the song around. below is a 'piano roll' visualization of the end-result. Above, you see a 'staircase view'. Initially, it simply shows the composition consists of a concatenation of 6 blocks. By expanding the blocks in the tree view on the left, you will also see that reflected in the main 'staircase view'.

The 'tree view' on the left can be manipulated with shift-up, shift-down, ctrl-c, ctrl-x, ctrl-v.

The fragment can be manipulated by clicking it (any instance of it), modifying the lilypond at the bottom, and hitting 'update'. Notice that all instances of the fragment are updated at once.

You can start the application with this link - open it with 'java web start' (javaws).

This is an unfinished mockup, so beware and be gentle, but hopefully illustrates what i'm dreaming about :).

Re: Idea for a new notation editor

Posted: Thu Jul 16, 2009 7:56 pm
by studio32
Revolutionary!

But I have to get used to the way of doing things. It's way different then I am used to be, can't say whether I like it or not. Some denemo devs should look to it...

Re: Idea for a new notation editor

Posted: Sat Jul 18, 2009 9:08 am
by nils
We already did.

Re: Idea for a new notation editor

Posted: Tue Aug 04, 2009 11:29 pm
by raboof
I played with this some more:

http://arnout.engelen.eu/files/dev/linu ... ger.tar.gz

(binary for 32bits linux, sources aren't up anywhere yet but feel free to ask)

To get started: create a new project and add a .arl file. .arl files define 'blocks' which can be named and combined in several ways (a 'fragment' is currently just some notes, blocks can be merged, concatenated, repeated, transposed).

Example:

Code: Select all

import "test2.arl"

block entireSong :
	concatenate
		verse1
		verse2 ;

block trumpetsLow :
  fragment r8 bes r4 bes8 b g4 bes8 g r bes r2 ;

block trumpets :
  merge 
    trumpetsLow
    transpose trumpetsLow major fifth
    ;

block verse1 :
  concatenate
    repeat 4 trumpets	
    repeat 2
      transpose trumpets fourth
    repeat 2 trumpets
    transpose trumpets fifth
    transpose trumpets fourth
    repeat 2 trumpets ;

block verse2 :
  repeat 2 trumpets ;
Via 'Window'->'Show view'->'Other', add the 'label' and 'ruler' views: the 'label' shows a slightly-lilypond-like representation of the current block definition - mainly for testing/debugging.

The 'ruler' window shows the 3d-ish overview of the current block, highlighting the element under the cursor in yellow. Under the 3d-ish overview, a piano roll of the end-result is shown.