Copyright © 2009 Denemo Project
This Manual is released under the Creative Commons License, this
manual may be quoted, and freely distributed as long as credit is given
in written form to http://www.denemo.org. If it is placed on a web page
a link to the denemo site should also appear.
Denemo lets you create musical scores. You can type music in using the keyboard
or play it in using a MIDI contoller or the microphone input. You can edit your music - the display shows you the measures you
are working on - and you can playback selected bits to check how it sounds.
You can preview and print the score or parts to the highest standards used in the music publishing industry
- thanks to the Lilypond typesetting program.
Denemo does not attempt to show the appearance of the finished score, it just shows you enough to enable you to enter the music efficiently. To see the finished score you press Print Preview.
Obtaining and Installing Denemo
Denemo is available from a variety of sources for different
distributions. The latest stable release (tar.gz and .deb formats) is
available for download from http://download.savannah.gnu.org/releases/denemo/. You can install
Denemo from the Debian unstable repositories, using the command apt-get
install denemo. Builds for Macintosh are available from the Gnu-Darwin
project. The Denemo development branch can be downloaded using anonymous
CVS or Git.
Anonymous Git checkout:
git clone git://git.savannah.gnu.org/denemo.git
Anonymous CVS checkout:
cvs -d:pserver:anonymous@pserver.git.sv.gnu.org:/denemo.git co -d denemo master
To build Denemo from a source package, the following
dependent packages should be installed first. Remember to install the
development packages as well (check your distribution for the specific
package name):
![[Note]](images/note.png) | For Debian Users |
---|
Type apt-cache showsrc denemo at a command
line to determine what are the package names for Denemo
dependencies. Type apt-get build-dep denemo to
build the dependent files or use apt-get to install the packages
individually by copying and pasting there names to the command
line. |
g++ 2.95 or higher
flex 2.5.4a or higher
bison 1.35 or higher
cdbs
gettext
libgtk2.0-dev
gtk+ 2
libglib2.0-dev
libxml2
libxml2-dev
LilyPond 2.4
autoconf 2.59 or higher
automake1.7
libaubio
libfftw3-dev
libportaudio
Denemo uses other applications for playback and printing. You may need to install the following applications, and edit the preferences menu to tell Denemo which you want it to use.
csound (optional, www.csounds.com)
A PDF viewer (ghostview, evince etc)
A midi player such as timidity
An image viewer such as EOG
Installing Denemo from Source Code
Denemo is available in a variety of formats. The current stable
release is available either as source code or in binary format. The
Development branch of Denemo is available as a GIT source tree.
Procedure 1. To install from source code:
Open a terminal window.
Change directories to the directory to which you downloaded
the Denemo source package.
Uncompress the source package using standard Linux tools (tar
and gunzip).
Change directories to the uncompressed directory.
Procedure 2. Generating a Configure Script
Git does not come with a Configure script; generate one by
typing and pressing Enter after the line:
Procedure 3. To compile from source, press Enter after each line:
./configure.
make.
make install.
If you are not logged in as root user, type su and your root
password, or alternately type sudo and your user password.
On starting a Denemo up to three music scores (called init.denemo) are loaded, and any actions associated with them are run. The first of these is provided with the system and does essential initialization, the second you can provide yourself in the file ~/.denemo/actions/init.denemo (where ~ means your home directory). Finally (and every time you ask for a new blank score) your default template (~/.denemo/templates/default.denemo) is loaded. In this file you can keep your favorite paper margins etc.
In addition, on startup a set of keyboard and mouse shortcuts, and a selection of optional menu items are loaded. If you have a Numeric Keypad you may wish to start with an alternative set (Edit->Customize Commands Shortcuts...->Manage Command Set and click on "Load a Standard Command Set" to get this. Save it for next time using "Save as Default Command Set").
Some Common Keyboard Shortcuts
Here are a few of the keyboard shortcuts that are commonly used in Denemo.
-
Letters A-G are used to refer to the notes A-G, either moving the cursor, inserting or editing depending on mode.
-
Numbers 0-6 are used to refer to the note durations Whole Note ... 64th note, inserting, changing the prevailing duration or editing depending on mode. The corresponding Numeric Keypad keys are used if you choose that command set.
-
"." dots a note, Ctrl-"." undots it.
Some Common Mouse Shortcuts
Here are a few of the mouse shortcuts that are commonly used in Denemo.
-
Shift Key and Left mouse button drags notes up and down.
-
CapsLock with Left mouse drag inserts a slur
-
CapsLock with Left mouse drag inserts a slur
-
CapsLock AND Shift key with Left mouse drag inserts a crescendo
-
CapsLock AND AltGr key with Left mouse drag inserts a diminuendo
Denemo is used via the computer keyboard, MIDI controller or playing in via a musical instrument. Quite a few mouse operations are also included by default. Clicking on the score will select items, and the status bar at the bottom will describe the item clicked. Left clicking on items in the score allows you to edit any special attributes, (called Directives, see the section called “Denemo Directives”), that they may have. Clicking on the initial clef, key or timesignature lets you edit these, clicking to the right or left of the measures visible moves you forwards and backwards in the score. Clicking in the top left corner allows you to edit Directives that apply to the whole score. Selections can be made by dragging with the mouse from one note to another. And right-clicking any menu item gets help and the opportunity to set a shortcuts for the menu item. Furthermore, scripts are available in the menu system that give the mouse further uses.
The unit of work in Denemo is a musical score, which can be saved in a single file (with .denemo suffix). This is represented on the screen by a "tab". If you have several tabs open at once they appear just above the music in the main window, and you can switch between them by clicking on the tab.
One score may contain several movements, which you can move between, insert and delete with the Movements menu. A movement is a continuous piece of music with titles etc.
Within a movement there are staffs (arranged vertically) and within the staffs Denemo Objects. These can be notes, chords and Denemo Directives (see the section called “Denemo Directives”). The notes and chords are displayed in conventional format (though not fully typeset). The Denemo Directives are used for most things that are not chords or notes: Metronome marks, repeat barlines etc are good examples. They can also be attached to chords, individual notes in a chord, to a staff as a whole and to the score as a whole. Each Denemo Directive carries its own display method. For example the Close Repeat barline appears as a Denemo Object in the converional music notation, while a Directive attached to a staff (e.g. Smaller Staff) may just print "Smaller Staff" over the staff. The directive then directs the LilyPond typesetter to make the staff smaller.
The command Edit Object gives access to editing Denemo Directives, which generally have their own edit methods. You can use the Print View to indicate the padding that you wish to apply to some item, or to show where you want to drag it to.
The titles of the current movement can be set. These titles should be left blank for movements after the first if they apply to the whole score (a LilyPond peculiarity). In the movement properties dialog you can set a LilyPond directive to cause a page break before the movement (see LilyPond docs, but briefly #f is no page break and #t (true) is page break). You can include any other directives here to apply to the movement as a whole.
Each Denemo file represents a piece of music which may consist of several “movements”, interspersed with headings. These might be different songs in a song book, or literally the movements in a classical sonata, or any other pieces of music that you want to print out in a book form with titles, page numbering and so on.
![[Note]](images/note.png) | Note |
---|
When a file is loaded it opens with the final movement set as the current movement. |
The main window has menus and toolbars at the top. With View->Score View checked there is next the drawing area where the music input is displayed - just the few measures you are working on. With View->Print View checked there is another pane showing the print preview of your score. At the bottom is a status line showing which movement you are in and what sort of object the cursor is on. If there are any MIDI filters that active they will be noted at the right in the status bar. The small colored rectangle is the Denemo Cursor, which shows where notes etc will be added/edited next. Selected music is colored blue and outlined with a blue rectangle.
The menus in Denemo are unusual: they not only let you do some particular action, but also each menu item lets you enquire what the action does in more detail and lets you set keyboard/mouse shortcuts for the actions. All this extra functionality & more comes with right-clicking the menu item, while the usual left click is for executing the action itself. The menus can always be torn off for working with particular items (e.g. working with different movements or with measures, dynamics etc.). Also available by right-clicking is creating new actions - often by modifying ones that are already there.
The print preview pane is shown by checking View->Print View. Right clicking in this pane allows you to refresh the print preview (the program hangs waiting for LilyPond to finish).
Right clicking in this pane also allows you to choose offsets to apply to items that LilyPond has positioned badly.Or you can select an amount of padding to apply to some object. This is generally a better way of indicating that it is too close to something else, since other objects will move away from it as needed - that is, if you later edit something it will behave more intelligently. The actual editing is always done in the Score View pane, choosing Edit Object while the cursor is on the offending object and then dragging in the Print Preview window to indicate the amount of change required.
The Main Menubar has submenus for overall control of the program. It
contains the following submenus:
File
Edit
View
Mode
Playback
More
Help
Use the menu to perform global operations related to storing and retrieving from file systems.
The File menu contains the following Menu Items:
Use the menu to access common editing
commands.
Use the menu to toggle toolbars and
palettes used with the mouse.
Use the menu to switch modes or choose to use modelessly. The different modes are useful for different ways or phases of work.
With the standard keyboard shortcuts the modes work like this:
No Mode. No standard keypresses are defined – you will need to assign keys yourself. You will need to define separate keypresses to insert the notes, change the notes, move the cursor to a note, change the prevailing duration, etc. This mode is for those who want to set up the keys to have single functions. The cursor is green in this mode. This mode gives easy access via the menus for the actions that do not change with modes.
Insert Mode. In this mode the keys 0,1,2... select the prevailing duration (whole-note, half-note ...) while the Note name keys A,B,C ... insert a note of that name in the prevailing duration. The octave is the one nearest the cursor. The cursor is green in this mode. This mode is good for entering single line music.
Edit Mode. In this mode the keys 0,1,2... insert a note (whole-note, half-note ...) at the current cursor position, while the Note name keys A,B,C ... change the note at the cursor to A,B,C.... The cursor is purple. This mode is good for editing music already entered and for entering pure rhythms (all notes on the same pitch, for overlaying pitches via microphone input later). You can also enter music in this mode - you type the duration key (which inserts a note) and then the Note name key, which edits it to the one you want.
Classic Mode. In this mode the keys 0,1,2... insert a note (whole-note, half-note ...) at the cursor position, while the Note name keys A,B,C ... move the cursor. The cursor is green. This mode is good for entering music with chords (Enter is the standard keybinding for this).
Entry types: Note, Rest, Non-Printing Rests, Audible Feedback. These are used with the above modes to control what is entered. The unusual one here is Audible Feedback, which gives audio feedback when entering note durations, enabling you to enter rhythms without looking at the screen to check that you have entered the correct duration. Non-Printing rests allows you to make a part vanish and return when writing several parts to a staff.
Choose whether to use external sources (Audio from the Mic input or MIDI) for Denemo. To use these you may need to review the settings in Edit->Prefs first.
Add commands to Denemo. Extra commands are available (those which not everyone will want) via this menu. More Commands gives commands shipped with Denemo, while My Commands gives ones that you have created locally. Note that the extra commands can also be loaded at the menu where you are looking for them (you right-click on a menu item, and if there are more commands for that menu the More Commands for this Menu item will show),
Update Commands from the Internet allows you to get the latest versions of commands directly from ftp://denemo.org. They are stored in the .denemo/download directory in your home directory. You can set a preference to have this happen in the background every time you start Denemo, if you prefer.
Use the Playback menu to start playback of your score. Denemo lets
you hear your score, using an external MIDI player, or Csound.
Use the Help menu to get help using Denemo.
Use the Toolbar to access common Denemo commands quickly. The Tool
Bar contains the following icons:
The object menus give you actions (such as insert, delete ...) ordered by the objects (notes, staffs, measures ...) that they act on.
In the score properties dialog things that affect the whole piece can be set, as well as the titles of the current movement. In the score properties dialog you can include directives to apply to all the movements.
![[Note]](images/note.png) | Note |
---|
When a file is loaded it opens with the final movement set as the current movement. |
Dynamics, Slurs, Trills, Tempo Indications, and much more a found in the Markings menu
You can collect together your favorite ones, either by assigning shortcuts, or creating a menu of favorite commands which just invoke the action you use.
Procedure 4. Adding Markings using the Articulation palette
Some ornaments and articulations have been collected together as a palette.
The Rhythm Pattern toolbar lets you enter music following a rhythmic pattern. If you have a pattern in your music that appears many times you only need to type it once. By selecting it and clicking Create Pattern you install that pattern on the toolbar. Then as you enter notes (in Insert Mode) the notes follow the rhythmic pattern chosen. Pressing a duration key goes back to adding notes of the prevailing duration. You can have several custom patterns like this and switch between them using the space bar (or other keybinding of your choice). Another (more musical) way of entering rhythms is to "drum" them in using the keys on the computer keyboard for quarter-note, eighth-note etc, a curious sort of "musical instrument" where you change key for different durations. Use the numeric keypad for this. Drumming in is quickly learnt and, by playing in the notes rhythmically you can keep your place in the music. Use the Mode->Audible Feedback option for this, so that you get a bell to confirm when you have completed a measure.
Using Input->Midi or Audio allows you to enter pitches directly. If you have entered your piece of music as pure rhythm you can overlay with the pitches using a MIDI controller or musical instrument with mic, headphones out or pickup attached to your soundcard.
Playing Notes into Denemo - MIDI
Denemo can take pitches directly from MID input. Select Input->Midi Input. The control window allows you to choose the enharmonic range. Under Mode->MIDI are various "MIDI filters" that allow you to control how the MIDI input is used: with none active the behaviour is as if you had entered the notes using the pc-keyboard (except that octave, accidental and note name are all entered in one go). You can also use Advance on Edit to put the pitches onto pre-entered rhythms, or Check Pitches (where you play through the piece and a warning is issued if you hit a wrong note).
These MIDI filters are scheme scripts, so they can be tailored to do whatever you wish. One example is a filter that enables you to enter Figured Bass figures by playing the notes corresponding to the figures while holding down the bass note. Chords could be entered using similar code.
Playing Notes into Denemo - Audio (Souncard Mic Input)
Denemo can listen for, and detect the pitch of notes on the mic input of the computer; it doesn't attempt to guess the rhythm - such systems do not work well - but you will find that playing the notes in time will help you to play them in, as well as make playing them in a musical experience rather than a chore.
Playing the notes in can be much quicker than using the keyboard since the note octave and accidental are all given just by playing the note. If you are able to play a musical instrument then this will probably be much faster for you than typing note names, octave shifts and accidentals at the computer keyboard. Using the headphones out of an electronic keyboard avoids "noises-off" interfering with the pitch detection. Many microphones and pickups benefit from some pre-amplification - it is worth getting the level right before you begin.
When you select the Input->Audio on the Main Menu the Pitch Recognition window pops up. While the mouse pointer is inside the score drawing area the score is sensitive to pitches heard via the microphone input. The background colour of the score changes to show that the notes will be entered into the score.
There are two ways of using the pitch entry - Overlay mode (default) and Insert mode. The button marked Insert causes notes to be entered into the current measure in the prevailing rhythm - the mode is set to Insert for this. The button marked Overlays overlays the notes already present with the pitches you sound. There is a third button, marked Tuning, which is a state-of-the art musical instrument tuner.
Music is entered into the measure which holds the cursor. If you are overlaying a rhythm already entered, then the first un-overlayed note in the measure is overlayed by the note detected. You can delete the overlay using the regular delete keys, or clear them altogether if you want to start over in a measure. If you are in Insert mode then the notes detected will be inserted at the cursor position.
Use the enharmonic shift to select whether Bb or A# should be entered when you enter the given pitch - you can usefully go as far as B# and Fb.
Use the transpose control to shift up or down by octaves.
Most of the other settings would require study of the Aubio documentation to understand, but the one marked threshold may be useful to make the detection less sensitive to ambient noises if using a microphone with an acoustic instrument.
The best set-up is to plug the headphones-out socket of an electronic keyboard into the mic input, and choose a piano setting on the electronic keyboard.
If you don't have any musical instrument that you can plug directly into the mic in, then you can use an acoustic instrument with a microphone, in which case move your microphone closer or further from your instrument to get reliable detection. Too close and you get double detections, too far and you get missed ones. To check for good detection open a piece of music, set Overlay mode and put the cursor in the first measure and play the piece in – the notes should all turn blue if you have perfect detection. It is worth while getting perfect detection – more than one or two miss-detects per piece of music and you may want to use the Insert rather than the Overlay method.
Modes in Denemo are optional. Denemo has a large number of actions (functions) that it can execute for you, and these are to be found in the View-\>Objects Menu (grouped by objects such as note, measure, clef etc. Some of these functions do different things in different modes. For example the key A is usually bound to a function that moves the cursor to the nearest note A, or inserts a note A, or changes the current note to an A, all depending on which mode is chosen. (There are also entry modes, in rest entry mode instead of a note a rest would be inserted).
If you dislike modal programs, you will set your shortcuts to the non-modal functions (these are found in the View-\>Objects Menu when Mode-\>No Mode is selected, or in the View-\>Actions Menu.)
When using a MIDI controller to enter pitches, you can just check Audible Feedback, and never have to switch modes, as the cursor automatically moves on for you with this setting. You select rhythms via the keyboard and edit their pitch with the MIDI in.
In addition to the basic Insert and Edit modes there are four entry modes for specialized use. Rest entry is useful for entering a large number of rests. (For single rests it is easier to use a keypress - e.g. Alt-3 for an eighth note). Non-printing rests are used for parts which enter during the course of a measure. Note entry is the default, and if you check the Audible Feedback checkbox the different durations have varied audio feedback and a beep is sounded when Denemo moves to the next measure – this is to help when entering the rhythm of a piece for later overlaying with pitches.
Denemo allows you to explore all the actions (insert/delete/edit/navigate...) using the Objects menu. So inserting notes can be found under Notes/Rests while inserting a Staff comes under Staffs/Voices.
![[Note]](images/note.png) | Note |
---|
When you have found the action you need you can right click on the menu item to get an explanation of the action and to view/set a key press- a keyboard shortcut - to activate the action. If you are setting a lot of keyboard shortcuts for menu items you can check the Edit->Keyboard Setup->Allow Quick Shortcut Edits button, whereupon you can set the keyboard shortcut just by pressing the desired key while the menu item is selected. In addition you can customize the mouse actions to initiate commands, and set the cursor that will show while certain mouse conditions apply.
|
Denemo offers several ways of entering music: typing at the keyboard, playing in via a MIDI keyboard (controller), playing in acoustically using a microphone or choosing items from the menu system.
Using the menus for everything would be very slow, but next to each menu item is the keypress that you can use instead. If there is no keypress shown, and you want to use that item often, then right click on the menu item and you can set a key combination for that menu action. Right clicking is also useful for getting a description of what the menu action is.
Typing at the keyboard can be very fast, if you forget which keypress you need you can consult the menu system to find out. This method is good for touch typists.
For entering a lot of already written-out music, playing the music in via a MIDI keyboard or microphone can offer the fastest and most musical method.
One way to do this is to check the Audible Feedback checkbox and enter the music as pure rhythm, ignoring the note names. Each duration sounds its own pitch and length as you enter the durations. As you start each measure the bell will sound so that you can keep your eyes on the score you are copying without needing to look up and check that you haven't miss-typed. If you are a reading musician you will find that you tap in the rhythm rhythmically which helps to keep your place in the piece you are entering.
Once you have entered the rhythms you choose an external source from the Input menu, placing the cursor in the first measure, play the notes via MIDI or a microphone plugged into the mic input of your soundcard. The Audio Input button introduces a special entry mode where the pitches you play in will overlay the rhythm, appearing as blue notes. You can delete any wrong pitches using the usual delete keys, without deleting the rhythm. In fact if you have an "interloper" (an extra spurious note) you can delete it and the other pitches will all move along to their correct places.
Another method of playing music in acoustically doesn't involve entering the rhythm separately. For this select Input->Audio and then choose Insert instead of Overlays on the Pitch Recognition Panel that pops up. With Insert the sounded notes are entered as in the prevailing rhythm. The same applies if you have MIDI, only you just need to select Insert mode to enter the notes in that case. So by choosing a rhythm (e.g. half-note, quarter-note, or a custom rhythm pattern) and playing in the pitches you can enter the music into a blank score.
For MIDI input there are special modes (MIDI filters), such as Advance On Edit, which means you can simply play the pitches in and they are applied to the notes. If you are entering notes and durations at the same time using MIDI then the "AngryDelete" finger can be useful. With this filter on notes are entered normally until, but if you make a mistake and press the wrong note just hit the next one much louder and it will make the correction for you! MIDI filters are found under Mode->MIDI
The oldest Denemo keymaps are no longer supported. (see the section called “Adding Key/Mouse Shortcuts”). (Input via
MIDI keyboard and Mic in is now available). Denemo also
provides shortcuts for use with Numeric Keypad.
Denemo provides different ways to set up scores:
Create template with the special name "default.denemo". If this is placed at the top level of your templates directory (that is ~/.denemo/templates/default.denemo), then it will be opened each time you start a new score.
Create an init.denemo score with everything you want to start up with, and any actions you want to be taken before you begin. This will be opened when you first start Denemo (that is once per Denemo session). See the section called “Musical Score that Do Things!” for details on what actions you can have Denemo perform before you start.
Use a Template
Use shortcut keys to add staves and set attributes
Use the Setup Wizard
Use Menus
Using Templates to Setup Scores
Denemo comes with a few preinstalled templates.
You can also design your own templates as well.
Navigate to , , The Open dialog
box appears.
Double click on a template name from the list of
templates. The dialog box closes and the template appears.
![[Note]](images/note.png) | Note |
---|
Adjust the clef, key and time signatures as needed. |
Using Shortcuts to Setup Scores
Inserting attributes with shortcut keys is an effective way to
quickly customize a template.
Using Templates to Setup Scores
Denemo Comes with a wide range of prebuilt templates for
standard vocal and instrumental scores. If you have a custom score
setup you use over and over create a score layout using the Setup
Wizard and save it as a template.
Click on File-\>New From Template, The
Open
Dialog box appears displaying the currently
available Templates.
Double click on the template name in the righthand pane.
The template loads in the Main Denemo Window.
![[Note]](images/note.png) | Note |
---|
The currently active staff will be black. All other
staves will be yellow, until they are active. |
Adding Key/Mouse Shortcuts
Denemo allows you to choose which keys activate which commands. It also allows you to choose Mouse press/release gestures (in combination with keys such as Shift, NumLock, CapsLock etc).
To choose a shortcut for a menu item, right-click on the item and choose the Create Mouse Shortcut, or the Edit Shortcuts option. The Set Mouse Shortcut Dialog requires you to set which button and action you want to use and then to hold/lock the keyboard modifier while clicking on the big button. The setting you have chosen is shown, and you click ok to accept it.
To set a keyboard shortcut, and to delete any sort of shortcut, use the Edit Shortcuts menu item. This dialog also allows you to choose a cursor to show while certain mouse actions are underway.
If your choice of keyboard shortcut already belongs to another command, you are warned about this, and given the chance to change your mind or steal the shortcut. Also, you can choose whether to distinguish between keypresses with, say the NumLock down and those without or to ignore it. If the NumLock is set but no command for that key specifically requires it then the setting of NumLock is ignored and the keypress is treated as if the NumLock was off.
The menu item that activates the command shows the shortcuts that exist in bright blue lettering. PrsL-CapsLoc, for example, is the Press action on the Left mouse key while the CapsLock light is on. In the default command set this is linked to the BeginSlur command, so that together with the RlsL-CapsLoc for the release of the left mouse button, you can "draw" slurs by using the mouse. Similarly, Shift with left mouse button (MveL-Shift) is set to allow you to drag notes up and down the staff. (This is using Command MoveNoteToCursor, which is found under Notes/Rests/Edit/Edit Note/To Cursor)
It is possible to add more commands to the set that Denemo ships with. Some of these are shipped with Denemo, but not added automatically so as to keep the menu sizes manageable. Generally, you right-click to find more menu items to add; once added you can set a keyboard/mouse shortcut and keep the command in your default setup.
You can also get Denemo to remember a frequently used sequence of actions - it can be installed in the menu system and given a keyboard shortcut just like any other command.
To do this you right-click and choose Show Scheme Script. (You do not have to understand what a Scheme Script is to use this!). In the little window that pops up set Record Scheme Script and then do the set of steps you wish Denemo to remember, using the menu items, not keyboard, for each step.
As a simple example, suppose you wanted a command to delete the next note (there are commands to delete the previous note and the current note, so why not?). You would enter some notes, put on Record Scheme Script and then from the menu Cursor select Cursor Right (to move on to the note to be deleted), and with the Notes/Rests->Delete->Delete Object menu item you would delete the note. (Each time you use a menu item you will see a new command entered into the Scheme window). Now turn off Record Scheme Script and you can experiment with your new command by pressing Execute in the Scheme Script window. To save this new command for future use, you right click on a menu item (in the menu where you would like the command to appear) and choose "Save Script as New Menu Item", this will ask you to make up a name for your new command as well as a label for the menu item etc.
You can save the command in your default sequence of commands (via Edit->Customize Commands...->Manage Command Set->Save as Default Command Set). If not you will be asked if you want to save your new commands when you exit. Otherwise you can re-load via the More->My Commands menu item.
There is an even easier way of adding your own favorite LilyPond tweaks, which is by modifying a tweak that has already been done. This can be done by using the text-edit dialog on an existing Denemo Directive (usually found under the Advanced button provided by an edit script). Here you can see the actual LilyPond text that will be inserted, and there is a button to create a script to generate whatever you choose to enter. You can also enter the name of graphic images (.png files) that are to be used to represent your item in the display, and say where it should be positioned.
Once you have created the script, it can be saved in the menu system by right clicking on an item in the menu where you want to place the command, and choosing "Save Script as New Menu Item" as above.
If you are a programmer you will have guessed that you can edit the Scheme Script window to create any command you want. Even if you are not familiar with Scheme you may find that you can adapt other scripts to do what you want.
A good example of this is a script to insert a particular LilyPond directive into the score. This is all that many scripts do: it is easy to see the piece of LilyPond in the Scheme Script window, and by changing it you can create a new command.
For example, from the More menu select the command /menus/ObjectMenu/Instruments/Orchestral/RehearsalMark (the files are laid out in folders/directories in the same way as the menu system itself). Then choose Get Script from the right click menu. With this command its script is appended to the Scheme Script window. Here you can see the part that says
-
(d-DirectivePut-standalone-postfix "RehearsalMark" " \\mark \\default" )
which is inserting the LilyPond directive "\mark \default" which inserts the default rehearsal mark. (The extra \s are needed to tell Scheme that you literally mean a \ sign). You can change this to insert any other LilyPond that you need - always doubling the \ signs. The you can save as a new menu item, or use Save Script to customize the script you started with.
More ambitious programmers will need to know all the commands available. Besides the complete Denemo command set (the list is given in the Command Management window) there are the following additional Scheme procedures defined.
- d-InitializeScript deprecated - init.scm is now run automatically. (parameter: action-name) runs a script init.scm in the menupath attached to the action whose name is given. Used by commands that need a time-consuming initialization step which can be skipped on subsequent calls.
- d-GetType returns a scheme string indicating the type of the current object
- d-GetNoteName returns a scheme string, giving the note name a-g of the current note
- d-GetNote returns a scheme string, the note name, accidental and octave of the current note (LilyPond notation)
- d-GetNotes returns a scheme string, the notes of a chord separated by NULL characters
- d-PutNoteName takes a string argument, a note in LilyPond notation. Changes the note at the cursor. Not for use with multi-note chords.
- d-DiatonicShift Deprecated.
- d-NextObject moves cursor to next object, returning TRUE if current object has changed
- d-NextChord as d-NextObject, but skipping non-chord objects. chords includes rests and chords with 1 or more notes.
- d-NextNote as d-NextChord but skipping rests (i.e. chords with 0 notes).
- d-NextStandaloneDirective as NextObject, stopping on a standalone directive. Using d-DirectiveGet-standalone tag a directive of a particular tag can be found.
- (d-Directive-type? optional-tag) where type is one of score, scoreheader, movementcontrol, header, paper, layout, clef, timesig, keysig, staff, voice, standalone, chord or note.This returns #t if the cursor is on a directive of type (with tag optional-tag if optional-tag is present) else #f
- (d-DirectivePut-standalone? tag) inserts a standalone directive with the given tag at the current cursor position and places the cursor on it.
- (d-DirectiveGetTag-type) where type is one of score, scoreheader, movementcontrol, header, paper, layout, clef, timesig, keysig, staff, voice, standalone, chord or note. This returns the tag if the cursor is on a directive of type else #f
- (d-DirectiveGetTagForTag-type tag) returns the tag passed in if the cursor is on directive of type with that tag, else it returns the tag of the first directive of type that is present at the cursor, else #f
- d-WarningDialog Pass a string argument to pop up a warning.
- d-GetOption (parameter string of options). Takes a null separated set of options and pops up a dialog offering them to the user. Returns the one chosen or #f if the user cancels.
- d-GetChar returns a string containing a single character from the user (blocks waiting for a keypress)
- d-GetKeypress returns a string representing a keypress from the user (blocks waiting for a keypress) (e.g. Up for the up arrow key etc.)
- d-GetCommand returns a string containing the command name for the user's keypress (blocks waiting for a keypress)
- d-GetUserInput takes three strings, displays and returns the user's response as a string.
-
d-GetMidi
-
d-PutMidi
-
d-PlayMidiKey
-
d-BassFigure
-
d-GetNoteAsMidi
-
d-RefreshDisplay
-
d-InputFilterNames sets the status bar
-
d-Chordize Ensure that even a single note is treated as a chord - needed for some LilyPond constructs (e.g. fingerings)
Standard Denemo commands that pop up dialogs will work as usual if no argument is passed to them from Scheme. In general if a string consisting of strings of the form "name=value\0" is passed these will be used and no popup will occur. The field "name" will be given the value "value". The \0 is a NULL character that separates the assignment strings. As a shorthand if there is only one value being passed you can just pass the value. The names of the fields depend on the action being called. So for example
Example 2.
(d-Open "filename=myfile.denemo\0")
will open the file "myfile.denemo".
This feature is being rolled out, and currently works for
-
d-InsertLilyDirective (directive, display. minpixels) (deprecated function)
-
d-AttachLilyToChord (prefix, postfix, display) deprecated see d-DirectiveGet-chord-* and d-DirectivePut-chord-* below
-
d-AttachLilyToNote (prefix, postfix, display) deprecated see d-DirectiveGet-note* and Put below
-
d-StaffProperties understands a couple of property=value settings
-
d-InitialClef
-
d-InsertClef
-
d-InitialKey
-
d-InsertKey
-
d-Open filename
-
d-ScoreProperties (fontsize= size of font to be used for score)
Complete List of Functions Callable from Scheme
- d-Modeless one optional parameter: To be documented
- d-ClassicMode one optional parameter: To be documented
- d-InsertMode one optional parameter: To be documented
- d-EditMode one optional parameter: To be documented
- d-Note one optional parameter: To be documented
- d-Rest one optional parameter: To be documented
- d-Blank one optional parameter: To be documented
- d-Rhythm one optional parameter: To be documented
- d-CursorLeft one optional parameter: Moves the cursor one object left, altering the selection if any
- d-CursorDown one optional parameter: Moves the cursor one scale step down
- d-CursorUp one optional parameter: Moves the cursor one scale step up
- d-CursorRight one optional parameter: Moves the cursor one object right, altering the selection if any
- d-GoToMark one optional parameter: Moves the cursor to the Mark without altering the selection
- d-StaffUp one optional parameter: Moves the cursor to the staff above
- d-StaffDown one optional parameter: Moves the cursor to the staff below
- d-MeasureLeft one optional parameter: Moves the cursor to the first object in the next measure
- d-MeasureRight one optional parameter: Moves the cursor to the first object in the previous measure
- d-A one optional parameter: Action for note A (Insert, Edit or Move Cursor, depending on Mode)
- d-B one optional parameter: Action for note B (Insert, Edit or Move Cursor, depending on Mode)
- d-C one optional parameter: Action for note C (Insert, Edit or Move Cursor, depending on Mode)
- d-D one optional parameter: Action for note D (Insert, Edit or Move Cursor, depending on Mode)
- d-E one optional parameter: Action for note E (Insert, Edit or Move Cursor, depending on Mode)
- d-F one optional parameter: Action for note F (Insert, Edit or Move Cursor, depending on Mode)
- d-G one optional parameter: Action for note G (Insert, Edit or Move Cursor, depending on Mode)
- d-OctaveUp one optional parameter: Octave Up
- d-OctaveDown one optional parameter: Octave Down
- d-WholeNote one optional parameter: Insert whole-note
- d-HalfNote one optional parameter: Insert half-note
- d-QuarterNote one optional parameter: Insert quarter-note
- d-EighthNote one optional parameter: Insert eighth-note
- d-SixteenthNote one optional parameter: Insert sixteenth-note
- d-ThirtysecondNote one optional parameter: Insert thirty-second-note
- d-SixtyfourthNote one optional parameter: Insert sixty-fourth-note
- d-InsertBlankWholeNote one optional parameter: No Tooltip yet
- d-InsertBlankHalfNote one optional parameter: No Tooltip yet
- d-InsertBlankQuarterNote one optional parameter: No Tooltip yet
- d-InsertBlankEighthNote one optional parameter: No Tooltip yet
- d-InsertBlankSixteenthNote one optional parameter: No Tooltip yet
- d-InsertBlankThirtysecondNote one optional parameter: No Tooltip yet
- d-InsertBlankSixtyfourthNote one optional parameter: No Tooltip yet
- d-ToggleRestMode one optional parameter: No Tooltip yet
- d-ToggleBlankMode one optional parameter: No Tooltip yet
- d-InsertWholeRest one optional parameter: Insert whole-note rest
- d-InsertHalfRest one optional parameter: Insert half-note rest
- d-InsertQuarterRest one optional parameter: Insert quarter-note rest
- d-InsertEighthRest one optional parameter: Insert eighth-note rest
- d-InsertSixteenthRest one optional parameter: Insert sixteenth-note rest
- d-InsertThirtysecondRest one optional parameter: Insert thirty-second note rest
- d-InsertSixtyfourthRest one optional parameter: Insert sixty-fourth note rest
- d-InsertDuplet one optional parameter: No Tooltip yet
- d-InsertTriplet one optional parameter: No Tooltip yet
- d-StartTriplet one optional parameter: No Tooltip yet
- d-EndTuplet one optional parameter: No Tooltip yet
- d-InsertQuadtuplet one optional parameter: No Tooltip yet
- d-InsertQuintuplet one optional parameter: No Tooltip yet
- d-InsertSextuplet one optional parameter: No Tooltip yet
- d-InsertSeptuplet one optional parameter: No Tooltip yet
- d-AddNoteToChord one optional parameter: Add a note to the current chord
The cursor position determines which note to add
- d-RemoveNoteFromChord one optional parameter: Remove a note from the current chord
- d-Sharpen one optional parameter: No Tooltip yet
- d-Flatten one optional parameter: No Tooltip yet
- d-StemUp one optional parameter: Alters a StemNeutral object to stem up.
- d-StemDown one optional parameter: Alters a StemNeutral object to stem down.
- d-AddDot one optional parameter: No Tooltip yet
- d-RemoveDot one optional parameter: No Tooltip yet
- d-InsertTiedNote one optional parameter: Inserts a duplicate of the current note, tied
- d-ToggleTie one optional parameter: Ties/unties the note at the cursor
- d-DeleteObject one optional parameter: Delete the object at the cursor
- d-DeletePreviousObject one optional parameter: Delete to the left of the cursor.
- d-InsertMeasure one optional parameter: Insert a blank measure before the current one (in all staffs)
- d-AppendMeasure one optional parameter: No Tooltip yet
- d-DeleteMeasure one optional parameter: Delete the current measure in this staff, leaving the staff short
- d-DeleteMeasureAllStaffs one optional parameter: Delete the current measure in all staffs
- d-ShrinkMeasures one optional parameter: No Tooltip yet
- d-WidenMeasures one optional parameter: No Tooltip yet
- d-ShorterStaffs one optional parameter: No Tooltip yet
- d-TallerStaffs one optional parameter: No Tooltip yet
- d-InsertTrebleClef one optional parameter: No Tooltip yet
- d-InsertBassClef one optional parameter: No Tooltip yet
- d-Insertg8clef one optional parameter: No Tooltip yet
- d-InsertAltoClef one optional parameter: No Tooltip yet
- d-InsertTenorClef one optional parameter: No Tooltip yet
- d-InsertSopranoClef one optional parameter: No Tooltip yet
- d-SetInitialTrebleClef one optional parameter: No Tooltip yet
- d-SetInitialBassClef one optional parameter: No Tooltip yet
- d-SetInitialg8clef one optional parameter: No Tooltip yet
- d-SetInitialAltoClef one optional parameter: No Tooltip yet
- d-SetInitialTenorClef one optional parameter: No Tooltip yet
- d-SetInitialSopranoClef one optional parameter: No Tooltip yet
- d-Insert22Time one optional parameter: No Tooltip yet
- d-Insert32Time one optional parameter: No Tooltip yet
- d-Insert42Time one optional parameter: No Tooltip yet
- d-Insert44Time one optional parameter: No Tooltip yet
- d-Insert34Time one optional parameter: No Tooltip yet
- d-Insert24Time one optional parameter: No Tooltip yet
- d-Insert64Time one optional parameter: No Tooltip yet
- d-Insert38Time one optional parameter: No Tooltip yet
- d-Insert68Time one optional parameter: No Tooltip yet
- d-Insert128Time one optional parameter: No Tooltip yet
- d-Insert98Time one optional parameter: No Tooltip yet
- d-Set22Time one optional parameter: No Tooltip yet
- d-Set32Time one optional parameter: No Tooltip yet
- d-Set42Time one optional parameter: No Tooltip yet
- d-Set44Time one optional parameter: No Tooltip yet
- d-Set34Time one optional parameter: No Tooltip yet
- d-Set24Time one optional parameter: No Tooltip yet
- d-Set64Time one optional parameter: No Tooltip yet
- d-Set38Time one optional parameter: No Tooltip yet
- d-Set68Time one optional parameter: No Tooltip yet
- d-Set128Time one optional parameter: No Tooltip yet
- d-Set98Time one optional parameter: No Tooltip yet
- d-InsertCmaj one optional parameter: No Tooltip yet
- d-InsertGmaj one optional parameter: No Tooltip yet
- d-InsertDmaj one optional parameter: No Tooltip yet
- d-InsertAmaj one optional parameter: No Tooltip yet
- d-InsertEmaj one optional parameter: No Tooltip yet
- d-InsertBmaj one optional parameter: No Tooltip yet
- d-InsertFSharpmaj one optional parameter: No Tooltip yet
- d-InsertCSharpmaj one optional parameter: No Tooltip yet
- d-InsertFmaj one optional parameter: No Tooltip yet
- d-InsertBflatmaj one optional parameter: No Tooltip yet
- d-InsertEflatmaj one optional parameter: No Tooltip yet
- d-InsertAflatmaj one optional parameter: No Tooltip yet
- d-InsertDflatmaj one optional parameter: No Tooltip yet
- d-InsertGflatmaj one optional parameter: No Tooltip yet
- d-InsertCflatmaj one optional parameter: No Tooltip yet
- d-InsertAmin one optional parameter: No Tooltip yet
- d-InsertEmin one optional parameter: No Tooltip yet
- d-InsertBmin one optional parameter: No Tooltip yet
- d-InsertFSharpmin one optional parameter: No Tooltip yet
- d-InsertCSharpmin one optional parameter: No Tooltip yet
- d-InsertGSharpmin one optional parameter: No Tooltip yet
- d-InsertDSharpmin one optional parameter: No Tooltip yet
- d-InsertASharpmin one optional parameter: No Tooltip yet
- d-InsertDmin one optional parameter: No Tooltip yet
- d-InsertGmin one optional parameter: No Tooltip yet
- d-InsertCmin one optional parameter: No Tooltip yet
- d-InsertFmin one optional parameter: No Tooltip yet
- d-InsertBflatmin one optional parameter: No Tooltip yet
- d-InsertEflatmin one optional parameter: No Tooltip yet
- d-InsertAflatmin one optional parameter: No Tooltip yet
- d-SetInitialCmaj one optional parameter: No Tooltip yet
- d-SetInitialGmaj one optional parameter: No Tooltip yet
- d-SetInitialDmaj one optional parameter: No Tooltip yet
- d-SetInitialAmaj one optional parameter: No Tooltip yet
- d-SetInitialEmaj one optional parameter: No Tooltip yet
- d-SetInitialBmaj one optional parameter: No Tooltip yet
- d-SetInitialFSharpmaj one optional parameter: No Tooltip yet
- d-SetInitialCSharpmaj one optional parameter: No Tooltip yet
- d-SetInitialFmaj one optional parameter: No Tooltip yet
- d-SetInitialBflatmaj one optional parameter: No Tooltip yet
- d-SetInitialEflatmaj one optional parameter: No Tooltip yet
- d-SetInitialAflatmaj one optional parameter: No Tooltip yet
- d-SetInitialDflatmaj one optional parameter: No Tooltip yet
- d-SetInitialGflatmaj one optional parameter: No Tooltip yet
- d-SetInitialCflatmaj one optional parameter: No Tooltip yet
- d-SetInitialAmin one optional parameter: No Tooltip yet
- d-SetInitialEmin one optional parameter: No Tooltip yet
- d-SetInitialBmin one optional parameter: No Tooltip yet
- d-SetInitialFSharpmin one optional parameter: No Tooltip yet
- d-SetInitialCSharpmin one optional parameter: No Tooltip yet
- d-SetInitialGSharpmin one optional parameter: No Tooltip yet
- d-SetInitialDSharpmin one optional parameter: No Tooltip yet
- d-SetInitialASharpmin one optional parameter: No Tooltip yet
- d-SetInitialDmin one optional parameter: No Tooltip yet
- d-SetInitialGmin one optional parameter: No Tooltip yet
- d-SetInitialCmin one optional parameter: No Tooltip yet
- d-SetInitialFmin one optional parameter: No Tooltip yet
- d-SetInitialBflatmin one optional parameter: No Tooltip yet
- d-SetInitialEflatmin one optional parameter: No Tooltip yet
- d-SetInitialAflatmin one optional parameter: No Tooltip yet
- d-SetMark one optional parameter: Sets the start point for a selection,
the cursor position is the end point
- d-UnsetMark one optional parameter: Gets rid of the selection.
- d-ToggleBeginSlur one optional parameter: Insert/delete begin slur on this note
- d-ToggleEndSlur one optional parameter: Insert/delete end slur on this note
- d-ToggleStartCrescendo one optional parameter: No Tooltip yet
- d-ToggleEndCrescendo one optional parameter: No Tooltip yet
- d-ToggleStartDiminuendo one optional parameter: No Tooltip yet
- d-ToggleEndDiminuendo one optional parameter: No Tooltip yet
- d-ToggleAccent one optional parameter: No Tooltip yet
- d-ToggleFermata one optional parameter: No Tooltip yet
- d-ToggleStaccato one optional parameter: No Tooltip yet
- d-ToggleTenuto one optional parameter: No Tooltip yet
- d-ToggleTrill one optional parameter: No Tooltip yet
- d-ToggleTurn one optional parameter: No Tooltip yet
- d-ToggleMordent one optional parameter: No Tooltip yet
- d-ToggleStaccatissimo one optional parameter: No Tooltip yet
- d-ToggleCoda one optional parameter: No Tooltip yet
- d-ToggleFlageolet one optional parameter: No Tooltip yet
- d-ToggleOpen one optional parameter: No Tooltip yet
- d-TogglePrallMordent one optional parameter: No Tooltip yet
- d-TogglePrallPrall one optional parameter: No Tooltip yet
- d-TogglePrall one optional parameter: No Tooltip yet
- d-ToggleReverseTurn one optional parameter: No Tooltip yet
- d-ToggleSegno one optional parameter: No Tooltip yet
- d-ToggleSforzato one optional parameter: No Tooltip yet
- d-ToggleStopped one optional parameter: No Tooltip yet
- d-ToggleThumb one optional parameter: No Tooltip yet
- d-ToggleUpprall one optional parameter: No Tooltip yet
- d-ToggleArpeggio one optional parameter: No Tooltip yet
- d-SetGrace one optional parameter: No Tooltip yet
- d-ForceCaution one optional parameter: No Tooltip yet
- d-ChangePitch one optional parameter: No Tooltip yet
- d-DoubleBar one optional parameter: No Tooltip yet
- d-EndBar one optional parameter: No Tooltip yet
- d-OpenRepeat one optional parameter: No Tooltip yet
- d-CloseRepeat one optional parameter: No Tooltip yet
- d-OpenCloseRepeat one optional parameter: No Tooltip yet
- d-InsertRhythm one optional parameter: No Tooltip yet
- d-NextRhythm one optional parameter: Make next rhythm pattern
the prevailing rhythm.
Notes entered will follow this pattern
- d-AppendMeasuresToScore one optional parameter: No Tooltip yet
- d-SharpenEnharmonicSet one optional parameter: Shifts the set of accidentals one step sharper
- d-FlattenEnharmonicSet one optional parameter: Shifts the set of accidentals one step flatter
- d-New one optional parameter: Start a new musical score
- d-Open one optional parameter: Open a file containing a music score for editing
- d-AddStaffs one optional parameter: Add staffs from a Denemo file
- d-AddMovements one optional parameter: Add movements from a Denemo file
- d-MovementProps one optional parameter: Change properties of this movement
- d-OpenNewWindow one optional parameter: Open a file containing a music score for editing in a separate working area (tab
- d-Save one optional parameter: Save the score
- d-SaveAs one optional parameter: Save the score under a new name
- d-OpenTemplate one optional parameter: Start a new score from a built-in template file
- d-OpenExample one optional parameter: Start a new score from a built-in example
- d-OpenMyTemplate one optional parameter: Start a new score from one of your own template files
- d-SaveTemplate one optional parameter: Save the score as a template for re-use as a starting point for new scores
- d-NewWindow one optional parameter: Create working area (tab with an empty score in it)
- d-InsertMovementBefore one optional parameter: Insert a new movement before the current one
- d-InsertMovementAfter one optional parameter: Insert a new movement after the current one
- d-NewMovement one optional parameter: Create a new movement, usign any default template
- d-SaveParts one optional parameter: Save Parts: each staff becomes a file in lilypond format
- d-ExportPDF one optional parameter: Export the score as a PDF document file
- d-ConfigureScore one optional parameter: Start up a wizard to create a new score. This allows you to set various properties of the score
- d-PrintPreview one optional parameter: Displays the final finished score in your pdf viewer
- d-PrintSelection one optional parameter: Displays selected music from score in your pdf viewer
- d-PrintExcerptPreview one optional parameter: Displays a musical excerpt in your image viewer
- d-Print one optional parameter: Displays the final finished score in a pdf viewer. From this you can print the file using the print command of the viewer
- d-PrintPart one optional parameter: Displays the final finished score for the current part (that is current staff
- d-Close one optional parameter: Close the current score. Other windows will stay open
- d-Quit one optional parameter: Quit the Denemo program
- d-Undo one optional parameter: Undo
- d-Redo one optional parameter: Redo
- d-Copy one optional parameter: Copy
- d-Cut one optional parameter: Cut
- d-Paste one optional parameter: Paste the selected music
- d-PasteClipboard one optional parameter: Paste LilyPond notes from the text clipboard
- d-ScoreProperties one optional parameter: Change some of the properties of the current score. This will start up a dialog window
- d-SaveSelection one optional parameter: Save the selected music. Not sure if this is working
- d-Preferences one optional parameter: Set and save your preferences for how Denemo operates on startup. Edit .denemo/denemorc for missing ones
- d-SaveAccels one optional parameter: Save the current commands and keyboard shortcuts as the default
- d-CommandManagement one optional parameter: View help, change and save keyboard shortcuts
- d-LoadPlugins one optional parameter: Load Plugins
- d-UnloadPlugins one optional parameter: Unload Plugins
- d-ListPlugins one optional parameter: List the loaded plugins
- d-ListAvailablePlugins one optional parameter: List the available plugins
- d-SwapStaffs one optional parameter: Swap this staff with the one higher up. Note this actually swaps voices.
- d-SplitVoices one optional parameter: Split off the next voice as a separate staff
- d-JoinVoices one optional parameter: Merge this staff as a voice on the previous staff
- d-SwapMovements one optional parameter: Swap this movement with the one before
- d-VoiceUp one optional parameter: Go to the higher numbered voice on staff
- d-VoiceDown one optional parameter: Go to the lower numbered voice on this staff
- d-AddBefore one optional parameter: Inserts a new staff before the current staff
- d-AddAfter one optional parameter: Inserts/Adds a new staff after the current staff
- d-AddInitial one optional parameter: Inserts a new staff at the top of the score
- d-AddLast one optional parameter: Inserts a new staff at the end of the score
- d-DeleteBefore one optional parameter: Deletes the staff before the current staff
- d-DeleteStaff one optional parameter: Deletes the current staff
- d-DeleteAfter one optional parameter: Deletes the staff after the current staff
- d-AddVoice one optional parameter: Adds a new voice (part), to the current staff. It is tricky to switch between the voices. Suggest to use merge staffs
- d-StaffProperties one optional parameter: Change the properties of the current staff
- d-InitialClef one optional parameter: Change the initial clef of the current staff
- d-InsertClef one optional parameter: Insert/Edit a change of clef at the cursor
- d-InitialKey one optional parameter: Set the initial key signature of the current staff
- d-InsertKey one optional parameter: Insert/Edit a key change at the cursor position
- d-InitialTimeSig one optional parameter: Set the initial time signature of the current staff
- d-InsertTimeSig one optional parameter: Edit/Insert a time signature change for the current measure
- d-ChangeNotehead one optional parameter: Change the type of notehead for the current note
- d-InsertStem one optional parameter: Inserts a stem neutral object. After this automatic stem directions are active. You can click on this tag and use Sharpen/StemUp etc commands to change stem direction
- d-AddVerse one optional parameter: Add a verse of lyrics
- d-DeleteVerse one optional parameter: Deletes current verse of lyrics from current voice
- d-EditFiguredBass one optional parameter: Add a bass figure to the current note. Use | sign to split the duration of a note so as to have multiple figures on one note. See Lilypond docs for other notation
- d-EditChords one optional parameter: Allows chord symbols to be added to the current note. E.G.cis:dim7 for c-sharp diminished 7th. See Lilypond docs for notation
- d-InsertDynamic one optional parameter: Inserts a dynamic marking at the cursor position
- d-InsertLilyDirective one optional parameter: Insert or edit a directive in the LilyPond music typesetting language. This can be used for extra spacing, transposing or almost anything. See LilyPond documentation for ideas.
- d-EditObject one optional parameter: Edit the object at the cursor.
- d-EditDirective one optional parameter: Edit any directives attached to chord/note at cursor.
- d-EditStaffDirective one optional parameter: Edit any directives attached to staff.
- d-EditVoiceDirective one optional parameter: Edit any directives attached to voice.
- d-EditScoreDirective one optional parameter: Edit any directives attached to score.
- d-EditMovementDirective one optional parameter: Edit any directives attached to movement.
- d-EditClefDirective one optional parameter: Edit any directives attached to clef.
- d-EditTimesigDirective one optional parameter: Edit any directives attached to time signature.
- d-EditKeysigDirective one optional parameter: Edit any directives attached to key signature.
- d-DeleteDirective one optional parameter: Delete a directive attached to chord/note at cursor.
- d-AttachLilyToNote one optional parameter: Attach or edit attached LilyPond text to the note at the cursor. This can be used for guitar fingerings, cautionary accidentals and much more. See LilyPond documentation.
- d-AttachLilyToChord one optional parameter: Attach or edit attached LilyPond text to the chord at the cursor. This can be used for attaching and placing text and much more. See LilyPond documentation.
- d-InsertBarline one optional parameter: Inserts specialized barline at the cursor position. Mostly not working
- d-GoToMeasure one optional parameter: Opens a dialog for going to a numbered measure
- d-GoToBeginning one optional parameter: Go To Beginning
- d-GoToEnd one optional parameter: Go To End
- d-NextMovement one optional parameter: Go to the next movement
- d-PreviousMovement one optional parameter: Go to the previous movement
- d-DeleteMovement one optional parameter: Delete the current movement
- d-DeleteBookmarks one optional parameter: Delete all bookmarks in current movement
- d-Play one optional parameter: Play
- d-Stop one optional parameter: Stop
- d-PlayCSound one optional parameter: Play using CSound...
- d-PlaybackProperties one optional parameter: Allows you to specify properties used in playing back (midi and csound
- d-Help one optional parameter: Opens a browser on the user manual
- d-About one optional parameter: Gives the version number etc of this program
- d-MoreCommands one optional parameter: Allows choosing standard extra commands/menu items
- d-MyCommands one optional parameter: Allows choosing extra commands/menu items from your own collection of extras
- d-FetchCommands one optional parameter: Refreshes the set of commands available from Denemo.org.
Use More Commands after this has finished
- d-AddBookmark one optional parameter: Bookmark the current cursor position
- d-GotoBookmark one optional parameter: Go to a bookmarked point in the score
- d-NextBookmark one optional parameter: Go to the next bookmarked point in the list
- d-PrevBookmark one optional parameter: Go to the previous bookmarked point in the list
- d-ToggleEdit one optional parameter: Toggle between current mode and edit mode
- d-ToggleRest one optional parameter: Toggle between note entry and rest entry
- d-ToggleRhythm one optional parameter: Toggle audible feedback on/off
- d-ClearOverlay one optional parameter: Clear the list of pitches that overlay the notes
- d-CreateRhythm one optional parameter: Copy selection as a rhythm pattern for notes to follow as they are entered
- d-DeleteRhythm one optional parameter: Delete the selected rhythm pattern
- d-ChangeToA one optional parameter: Changes note at cursor to nearest note A
Rhythm is unchanged
- d-InsertA one optional parameter: Inserts note A before note at cursor
Cursor determines which octave
Note is inserted in the prevailing rhythm
- d-ChangeToB one optional parameter: Changes note at cursor to nearest note B
Rhythm is unchanged
- d-InsertB one optional parameter: Inserts note B before note at cursor
Cursor determines which octave
Note is inserted in the prevailing rhythm
- d-ChangeToC one optional parameter: Changes note at cursor to nearest note C
Rhythm is unchanged
- d-InsertC one optional parameter: Inserts note C before note at cursor
Cursor determines which octave
Note is inserted in the prevailing rhythm
- d-ChangeToD one optional parameter: Changes note at cursor to nearest note D
Rhythm is unchanged
- d-InsertD one optional parameter: Inserts note D before note at cursor
Cursor determines which octave
Note is inserted in the prevailing rhythm
- d-ChangeToE one optional parameter: Changes note at cursor to nearest note E
Rhythm is unchanged
- d-InsertE one optional parameter: Inserts note E before note at cursor
Cursor determines which octave
Note is inserted in the prevailing rhythm
- d-ChangeToF one optional parameter: Changes note at cursor to nearest note F
Rhythm is unchanged
- d-InsertF one optional parameter: Inserts note F before note at cursor
Cursor determines which octave
Note is inserted in the prevailing rhythm
- d-ChangeToG one optional parameter: Changes note at cursor to nearest note G
Rhythm is unchanged
- d-InsertG one optional parameter: Inserts note G before note at cursor
Cursor determines which octave
Note is inserted in the prevailing rhythm
- d-0 one optional parameter: In insert mode, changes prevailing rhythm to music-sign (0)
In edit mode changes the current note to music-sign (0)
or appends a music-sign (0) if no current note
In classic mode inserts a music-sign (0) at the cursor
- d-Insert0 one optional parameter: Insert a music-sign (0)
- d-Change0 one optional parameter: Change the current note to a music-sign (0)
- d-InsertRest0 one optional parameter: Inserts a rest at cursor position
Sets prevailing rhythm to music-sign (0)
- d-ChangeRest0 one optional parameter: Changes a rest at cursor position
Sets prevailing rhythm to music-sign (0)
- d-1 one optional parameter: In insert mode, changes prevailing rhythm to music-sign (1)
In edit mode changes the current note to music-sign (1)
or appends a music-sign (1) if no current note
In classic mode inserts a music-sign (1) at the cursor
- d-Insert1 one optional parameter: Insert a music-sign (1)
- d-Change1 one optional parameter: Change the current note to a music-sign (1)
- d-InsertRest1 one optional parameter: Inserts a rest at cursor position
Sets prevailing rhythm to music-sign (1)
- d-ChangeRest1 one optional parameter: Changes a rest at cursor position
Sets prevailing rhythm to music-sign (1)
- d-2 one optional parameter: In insert mode, changes prevailing rhythm to music-sign (2)
In edit mode changes the current note to music-sign (2)
or appends a music-sign (2) if no current note
In classic mode inserts a music-sign (2) at the cursor
- d-Insert2 one optional parameter: Insert a music-sign (2)
- d-Change2 one optional parameter: Change the current note to a music-sign (2)
- d-InsertRest2 one optional parameter: Inserts a rest at cursor position
Sets prevailing rhythm to music-sign (2)
- d-ChangeRest2 one optional parameter: Changes a rest at cursor position
Sets prevailing rhythm to music-sign (2)
- d-3 one optional parameter: In insert mode, changes prevailing rhythm to music-sign (3)
In edit mode changes the current note to music-sign (3)
or appends a music-sign (3) if no current note
In classic mode inserts a music-sign (3) at the cursor
- d-Insert3 one optional parameter: Insert a music-sign (3)
- d-Change3 one optional parameter: Change the current note to a music-sign (3)
- d-InsertRest3 one optional parameter: Inserts a rest at cursor position
Sets prevailing rhythm to music-sign (3)
- d-ChangeRest3 one optional parameter: Changes a rest at cursor position
Sets prevailing rhythm to music-sign (3)
- d-4 one optional parameter: In insert mode, changes prevailing rhythm to music-sign (4)
In edit mode changes the current note to music-sign (4)
or appends a music-sign (4) if no current note
In classic mode inserts a music-sign (4) at the cursor
- d-Insert4 one optional parameter: Insert a music-sign (4)
- d-Change4 one optional parameter: Change the current note to a music-sign (4)
- d-InsertRest4 one optional parameter: Inserts a rest at cursor position
Sets prevailing rhythm to music-sign (4)
- d-ChangeRest4 one optional parameter: Changes a rest at cursor position
Sets prevailing rhythm to music-sign (4)
- d-5 one optional parameter: In insert mode, changes prevailing rhythm to music-sign (5)
In edit mode changes the current note to music-sign (5)
or appends a music-sign (5) if no current note
In classic mode inserts a music-sign (5) at the cursor
- d-Insert5 one optional parameter: Insert a music-sign (5)
- d-Change5 one optional parameter: Change the current note to a music-sign (5)
- d-InsertRest5 one optional parameter: Inserts a rest at cursor position
Sets prevailing rhythm to music-sign (5)
- d-ChangeRest5 one optional parameter: Changes a rest at cursor position
Sets prevailing rhythm to music-sign (5)
- d-6 one optional parameter: In insert mode, changes prevailing rhythm to music-sign (6)
In edit mode changes the current note to music-sign (6)
or appends a music-sign (6) if no current note
In classic mode inserts a music-sign (6) at the cursor
- d-Insert6 one optional parameter: Insert a music-sign (6)
- d-Change6 one optional parameter: Change the current note to a music-sign (6)
- d-InsertRest6 one optional parameter: Inserts a rest at cursor position
Sets prevailing rhythm to music-sign (6)
- d-ChangeRest6 one optional parameter: Changes a rest at cursor position
Sets prevailing rhythm to music-sign (6)
- d-HideMenus one optional parameter: To be documented
- d-ScriptCallback one required and one optional parameter: To be documented
- d-GetOption one required and one optional parameter: To be documented
- d-GetTextSelection one optional parameter: To be documented
- d-GetOffset one optional parameter: To be documented
- d-GetPadding one optional parameter: To be documented
- d-GetRelativeFontSize one optional parameter: To be documented
- d-InitializeScript one required and one optional parameter: To be documented
- d-LoadCommand one required and one optional parameter: To be documented
- d-LocateDotDenemo one optional parameter: To be documented
- d-GetType one optional parameter: To be documented
- d-GetCursorNote one optional parameter: To be documented
- d-DebugObject one optional parameter: To be documented
- d-GetNoteName one optional parameter: To be documented
- d-GetNote one optional parameter: To be documented
- d-GetNotes one optional parameter: To be documented
- d-GetNoteDuration one optional parameter: To be documented
- d-CursorToNote one optional parameter: To be documented
- d-ChangeChordNotes one optional parameter: To be documented
- d-PutNoteName one optional parameter: To be documented
- d-DiatonicShift one optional parameter: To be documented
- d-NextObject one optional parameter: To be documented
- d-NextSelectedObject one optional parameter: To be documented
- d-NextChord one optional parameter: To be documented
- d-NextNote one optional parameter: To be documented
- d-NextStandaloneDirective one optional parameter: To be documented
- d-Chordize one optional parameter: To be documented
- d-HTTP four parameters: To be documented
- d-GetUserInput three parameters: To be documented
- d-WarningDialog one optional parameter: To be documented
- d-InfoDialog one optional parameter: To be documented
- d-GetChar one optional parameter: To be documented
- d-GetKeypress one optional parameter: To be documented
- d-GetCommandKeypress one optional parameter: To be documented
- d-GetCommand one optional parameter: To be documented
- d-SetDirectiveTagActionScript two parameters: To be documented
- d-DirectiveGetForTag-standalone one required and one optional parameter: To be documented
- d-DirectiveGetForTag-chord one required and one optional parameter: To be documented
- d-DirectiveGetForTag-note one required and one optional parameter: To be documented
- d-DirectiveGetForTag-staff one required and one optional parameter: To be documented
- d-DirectiveGetForTag-voice one required and one optional parameter: To be documented
- d-DirectiveGetForTag-score one required and one optional parameter: To be documented
- d-DirectiveGetForTag-clef one required and one optional parameter: To be documented
- d-DirectiveGetForTag-timesig one required and one optional parameter: To be documented
- d-DirectiveGetForTag-keysig one required and one optional parameter: To be documented
- d-DirectiveGetForTag-scoreheader one required and one optional parameter: To be documented
- d-DirectiveGetForTag-header one required and one optional parameter: To be documented
- d-DirectiveGetForTag-paper one required and one optional parameter: To be documented
- d-DirectiveGetForTag-layout one required and one optional parameter: To be documented
- d-DirectiveGetForTag-movementcontrol one required and one optional parameter: To be documented
- d-DirectiveDelete-note one required and one optional parameter: To be documented
- d-DirectiveTextEdit-note one required and one optional parameter: To be documented
- d-DirectiveDelete-chord one required and one optional parameter: To be documented
- d-DirectiveTextEdit-chord one required and one optional parameter: To be documented
- d-DirectiveDelete-staff one required and one optional parameter: To be documented
- d-DirectiveTextEdit-staff one required and one optional parameter: To be documented
- d-DirectiveDelete-voice one required and one optional parameter: To be documented
- d-DirectiveTextEdit-voice one required and one optional parameter: To be documented
- d-DirectiveDelete-score one required and one optional parameter: To be documented
- d-DirectiveTextEdit-score one required and one optional parameter: To be documented
- d-DirectiveTextEdit-standalone one required and one optional parameter: To be documented
- d-DirectiveGet-standalone-minpixels one required and one optional parameter: To be documented
- d-DirectiveGet-chord-minpixels one required and one optional parameter: To be documented
- d-DirectiveGet-note-minpixels one required and one optional parameter: To be documented
- d-DirectiveGet-staff-minpixels one required and one optional parameter: To be documented
- d-DirectiveGet-voice-minpixels one required and one optional parameter: To be documented
- d-DirectiveGet-score-minpixels one required and one optional parameter: To be documented
- d-DirectiveGet-clef-minpixels one required and one optional parameter: To be documented
- d-DirectiveGet-timesig-minpixels one required and one optional parameter: To be documented
- d-DirectiveGet-keysig-minpixels one required and one optional parameter: To be documented
- d-DirectiveGet-scoreheader-minpixels one required and one optional parameter: To be documented
- d-DirectiveGet-header-minpixels one required and one optional parameter: To be documented
- d-DirectiveGet-paper-minpixels one required and one optional parameter: To be documented
- d-DirectiveGet-layout-minpixels one required and one optional parameter: To be documented
- d-DirectiveGet-movementcontrol-minpixels one required and one optional parameter: To be documented
- d-DirectivePut-standalone-minpixels two parameters: To be documented
- d-DirectivePut-chord-minpixels two parameters: To be documented
- d-DirectivePut-note-minpixels two parameters: To be documented
- d-DirectivePut-staff-minpixels two parameters: To be documented
- d-DirectivePut-voice-minpixels two parameters: To be documented
- d-DirectivePut-score-minpixels two parameters: To be documented
- d-DirectivePut-clef-minpixels two parameters: To be documented
- d-DirectivePut-timesig-minpixels two parameters: To be documented
- d-DirectivePut-keysig-minpixels two parameters: To be documented
- d-DirectivePut-scoreheader-minpixels two parameters: To be documented
- d-DirectivePut-header-minpixels two parameters: To be documented
- d-DirectivePut-paper-minpixels two parameters: To be documented
- d-DirectivePut-layout-minpixels two parameters: To be documented
- d-DirectivePut-movementcontrol-minpixels two parameters: To be documented
- d-DirectiveGet-standalone-midibytes one required and one optional parameter: To be documented
- d-DirectiveGet-chord-midibytes one required and one optional parameter: To be documented
- d-DirectiveGet-note-midibytes one required and one optional parameter: To be documented
- d-DirectiveGet-staff-midibytes one required and one optional parameter: To be documented
- d-DirectiveGet-voice-midibytes one required and one optional parameter: To be documented
- d-DirectiveGet-score-midibytes one required and one optional parameter: To be documented
- d-DirectiveGet-movementcontrol-midibytes one required and one optional parameter: To be documented
- d-DirectivePut-standalone-midibytes two parameters: To be documented
- d-DirectivePut-chord-midibytes two parameters: To be documented
- d-DirectivePut-note-midibytes two parameters: To be documented
- d-DirectivePut-staff-midibytes two parameters: To be documented
- d-DirectivePut-score-midibytes two parameters: To be documented
- d-DirectivePut-movementcontrol-midibytes two parameters: To be documented
- d-DirectiveGet-standalone-override one required and one optional parameter: To be documented
- d-DirectiveGet-chord-override one required and one optional parameter: To be documented
- d-DirectiveGet-note-override one required and one optional parameter: To be documented
- d-DirectiveGet-staff-override one required and one optional parameter: To be documented
- d-DirectiveGet-voice-override one required and one optional parameter: To be documented
- d-DirectiveGet-score-override one required and one optional parameter: To be documented
- d-DirectivePut-standalone-override two parameters: To be documented
- d-DirectivePut-chord-override two parameters: To be documented
- d-DirectivePut-note-override two parameters: To be documented
- d-DirectivePut-staff-override two parameters: To be documented
- d-DirectivePut-voice-override two parameters: To be documented
- d-DirectivePut-score-override two parameters: To be documented
- d-DirectivePut-note-graphic two parameters: To be documented
- d-DirectivePut-chord-graphic two parameters: To be documented
- d-DirectivePut-standalone-graphic two parameters: To be documented
- d-DirectivePut-staff-graphic two parameters: To be documented
- d-DirectivePut-voice-graphic two parameters: To be documented
- d-DirectivePut-score-graphic two parameters: To be documented
- d-DirectivePut-chord-display two parameters: To be documented
- d-DirectivePut-chord-prefix two parameters: To be documented
- d-DirectivePut-chord-postfix two parameters: To be documented
- d-DirectiveGet-chord-display one required and one optional parameter: To be documented
- d-DirectiveGet-chord-prefix one required and one optional parameter: To be documented
- d-DirectiveGet-chord-postfix one required and one optional parameter: To be documented
- d-DirectivePut-note-display two parameters: To be documented
- d-DirectivePut-note-prefix two parameters: To be documented
- d-DirectivePut-note-postfix two parameters: To be documented
- d-DirectiveGet-note-display one required and one optional parameter: To be documented
- d-DirectiveGet-note-prefix one required and one optional parameter: To be documented
- d-DirectiveGet-note-postfix one required and one optional parameter: To be documented
- d-DirectivePut-standalone-display two parameters: To be documented
- d-DirectivePut-standalone-prefix two parameters: To be documented
- d-DirectivePut-standalone-postfix two parameters: To be documented
- d-DirectiveGet-standalone-display one required and one optional parameter: To be documented
- d-DirectiveGet-standalone-prefix one required and one optional parameter: To be documented
- d-DirectiveGet-standalone-postfix one required and one optional parameter: To be documented
- d-DirectivePut-staff-display two parameters: To be documented
- d-DirectivePut-staff-prefix two parameters: To be documented
- d-DirectivePut-staff-postfix two parameters: To be documented
- d-DirectiveGet-staff-display one required and one optional parameter: To be documented
- d-DirectiveGet-staff-prefix one required and one optional parameter: To be documented
- d-DirectiveGet-staff-postfix one required and one optional parameter: To be documented
- d-DirectivePut-voice-display two parameters: To be documented
- d-DirectivePut-voice-prefix two parameters: To be documented
- d-DirectivePut-voice-postfix two parameters: To be documented
- d-DirectiveGet-voice-display one required and one optional parameter: To be documented
- d-DirectiveGet-voice-prefix one required and one optional parameter: To be documented
- d-DirectiveGet-voice-postfix one required and one optional parameter: To be documented
- d-DirectivePut-score-display two parameters: To be documented
- d-DirectivePut-score-prefix two parameters: To be documented
- d-DirectivePut-score-postfix two parameters: To be documented
- d-DirectiveGet-score-display one required and one optional parameter: To be documented
- d-DirectiveGet-score-prefix one required and one optional parameter: To be documented
- d-DirectiveGet-score-postfix one required and one optional parameter: To be documented
- d-DirectiveGet-score-x one required and one optional parameter: To be documented
- d-DirectiveGet-score-gx one required and one optional parameter: To be documented
- d-DirectiveGet-score-tx one required and one optional parameter: To be documented
- d-DirectivePut-score-x two parameters: To be documented
- d-DirectivePut-score-gx two parameters: To be documented
- d-DirectivePut-score-tx two parameters: To be documented
- d-DirectiveGet-score-y one required and one optional parameter: To be documented
- d-DirectiveGet-score-gy one required and one optional parameter: To be documented
- d-DirectiveGet-score-ty one required and one optional parameter: To be documented
- d-DirectivePut-score-y two parameters: To be documented
- d-DirectivePut-score-gy two parameters: To be documented
- d-DirectivePut-score-ty two parameters: To be documented
- d-DirectivePut-note-x two parameters: To be documented
- d-DirectiveGet-note-x one required and one optional parameter: To be documented
- d-DirectivePut-chord-x two parameters: To be documented
- d-DirectiveGet-chord-x one required and one optional parameter: To be documented
- d-DirectivePut-note-y two parameters: To be documented
- d-DirectiveGet-note-y one required and one optional parameter: To be documented
- d-DirectivePut-chord-y two parameters: To be documented
- d-DirectiveGet-chord-y one required and one optional parameter: To be documented
- d-DirectivePut-note-tx two parameters: To be documented
- d-DirectiveGet-note-tx one required and one optional parameter: To be documented
- d-DirectivePut-chord-tx two parameters: To be documented
- d-DirectiveGet-chord-tx one required and one optional parameter: To be documented
- d-DirectivePut-note-ty two parameters: To be documented
- d-DirectiveGet-note-ty one required and one optional parameter: To be documented
- d-DirectivePut-chord-ty two parameters: To be documented
- d-DirectiveGet-chord-ty one required and one optional parameter: To be documented
- d-DirectivePut-note-gx two parameters: To be documented
- d-DirectiveGet-note-gx one required and one optional parameter: To be documented
- d-DirectivePut-chord-gx two parameters: To be documented
- d-DirectiveGet-chord-gx one required and one optional parameter: To be documented
- d-DirectivePut-note-gy two parameters: To be documented
- d-DirectiveGet-note-gy one required and one optional parameter: To be documented
- d-DirectivePut-chord-gy two parameters: To be documented
- d-DirectiveGet-chord-gy one required and one optional parameter: To be documented
- d-DirectivePut-standalone-x two parameters: To be documented
- d-DirectiveGet-standalone-x one required and one optional parameter: To be documented
- d-DirectivePut-standalone-y two parameters: To be documented
- d-DirectiveGet-standalone-y one required and one optional parameter: To be documented
- d-DirectivePut-standalone-tx two parameters: To be documented
- d-DirectiveGet-standalone-tx one required and one optional parameter: To be documented
- d-DirectivePut-standalone-ty two parameters: To be documented
- d-DirectiveGet-standalone-ty one required and one optional parameter: To be documented
- d-DirectivePut-standalone-gx two parameters: To be documented
- d-DirectiveGet-standalone-gx one required and one optional parameter: To be documented
- d-DirectivePut-standalone-gy two parameters: To be documented
- d-DirectiveGet-standalone-gy one required and one optional parameter: To be documented
- d-DirectiveGet-note-width one required and one optional parameter: To be documented
- d-DirectiveGet-chord-width one required and one optional parameter: To be documented
- d-DirectiveGet-standalone-width one required and one optional parameter: To be documented
- d-DirectiveGet-note-height one required and one optional parameter: To be documented
- d-DirectiveGet-chord-height one required and one optional parameter: To be documented
- d-DirectiveGet-standalone-height one required and one optional parameter: To be documented
- d-DirectivePut-clef-display two parameters: To be documented
- d-DirectivePut-clef-prefix two parameters: To be documented
- d-DirectivePut-clef-postfix two parameters: To be documented
- d-DirectivePut-clef-graphic two parameters: To be documented
- d-DirectiveGet-clef-display one required and one optional parameter: To be documented
- d-DirectiveGet-clef-prefix one required and one optional parameter: To be documented
- d-DirectiveGet-clef-postfix one required and one optional parameter: To be documented
- d-DirectivePut-clef-x two parameters: To be documented
- d-DirectivePut-clef-y two parameters: To be documented
- d-DirectivePut-clef-tx two parameters: To be documented
- d-DirectivePut-clef-ty two parameters: To be documented
- d-DirectivePut-clef-gx two parameters: To be documented
- d-DirectivePut-clef-gy two parameters: To be documented
- d-DirectivePut-clef-override two parameters: To be documented
- d-DirectiveGet-clef-x one required and one optional parameter: To be documented
- d-DirectiveGet-clef-y one required and one optional parameter: To be documented
- d-DirectiveGet-clef-tx one required and one optional parameter: To be documented
- d-DirectiveGet-clef-ty one required and one optional parameter: To be documented
- d-DirectiveGet-clef-gx one required and one optional parameter: To be documented
- d-DirectiveGet-clef-gy one required and one optional parameter: To be documented
- d-DirectiveGet-clef-override one required and one optional parameter: To be documented
- d-DirectiveGet-clef-width one required and one optional parameter: To be documented
- d-DirectiveGet-clef-height one required and one optional parameter: To be documented
- d-DirectiveDelete-clef one required and one optional parameter: To be documented
- d-DirectiveTextEdit-clef one required and one optional parameter: To be documented
- d-DirectivePut-timesig-display two parameters: To be documented
- d-DirectivePut-timesig-prefix two parameters: To be documented
- d-DirectivePut-timesig-postfix two parameters: To be documented
- d-DirectivePut-timesig-graphic two parameters: To be documented
- d-DirectiveGet-timesig-display one required and one optional parameter: To be documented
- d-DirectiveGet-timesig-prefix one required and one optional parameter: To be documented
- d-DirectiveGet-timesig-postfix one required and one optional parameter: To be documented
- d-DirectivePut-timesig-x two parameters: To be documented
- d-DirectivePut-timesig-y two parameters: To be documented
- d-DirectivePut-timesig-tx two parameters: To be documented
- d-DirectivePut-timesig-ty two parameters: To be documented
- d-DirectivePut-timesig-gx two parameters: To be documented
- d-DirectivePut-timesig-gy two parameters: To be documented
- d-DirectivePut-timesig-override two parameters: To be documented
- d-DirectiveGet-timesig-x one required and one optional parameter: To be documented
- d-DirectiveGet-timesig-y one required and one optional parameter: To be documented
- d-DirectiveGet-timesig-tx one required and one optional parameter: To be documented
- d-DirectiveGet-timesig-ty one required and one optional parameter: To be documented
- d-DirectiveGet-timesig-gx one required and one optional parameter: To be documented
- d-DirectiveGet-timesig-gy one required and one optional parameter: To be documented
- d-DirectiveGet-timesig-override one required and one optional parameter: To be documented
- d-DirectiveGet-timesig-width one required and one optional parameter: To be documented
- d-DirectiveGet-timesig-height one required and one optional parameter: To be documented
- d-DirectiveDelete-timesig one required and one optional parameter: To be documented
- d-DirectiveTextEdit-timesig one required and one optional parameter: To be documented
- d-DirectivePut-keysig-display two parameters: To be documented
- d-DirectivePut-keysig-prefix two parameters: To be documented
- d-DirectivePut-keysig-postfix two parameters: To be documented
- d-DirectivePut-keysig-graphic two parameters: To be documented
- d-DirectiveGet-keysig-display one required and one optional parameter: To be documented
- d-DirectiveGet-keysig-prefix one required and one optional parameter: To be documented
- d-DirectiveGet-keysig-postfix one required and one optional parameter: To be documented
- d-DirectivePut-keysig-x two parameters: To be documented
- d-DirectivePut-keysig-y two parameters: To be documented
- d-DirectivePut-keysig-tx two parameters: To be documented
- d-DirectivePut-keysig-ty two parameters: To be documented
- d-DirectivePut-keysig-gx two parameters: To be documented
- d-DirectivePut-keysig-gy two parameters: To be documented
- d-DirectivePut-keysig-override two parameters: To be documented
- d-DirectiveGet-keysig-x one required and one optional parameter: To be documented
- d-DirectiveGet-keysig-y one required and one optional parameter: To be documented
- d-DirectiveGet-keysig-tx one required and one optional parameter: To be documented
- d-DirectiveGet-keysig-ty one required and one optional parameter: To be documented
- d-DirectiveGet-keysig-gx one required and one optional parameter: To be documented
- d-DirectiveGet-keysig-gy one required and one optional parameter: To be documented
- d-DirectiveGet-keysig-override one required and one optional parameter: To be documented
- d-DirectiveGet-keysig-width one required and one optional parameter: To be documented
- d-DirectiveGet-keysig-height one required and one optional parameter: To be documented
- d-DirectiveDelete-keysig one required and one optional parameter: To be documented
- d-DirectiveTextEdit-keysig one required and one optional parameter: To be documented
- d-DirectivePut-scoreheader-display two parameters: To be documented
- d-DirectivePut-scoreheader-prefix two parameters: To be documented
- d-DirectivePut-scoreheader-postfix two parameters: To be documented
- d-DirectivePut-scoreheader-graphic two parameters: To be documented
- d-DirectiveGet-scoreheader-display one required and one optional parameter: To be documented
- d-DirectiveGet-scoreheader-prefix one required and one optional parameter: To be documented
- d-DirectiveGet-scoreheader-postfix one required and one optional parameter: To be documented
- d-DirectivePut-scoreheader-x two parameters: To be documented
- d-DirectivePut-scoreheader-y two parameters: To be documented
- d-DirectivePut-scoreheader-tx two parameters: To be documented
- d-DirectivePut-scoreheader-ty two parameters: To be documented
- d-DirectivePut-scoreheader-gx two parameters: To be documented
- d-DirectivePut-scoreheader-gy two parameters: To be documented
- d-DirectivePut-scoreheader-override two parameters: To be documented
- d-DirectiveGet-scoreheader-x one required and one optional parameter: To be documented
- d-DirectiveGet-scoreheader-y one required and one optional parameter: To be documented
- d-DirectiveGet-scoreheader-tx one required and one optional parameter: To be documented
- d-DirectiveGet-scoreheader-ty one required and one optional parameter: To be documented
- d-DirectiveGet-scoreheader-gx one required and one optional parameter: To be documented
- d-DirectiveGet-scoreheader-gy one required and one optional parameter: To be documented
- d-DirectiveGet-scoreheader-override one required and one optional parameter: To be documented
- d-DirectiveGet-scoreheader-width one required and one optional parameter: To be documented
- d-DirectiveGet-scoreheader-height one required and one optional parameter: To be documented
- d-DirectiveDelete-scoreheader one required and one optional parameter: To be documented
- d-DirectiveTextEdit-scoreheader one required and one optional parameter: To be documented
- d-DirectivePut-header-display two parameters: To be documented
- d-DirectivePut-header-prefix two parameters: To be documented
- d-DirectivePut-header-postfix two parameters: To be documented
- d-DirectivePut-header-graphic two parameters: To be documented
- d-DirectiveGet-header-display one required and one optional parameter: To be documented
- d-DirectiveGet-header-prefix one required and one optional parameter: To be documented
- d-DirectiveGet-header-postfix one required and one optional parameter: To be documented
- d-DirectivePut-header-x two parameters: To be documented
- d-DirectivePut-header-y two parameters: To be documented
- d-DirectivePut-header-tx two parameters: To be documented
- d-DirectivePut-header-ty two parameters: To be documented
- d-DirectivePut-header-gx two parameters: To be documented
- d-DirectivePut-header-gy two parameters: To be documented
- d-DirectivePut-header-override two parameters: To be documented
- d-DirectiveGet-header-x one required and one optional parameter: To be documented
- d-DirectiveGet-header-y one required and one optional parameter: To be documented
- d-DirectiveGet-header-tx one required and one optional parameter: To be documented
- d-DirectiveGet-header-ty one required and one optional parameter: To be documented
- d-DirectiveGet-header-gx one required and one optional parameter: To be documented
- d-DirectiveGet-header-gy one required and one optional parameter: To be documented
- d-DirectiveGet-header-override one required and one optional parameter: To be documented
- d-DirectiveGet-header-width one required and one optional parameter: To be documented
- d-DirectiveGet-header-height one required and one optional parameter: To be documented
- d-DirectiveDelete-header one required and one optional parameter: To be documented
- d-DirectiveTextEdit-header one required and one optional parameter: To be documented
- d-DirectivePut-paper-display two parameters: To be documented
- d-DirectivePut-paper-prefix two parameters: To be documented
- d-DirectivePut-paper-postfix two parameters: To be documented
- d-DirectivePut-paper-graphic two parameters: To be documented
- d-DirectiveGet-paper-display one required and one optional parameter: To be documented
- d-DirectiveGet-paper-prefix one required and one optional parameter: To be documented
- d-DirectiveGet-paper-postfix one required and one optional parameter: To be documented
- d-DirectivePut-paper-x two parameters: To be documented
- d-DirectivePut-paper-y two parameters: To be documented
- d-DirectivePut-paper-tx two parameters: To be documented
- d-DirectivePut-paper-ty two parameters: To be documented
- d-DirectivePut-paper-gx two parameters: To be documented
- d-DirectivePut-paper-gy two parameters: To be documented
- d-DirectivePut-paper-override two parameters: To be documented
- d-DirectiveGet-paper-x one required and one optional parameter: To be documented
- d-DirectiveGet-paper-y one required and one optional parameter: To be documented
- d-DirectiveGet-paper-tx one required and one optional parameter: To be documented
- d-DirectiveGet-paper-ty one required and one optional parameter: To be documented
- d-DirectiveGet-paper-gx one required and one optional parameter: To be documented
- d-DirectiveGet-paper-gy one required and one optional parameter: To be documented
- d-DirectiveGet-paper-override one required and one optional parameter: To be documented
- d-DirectiveGet-paper-width one required and one optional parameter: To be documented
- d-DirectiveGet-paper-height one required and one optional parameter: To be documented
- d-DirectiveDelete-paper one required and one optional parameter: To be documented
- d-DirectiveTextEdit-paper one required and one optional parameter: To be documented
- d-DirectivePut-layout-display two parameters: To be documented
- d-DirectivePut-layout-prefix two parameters: To be documented
- d-DirectivePut-layout-postfix two parameters: To be documented
- d-DirectivePut-layout-graphic two parameters: To be documented
- d-DirectiveGet-layout-display one required and one optional parameter: To be documented
- d-DirectiveGet-layout-prefix one required and one optional parameter: To be documented
- d-DirectiveGet-layout-postfix one required and one optional parameter: To be documented
- d-DirectivePut-layout-x two parameters: To be documented
- d-DirectivePut-layout-y two parameters: To be documented
- d-DirectivePut-layout-tx two parameters: To be documented
- d-DirectivePut-layout-ty two parameters: To be documented
- d-DirectivePut-layout-gx two parameters: To be documented
- d-DirectivePut-layout-gy two parameters: To be documented
- d-DirectivePut-layout-override two parameters: To be documented
- d-DirectiveGet-layout-x one required and one optional parameter: To be documented
- d-DirectiveGet-layout-y one required and one optional parameter: To be documented
- d-DirectiveGet-layout-tx one required and one optional parameter: To be documented
- d-DirectiveGet-layout-ty one required and one optional parameter: To be documented
- d-DirectiveGet-layout-gx one required and one optional parameter: To be documented
- d-DirectiveGet-layout-gy one required and one optional parameter: To be documented
- d-DirectiveGet-layout-override one required and one optional parameter: To be documented
- d-DirectiveGet-layout-width one required and one optional parameter: To be documented
- d-DirectiveGet-layout-height one required and one optional parameter: To be documented
- d-DirectiveDelete-layout one required and one optional parameter: To be documented
- d-DirectiveTextEdit-layout one required and one optional parameter: To be documented
- d-DirectivePut-movementcontrol-display two parameters: To be documented
- d-DirectivePut-movementcontrol-prefix two parameters: To be documented
- d-DirectivePut-movementcontrol-postfix two parameters: To be documented
- d-DirectivePut-movementcontrol-graphic two parameters: To be documented
- d-DirectiveGet-movementcontrol-display one required and one optional parameter: To be documented
- d-DirectiveGet-movementcontrol-prefix one required and one optional parameter: To be documented
- d-DirectiveGet-movementcontrol-postfix one required and one optional parameter: To be documented
- d-DirectivePut-movementcontrol-x two parameters: To be documented
- d-DirectivePut-movementcontrol-y two parameters: To be documented
- d-DirectivePut-movementcontrol-tx two parameters: To be documented
- d-DirectivePut-movementcontrol-ty two parameters: To be documented
- d-DirectivePut-movementcontrol-gx two parameters: To be documented
- d-DirectivePut-movementcontrol-gy two parameters: To be documented
- d-DirectivePut-movementcontrol-override two parameters: To be documented
- d-DirectiveGet-movementcontrol-x one required and one optional parameter: To be documented
- d-DirectiveGet-movementcontrol-y one required and one optional parameter: To be documented
- d-DirectiveGet-movementcontrol-tx one required and one optional parameter: To be documented
- d-DirectiveGet-movementcontrol-ty one required and one optional parameter: To be documented
- d-DirectiveGet-movementcontrol-gx one required and one optional parameter: To be documented
- d-DirectiveGet-movementcontrol-gy one required and one optional parameter: To be documented
- d-DirectiveGet-movementcontrol-override one required and one optional parameter: To be documented
- d-DirectiveGet-movementcontrol-width one required and one optional parameter: To be documented
- d-DirectiveGet-movementcontrol-height one required and one optional parameter: To be documented
- d-DirectiveDelete-movementcontrol one required and one optional parameter: To be documented
- d-DirectiveTextEdit-movementcontrol one required and one optional parameter: To be documented
- d-PutTextClipboard one required and one optional parameter: To be documented
- d-GetLyric one optional parameter: To be documented
- d-GetUserName one optional parameter: To be documented
- d-GetPassword one optional parameter: To be documented
- d-GetMidi one optional parameter: To be documented
- d-PutMidi one required and one optional parameter: To be documented
- d-PlayMidiKey one required and one optional parameter: To be documented
- d-BassFigure two parameters: To be documented
- d-GetNoteAsMidi one optional parameter: To be documented
- d-RefreshDisplay one optional parameter: To be documented
- d-SetSaved one optional parameter: To be documented
- d-InputFilterNames one optional parameter: To be documented
These give attributes to objects that are not built-in but can be changed by the user.
Denemo Directives can be attached at almost every level of a Denemo score and can modify the behavior of the element concerned. They contain fields to describe how the element's properties should be modified, either in the display or in the printing. Elements, such as clefs notes etc have their own built-in display and print properties; Denemo Directives allow you (or scripts you invoke) to modify them for many more purposes than the built-in set allows. This means Denemo can grow - you can add features - without getting a new version.
For example the drum clef is not built-in to Denemo. Instead a directive attached to the clef has a field (graphic) set to an image of the drum clef, and another field (postfix) set to the LilyPond syntax for a drum clef, while another field (override) is set to indicate that these values should replace the normal ones, rather than adding to them.
The elements that can be modified in this way are the following:
-
score: the LilyPond fields (prefix and postfix) are placed at the start of the score and just before each movement. The display field is shown at the top of the display.
-
scoreheader: Attached to the score. The postfix field is put inside a \header{} block at the start of the score.
-
movementcontrol: Attached to a movement. The prefix field is placed before the movements \score{} block, the postfix after it.
-
header: Attached to a movement. As scoreheader but for \header[] blocks inside the movement's score block.
-
paper: Attached to the score. The postfix is placed inside a \paper{} block.
-
layout: Attached to a movement. The postfix is placed inside a \layout{} block in the movement's scoreblock.
-
clef: Attached to a clef or clef change. The graphic holds the displayed icon, gx,gy its position. The postfix field is put into the music at the point where the clef is found, replacing the normal text if the override is set.
-
timesig: Attached to a time signature or time signature change. The graphic holds the displayed icon, gx,gy its position. The postfix field is put into the music at the point where the time signature is found, replacing the normal text if the override is set.
-
keysig: as timesig but for key signatures. (e.g. used to supress keysignatures in drum clef).
-
staff: The postfix field modifies the whole staff context, with the display field printed at the start of the staff
-
voice: The postfix field modifies the voice context, with the display field printed at the start of the staff containing the voice
-
standalone: A directive not attached to an music element - it comes with the music and is used for things like repeat bars etc.
-
chord: The prefix field is emitted before the LilyPond for the chord and the postfix after it.
-
note: The prefix field is emitted before the LilyPond for the note and the postfix after it. Examples are fingerings attached to notes etc. Again the display and graphic fields a placed in the display positioned relative to the note via the coordinate fields gx, gy (for the graphic) and tx, ty for the display text.
The Directives are sufficiently important to have their own commands.
-
d-DirectivePut-type-field where type is one of score, scoreheader, movementcontrol, header, paper, layout, clef, timesig, keysig, staff, voice, standalone, chord or note and field is one of display, tx, ty, gx, gy, graphic, prefix, postfix, override, midibytes. These commands take two arguments, a tag (string) and a value to set. For example
Example 3.
(d-DirectivePut-note-postfix "LHFinger" "3")
will put the fingering 3 on (after) the note at the cursor.
-
d-DirectiveGet-type-field type is one of score, scoreheader, movementcontrol, header, paper, layout, clef, timesig, keysig, staff, voice, standalone, chord or note and field is one of display, tx, ty, gx, gy, graphic, prefix, postfix, override, midibytes. This function returns the value in the field or #f if there is no directive with the given tag at the cursor.
-
d-DirectiveDelete-type type is one of score, scoreheader, movementcontrol, header, paper, layout, clef, timesig, keysig, staff, voice, standalone, chord or note. This function returns #t or #f if a directive with the given tag was deleted.
The fields of the Denemo Directive can control the Denemo Display and the LilyPond output.
The fields in d-DirectiveGet/Put have the following meanings
-
postfix - A fragment of LilyPond to be output (after the LilyPond for any object the directive is attached to).
-
prefix - A fragment of LilyPond to be output (before the LilyPond for any object the directive is attached to).
-
display - text to be shown in the Denemo Display
-
tx, ty - where to show the text in the Denemo Display
-
graphic - For directives that are in the music this is a .png image to be shown in the Denemo Display (the directory bitmaps holds these). The graphic can be saved for a command using the right-click -> Save Graphic command, after selecting a portion of the print preview as the image required. For directives attached to the score, movement etc the string set here will be displayed on the button in the button box for that sort of directive (see Show Score Titles etc in view menu for showing this button box).
-
gx, gy - where to show thegraphic in the Denemo Display
-
minpixels - how much space to leave for this item in the Denemo Display
-
override - Contains bits to determine whether the LilyPond contained in the Directive (postfix and/or prefix fields) should override the normal LilyPond output, and whether the Graphic should replace the normal Denemo display for the item. A further tranche of bits controls MIDI output for the directive, which can override the normal MIDI interpretation of the music and provide additional information not explicit in the music notation (e.g. the tempo of an Adagio marking).
-
midibytes - a string of numbers (in hexadecimal format) whose interpretation is given by the MIDI bits in the override field
The override field contains the following bits:
-
DENEMO_OVERRIDE_LILYPOND : override the LilyPond output normally used at this point, rather than adding to the normal output. The text used is in the prefix and postfix fields.
-
DENEMO_OVERRIDE_GRAPHIC : overrides what Denemo would normally show in the display with the image named in the graphic field of the directive
The MIDI bits in the override field are as follows
-
DENEMO_OVERRIDE_VOLUME : the MIDI velocity to use
-
DENEMO_OVERRIDE_DURATION : affects the duration of a note. not yet implemented
-
DENEMO_OVERRIDE_REPEAT : indicates that an earlier passage should be repeated (from a directive of the same tag). not yet implemented
-
DENEMO_OVERRIDE_CHANNEL : midibytes field gives the MIDI channel to use (? implemented?)
-
DENEMO_OVERRIDE_TEMPO : midibytes field gives the tempo to use.
The interpretation of these flags is modified by the following flags:
-
DENEMO_OVERRIDE_ONCE : the value in midibytes is to be used just for the item the directive is attached to. not yet implemented
-
DENEMO_OVERRIDE_STEP : the value in midibytes is to be used from this point on
-
DENEMO_OVERRIDE_RAMP : the value in midibytes is to be used as a starting value, a corresponding directive (i.e. with the same tag) gives the findal value, values are then interpolated between these. not yet implemented
-
DENEMO_OVERRIDE_RELATIVE : value in midibytes is used relative to the current value (otherwise it is an absolute value; e.g. an absolute velocity etc)
-
DENEMO_OVERRIDE_PERCENT : value in midibytes is interpreted as percentage value. not yet implemented
These flags are combined together to get the combination required for the directive using the scheme procedure called logior.
Here is an example, making a step-change in volume of 0x40 in the MIDI output, and printing "più mosso" in the output score
;;;;;;;;;; piu mosso
(d-DirectivePut-standalone-minpixels "StepTempo" 20)
(d-CursorLeft)
(d-DirectivePut-standalone-override "StepTempo" (logior DENEMO_OVERRIDE_TEMPO DENEMO_OVERRIDE_STEP DENEMO_OVERRIDE_RELATIVE))
(d-DirectivePut-standalone-midibytes "StepTempo" "40")
(d-DirectivePut-standalone-display "StepTempo" "piu mosso")
(d-DirectivePut-standalone-postfix "StepTempo" "^\\markup {\\bold \\italic \"più mosso\"}")
(d-RefreshDisplay)
In this example the directive is a standalone directive. MIDI commands are being extended to apply to chords and notes. Implementation of the commands for Voices, Movements, Score etc are not yet done.
Score and movement directives can define a value for their graphic - a button then appears at the top of the score which can be used to edit the directive. Likewise Staff and Voice directives show as a properties icon before the staff to which they apply (staff directives above, voice directives below). Clicking on these lets you edit the directive.
The command EditDirective can be used when the cursor is on a Denemo Directive object, or an object with a Denemo Directive attached to it. What happens then is determined by a script named after the "tag", or name of the directive. For example the command RehearsalMark creates a Directive with tag "RehearsalMark" and EditDirective runs a script called RehearsalMark.scm.
There is also a low-level editing dialog which is invoked if no editing script exists or directly from scheme using (d-DirectiveTextEdit-* tagname). This allows you to edit and delete a directive directly. The other directive editing commands are EditScoreDirective EditMovementDirective EditStaffDirective EditVoiceDirective EditClefDirective EditKeysigDirective EditTimesigDirective for directives attached to the relevant objects.
The low level edit of directives from scheme uses the following command:
-
(d-DirectiveTextEdit-<field> <tagname>). Where <tagname> specifies the directive to be edited and <field> is one of score, scoreheader, movementcontrol, header, paper, layout, clef, timesig, keysig, staff, voice, standalone, chord or note.
For example (d-DirectiveTextEdit-paper "PrintAllHeaders") gives low-level access to the directive setting the print all headers command in the paper block of the LilyPond output.
Each menu can have an initialization script, which can contain procedures that would be too time consuming to define every time they are needed. These scripts are guaranteed to be run before any menu item is activated within the menu. They can be read/written using the right click menu on any scripted menu item.
Each directive has a tag field, so that it can be recognized by the scripts that manipulate it. In particular for each tag there can be an edit script, for editing a directive of that tag.
Edit scripts are kept in a directory actions/editscripts parallel with the directory actions/menus where the commands themselves are kept.
You can read and write edit scripts by using the low level editing dialog on a directive with the tag you are writing for.
![[Note]](images/note.png) | Note |
---|
The low level editing dialog is the one that is presented if there is no edit script. Edit scripts can themselves give access to this dialog by including an option cue-Advanced which calls (d-DirectiveTextEdit-field tag) for the appropriate field and tag. For an example see the edit script for Instruments -> Orchestra -> RehearsalMark.
|
They have available functions to enable editing of directives which are defined in actions//denemo.scm executed at startup. The functions and variables for script editing are
-
d-GetOption followed by a nul separated list of options, offers the options to the user and returns one, or #f if the user cancels.
-
Extra-Offset tag type context. Takes three string options: tag is the name of the directive to be edited, which must be the name of a LilyPond object, type is the type of directive (note, chord, standalone, staff, voice or score), context is the LilyPond context of the object. Only tag is required. Shifts the object in the LilyPond output.
-
SetPadding tag type context. As Extra-Offset, it sets the space left around the item in the LilyPond engraving process.
-
SetRelativeFontSize tag type context. As Extra-Offset, it shifts the font size of the following text in the LilyPond engraving process.
-
CreateButton tag label this is just a convenience function to put a button with the passed in label onto a button box at the top of the screen. Scripts can attach actions to such tagged buttons.
-
Useful variables defined:
(define stop "\0")
(define cue-Advanced "Advanced")
(define cue-PlaceAbove "Place above staff")
(define cue-PlaceBelow "Place below staff")
(define cue-SetRelativeFontSize "Set Relative Font Size")
(define cue-OffsetPositionAll "Offset Position (All)")
(define cue-OffsetPositionOne "Offset Position (One)")
(define cue-EditText "Edit Text")
(define cue-SetPadding "Set Padding")
(define cue-Delete "Delete")
From version 0.7.8 we have the ability to edit the LilyPond output within Denemo. This approach immediately makes Denemo able to do many more things (e.g. multiple verses for songs) with the music still editable from within Denemo. The gallery of examples and the standard templates contain examples which you can use.
These can be used without knowing the LilyPond language (provided a suitable template or example file exists). Alternatively, with a general idea of how a LilyPond file works tweaks from the LilyPond documentation can be inserted into the LilyPond output and stored with the Denemo, leaving open the possibility of further editing of the notes within Denemo without the need to re-apply tweaks or keep separate LilyPond files.
Using the LilyPond Window
Under the View menu is a Show LilyPond item which pops up a window with the LilyPond output in it. The text is interspersed with buttons which enable you to hide or show the various sections or to create custom versions. The text in bold can be altered and the alterations are kept in the Denemo file.
The two windows are kept in sync, so you can move back and forth between editing textually and editing in Denemo.
Right clicking on the text gives a menu for actions on the LilyPond text. There is one for moving the cursor to the LilyPond text for the current Denemo object. Moving the cursor in the text window with the arrow keys causes the Denemo window cursor to move in synchronism.
This menu also includes a Print command that operates on the visible LilyPond text in the window. This means you can open specific custom score blocks and print from them, or even make a temporary edit for just one print. If you save the program while a choice of custom scoreblocks is open then these are remembered. So when you reload and hit Print those score blocks will be printed.
Several custom scoreblocks can be kept, and by making the one(s) desired visible, the same Denemo file can be used to print a variety of things from the same music input. For example, a full score or a set of parts, or several voices on group of staffs or even a piano reduction. The custom scoreblocks can be are named using the comment on the first line (see the template Piano.denemo for an example).
The various Voices/Staffs for the different Movements are separated by buttons. These are labelled by enumerating the movements and staffs in order, so the first voice in the first movement has the music defined as
"MvmntIVoiceIMusic" and so on. Within these music blocks you can insert arbitrary LilyPond text between notes, (the insertion points are marked by grey blocks)
and the text inserted will appear as a LilyPond directives in the main Denemo window.
The main Denemo window also moves its cursor to correspond with where you are editing. (It should of course move the cursor immediately you click on a point in the music, but, as yet, it only moves the cursor when you press a key just before the note name - one of the arrow keys will do).
Custom score blocks are created by right-clicking on the Standard score block and selecting create custom score block. You can cut and paste another score block, or start from the text of the standard one. If you print a single part from all movements, you get the standard scoreblock for this and can add it to your custom score block so that a single print command prints, e.g. both a full score and parts. Using the \book {} block you can put these into separate files (stored in the folder .denemo in your home folder).
The music defined by MvmntIVoiceIMusic is then used in the score blocks at the end of the LilyPond window, by the expression \MvmntIVoiceIMusic. This means that the same music can be output in several different ways, so that the same Denemo file can contain custom score blocks to output the music as a Piano Score with several voices or separate parts, for example.
The definitions for MvmntIVoiceIMusic actually look like this
-
MvmntIVoiceIProlog = {\MvmntIVoiceITimeSig \MvmntIVoiceIKeySig \MvmntIVoiceIClef}
-
MvmntIVoiceIMusic = {\MvmntIVoiceIProlog \MvmntIVoiceI}
Where \MvmntIVoiceI is the actual block of notes you have written, while the other definitions hold the time signature, clef etc. By using these, you can print the same music with different clefs, still maintaining the ability to edit the notes in Denemo.
Note that the normal Denemo Print commands are still operate as they do if you never look at the LilyPond window. What happens is that if you select the Print Current Part menu item then this creates a tailored standard scoreblock for that part. However, if you use the File->Print command then it prints the first custom scoreblock that is open (visible) (or the standard scoreblock if you do not have any custom scoreblocks).
![[Note]](images/note.png) | Note |
---|
Bugs:
Clicking (as opposed to using the arrow keys) in the LilyPond text does not move the cursor in the Denemo window.
Moving the text cursor in a lyric (etc.) does not move the Denemo cursor, so you cannot easily see where in the music it comes.
Inserting LilyPond text after last note of a movement has to be done in Denemo.
When you delete a LilyPond directive textually you have to move the cursor to start re-inserting it.
LilyPond notes cannot be parsed back in (would be useful for importing music from arbitrary LilyPond files).
LilyPond inserts at notes can only be completely deleted in the Denemo window - inserts are not merged.
|
Using the Denemo Classic Mode
This section describes how to use the original note entry mode to enter music from the keyboard.
Lets look at Figure 2, “Accidentals”. We see a c major scale and an arpeggio spread over two octaves. Type the letter 'c', the cursor jumps to the nearest c, (if it is in the wrong octave, type a comma [to go down] , or an apostrophe [to go up]) . We have reached middle c, we could start moving the cursor up note by note using the k key and then down note by note using the k key. A faster method however is to type the letter name of each note and moves the cursor to the exact pitch. This holds true for the notes of a chord or arpeggio, we jump to the note by typing the note name and adjust the octave with the command and apostrophe. This works if within an octave.
![[Note]](images/note.png) | Note |
---|
Often you will want to enter notes that jump a large interval. To speed up note entry in such circumstances help Denemo determine the direction by moving one step in that direction using the left or right keys. If you have entered a note on middle c and want to enter a b one octave higher, hit the k key before entering the note. Another solution to big leaps would be to first type an apostrophe or comma to get into the intended octave and only then type the note name. |
Rhythm Entry in Classic Mode
Now that we have an idea how to move around the staff we are ready to add note values. Note values are entered using the right hand. shows the rhythm entry keys as 0,1,2,3,4,5,6 . This yields the following: 0= a whole note, 1 = a half note, 2 = an quarter note,3= a eigth note,4 = a 16th note, 5 = a 32nd note, and 6 = a sixty fourth.
Accidentals in Classic Mode
Accidentals are added using the plus and minus keys on the keyboard. Double sharps and flats are added with additional pluses and minuses as needed in any particular key signature.
Figure 2, “Accidentals” shows a chromatic scale starting on middle C and ending on middle C. To add accidentals while typing new notes do the following:
Enter a middle C eighth note (type c and then the keybinding of the rhythmic value, if you need to adjust the octave use the command and apostrophe)
Enter another middle C eighth note, this time type the plus sign (+) immediately afterwards, a C sharp appears
Enter a D eighth note (type d followed by its rhythmic keybinding)
Enter a D sharp eighth note (type d and its rhythmic keybinding and then +)
Continue adding notes until you have an exact copy of the first two measures of Figure 2, “Accidentals”.
To add flats enter the b eighth note in measure 3 then type a dash (-) a b flat appears.
Continue adding flats until you have and exact copy of measures three and four.
To add accidentals to existing notation do the following:
Navigate to the note you want to alter using the arrow keys (or your custom keybindings).
![[Note]](images/note.png) | Note |
---|
You don't have to be on the exact pitch to add an accidental but make sure to be on the note you want to alter. |
Type a + to alter the pitch up a half step and a - to alter the pitch down a half step.
![[Note]](images/note.png) | Note |
---|
This will produce alterations based on the pitch of the original note. So that a f sharp will become a f double sharp and an e flat will become an e. |
![[Note]](images/note.png) | Note |
---|
For those familiar with LilyPond, Denemo handles accidentals in a more intuitive fashion. LilyPond requires you to explicitly name each note with an accidental even if it is part of the key signature, Denemo only requires an alteration if the accidental is part of the key signature, and it keeps the alteration for the entire measure. |
Chord Entry in Classic Mode
To enter a chord choose a pitch and a rhythm for your base note.
Next move the cursor to the next chord tone using the letter name for each note or the up and down keys, hit enter to add the note. To make chord entry easier there is a key binding also for the left hand (Ctrl t)as well. Type Enter to toggle chord tones on and off. This add tones or converts rests to a chord tones. Shift Enter removes tones and switches them to rests.
Figure 3, “Chords” three contains a series of chords. To enter chords:
Create a new file and save it to a convient location.
Navigate to the E above middle C. (type the alphabetical note names or the arrow keys).
Type an a and 1, a half note g appears.
Move the cursor to the g one line above and type Enter.
![[Note]](images/note.png) | Note |
---|
To alter chord tones chromatically, type the plus sign to sharpen the note at the cursor by one half-step and the minus sign to flatten the current note by a half step in the same manner you sharpen or flatten any pitch in Denemo |
![[Note]](images/note.png) | Note |
---|
Entering a chord when you are already at the end of the measure
(the cursor turns red when this happens) may cause your next note
to be added to the beginning of the next measure, or even
create a next measure if one didn't already exist. |
Note and Rest Entry Toolbar
This toolbar can be used to enter notes using the mouse. It also shows what the prevailing duration is, that is what duration of note will be inserted when you press a note name key.
The standard keybinding for entering notes in a chord is the Enter (aka Return) key. This enters the note at the cursor position making a chord out of the current note/chord. This works in Edit and Insert mode. In Classic mode it works on preceding note as you are appending notes.
Inserting LilyPond Directives
Denemo allow you to insert LilyPond directives between notes, prefixing and postfixing the individual notes of a chord or the whole chord itself and at the start of each staff in a score and at the start of each score. This means that the score can be tailored to a great extent without ever resorting to editing LilyPond files themselves. (Re-loading from an edited LilyPond file is generally unsuccessful).
To put a LilyPond directive on an individual note of a chord, put the cursor on that note and invoke
Other->AttachLilyToNote
To put a LilyPond directive between chords, place the cursor at the insertion point, and invoke
Other->InsertLilyPond
Such a LilyPond insert can be locked, which means you will be warned if you try to delete it while you are deleting notes.
When you have inserted a LilyPond directive a green bar is printed at that point below the staff. In addition if you specify some display text it will be shown. If the LilyPond inserted is text to be printed above staff the notation ^text can be used. Denemo will show this text above the staff. Likewise, _text will cause text to be printed under the staff. If you wish to annotate your music use %text, which Denemo will print, but LilyPond will not (a newline character is automatically inserted for you to ensure this happens). LilyPond attached to chords or notes shows the display text only. The status bar also shows some of the information.
Midi playback.
Denemo uses external midi player to play back your score. You can choose which program to use as follows. Go to the Playback menu and choosePlayback Properties and Externals tab. In the External Midi Player text box enter the name of your midi player. When you click on the Play item of the toobar the current movement is played starting from the measure with the cursor in it. If there is a selection then the measures containing the selection are played, otherwise play continues until you click stop or the movement ends.
While playing, the music scrolls automatically so that you can watch and either bookmark or stop the music if you hear something you want to re-visit. You can make corrections to the synchronism by using the measure forwards or backwards keypresses (usually bound to Ctrl right/left arrow). This automatic scrolling is turned off if you explicitly set the range of measures in the Playback->Playback Properties dialog
In addition to permitting midi playback, Denemo permits playback using csound. Denemo will play your file with a .orc file. In the playback properties make sure the command: csound -d -W is set. Next use the navigation box to choose your .orc file. Denemo will soon come with a few demo .orc files which you will find in XXX. The csound module of Denemo is currently under construction. It is not tested for this release.
Creating paper scores with Denemo is done via an intermediate PDF file. Denemo takes care of this for you, provided you have set the name of a PDF view in the Preferences. Once this is done click on Print Preview, or Print Part, wait for LilyPond to typeset your score the PDF viewer will pop-up, and you can print using the facilities of that program.
![[Note]](images/note.png) | Note |
---|
Denemo is unresponsive while LilyPond is working - be patient! |
Denemo has a variety of features to speed editing. To ease correction of notes us Edit Mode. You can position the cursor on any note in a chord and change its pitch, accidental, octave using the keypresses assigned to the standard actions.
Musical Score that Do Things!
By saving a Denemo score with a script defined (in the script window) you can create music lessons, automatic midi player ... the possibilities are (literally) endless. When you open such a score, the script is run - it can take user input and manipulate the score, or do other actions as your fancy takes you.
There is a special score init.denemo that is run on startup. By editing this you can startup with whatever template and whatever actions you wish to be performed. If you set it to do something that quits Denemo, you may need to delete the file before using Denemo normally again. Your local init.denemo is stored in the directory .denemo/actions in your home directory.To create it put the script you want in the script window and use SaveAs selecting ~/.denemo/actions/init.denemo as your file to save to.
Piano Staffs, Orchestral Scores etc
Piano staffs, and staff groups can be created using the context field of the score->properties dialog. You can set a piano staff within a staff group by setting successively the StartPiano and StartGroup contexts on a single staff, or more generally setting StartPiano, EndPiano on adjacent staffs within a staff group.
![[Note]](images/note.png) | Note |
---|
It is possible to set silly combinations – some will not print anything. Check that you have a Start and End staff for each type and that they are not miss-matched.
|
Denemo permits the use of mutiple staves for part work, as well as
enabling multiple voices on a single staff. To add voices to the current
staff do the following:
Go to the measure(s) where you want to add the second
voice
Use .Then open the staff properties. This
dialog box will appear. 
If this is a different instrument than the other voice, open
the instrument drop down list and choose the appropriate
instrument. The default name for this voice should be ok.
Click Ok to close the dialog box.
To switch voices use VoiceDown, VoiceUp under staff menu.
or using the keyboard shortcuts
![[Note]](images/note.png) | Note |
---|
The stem positioning positioning may not look correct in
the Denemo window, but it will look correct in the printed
output. |
For every beat your voice is silent you need to add a null
note, which is achieved with the following sequence of key
strokes: 1. n puts you in null mode, 2. r toggles a rest 3. then
type the rest value you need to add, with the appropriate key
binding.
For the beats that contain notes just enter them as you
would normally see section x.
![[Note]](images/note.png) | Note |
---|
If you choose not to enter rests in null mode the visual
output will be the same but these notes will be heard during
midi playback of your score. |
To leave the new voice and return to the previous one
type
.
Choose Lyrics->Add Verse. You need to have the Lyrics View visible (see View menu). Each verse has a separate tab, with the current verse for the current staff being visible at any one time. Use -- to extend syllables over more notes (see LilyPond documentation).
To enter figures choose Other->Insert/Enter figured bass. There are some shortcuts that enable all the work to be done with the numeric keypad. A brief summary is given by right clicking the option. The conventions are described in the LilyPond docs.
To enter chord symbols choose Other->Insert/Enter chord symbols. A brief summary is given by right clicking the option. The conventions are described in the LilyPond docs.
Denemo Command Line Options
Denemo --help shows the options for opening particular files at startup.