[If I've remember the address right, this is cc to Coda tech support. Those
who use "reply to all" might want to remove them from any replies.]

At 11:18 PM 07/09/02, Johannes Gebauer wrote:

>BTW, I would guess that now is a good time to send in feature requests to
>Coda, perhaps the feature set for 2k4 hasn't been decided yet.

All right, maybe now is a good time for a thorough discussion of the whole
system of expression metatools.

I've see a wide variety of complaints and requests about expressions in
this discussion, and it seems to me that *everyone's* needs could be met if
the entire system of expression metatools were expanded in a way that would
make them simultaneously more powerful and more flexible.  I think this can
be done without any major reworking of how the program treats and stores
expressions, and in a way that preserves "the old way" as a default subset
of the new way.

The main thing, and probably the most difficult to implement, is that
expression metatools need to be changed so that each metatool represents
not an expression but an expression *assignment*.  That is, all of the
attributes specified in the expression assignment dialog are saved as
attributes of the metatool.

David W. Fenton asked:
> (do expressions offer default positioning control in recent
> versions of Finale?).

The answer is no, and the reason it doesn't is because position is an
attribute of the expression assignment, not the expression.

This is a serious limitation. The great advantage of the metatools is it
saves the tedious process of going through the expression assignment
dialog. If I want my expression to appear on every staff and I'm satisfied
with eyeballing the position with a mouse click, then it works fine.  But
if I want to use a staff list, or if I want better control over the
positioning, I've got to go into the expression assignment to fix that, in
which case I may as well have not bothered with the metatool in the first
place.

It's quite frequent that I'll want to use metatools to enter a bunch of
common dynamic markings, but I'll want them on one staff only.
Unfortunately for me (and for Jef, who was asking here about the same
thing) metatools for measure-attached expressions always show on all
staves.  When I ask tech support about this, their answer is that if I want
it on just one staff, I can use a note-attached expression instead. Well,
that's true, but note-attached and measure-attached are two different
things, and there are plenty of reasons why I might want my expression to
be measure-attached. Also, I might want to have the expression show on the
staves of a certain staff list, in which case note-attached is no help at
all.

Another thing that's quite frequent is that I know exactly where I want an
expression to be positioned relative to the measure. If I'm
detail-oriented, I'll want that positioning to be exact, which I can't get
with just a click-and-drag. A lot of basic dynamics I prefer to always be
horizontally right on beat 1 and vertically at 168 EVPU below the staff.
Some other dynamics, because of their typographic appearance, look better
if the horizontal position is something like -12 or -24 EVPU.  For such
expressions, metatools are useless, because I have to enter the expression
assignment dialog in order to correct the H and V values anyway.  There
are, of course, some plug-ins which help with expression alignment, but
they are only a partial solution. What is really needed is the ability to
specify the positioning in the metatool definition.

Thus, every metatool should include in its definition not just an
expression, but the five attributes of the expression assignment as well
(ie, show on, H position, V position, begin playback on, and allow
individual positioning). Each of these can either be set to a value or left
blank to go to the default. For those users who don't want to use such
definitions, everything will default to the same way it's done currently,
and they'll never need to know the difference.

For H and V position, the choices should be: (a) default to the H or V
component of the mouse click, (b) an absolute value which I define just as
I would in the expression assignment dialog, or (c) a value relative to the
nearest beat. The last one is important if, for example, I know that I
almost always want an "mf" expression to appear -24 EVPU left of the beat
and -168 EVPU below the staff. Then, if I have an "mf" on the first note of
one measure, I can click somewhere near that first note, and Finale will do
the math to place it where I want it. If I then have another "mf" on the
third note of a measure, instead of needing to know if that means H=2.679
or whatever, I can just click somewhere near the third beat, and Finale
will do the math to place it correctly.

