The Edily Project
A MIDI-driven
editor for Lilypond
This package, still in development, is meant
to contain a few Python tools to help editing
Lilypond sources within a MIDI environment.
Here is the description of the editor to be
written. This is an attempt, as some areas are
still fuzzy, and subject to discussions.
Editing normal text on a computer, many
people found out that moving the hands
between the keyboard and the mouse slow them
down. Editors often use keyboard shortcuts
for frequently used menu entries, meant for
mouse access. Users concentrating on the
keyboard may recover speed.
Editing a musical score with the help of a
MIDI keyboard for note entry, we loose a lot
of time moving hands between the musical and
computer keyboards, not to speak of the
mouse. This project attempts to minimize the
loss by establishing shortcuts right on the
MIDI keyboard for most editing commands.
Now, a MIDI keyboard uses a rather
different paradigm than a computer keyboard.
It would be a big mistake, for example,
merely affecting each individual key of a
MIDI keyboard some preset meaning. Musicians
think in term of sounds, tonality, rythm, and
chords. We should seek a new paradigm along
those lines.
From now on, unless otherwise noted, the
term keyboard refers to the MIDI
(or musical) keyboard.
The keyboard is either in command mode or
in insert mode. When in insert mode, notes
are echoed over a rug made by a metronome or
a playback of other voices. When in command
mode, the notes making up commands are not
echoed as such, yet each command yields some
heard feedback, either as a musical fragment,
either as a pre-recorded human word or small
sentence, or both.
Fingers for both hands are numbered by a
single decimal digit, running from 1 to 5 for
the left hand (1 is the left little finger, 5
is the left thumb) and from 6 to 9 and 0 for
the right hand (6 is the right thumb, 0 is
the right little finger).
The actual notes played by the fingers,
while entering commands, depend on the
current tonality in the score, and should
respect the alterations for that tonality.
Fingers 1 and 6 should both placed over the
tonic of that tonality, fingers 2 and 7
should be placed on the second degree, and so
on, fingers 5 and 0 should be placed on the
fifth degree. Any octave of the tonality will
do, as long as fingers 1 to 5 use a lower
octave than fingers 6 to 0.
It is not strictly possible to play many
notes simultaneously. Even if it was
possible, the MIDI serialisation would likely
make some notes appear before others. As
commands often use the notion of a chord, a
chord must be precisely defined. A chord for
the left hand starts when any finger from 1
to 5 presses a note, and contains all notes
pressed by those fingers 1 to 5, until all of
fingers 1 to 5 get depressed. Similarly, a
chord for the right hand starts when any
finger from 6 to 0 presses a note, and
contains all notes pressed by those fingers 6
to 0, until all of fingers 6 to 0 get
depressed.
For example, chord 134 could be type in many
ways. The easiest is merely pressing all of
fingers 1, 3 and 4, and depressing them all.
Or maybe pressing fingers 1 and 3 at once,
pressing and releasing finger 4, then
releasing fingers 1 and 3. Or maybe more
hairy combinations, like pressing finger 1,
adding finger 4, releasing finger 1 yet
holding down finger 4, pressing and releasing
finger 3, even pressing finger 1 again
(uselessly) and releasing everything. Shortly
said, a chord for one hand is all notes
between two empties.
A command uses either a chord from the
left hand, a chord from the right hand, or
two simultaneous chords, one from each hand.
When a command is meant either for the left
hand only or the right hand only, the other
hand should be empty at the time that command
is given, and the command is complete as soon
as all notes are released. For two
simultaneous chords, it does not matter which
one is given first, given that one hand is
not fully released before the other hand
chord starts, the command is complete as soon
as one of the hands gets fully released. To
be ultra precise for the case of a command
made up of two simultaneous chords, as soon
as one of the hands gets fully released, that
hand's chord is defined as per above, but the
chord for the other hand is defined as being
the set of notes actually pressed when that
occurs.
For example, command 189 requires a 1 chord from the left hand
and a 89 chord from the right
hand. One may hold 1 down with the left hand,
and play a 89 chord with the right
hand, then release 1. The command has been
issued when 89 was released. Suppose
one wants to command 189 three times. One easy
way might be to hold 89 down with the right
hand, and tap 1 three times with the left
hand, only then releasing 89.
Commands themselves use both hands at
once. The left hand chord sets the overall
family of the command, while the right hand
chord makes the command in that family. When
many commands in a row are from the same
family, it is useful to chain
them, that is, to sit the left hand on its
chord, and while keeping it unreleased, use
the right hand for each individual
command.
The command set has been designed so
frequent commands are easier to type.
Many commands use an accumulated numerical
value which is called a prefix
for that command. Besides numbers, prefixes
may also be a few special values. When a
command uses a prefix, the prefix is reset to
a neutral value once the command is
completed. Each command accepting a prefix
uses a reasonable default value for a prefix,
in case none is given.
Numerical prefixes are made up by special
commands using a single finger at a time.
Each prefix command builds up part of a
decimal number.
| 1.... ..... |
Add digit 1 to decimal
prefix |
| .2... ..... |
Add digit 2 to decimal
prefix |
| ..3.. ..... |
Add digit 3 to decimal
prefix |
| ...4. ..... |
Add digit 4 to decimal
prefix |
| ....5 ..... |
Add digit 5 to decimal
prefix |
| ..... 6.... |
Add digit 6 to decimal
prefix |
| ..... .7... |
Add digit 7 to decimal
prefix |
| ..... ..8.. |
Add digit 8 to decimal
prefix |
| ..... ...9. |
Add digit 9 to decimal
prefix |
| ..... ....0 |
Add digit 0 to decimal
prefix |
In case there is a numerical entry in the
prefix, it can be reset by executing the
command setting the tonality.
The editor holds the notion of a cursor,
which is a position in the score. One command
combines sound fragments to tell the cursor
position, expressed as bar, beat and
note.
| 1.... ..8.. |
Cursor position |
Positioning commands use the right middle
finger (8) to represent the neutral
direction, the fingers left of that middle
finger indicate a backward motion, the
fingers right of that middle finger indicate
a forward motion. On the average, when the
fingers are further from the middle finger,
the motion is larger.
| 1.... .78.. |
One note backward |
| 1.... ..89. |
One note forward |
| 1.... .7... |
One beat backward |
| 1.... ...9. |
One beat forward |
| 1.... 6.... |
One bar backward |
| 1.... ....0 |
One bar forward |
| 1.... 6.8.. |
Jump to preceding mark |
| 1.... ..8.0 |
Jump to following mark |
| 1.... 678.. |
Jump to start of score |
| 1.... ..890 |
Jump to end of score |
For positioning commands, the prefix is
used as a multiplicative factor, as if the
command has been given that many times.
Each positioning command gives, as
feedback, the current note, the current beat
or the current bar, depending on the command.
For jumping commands, we hear notes from the
current position to the end of the bar. The
feedback is interrupted as soon as another
command is received.
Playback commands use the same family as
positionning commands, to ease chaining them
all. Symmetrical combinations of the
positioning commands ask for playback of
musical fragments.
| 1.... .789. |
Play note |
| 1.... .7.9. |
Play beat |
| 1.... 6...0 |
Play bar |
| 1.... 6.8.0 |
Play between enclosing marks |
| 1.... 67890 |
Play everything |
For playback commands, a prefix
multiplicatively extends the span of what is
playing back.
The playback is interrupted as soon as
another command is received.
Nous pourrions attribuer 2, disons, à la famille des
commandes pour l'entrée de fragments
musicaux. En tenant 2 enfoncé, on pourrait
frapper 6 à répétition pour fixer
la vitesse et la phase du métronome, en
faisant une moyenne sur les quatre derniers
6, disons. Frapper sur
6 une seule fois démarre le
métronome précédent. Pour Lorsque 2 est relâché,
l'enregistrement est presque prêt, il manque
simplement le "délimiteur", qui est une note
qui ne fera pas partie métronome, en faisant
une moyenne sur les quatre derniers
6, disons. Frapper sur
6 une seule fois démarre le
métronome précédent. Pour Lorsque 2 est relâché,
l'enregistrement est presque prêt, il manque
simplement le "délimiteur", qui est une note
qui ne fera pas partie de l'enregistrement,
et qui ne fait pas partie de 1 à 5 ni 6 à 0. Une fois le délimiteur
frappé, l'enregistrement commence au début de
la mesure suivante, et se poursuit jusqu'à ce
que le délimiteur soit frappé à nouveau, ce
qui arrête aussi le métronome. Le résultat de
l'enregistrement pourrait être fusionné avec
le contenu courant, en présumant que nous
avons déjà des commandes pour remettre au
silence ou insérer de l'espace. Sinon,
l'insertion pourrait être déplaçante. Tout ça
n'est pas bien réfléchi, je cherche juste à
partager l'intuition d'une idée pour
l'instant. Pour toutes ces modalités, il
reste une foule de possibilités non
exploitées à la main droite, je ne crois pas
que nous manquions d'espace pour les
commandes.
La touche 3 pourrait être attribuée
au contrôle des voix. Quelles voix sont
muettes, quelles voix sont parlantes, pendant
la reproduction des fragments, y compris ceux
qui accompagnent le métronome durant
l'enregistrement. Quelle voix est l'objet des
prochains enregistrements (j'ai présumé que
l'on n'enregistre qu'une voix à la fois). On
pourrait aussi garder de l'espace de
commandes pour la fusion des voix, la
séparation des accords en voix distinctes, et
ces choses, pour plus tard.
La touche 4 servirait à l'édition
détaillée. L'édition de la hauteur d'une note
pourrait probablement être un cas particulier
de la transposition, appliquée à une seule
note, et donc déjà couvert. Par défaut,
4 seul serait un éditeur de
durée, avec la main droite indiquant si l'on
doit augmenter ou diminuer la durée, déplacer
le départ de la note vers la gauche ou vers
la droite, ajouter ou enlever un point après
la note, et peut-être, s'il reste de la place
pour ces commandes, les marques pour
staccato, pizzicato, portamento, point
d'orgue. 4 possiblement combiné à
d'autres touches g* pourrait permettre à la
main droite de choisir, peut-être avec l'aide
de menus déroulants parlés, parmi la panoplie
de toutes les marques disponibles. Une
combinaison 4+g* serait réservée à
l'ornementation, et l'on "dessinerait" alors
l'ornementation avec la main droite, en
faisant une appogiature, un mordant, un
mordant descendant, un trille commençant par
le haut, par le bas, etc. Peut-être!
La touche 5, seule ou combinée,
serait réservée à tous les méta-phénomènes
d'édition. Par exemple, pour déterminer les
paramètres globaux de la partition comme le
nombre de temps d'une mesure, l'armure de la
clé (et possiblement la tonalité et le mode
ancien aussi), et d'autres choix généraux qui
pourraient affecter le reste de l'édition.
J'aurais tendance à garder 5 seule (donc, le pouce de
la main gauche sans autre doigt de la main
gauche) pour un système d'abréviation et de
macro-touches, où l'on pourrait définir
diverses séquences, incluant ou excluant des
fragments musicaux. Il faudrait que, dans le
cas le plus J'aurais tendance à garder
5 seule (donc, le pouce de
la main gauche sans autre doigt de la main
gauche) pour un système d'abréviation et de
macro-touches, où l'on pourrait définir
diverses séquences, incluant ou excluant des
fragments musicaux. Il faudrait que, dans le
cas le plus simple, +5-5 appelle le dernier
macro défini, ou peut-être encore plus
utilement, répète la toute dernière
modification quelle qu'elle ait été.
Il serait probablement utile que
+1+5 soit utilisable pour
"fouiller" la partition à la recherche d'un
fragment mélodique, ou rythmique, ou les
deux, transposé ou pas. Ça serait souvent
bien plus simple que de passer par la
partition et des numéros de mesure.
Il faudrait des commandes pour placer des
marques ou les enlever, bien sûr,
l'identification de la marque serait obtenue
d'un préfixe numérique. Peut-être que ces
commandes, ainsi que toutes les commandes
reliées à des déplacements, utilisent des
multi-touches à la main gauche, mais dont
1 fait toujours partie. (Par
exemple, éliminer ou
couper, coller,
transposer, etc.). En passant, il
faut la modalité d'éliminer en remettant à
blanc (au silence) sans déplacer la suite des
notes, aussi bien qu'une élimination
déplaçante.
Tu devines sûrement que de spécifier le
détail de la façon dont tout ça doit
fonctionner, c'est-à-dire aller bien plus loin
que l'esquisse rapide que j'ai faite dans ce
message, est un assez gros travail en soi. Une
implantation devra suivre cette spécification,
mais surtout, la spécification devra être
affinée et épurée par l'usage et l'expérience,
afin d'alléger les opérations les plus
fréquentes. Tout doit être assez pleinement
configurable par l'utilisateur, bien sûr, mais
un peu comme Emacs n'est pas tellement changé
au niveau des fonctions de base, nous avons
intérêt à offrir une base convenablement songée
et acceptable, si nous voulons éviter une forte
confusion par l'effet de la rédéfinition
complète des commandes, dans diverses
directions, par des usagers qui réfléchissent
plus loin que nous le faisons.
Il y a aussi une mer de questions non
résolues, et probablement non encore posées.
Par exemple, une parmi bien d'autres, avec quel
dynamisme l'édition au clavier MIDI se
répercute immédiatement dans l'apparence de la
partition Lilypond en train d'être éditée, et
comment on peut combiner efficacement une
édition utilisant plus ou moins simultanément
les deux claviers. Certaines questions et
problèmes risquent d'être difficiles, alors il
faut aborder tout ça avec courage.
|
|
|