Idea for a new notation editor
Moderators: MattKingUSA, khz
- raboof
- Established Member
- Posts: 1855
- Joined: Tue Apr 08, 2008 11:58 am
- Location: Deventer, NL
- Has thanked: 50 times
- Been thanked: 74 times
- Contact:
Idea for a new notation editor
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 .
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
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?
- raboof
- Established Member
- Posts: 1855
- Joined: Tue Apr 08, 2008 11:58 am
- Location: Deventer, NL
- Has thanked: 50 times
- Been thanked: 74 times
- Contact:
Re: Idea for a new notation editor
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 .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?
-
- Established Member
- Posts: 538
- Joined: Wed Oct 22, 2008 9:05 pm
- Has thanked: 35 times
- Been thanked: 94 times
- Contact:
Re: Idea for a new notation editor
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
Nils
- nathan
- Site Admin
- Posts: 405
- Joined: Mon Dec 11, 2006 8:53 pm
- Location: Phoenix, AZ
- Been thanked: 5 times
- Contact:
Re: Idea for a new notation editor
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.
- raboof
- Established Member
- Posts: 1855
- Joined: Tue Apr 08, 2008 11:58 am
- Location: Deventer, NL
- Has thanked: 50 times
- Been thanked: 74 times
- Contact:
Re: Idea for a new notation editor
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!NilsGey wrote:I will forward this to the Denemo mailing list.
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!studio32 wrote:Take also a look at Impro-Visor, java compozing app
Re: Idea for a new notation editor
no problem... build also jack and lilypond support for impro-visor please!
- raboof
- Established Member
- Posts: 1855
- Joined: Tue Apr 08, 2008 11:58 am
- Location: Deventer, NL
- Has thanked: 50 times
- Been thanked: 74 times
- Contact:
Re: Idea for a new notation editor
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/studio32 wrote:build also jack and lilypond support for impro-visor please!
- raboof
- Established Member
- Posts: 1855
- Joined: Tue Apr 08, 2008 11:58 am
- Location: Deventer, NL
- Has thanked: 50 times
- Been thanked: 74 times
- Contact:
Re: Idea for a new notation editor
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 .
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 .
Last edited by raboof on Thu Jul 16, 2009 9:22 pm, edited 1 time in total.
Re: Idea for a new notation editor
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...
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...
- raboof
- Established Member
- Posts: 1855
- Joined: Tue Apr 08, 2008 11:58 am
- Location: Deventer, NL
- Has thanked: 50 times
- Been thanked: 74 times
- Contact:
Re: Idea for a new notation editor
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:
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.
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 ;
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.