Obviously, when setting up my metatools I can't always predict exactly what
position I'm going to want any given expression to appear at, but in many
cases I can define something that will be right more often than not. And
even if I have to nudge something down, I'd rather have a fixed V position
to begin with and know that I can nudge six times with the down arrow and
have the expression sitting exactly one staff space lower. For some
expressions, I won't want this feature at all, in which case I'll just
leave these values to default to the position of the mouse click. Some
users who are happy with doing all their positioning by eye will probably
do this for all of their metatools; that's fine too.

With regard to the "show on" value, the metatool definition should allow
for any of the choices in the expression assignment dialog (ie, all staves,
this staff only, or any defined staff list) or to fall back on whatever the
default is.  That default should itself be changeable as a program option,
with a menu somewhere that lets you change the default to "this staff only"
or a staff list. This will be useful for users who don't care to write
"show on" definitions into the actual metatool definitions but nevertheless
find that they frequently want to use metatools for measure-attached
expressions that don't appear on every staff. This setting would start as
"all staves", so that default behavior remains exactly what users are used
to from the current system, but I imagine that "this staff only" would be
used much more frequently.

--
As for the type-in-score question. The obvious problem with what was
originally suggested is that Finale stores anything that's typed onto the
page as an expression. On the whole, this is a very good thing, and I don't
think it ought to be changed even if such a change were practical (which it
surely isn't). So if a Sibelius-minded user comes along and types "pizz."
over and over every time he wants one, he's going to end up with a dozen
different definitions of "pizz." in his expression list. If you've got
memory to burn and you don't really care about making use of the power
inherent in Finale's expressions, I guess there's no harm in that. But some
day that user is going to want to do something to all his "pizz"s, like
alter the playback definition or change them to a larger point size, and
then he's going to get angry when he has to change them all one at a time.

So type-in-score per se is not a good idea, but we should still look for a
way to allow essentially the same behavior to be interpreted in a way that
makes sense with Finale's system of expressions. This does not need to be
separate from metatools, but rather it can be an extension of metatools
which simultaneously satisfies those of us who want even more metatools and
wish there were more keys available.

In my vision, every metatool has not just an assigned letter, but a name.
The name is one more attribute of the metatool, it is a text string of any
length (well, some reasonable limit, say 32 characters), and it must be
unique.

As Finale currently works, when the expression tool is selected, a single
click can select an existing expression, a double-click will bring up the
expression assignment dialog to create a new expression, and a click with a
defined key held down will create an expression using a metatool.  A new
type of click needs to be defined -- let's say it's shift-click (though it
could be something else). When you shift click, it brings up a small pop-up
window which is a list of all your expression metatools, alphabetized by
name. Once this window is up, typing a letter moves you to the first name
in the list starting with that letter, typing a second letter moves you to
the name starting with those two letters, etc

This sort of list window is common in all sorts of computer applications,
and anyone who isn't completely inexperienced has seen them before and
knows how to use them. Some schemes are more flexible than others
(personally, I prefer when you can also use the arrow to go up and down in
the list). In any case, I assume this is a standard component which the
programmers can tap into from the OS or whatever, and it'll work like those
sort of windows always work. The point is that to get to any metatool, you
can go shift-click and then type in the beginning of the name until it's on
the one you want, then you hit return to select that metatool.

Different users will want to name their metatools differently, according to
their needs. Some will like having the name be identical to the text. Some
will like short memorized abbreviations for quicker typing; others may
prefer verbose descriptive names.  Myself, I'd probably do both at once,
using names like "4 = mf" or "p2 = Ped. (no playback)".

As a convenience to those of us who will make huge lists of metatools, it
might be useful to have a mechanism whereby the complete list of metatools
can be edited directly. In addition to the usual definitions, there might
also be the option to make the metatool "inactive" so that it doesn't show
on the pop-up list. That way we could have a giant library, but only
activate the ones we're likely to be using in a particular file.

As for the original type of metatools, they still exist.  When you click
with a letter or number key held down, the computer will select the first
metatool on the name list that begins with that letter or number.  So long
as your old metatool have a name which alphabetically precedes anything
else starting with the same letter (and this is assured if the name is just
the single letter), they will behave exactly as before.

--
Johannes again:

>I see
>no reason why Finale can't support "Type into score" for expressions, it
>would be a really usefull feature, especially with music that has a lot of
>different expressions on a page, like in some modern music, where assigning
>a metatool to each new expression is not really practical as most of them
>never get called a second time.

I agree with this.  As discussed above, I think users should NOT be
encouraged to invent a new expression each time they type a standard
dynamic marking. Nevertheless, if you're transcribing some verbose composer
like Satie who fills up his scores with dozens of little descriptive
phrases that you're not likely to see again, then it's nice to have an easy
way to make a one-shot expression without going through all the dialogs to
set it up.

My suggestion for this would be to define a certain type of metatool which
could be thought of as a "fill-in-the-blank" metatool.  Like every other
metatool, it has a name, it has the attributes found in the expression
assignment dialog, and it has an expression that it points to.  But the
expression it points to is only used as a model, and is not place in the
score. When the fill-in-the-blank metatool is called, it instead creates a
new expression which it puts in the score. The new expression has all the
same attributes as the one it is modeled on (ie, all the choices that
appear in the Text Expression Designer) except for the text itself.

When this "fill-in-the-blank" metatool is activated, it brings up a little
window that asks you to type in some text. You type it in and say OK. Then
Finale creates a new expression with that text and then places it into the
score according to the metatool definition.

A slightly different approach to the same idea might be to NOT have
fill-in-the-blank be a special type of expression metatool, but instead a
different way of calling a regular metatool.  Perhaps if you hold down
control while selecting a metatool (either my new shift-click way or the
old way), then instead of calling that metatool directly it, it does the
fill-in-the-blank trick, modeling after whichever metatool you've selected.
I can see that being useful for tempo markings.  Maybe you've got your
Adagio, Largo, Andante, Moderato, Allegro, Presto, etc., all set up with
the proper playback definitions, and then you come across something like
"Immer noch mehr zurückhaltend".  So you figure, "OK, that's probably about
the same as Largo", so you hold down control and metatool the Largo, then
you type in the "Immer noch mehr zurückhaltend" and you automatically get
it with the same typeface, positioning, and playback as you would for
Largo.

The business of modeling may seem a little indirect to some readers, but it
keeps the definitions of the various objects consistent. That is, a
typeface is not an attribute of an expression metatool, but an expression
is -- thus you have an expression to model on instead of having the
expression's attributes directly, even though you might want to think of
the typeface as "belonging" to the fill-in-the-blank metatool.

But in any case, the user doesn't need to worry about any of this.  He just
needs to know that he can define a fill-in-the-blank metatool called
something like "x = generic instruction" which will make a 12-pt Times
italic expression  out of any text he enters in the box.

The newly created expression will appear on the Expression Selection list
(but not on the metatool list), so it can now be edited just like any other
expression -- but since the whole point of the fill-in-the-blank metatool
is to save typing, I don't imagine there'll be much reason to do so.

Philip Aker wrote:
> [...] why
> not be able to type in Expressions if that tool is selected and
> there's a checkmark on a "Type Into Score" menu item? Cursor
> changes to a pencil, click for the location, type, and press
> <Enter> when done.

If it really makes a difference to some users to see a little pencil and
watch the word being typed into the score, I suppose that could be
implemented as a specialized sort of dialog box, which could behave exactly
as Philip describes. Personally, I think having a normal dialog box is more
logical, and in terms of keystrokes it's identical, but I know some people
care a lot about little things like that.

By the way, I am aware that "metatool" is perhaps not the best label to use
for the object I'm discussing here, which is more fundamentally a named
expression assignment object.  The basic concept is built from the existing
expression metatool, and it maintains the expression metatool's existing
behavior as a subset, but at the same time, if users are accustomed to
thinking of "metatool" as a single keystroke and not a list of names, that
might be confusing.

On the other hand, I do think that the whole scheme of names and the pop-up
list for choosing one should be applied to all the other forms of
metatools.  For most of them, it doesn't make nearly as much difference as
it does for expression assignments, but it still expands the power of the
metatools. (Among other things, it makes the number of keys available
infinite, in that you can have a two-letter metatool, a three-letter
metatool, etc.) For note-attached expressions, there is a slightly
different package of assignment attributes than those for the
measure-attached expressions. For articulations, there is no assignment at
all, since for articulations all of that is built into the designer
instead.

--
As for Richard Walker's idea that you ought to be able to have just one
"pizz." to put into any part and have Finale know enough to make it play
back "correctly" whether it's violin, viola or cello, that's an interesting
problem.  I'm not convinced that this is really the best thing -- like many
others on this list, I don't care to have Finale second-guess my intentions
too much, and I think that having separate "pizz.<violin>", "pizz.<viola>",
and "pizz.<cello>", each defined with its own playback values, is quite
satisfactory.

But for the sake of argument, let's assume we want to do this.  What we
need now is a sort of meta-metatool, but since that's an ugly name, let's
call is a "conditional" metatool.  The conditional metatool has a name and
is called by keystroke or from the name list just like any other metatool.
But the conditional metatool has no expression or assignment attributes of
its own. Instead, it has some sort of if-then algorithm which will result
in choosing some other metatool, which will then be implemented as normal.
(It would probably be much easier to have the conditional metatool have its
own assignment attributes and have the if-then select only the expression
itself. That would also be good, but I think it's a lot more powerful if it
calls up another metatool.)

The way I see it, the choosing mechanism names a particular attribute to be
looked at, has a list of possible values to check that attribute against,
and for each of those values names a metatool to call up if it matches.  In
our pizz example, you could have a conditional metatool named "pizz". The
attribute it would check against could be the staff name of the staff which
has been selected.  The value list could say: If "viola" then use
pizz.<viola>, it "cello" then use pizz.<cello>, etc.

You can see the drawbacks of such a scheme. For one thing, you're running a
risk of mismatches if someone misspells or mislabels something.  It's very
easy to imagine someone creating a cello staff but neglecting to actually
name the staff "cello".  You could let the checked attribute instead be the
playback instrument assigned to the staff. That would probably work better,
but there's still lots of ways that the conditional metatool could go
wrong.

There will of course be a default result for the case that none of the
values on the list match, and if that is intelligently set, you've at least
got a decent fallback value.

The challenge for the designers here would be to put together a plausible
list of all the attributes a user might want to use as the test attribute
in the conditional. The possibilities are nearly endless, and no matter
what is included, someone might find something missing and complain "how
come I can't make my conditional based on such-and-such?"

In reality, you might want your conditional to be based on more than one
attribute. That is why I want the conditional metatool to choose another
metatool to call, not to choose an expression -- so that one conditional
metatool can call another. That way you can chain a bunch of them together
and make as fancy a tree of conditions as you like. (Of course that brings
up one pitfall to be avoided: the program will need to have a safeguard
that makes it pop out if the conditional metatool calls itself, so that it
doesn't get trapped in an infinite loop.)

A major issue is that you have to have a certain amount of sophistication
to set up your conditionals intelligently in the first place. In the
current example, it means knowing what sort of playback definition
accurately reflects the sound of each instrument's pizzicato, as well as
knowing what to look for in the score that will tell you which one you
really want. (For instance, is it really just the instrument, or does it
matter what pitch is played, what string, what dynamic, etc.?) Anyone with
that kind of knowledge is probably happier just assigning the different
expressions directly and not trying to program the computer to figure it
out for him each time.

The real purpose of having a conditional metatool like this would be so
that Coda, or any experienced Finale user who care to create a library to
give away to others, can set up all these definitions and deliver them to a
Sibelius-minded user who wants everything to work "automatically".  But
then that creates the problem of designing them in such a way that they'll
give the desired results most of the time and still be "idiot-proof" for
the user who isn't really aware of what's going on.

If it were just the question of the pizzicato, I would say all of this is
far more trouble than it's worth, but in the larger picture this is an
extremely powerful concept, which could be extremely useful if implemented
well. An immediate use I can see for it is in articulations. Like a lot of
users, I have two different versions of almost all of my articulations, and
four versions of some of them. This is necessary, to get the positioning
exactly right, but it's also a pain. For the ones I use less frequently, I
have to consult my notes to remember, eg, which accent I use for below the
note on a downstem.  (Just being able to give a complete name to the
articulation would help considerably, since the "don't show text in angle
brackets" isn't available for articulations.)

But my rules for using my articulations are very algorithmic, and those
algorithms could be built into the definition of a conditional metatool.  I
could have just one metatool named "staccato".  That metatool could then
have some sort of rule to figure out if I want a stemside dot or a noteside
dot and call the correct metatool accordingly. (Of course, those regular
metatools would also be available to me on my list, so that I could select
them directly and make the choice myself. But having the conditional one
available might be very handy for applying the articulation to an entire
passage at once.)

For other articulations, I might make a tree of conditionals based on
whether it's an upstem or downstem note, in the staff or outside, what type
of notehead, etc. There's a lot of little things that I would have built
into my articulation definitions if it weren't such a hassle. For example,
an accent on a whole note looks better if it's pushed a little to the
right. For me it's not worth the hassle of creating a separate articulation
just for this, so I just remember to nudge it when I put one on a whole
note. A similar example is for fermatas, which, when defined to be centered
over a notehead, end up way off-center when placed on a rest.  Again, it's
not worth the trouble to create three separate articulations for note,
whole or half rest, and other rest, so I just remember to nudge them.  But
conditional metatools could open up the possibility of creating a single
fermata metatool that positions itself tolerably well for all cases.

--
I could go on, but I think I've already surpassed Peter in the
long-windedness department.

To summarize, I see the idea of making the expression metatool define an
expression assignment rather than just an expression as completely
separable from the idea of giving all metatools a multi-character name from
which they can be accessed. Either one could be done without the other; the
first is very much a functional idea, and the second is primarily about
user interface. The modified type-in-score concept (ie, "fill in the blank"
metatools) and the "conditional" metatools are each an additional feature
which could be added on to the user interface idea, but are not essential
to it.

For me personally, the whole matter of type-in-score and access to
metatools by name doesn't make a whole lot of difference.  I'm an
experienced Finale user, completely facile with the metatools they are, so
I don't think it would make a huge difference to me in terms of time saved.
I do, however, think it's a good way to make a small improvement in user
interface for experienced Finale users and a very large improvement for new
users who find Finale's current scheme of expression dialog boxes
intimidating, while still maintaining the same basic structure underneath.

The idea of changing expression metatools so that they are defined as an
expression assignment rather than just an expression is very important to
me -- the single most important change for me in terms of increasing my
productivity. I spend more time on placing expressions than on anything
else. If I could set up my metatools to avoid the expression assignment
dialog box for nearly all of my expressions, that could cut down the time I
spend on that by nearly half.

If expanding the definition of an expression metatool proves to be too
complicated, then I would at least like the ability to specify default
expression assignment values. This would be analogous to the Default Tuplet
Visual Definition. Just as that calls up a version of the Tuplet Definition
box, I want to be able to call up a Default Measure Expression Assignment
box, where I can set each attribute either to a value or to "no change".
Those values will be used for every subsequent expression assignment
created by a metatool. Then when I'm ready for something different I can go
back to the Default Measure Expression Assignment and change it to
something else.  That's still not as good as being able to make the
assignment attributes part of the metatool definition, but it's at least a
step in the right direction, and no doubt easier to implement.

It would be better still if I also had the option of entering (in any
Measure Expression Assignment, not just the default) a value of "x+y" for
the horizontal position, where x is a beat number and y is a distance
(positive or negative) in EVPUs or other units. Then if the Default Measure
Expression Assignment let me define x variably to be the nearest beat to
where I click, that would be great. But even without this a Default Measure
Expression Assignment would still be very useful.

mdl


_______________________________________________
Finale mailing list
[EMAIL PROTECTED]
http://mail.shsu.edu/mailman/listinfo/finale

Reply via email to