X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/mup/blobdiff_plain/cdb3c0882392596f814cf939cbfbd38adc6f2bfe..ddf6330b56bcfb657e0186b24b9b1422c51d3424:/mup/docs/sample.mup diff --git a/mup/docs/sample.mup b/mup/docs/sample.mup new file mode 100644 index 0000000..e568452 --- /dev/null +++ b/mup/docs/sample.mup @@ -0,0 +1,576 @@ + + +//********************************************************************** +// NOTE: +// +// This is a sample Mup input file. This file is intended to demonstrate +// lots of the features of Mup, including advanced features. +// In most cases, you'll probably only need to use a few basic features, +// so your input file will usually be a lot simpler. +// +//********************************************************************** + + +// header to go on first page +header + title (18) "Sample Song to Show What Mup Can Do" + title palatino ital (12) "This is a subtitle" + title "Text: Ann Onymous" "Tune: Arthur Unknown" + title "" "(1995)" + +// header for subsequent pages +header2 + title "Sample Songs" "This is the title" "page \% of \#" + +// footer for first page +footer + // use a printing command other than "title" to show how others work + center nl "This is a sample of a Mup footer" + // leave a blank line + title (12) " " + + title (11) "Published by Arkkra Enterprises" \ + "P. O. Box 315 Warrenville, IL 60555" \ + "http://www.arkkra.com" + +// footer for subsequent pages +footer2 + print nl "This is a sample remark at the bottom of the page" + +// top/top2/bottom/bottom2 are like header/header2/footer/footer2 except +// they can be changed later; for example, you could use header/header2 for +// the whole song, but have a new top/top2 for each section of the song. + +// to be printed right below the header on this page (the first page) +top + title (13) "First Movement" +// to be printed right below the header2 on later pages +top2 + title "First movement" + +// set some score-wide parameters +score + staffs = 9 + key = c minor + time = 9/8 + + // beam things a dotted quarter at a time, and beam across rests + // have the main beams group together notes a dotted quarter at a + // time, but have subgroupings an 8th note at a time; also, beam + // across rests + beamstyle = (8,8,8), (8,8,8), (8,8,8) r + + // put bracket to left of top 2 staffs, and bottom 2, with labels + bracket = 1-2 ("Choir", "Ch"), 7-8 ("Guitar", "Gtr") + + // put brace on keyboard's staffs + brace = 5-6 ("keyboard", "Kbd") + + // bar the staffs 5 and 6 together, and 7 and 8 together + barstyle = 5-6, 7-8 + + // put rehearsal marks in circles, instead of the default rectangles + rehstyle = circled + + // make a little smaller than normal + scale = 0.77 + + // pack notes together + packexp = 0.7 + packfact = 0.75 + + // set the margins, allowing choice depending on whether -DBIGMARGINS + // is used on the command line or not + ifdef BIGMARGINS + topmargin = 1.0 + bottommargin = 1.1 + leftmargin = 1 + rightmargin = 1 + else + topmargin = 0.8 + bottommargin = 0.8 + leftmargin = 0.7 + rightmargin = 0.6 + endif + + // make sure chord marks are a ways away from staffs + chorddist = 4 + + // make sure other things are a ways away too + dist = 3 + + // spread scores and staffs apart more than normal + scoresep = 14, 24 + scorepad = 5 + staffsep = 14 + staffpad = 2 + + // label endings above staffs that are grouped by brace or bracket + endingstyle = grouped + + // use palatino fonts by default, in 14 point + fontfamily = palatino + font = rom + size = 14 + + // put lyrics in helvetica italics, 11 point + lyricsfontfamily = helvetica + lyricsfont = ital + lyricssize = 11 + + // print measure numbers at the beginning of each score + // in Helvetica italics + measnumfontfamily = helvetica + measnumfont = ital + measnumsize = 9 + measnum = y + + // When there are chords, print guitar grids with them. To put them + // at the end of the song we would use gridsatend. If we wanted + // to make them bigger or smaller, we could set "gridscale". + gridswhereused = y + + // If the lowest fret used is 3 or more, use "N fr" notation instead + // of showing the whole guitar neck up to that point in the grid. + // The default value of this is 4, and it can be turned off. + gridfret = 3 + + +//set some things for particular staffs +staff 2 + clef = bass + +staff 3 + label = "foghorn\nin G\(smflat)" + staffscale = 0.8 // make this staff a little smaller + clef = baritone + transpose = down dim 5 + // make staff 3 visible only when there is something on it + visible = whereused + + // set different default octave + defoct = 4 + +staff 4 + // make staff 4 a 1-line staff, with a "drum clef" + stafflines = 1 drum + +staff 5 + // Use three voices on staff 5. Allow the stems of the top and bottom + // voices (1 and 2) to float to whichever way is appropriate. (We + // could use 2o to force their stems to be in opposite directions.) + // Voice 3 is an extra voice, typically in the middle, whose stems can + // go either way. + vscheme = 3f + +staff 6 + clef = bass + + // use dotted quarter for default time unit instead of + // the normal time signature denominator + timeunit = 4. + +staff 7 + vscheme = 2f + +staff 8 + // Make staff 8 a tablature staff for standard guitar. This + // automatically makes the preceding staff (7) a "tabnote" staff, + // meaning its notes will be derived from staff 8 automatically, + // unless overriden. + stafflines = tab + + // make fret numbers more readable by putting a white background there + tabwhitebox = y + + vscheme = 2f // allow two voices on this tab staff + +staff 9 + // On staff 9, use "shaped notes". Each scale degree uses a different + // shape of note head. + label = "Soprano" + noteheads = "isostri semicirc diam righttri norm rect pie" + +// define a macro to allow saying "DRUM" instead of "4:" for the 4th staff +define DRUM 4: @ + +grids + // define grids to be printed with guitar chords + "Cm" "- (3 5 5 4 3)" + "G:9 7" "3 x o o o 5" + "Go7" "o 1 2 o 2 o" + "G" "3 x o o o 3" + +// now do musical data +music + +// put a tempo mark above staffs 1 and 6, and set MIDI tempo to 92 +// quarter notes per minute + rom above 1,6 : 1 "Andante"; + midi all: 0 "tempo = 92"; +// set the instruments to use for MIDI + midi 1-2: 0 "channel=5"; 0 "program=52"; 0 "onvelocity=92"; + midi 3: 0 "channel=6"; 0 "program=109"; 0 "onvelocity=61"; + midi 4: 0 "channel=10"; // percussion channel +// set onvelocity to accent the top note + midi 5-6: 0 "channel=11"; 0 "program=1"; 0 "onvelocity=104,88"; + midi 5 2: 0 "channel=11"; + midi 7: 0 "channel=14"; 0 "program=25"; 0 "onvelocity=83"; + +// Note that lines of input within a given measure can be entered in any order. +// It is usually a good idea to enter music data a staff at a time from top +// to bottom, just to make it easy to keep track of, although Mup makes no +// such requirement. You may choose to intersperse other things like lyrics +// and phrase marks, or do them all at once before or after the music data, +// or in whatever order you choose. + +// Also note that you can indent things any way you want in your Mup +// input file, and can put extra blank spaces almost anywhere +// except in the middle of a word. + +// For MIDI purposes, the first two measures get played an extra time +// before the Coda, so put them inside a macro. +define FIRST2MEASURES + +// staff 1, three dotted quarter notes, second chord same as the first + 1 1: 4.ceg;;dfb; + +// staff 2, dotted quarter, two eighths with a rest between, dotted quarter + 2: 4.c;8c;r;e;4.f; + +// phrase on staff 2 from beginning note to first count of next measure + phrase 2: 1 til 1m+1; + +// two verses of lyrics between top two staffs +// use "|" to align the first syllables 8 points left of the notes' centers + lyrics between 1&2: 4.;;; "-8|These are the"; "-8|This is verse"; + +// a grace note and an accent on staff 3 + 3: [grace; slash 1]c#; [with >] 2.f#;4.r; + +// measure rest for staff 4 + DRUM mr; + +// staff 5, voice 1, begins with duplet, also has a tied note + 5 1: {4c+;g;}2,4.; 4.c+;4f+~;16;; + +// second voice for staff 5 + 5 2: 2.c;4.d; + +// third voice for staff 5 starts with a "space", nothing printed; force +// horizontal offsets (ho) on two of the notes to fine tune their spacing + 5 3: 4.s; [ho 3.5]8e;f;g; [ho 3]an; 4; + +// staff 6, some notes an octave or two away from the default octave + 6: 4.c-c--;;d-d--; + +// put piano pedal mark at the bottom + pedal below 6: 1;6; + +// show the fret numbers on guitar strings on the tablature staff + 8: 4. a3d1g0; 8 a3; e'3; a3; 4. d0g2b3e1; + +// Print music theory analysis symbols at counts 1 and 7. The ":" makes the +// following space-separated items be stacked on top of each other. + rom analysis above 5: 1 "i"; 7 "VII:6 #5"; + +// print figured bass numbers below count 7; the slash goes through the "5" + rom figbass below 6: 7 "6 5/"; + + 9: 4.c+; 8e+; c+; e+; 4.f+; + lyrics 9: 2.+4.; "ah_"; + +// ordinary bar line, with a reherasal letter + bar reh let + + + +// next measure + 1: 2.c+gc;4.r; + 2: 2.ce;4.r; + +// lyrics with an underscore + // This time, since the time values of the lyrics match those + // of the music, we'll let Mup derive the time values, + // rather than specifying them. Notice that we are chanting multiple + // syllables on the last word, so we show that they are to be treated + // as one syllable by separating them by a special \(space) character + // instead of simple space. + lyrics between 1&2: [1] "words!_"; [2] "two\(space)oh\(space)yes."; + +// include a note with a double flat + 3: 2.f&&;4.r; + +// you can specify a pitch for a 1-line staff, even though all notes will be +// placed on the line. The pitch will be used for MIDI output, if you use +// the -m option to Mup to get a MIDI file instead of printed output. + DRUM 4.f&;2.r; + +// because of the beamstyle setting, the 16th notes here are joined in pairs +// by both beams, but only one beam joins all six + 5 1: 2.c++;4.r; + 5 2: 8e;g;e; 16g;e;g;e;g;e; 4.r; + 6: 2.c- alt 2;c;4.r; + pedal below 6: 1;6*; + +// print 3 tremelo slashes on this chord + 8: [slash 3] 2. d1g0b1e3; 4.r; + + 9: 2.e+; 4.r; + +// at count 9.9 (almost the dblbar), back up 19 stepsizes and print this coda +// indication, including the actual coda symbol; do this in italics of font +// size 13 (but turn off the italics for the symbol), and above all the staffs + ital(13) all: 9.9[-19] "To coda \f(TR)\(coda)"; + + // double bar + dblbar +@ // end the macro definition of the first measures +// Now call the macro for the first measures + FIRST2MEASURES + + + +// start a new score. Normally, Mup will place things +// as best it can, but you can force things if you like. +newscore + +// now more music data +music + + + // set location tags on the two notes, then draw a wavy line between + // them saying that it is a glissando + 1: 2.c =h; 4.g =k; + wavy line (h.e+3, h.y) to (k.w-3, k.y) with ital (11) "gliss." + 2: 4.e; 8..; 32f;8g;4.c; + +// a crescendo mark + < below 2: 3 til 7.5; + +// trill the foghorn from count 1 to 7; put a "turn" symbol above the note +// at count 8. For MIDI, specify exactly how to play it. + ifndef MIDI + 3: 2..d&; 4d; + mussym 3: 1 "tr" til 7; 8 "turn"; + else + 3: 16d&;e;d;e;d;e;d;e;d;e;d;e;d;e; {d;e;d;c;d;}5; + endif + + 4: [slash 2] 2.c; [with .]4.c-; + 5: 4.ceg;;; + +// a dynamic mark + times boldital between 5&6: 7 "ff"; + +// roll up on first chord, down on second, default (up) on third + roll up 5: 1; + roll down 5: 4; + roll 5: 7; + +// the <> indicates a slur + 6: 2.c e?;8e<>;4c; + +// For the second note, "bend" the previous note up 1/2 step by stretching +// the E string. Then bend to a full step, and release back to normal. + 8 1: 4.e5; e "1/2"; 8e "full"; 4e ""; + +// Put some notes in the second tab voice. These will be translated to the +// the second voice of the tabnote staff above. + 8 2: 4.g0; 4; 8; 4.; + + 9: 8c+; b; an; g; c; d; 4.e; + +// chord symbols will be transposed if the music is transposed. +// In this particular example, transposition is not in effect + bold chord above all: 1 "Cm"; + + bar ending "1." + + + +// two measures of rest + multirest 2 + repeatend ending "2." + + +staff 4 +// From now on, staff 4 (the one-line staff) will have two voices with stems +// that are always opposing. Set it so that the notes will not be on the line +// but rather above and below it. + vscheme = 2o + ontheline = n +music + midi 4 2: 0 "channel=10"; + +// Define a macro with parameters for printing a chord name at a given count. +// Note that the chord name is passed in and then the ` ` cause it to be +// put in quotes. +define K(COUNT, NAME) bold chord all: COUNT `NAME`; @ + +// Define a "map" for chord-at-a-time input. (By "chord" here we mean a group +// of notes, not the symbolic chord name as above.) Since all the voices in +// the choir have the same rhythm from now on, it's convenient to use this +// method of input instead of the usual voice-at-a-time method. Set it up +// to enter bass and tenor on staff 2, then alto and soprano on staff 1. +define M [ 2; 2; 1; 1 ] @ + + + K(1,Cm) // print a C minor chord at count 1 + +// assign all the notes for staffs 1 and 2, using the map. Each goes to its +// proper octave according to defoct. + M: 4.cgce; ceeg; cgce; + +// Put phrase marks on each staff, from count 1 until count 7 of the next +// measure. We didn't specify "above" or "below", so Mup chooses the side. + phrase 1,2: 1 til 1m+7; + +// Increase the size of the lyrics by 3 points. This will carry forward to +// the end of the song unless changed again. Also, use the non-ASCII +// character n-tilde, indicated by \(n~). If you can type non-ASCII characters +// directly on your keyboard, you can do that instead of using this notation. + lyrics between 1&2: "\s(+3)Ma-\(n~)a-na"; + +// put the last note's accidental in parentheses, since it is just a +// reminder to the player that this accidental is still in force + 3: 4.an; b; a(n); + +// Use X-shaped notes on the top voice. Use the "..." to show that this +// applies for the rest of this measure, not just the first chord. + 4 1: [xnote]... 4.; ; 8;;; + 4 2: 4.; ; ; + +// Beam notes together across both staffs. Set a location tag (=h) on the +// first note, for later use. + 5: 4.s bm with staff below; ; 8c; e; g ebm; + 6: 8c- =h bm with staff above; e-; g-; c; e; g; 4.s ebm; + + 8: 2. a3 d5 g5 b4 e3; 4. tie; + + // For the last two notes, override the head shape to be a slash, to + // indicate repeating the first part of the measure. + 9: 8g; e; ; [hs "slash"]... 4.b; ; + bar endending + + + + ital all: 1 "\[A special note, on\ntwo lines, in a box.\]"; + 1: 4.ce; eg; ; + lyrics between 1&2: "am gr\(o:)\(ss)t-en,"; // non-ACSII chars + 2: 4.cg; ce; ; + +// draw a measure repeat sign + 3: mrpt; + + // put a text string in an ellipse + ital 4: 1 "\{mute\}"; + 4 1: [xnote]... 4.; ; 8;;; + 4 2: 2.; 4.; + + 6: 8 with e+c++ above; c+ with g+ above; g with e+ above; ec+; g; e; \ + 4.c =k; // set loc tag "k" + 8: 4. a3 d5 g5 b4 e3; 2.; + 9: mrpt; + bar + +// Draw a curve, with endpoints based on the "=h" and "=k" location tags with +// vertical offsets of 11 and 8 stepsizes upwards. The curve bulges upwards +// 20 and 23 stepsizes 1/3 and 2/3 of the way through it. + medium curve (h.x, h.y + 11) to (k.x, k.y + 8) bulge 20, 23; + + +// print the chord G97, with the 9 above the 7 + K(1,G:9 7) + + ital(15) all: 9.9[-20] "D.C. al Coda"; + +// use a C double sharp (cx) and B natural + 1: 4.cxbn; 2.; + lyrics between 1&2: "tr\(e`)s bien!"; // another non-ASCII character + 2: 4.g-f; 2.; + 4 1: 4.r; c; ; // the pitch is arbitrary except for MIDI on one-line + 4 2: 4.; r; ; + 5: 4.dfgbn; ; dfan; + +// force first note stem to point upwards, which would by default have +// pointed down; change clef in the middle of the measure + 6: [up] 4.d; c; <> d+; + +// The first note is a "prebend" (stretch the string before plucking). On the +// last note, do a slide upwards after it that doesn't end at any specific note. + 8: 4. a10 "full" b8 "full"; 4. a10 "" b8 ""; [grace] 16 e0; 4.e1 ; + 9: 2.+4.g; + lyrics 9: "oo_"; + dblbar + +// For MIDI, insert the D.C. al Coda fragment + ifdef MIDI + FIRST2MEASURES + endif + +// leave a gap and start all the staffs anew, showing clefs and key signatures + restart + +staff 6 + clef = bass // change the clef back to bass + +music +// override the "dist" parameter, and specify a minimum distance of 5 stepsizes +// from the staff for this coda sign + mussym(13) all dist 5: 0.5 "coda"; + ital(15) all: 1 "Coda"; + +// at count 1 print G diminished 7 (the "o" is translated to a diminished +// symbol), and at count 7 print G + K(1,Go7) + K(7,G) + +// Another duplet. If we put "n" after the first number it would prevent the +// bracket from being printed. + 1: 2.d&g; { 4gbn; ; }2,4.; + +// Draw parentheses around the one D natural. Force this duplet's bracket to +// be below; this one would have defaulted to above. + 2: 2.b&f&; { 4d-n(dn)g; dbn; } below 2,4.; + +// Print both keyboard hands on its top staff, using two voices. Since the +// top notes are so high, set their stems to extend only 5 stepsizes instead +// of the usual 7 (octave). Slur and tie the notes, using dashed or dotted +// rather than solid curves. + 5 1: [len 5]... 2.g++b++d&+++f&+++ dashed slur; 4.g++bn++d+++g+++; + 5 2: 2.gg+ dotted tie; 4.; + +// leave staff 6 unspecified, so that it will default to a space + + 8: [slash 1] 2. e'0 a1 d2 g0 b2 e0; 4. e'3 d0 g0 b0 e3; + + 9: 2.g; 4.bn; + lyrics 9: "At the"; + bar + + + +score +// set a time signature that combines two simple time signatures + time = 2/4 + 3/8 + +music +// use shorthand to enter the same data for two staffs at once + 1,2: 2egc+ tie; 4.; + + 4 1,2: mr; // measure rest on both voices of staff 4 + 5-6: 2c tie; 4.; + +// mark notes an octave lower than normal + octave below 6: 1 "8va" til 7.5; + +// put a fermata above staffs 1, 2, and 4 to 6 + mussym above 1,2,4-6: 5 "ferm"; +// for MIDI, slow the tempo, to produce the fermata + midi all: 3 "tempo=50"; + 8: 2 e20~; 4.; + 9: 2+4.c+; + lyrics 9: "end."; + K(1,Cm) + endbar