Edily — notes
Table des matières
1 Project description
This is about a 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.
2 Editor specifications
Here is the description of the editor to be written. This is an attempt, as some areas are still fuzzy, and subject to discussions.
2.1 Justification
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.
2.2 Command notation
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.
2.3 Command prefixes
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.
2.4 Positioning commands
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.
2.5 Playback commands
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.
2.6 Recording commands
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.
2.7 Voice control commands
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.
2.8 Modification commands
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!
2.9 Parameter commands
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é.
2.10 Searching commands
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.
3 Open problems
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.