[jmsl] Articulation request

jmsl at music.columbia.edu jmsl at music.columbia.edu
Mon Jul 7 11:10:28 EDT 2008


Hi Peter and Georg

The expression marks and dynamics that I decided to include into JMSL 
Score were chosen by checking first for their exportability into SCORE 
by San Andreas Press, later into MusicXML (and later to LilyPond). So I 
tended to treat with a lower priority markings, dynamics, etc that could 
not export to these publishing programs, holding to the philosophy that 
JMSL Score is not a publishing environment, and relies instead on these 
applications for professional quality output. Since then, guys like 
Peter McCullough, Georg Hajdu, Jason Freeman, and others including 
myself have pushed the real-time score reading aspect further than I 
originally anticipated. So there is a kind of tension between the 
historical intentions of JMSL Score and the creative way it is currently 
being used to pioneer new music.

I'd like to extend JMSL Score to include your suggestions, and I like 
the idea of supporting custom drawing classes. Like custom Instruments 
whose class names are included in the Score file when saved and then 
instantiated when loaded, we could include a custom NoteOrnament 
interface which would be handed the Note when it is rendered, as well as 
its graphics context (from which the x,y position and other information 
could be derived; then you do whatever drawing you want from there).  
The caveat of course is that these classes would have to be in the 
classpath (probably the plug-ins folder would be best for this), which 
adds more housekeeping for the composer/programmer and for distribution

You are right that staccato and tenuto change the hold time on playback. 
Note.play() actually handles this as Note implements InstrumentPlayable. 
It calls getPerformanceData() on the double[] handed to it, and that 
checks for the presence of these two expression marks and ottava, and 
changes accordingly. Note that the array of performance data is 
temporary array. 

<getPerformanceData() CODE EXCERPT>
if (performExpressionMarks() && (getMark() == MARK_STACCATO || getMark() 
== MARK_ACCENT_STACCATO)) {
            double expressionFactor = 0.5;
            performanceData[3] = expressionFactor * performanceData[0];
        }
        if (performExpressionMarks() && getMark() == MARK_TENUTO) {
            double expressionFactor = 0.95;
            performanceData[3] = expressionFactor * performanceData[0];
        }
        if (is8va() ) {
            performanceData[1] += 12;
        } else if (is8vb() ) {
            performanceData[1] -= 12;
        }
</getPerformanceData() CODE EXCERPT>

Maybe we could let the user provide a custom class that implements 
getPerformanceData().  Note would default to the current implementation 
unless it found a custom one.  Thinking out loud here, not promising 
anything and not picturing yet how to implement this.

Anyway, all such discussion presumes sufficiently available development 
time on my part so I don't want to over-promise; but this is a good 
direction for these conversations to go.

Thanks
Nick

jmsl at music.columbia.edu wrote:
> I'd definitely second this request!  Some others that would be cool:
>
> Tenuto + Staccato
> Breath marks
> Square and triangular fermati
> Up bow, down bow
> n for niente or the 0 with slash?
> .. and ...
> staccatissimo
> //
> +
> arpeggiations
>
> Dynamics:
> sfz, sffz, fp, sfp, rfz, fz
>
> Also, a notehead + parentheses would be very handy for notating 
> alternating tremolos as wide trills.  (i.e. Original note with 
> trem~~~~~ and second notehead in parentheses)  (and perhaps with a 
> version with extra space on the left for accidental?)
>
> As I'm writing this, however, I'm also realizing that it's not 
> possible to combine articulations on one note.  For instance, an 
> accented note with a breath mark after it isn't possible.  Though this 
> not be an issue for all, it is something that comes up in my writing.  
> Same goes for dynamics.  Usually this isn't a problem, you could just 
> tie it and place the second dynamic on the second note, but for things 
> like fp it's problematic.
>
> It would really be nice to be able to customize accents and dynamics, 
> and I think that this could really enhance JScore.  /(It also, however 
> seems like this could wreak all manner of havoc.)  I'm assuming for 
> dynamics, for instance that they are parsed such that a dynamic is 
> mapped to the volume of an instrument. With articulations, JMSL plays 
> notes shorter when they are staccato.  It looks like JMSL's play() 
> method is taking care of this. (if I understand correctly that 
> NoteInterpreter is seeing MIDI data and not markings)
>
> At the risk of over-reaching, perhaps Articulation and Dynamics could 
> eventually become classes?  An articulation class could have a draw 
> method that could either use fonts, drawing, images to create the 
> symbol. (Emmenthaler, one of the fonts that comes with lilypond, is 
> fairly promising in these regards)   The articulation class could have 
> a play method that could be overridden to create custom effects.  
> This, for instance, might allow someone to build a custom trill object 
> that releases with an ornament, or aleatoric tremolos, a hi-hat part 
> that plays different samples for closed vs. open,  etc.     Some of 
> these things are possible now, but to be able to link them tightly to 
> the notation would be fantastic!  A note might have an articulation 
> and dynamics vector (order more important for dynamics?).  For legacy, 
> getMark() returns articulationVec.get(0), and getDynamic() return 
> dynamicVec.get(0).
>
> It seems like it would need both the play information (start time, 
> pitch, etc.) as well as the note info (staccato notes should be 
> interpreted differently when there's a slur over them, for instance).  
> There could be a standard library of articulations, but having the 
> ability to override and extend it would be really helpful.  For 
> instance, I could imagine in MaxScore using a custom articulation to 
> trigger a Max event while the score is playing, or a special 
> articulation for infinite sustain until the user chooses to continue 
> playing.
>
> Let me know what you think; this is a bit of a tall request, but I 
> think there's potentially a big payoff in the accessibility of some of 
> the elements that users are most likely to want to customize.
>
> thanks,
> Peter McCulloch
>
>
> _______________________________________________
> jmsl mailing list
> jmsl at music.columbia.edu
> http://music.columbia.edu/mailman/listinfo/jmsl


More information about the jmsl mailing list