X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=mf%2Ffeta-bolletjes.mf;h=8a9145eb8e6824fbf53427c73fa665d92ecceee9;hb=3548eacf9da6dddfdd5a9ca2dc15d055a0a9a5e2;hp=efb52eb290cf318017ce98810cd70b6de25b14b7;hpb=bb36bac02a64770871780231ecc709cb18b20932;p=lilypond.git diff --git a/mf/feta-bolletjes.mf b/mf/feta-bolletjes.mf index efb52eb290..8a9145eb8e 100644 --- a/mf/feta-bolletjes.mf +++ b/mf/feta-bolletjes.mf @@ -3,455 +3,809 @@ % % source file of LilyPond's pretty-but-neat music font % -% (c) 1997, 1998 Jan Nieuwenhuizen -% & Han-Wen Nienhuys +% (c) 1997--2004 Jan Nieuwenhuizen +% & Han-Wen Nienhuys +% & Juergen Reuter % +test_outlines := 0; + % most beautiful noteheads are pronounced, not circular, % and not even symmetric. % These examples are inspired by [Wanske], see literature list -save black_notehead_width; -numeric black_notehead_width; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% NOTE HEAD VARIABLES +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +save black_notehead_width, noteheight, + slash_thick, slash_slope, overdone_heads; +numeric black_notehead_width, noteheight, slash_thick; + fet_begingroup("noteheads"); -noteheight#:=staff_space#+ (1 + overdone_heads) *stafflinethickness#; -define_pixels(noteheight); -%%%%%%%% -% -% +% slope of slash. From scm/grob-description.scm. How to auto-copy? +slash_slope := 1.7; + +% thickness of slash lines. quarter notes get 1.5slt width. +slash_thick# := 2/3*0.48staff_space#; + + % -% MENSURAL NOTATION +% Hand-engraved music often has balls extending above and below +% the lines. If you like that, modify overdone heads (unit: +% stafflinethickness) % +overdone_heads = 0.0; +noteheight#:=staff_space#+ (1 + overdone_heads) *stafflinethickness#; + +define_pixels(slash_thick, noteheight); + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % +% SLANT moves both extremes on the long axis (by SLANT * ELLIPSIDITY, +% so SLANT = -1, puts the extreme on the long axis next to the short axis one.) % -brevis_wid# := 2 staff_space#; -def draw_brevis(expr brevwid) = - save beamheight, head_width; - save holeheight, stem_width; - save serif_size, serif_protrude; +def draw_outside_ellipse (expr ellipsidity, tilt, superness, + slant) = + save attachment_y; + save p; + path p; + + p := superellipse ((ellipsidity, 0), (-slant * ellipsidity, 1.0), + (- ellipsidity, 0), (slant * ellipsidity, -1.0), superness); + + p := p rotated tilt; - head_width# = brevwid; - holeheight = 3 stafflinethickness; - stem_width = 1.4 stafflinethickness; + save top_point, right_point; + pair top_point, right_point; + top_point := directionpoint left of p; + right_point := directionpoint up of p; - define_pixels(head_width); - set_char_box(0, head_width#, noteheight#/2, noteheight#/2); + save scaling, width, height; + + scaling# = noteheight# /(2 ypart (top_point)); + width# := 2 xpart (right_point) * scaling#; + + define_pixels (width, scaling); - 2 beamheight + holeheight = noteheight; - serif_size = (holeheight - stafflinethickness)/2; - serif_protrude = 1.5 serif_size; - penpos1(stem_width, 0); - penpos2(stem_width, 0); - penpos3(beamheight, 90); - penpos4(beamheight, 90); - penpos5(stem_width, 180); - - z1l = (0, 0); - z2l = (0, -stafflinethickness/2); - z3r = z2r + serif_size *(1,-1); - y4r = y3r; - x4r = head_width/2; - z5l = z3l + (-serif_size, -serif_protrude); - - penlabels(1,2,3,4, 5); - fill z1r -- z1l -- z5r{down} .. z5l{up} .. z3l{right} - -- z4l -- z4r -- z3r{left} .. z2r{up} -- cycle; - - addto currentpicture also currentpicture yscaled -1; - show z4r; show z4l; - addto currentpicture also currentpicture - shifted (-x4r,0) xscaled -1 shifted (x4l,0); + set_char_box (0, width#, noteheight#/2, noteheight#/2); + + % attachment Y + charwy := ypart (right_point) * scaling#; + charwx := width# ; + + p := p scaled scaling shifted (width/2, 0) ; + if test_outlines = 1: + pickup pencircle scaled 1 ; draw p; + else: + fill p; + fi; +enddef; + + +def undraw_inside_ellipse (expr ellipsidity, tilt, superness, clearance, + center) = +begingroup + save p; + path p; + + p := superellipse ((ellipsidity, 0), (0, 1.0), + (- ellipsidity, 0), (0, -1.0), superness); + + p := p rotated tilt; + + save top_point, right_point; + pair top_point, right_point; + + top_point := directionpoint left of p; + right_point := directionpoint up of p; + save height, scaling; + + height# = staff_space# + stafflinethickness# - clearance; + scaling# = height# /(2 ypart (top_point)); + + define_pixels (scaling); + p := (p scaled scaling) shifted center; + + if test_outlines = 1: + pickup pencircle scaled 1; draw p; + else: + unfill p; + fi +endgroup; enddef; + + + % -% Some sources (eg Musix/OpusTeX think that the appendage should be on -% the left, some say right. Right wins democratically. +% dimensions aren't entirely right. % -def draw_longa (expr wid) = - draw_brevis(wid); - save theta; - - x7r = head_width; - y7 = y5; -% z7 = z5; - z6 - z7 = (stem_width/2, -staff_space); - theta = angle(z6-z7)+ 90; - penpos7(stem_width, theta); - penpos6(1.2 stem_width, theta); +fet_beginchar ("Brevis notehead", "s-1", "brevishead"); + save stemthick, fudge; + define_pixels (stemthick); + fudge = blot_diameter / 2; + stemthick# = 2 stafflinethickness#; + + draw_outside_ellipse (1.80, 0, 0.707, 0); + undraw_inside_ellipse (1.30, 125, 0.68, 2 stafflinethickness#, + (w /2, 0)); + + pickup pencircle scaled stemthick; + + bot y1 = -d; + top y2 = h; + rt x1 - fudge = 0; + x1 = x2; + + fudge + lft x3 = w; + x4 = x3; + y4 = y2; + y3 = y1; + + draw_gridline(z1,z2,stemthick); + draw_gridline(z3,z4,stemthick); + +fet_endchar; + + + +fet_beginchar("Whole notehead", "s0", "wholehead") + draw_outside_ellipse (1.80 - puff_up_factor / 3.0, 0, 0.707, 0); + undraw_inside_ellipse (1.30, 125 - puff_up_factor *10, + 0.68, 2 stafflinethickness#, + (w /2, 0)); + +% draw_staff_outline (-2, 2, 0.5); + +fet_endchar; + + +fet_beginchar("Half notehead", "s1", "halfhead") + draw_outside_ellipse (1.53 - puff_up_factor / 3.0, 34, 0.66, 0.17); + undraw_inside_ellipse (3.25, 33, 0.81, + 2.5 stafflinethickness#, (w/2, 0)); + +fet_endchar; - fill z7r .. z6r{z6-z7} .. {z7-z6} z6l -- z7l -- cycle; - penlabels(6,7); -enddef; +fet_beginchar("Quart notehead", "s2", "quarthead") -% -% En wij presenteren U: de opvolgster van Emily -% -% (ze is wel breed) -% -fet_beginchar("Maxima notehead", "-3mensural", "mensuralmaximahead"); - draw_longa (1.3 brevis_wid#) + % used to have 32. With 31, they are slightly bolder. + draw_outside_ellipse (1.49 - puff_up_factor / 3.0, 31, 0.707, 0); + black_notehead_width# := charwd; fet_endchar; -fet_beginchar("Longa notehead", "-2mensural", "mensurallongahead"); - draw_longa (brevis_wid#) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +fet_beginchar("Whole diamondhead", "s0diamond", "wholediamondhead") + draw_outside_ellipse (1.80, 0, 0.495, 0); + undraw_inside_ellipse (1.30, 125, 0.6, + .4 staff_space# + stafflinethickness#, + (w /2, 0)); + fet_endchar; -fet_beginchar("Brevis notehead", "-1mensural", "mensuralbrevishead") - draw_brevis(brevis_wid#); +fet_beginchar("Half diamondhead", "s1diamond", + "halfdiamondhead") + + draw_outside_ellipse (1.50, 34, 0.49, 0.17); + undraw_inside_ellipse (3.5, 33, 0.80, + .3 staff_space# + 1.5 stafflinethickness#, (w/2, 0)); + fet_endchar; -def draw_mensural_black_head (expr wid) = - save head_width; - head_width# = wid; - set_char_box (0, head_width#, noteheight#/2, noteheight#/2); +fet_beginchar("Quart diamondhead", "s2diamond", "diamondhead") + draw_outside_ellipse (1.80, 35, 0.495, -0.25); +fet_endchar; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - y3 = y1 =0; - x2 = x4 = (x1 + x3) /2; - define_pixels (head_width); - pickup pencircle scaled blot_diameter; - top y2 = h; - bot y4 = -d; - lft x1 = 0; - rt x3 = w; - filldraw z1 -- z2 -- z3 -- z4 -- cycle; -enddef; -def draw_mensural_open_head (expr wid)= - draw_mensural_black_head (wid); - save diamNW, diamSW; - diamNW = length (z2 - z1) + blot_diameter; - diamSW = length (z4 - z1) + blot_diameter; + + +def define_triangle_shape(expr stemdir) = + save triangle,kern; path triangle; + save width, depth, height; + save left_point, height, width, origin; + save left_up_dir, exact_right_point, exact_down_point; + pair exact_down_point, exact_left_point, origin, left_up_dir, exact_right_point; + save pen_thick; + + pen_thick# = stafflinethickness# + .1 staff_space#; + define_pixels(pen_thick, llap); + + left_up_dir = llap# * dir (90 + tilt); + + xpart (left_up_dir) * xs - (pen_thick# * xs)/2 + xpart origin = 0; + ypart origin = 0; + + exact_left_point := origin + (left_up_dir xscaled xs); + exact_down_point := origin + (left_up_dir rotated 120 xscaled xs); + exact_right_point := origin + (left_up_dir rotated 240 xscaled xs); + + height# = ypart (exact_left_point + origin) + pen_thick#/2; + depth# = -ypart (exact_down_point + origin) + pen_thick#/2; + width# = xpart (exact_right_point - exact_left_point) + pen_thick# * xs; + + set_char_box(0, width#, depth#, height#); - save hole_widthNW, hole_widthSW; - hole_widthNW = 0.34 diamNW ; - hole_widthSW + 2.6 stafflinethickness = diamSW; + z0 = (hround_pixels (xpart origin), 0); + z1 = z0 + llap * dir(90+tilt) xscaled xs; + z2 = z0 + (llap * dir(90+tilt + 120) xscaled xs); + z3 = z0 + (llap * dir(90+tilt + 240) xscaled xs); + + z12 = caveness[.5[z1,z2],z3]; + z23 = caveness[.5[z2,z3],z1]; + z31 = caveness[.5[z3,z1],z2]; + + triangle = z1 .. z12 .. z2 .. + z2 .. z23 .. z3 .. + z3 .. z31 .. z1 .. + cycle; + pickup pencircle scaled pen_thick xscaled xs; + labels(1,2,12,23,31,3); + + + % attachment Y + if stemdir = 1: + charwy := ypart exact_right_point; + charwx := xpart exact_right_point; + else: + charwy := ypart exact_down_point; + charwx := xpart exact_down_point; + fi +enddef; + +fet_beginchar("Whole trianglehead", "0triangle", "wholetrianglehead") + save hei,xs; + save llap; + save tilt; + + tilt = 40; + llap# = 3/4noteheight#; + + xs = 1.5; + caveness:=0.1; + define_triangle_shape(1); + draw triangle; +fet_endchar; - (z7 + z5)/2 = (w/2, 0); - (z8 + z6)/2 = (w/2, 0); - (z6 - z5) = hole_widthNW * unitvector (z2 - z1); - (z7 - z6) = hole_widthSW * unitvector (z4 - z1); - labels (1,2,3,4,5,6,7,8); +def draw_closed_triangle_head(expr dir) = + save hei,xs; + save llap; + save tilt; - unfill z5 -- z6 -- z7 -- z8 --cycle; + tilt = 40; + llap# = 2/3noteheight#; + xs = 1.2; + caveness:=0.1; + define_triangle_shape(dir); + draw triangle; enddef; -fet_beginchar("Mensural open head","0mensural","mensuralminimhead") - draw_mensural_open_head (staff_space#); +fet_beginchar("Half trianglehead", "d1triangle", "dhalftrianglehead") + draw_closed_triangle_head(-1); fet_endchar; -fet_beginchar("Mensural open head","1mensural","mensuralsemiminimhead") - draw_mensural_open_head (staff_space#); +fet_beginchar("Half trianglehead", "u1triangle", "uhalftrianglehead") + draw_closed_triangle_head(1); fet_endchar; -fet_beginchar("Mensural black head","2mensural","fusahead") - draw_mensural_black_head (staff_space#); +def draw_closed_triangle_head(expr dir) = + save hei,xs; + save llap; + save tilt; + tilt = 40; + llap# = 2/3noteheight#; + xs = 1.0; + caveness:=0.1; + define_triangle_shape(dir); + filldraw triangle; +enddef; + +fet_beginchar("Quart trianglehead", "u2triangle", "utrianglehead") + draw_closed_triangle_head(1); fet_endchar; +fet_beginchar("Quart trianglehead", "d2triangle", "dtrianglehead") + draw_closed_triangle_head(-1); +fet_endchar; -%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % +% slash heads are for indicating improvisation. They are +% twice as high as normal heads. % -% ledger (leger) lines +def draw_slash(expr hwid_hash) = + save exact_height; + save ne_dir; + pair ne_dir; + exact_height = staff_space# + stafflinethickness#/2; + + set_char_box (0, 2 exact_height / slash_slope + hwid_hash, + exact_height, exact_height); + + charwx := charwd; + charwy := charht; + + clearxy; + pickup pencircle scaled blot_diameter; + + bot y1 = - d; + top y2 = h; + lft x1 = 0; + lft x2 = 2 h / slash_slope; + + rt x3 = w; + y3 = y2; + y4 = y1; + x3- x2 = x4 - x1; + + ne_dir := unitvector( z3 - z4); + filldraw z1 --- z2 --- z3 --- z4 --- cycle; + + if hwid_hash > 2 slash_thick#: + save th; + + th = slash_thick - blot_diameter; + y6 = y7; + y5 = y8; + y3 - y7 = th; + y5 - y1 = th; + z6 - z5 = whatever * ne_dir; + z8 - z7 = whatever * ne_dir; + + z5 = z1 + whatever * ne_dir + th * (ne_dir rotated -90); + z8 = z4 + whatever * ne_dir + th * (ne_dir rotated 90); + + unfill + z5 -- z6 -- z7 -- z8 -- cycle; + fi + labels (range 1 thru 10); +enddef; + +fet_beginchar("Whole slashhead","s0slash","wholeslashhead") + draw_slash(4 slash_thick# + 0.5 staff_space#); +fet_endchar; + +fet_beginchar("Half slashhead","s1slash","halfslashhead") + draw_slash(3.0 slash_thick# + 0.15 staff_space#); +fet_endchar; + +fet_beginchar("Quart slashhead","s2slash","quartslashhead") + draw_slash(1.5 slash_thick#); +fet_endchar; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% thick is the distance between the NE/SW parallel lines in the cross +% (distance between centres of lines) +% in stafflinethickness def % -fet_beginchar("Ledger ending", "ledgerending", "ledgerending") -set_char_box (5/2 ledgerlinethickness#, 5/2 ledgerlinethickness#, - ledgerlinethickness#/2,ledgerlinethickness#/2); - pickup pencircle scaled 1.3 blot_diameter; - - rt x2 = w; - lft x1 = -b; - x3 = x2; - bot y1 = -d; - y2 = y1; +def draw_cross(expr thick) = + save pent, slant, ne_dir; + pair ne_dir; + save crz; path crz; + + pen_thick# := 1.2 stafflinethickness#; + define_pixels (pen_thick); + pickup pencircle scaled pen_thick; top y3 = h; - y4 = y3; - x4 = x1; + ne_dir := unitvector ((1, (2 h -pen_thick)/(w - pen_thick))); + rt x4 = w/2; + y5 = 0; + z4 - z5 = whatever * ne_dir; + x6 = 0; + z6 - z3 = whatever * ne_dir; + z3 - z4 = whatever * (ne_dir yscaled -1); + + z4 - z3 = whatever * (ne_dir) + (ne_dir rotated -90) * thick * stafflinethickness; + + x1 = charwd/2 - .5 pen_thick#; + z1 = whatever * ne_dir + thick/2 * stafflinethickness# * (ne_dir rotated -90); + + + labels (1,2,3,4,5,6); + + crz = (z6 -- z3 -- z4 -- z5) ; + + draw crz shifted(w/2,0); + draw crz xscaled -1 shifted(w/2,0); + draw crz yscaled -1 shifted(w/2,0); + draw crz scaled -1 shifted(w/2,0); + + charwx := charwd; + charwy := y1; + message (decimal charwx); + message (decimal charwy); + z12 = (charwx * hppp, y1 * vppp); + labels (12); +enddef; + +fet_beginchar("Whole Crossed notehead", "s0cross", "wholecrossedhead") + wid# := black_notehead_width#+4stafflinethickness#; + hei# := noteheight#+stafflinethickness#; + set_char_box(0, wid#,hei#/2,hei#/2); + + draw_cross (3.75); +fet_endchar; + +fet_beginchar("Half Crossed notehead", "1scross", "halfcrossedhead") + wid# := black_notehead_width#+2 stafflinethickness#; + hei# := noteheight#+stafflinethickness#/2; + set_char_box(0, wid#,hei#/2,hei#/2); + draw_cross(3.0); +fet_endchar; - filldraw z1 --- z2 --- z3 --- z4 --- cycle ; +fet_beginchar("Crossed notehead", "s2cross", "crossedhead") + wid# := black_notehead_width#; + hei# := noteheight#; + set_char_box(0, wid#,hei#/2,hei#/2); + draw_cross(1.0); fet_endchar; +fet_beginchar("X-Circled notehead", "s2xcircle", "xcircledhead") + wid# := black_notehead_width#*sqrt(sqrt2); + hei# := noteheight#*sqrt(sqrt2); + set_char_box(0, wid#,hei#/2,hei#/2); + cthick := (1.2+1/4)*stafflinethickness; + cxr := w/2-cthick/2; + cyr := h-cthick/2; + pickup pencircle scaled cthick; + draw fullcircle xscaled 2cxr yscaled 2cyr shifted (w/2,0); + xpos := cxr/sqrt2; + ypos := cyr/sqrt2; + draw (-xpos+w/2,-ypos) -- (xpos+w/2,ypos); + draw (-xpos+w/2,ypos) -- (xpos+w/2,-ypos); + + charwx := charwd ; + charwy := 0 ; + + z12 = (charwx * hppp , charwy * vppp ); + labels (12); +fet_endchar; -%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% + + +%%%%%%%% % % +% SOLFA SHAPED NOTES % % -% TODO: Document these! - -% setup user vars -def setup_notehead_vars = - save a_b,err_y_a,tilt,superness; - save ai_a,ai_bi,err_y_ai,err_x_bi,inner_tilt,inner_superness; - save b_h,a_w; - enddef; - -% setup addititional vars and calc them -def notehead_calc = - save a,beta,ai,bi, ht, wd; - ht# =noteheight#; - 2beta#=ht#*b_h; - a# = beta#*a_b; - wd# = 2a# / a_w; - ai# = a# * ai_a; - bi# = ai#/ai_bi; - define_pixels(a,beta); - define_pixels(ai,bi); - set_char_box(0, wd#, .5 ht#, .5 ht#); - enddef; - - -% draw the outer and inner ellipse. -def notehead_draw = - path black,white; - black=distorted_ellipse(a,beta,a*err_y_a,0,superness); - white=distorted_ellipse(ai,bi,ai*err_y_ai,bi*err_x_bi,inner_superness); -if test>1: %fixme - save x; - x1=-x3=a; x2=x4=0; y1=y3=0; y2=-y4=b; - penlabels(1,2,3,4); - test_grid; -else: - black:=black rotated tilt; - black:=black shifted (w/2,0); - white:=white rotated inner_tilt; - white:=white shifted (w/2,0); -fi - fill black; - unfill white; - - - enddef; - -def draw_whole_head = - setup_notehead_vars; - - a_b:=1.80; - err_y_a:=0; % no slant - tilt:=0; - superness:=0.707; - ai_a:=0.508; - % ai_bi:=1.23; - ai_bi:=1.30; % jcn - % err_y_ai:=0.0938; - % err_x_bi:=0; - err_y_ai:=0; - err_x_bi:=0.115; - % inner_tilt:=135; - inner_tilt:=125; % jcn - % inner_superness:=0.69; - inner_superness:=0.68; % jcn - b_h:=1; %no rotate-> no height correction - a_w:=1; % no rotate-> no width correction - - notehead_calc; - whole_notehead_width# := wd#; - notehead_draw; + + +def generic_draw_solfa_note_shape = + save a,beta,black,white; + path black, white; + + pickup pencircle scaled stafflinethickness; + 2 beta# = noteheight#; + a# = a_b*beta#; + wid# := 2a#+stafflinethickness#; + hei# := noteheight#+stafflinethickness#; + set_char_box(0, wid#,0.5 hei#, 0.5 hei#); + + define_pixels(a,beta); + + black = noteshape xscaled a yscaled beta shifted (a+stafflinethickness/2,0); + filldraw black; + + if (solid=false): + white = noteishape xscaled (a*ai_a) yscaled (beta*bi_b) + shifted ((dx+1)*(a+stafflinethickness/2),dy*(beta+stafflinethickness/2)); + unfill white; + fi; +enddef; + +def draw_solfa_note_shape = + save solid; boolean solid; + solid=false; + generic_draw_solfa_note_shape; +enddef; +def draw_solfa_quarter_note_shape = + save solid; boolean solid; + solid=true; + generic_draw_solfa_note_shape; enddef; +% do - equilateral triangle: (0,-h/2) -- (w/2,h/2) -- (w,-h/2) -- cycle; +% stem attachment: -h/2 -% -% dimensions aren't entirely right. -% -fet_beginchar ("Brevis notehead", "-1", "brevishead"); - save stemthick, fudge; - define_pixels (stemthick); - fudge = blot_diameter /2; - stemthick# = 2 stafflinethickness#; +save triangle; path triangle; +triangle := (-1,-1) -- (0,1) -- (1,-1) -- cycle; - draw_whole_head; +def drawdoshape = + save noteshape, noteishape, dx, dy, ai_a, bi_b; + path noteshape, noteishape; + noteshape = noteishape = triangle; + (dx,dy)=(0,0.05); + (ai_a,bi_b)=(i_o,i_o); + draw_solfa_note_shape; +enddef; - pickup pencircle scaled stemthick; +fet_beginchar("Whole dohead", "s0do", "wholedohead") + pickup pencircle scaled blot_diameter; + save a_b, i_o; + a_b = 1.8; + i_o = 0.6; - bot y1 = -d; - top y2 = h; - rt x1 - fudge = 0; - x1 = x2; + drawdoshape; +fet_endchar; + +fet_beginchar("Half dohead", "s1do", "halfdohead") + save a_b, i_o; + a_b = 1.5; + i_o = 0.6; - fudge + lft x3 = w; - x4 = x3; - y4 = y2; - y3 = y1; + drawdoshape; +fet_endchar; + +fet_beginchar("Quart dohead", "s2do", "dohead") + save a_b, noteshape; + path noteshape; + a_b = 1.54; + + noteshape = triangle; + draw_solfa_quarter_note_shape; - draw z1 -- z2; - draw z3 -- z4; -fet_endchar; - -% whole note -% Wanske, p.38 -fet_beginchar("Whole notehead", "0", "wholehead") - draw_whole_head; -fet_endchar; - - - -% half note -% Wanske, p.39 -fet_beginchar("Half notehead", "1", - "halfhead") - setup_notehead_vars; - % a_b:=1.49; % after text - a_b:=1.50; % after drawing - err_y_a:=0.157; - tilt:=34; - % superness:=0.66; - superness:=0.67; % jcn - % ai_a:=0.863; - ai_a:=0.850; % jcn - % ai_bi:=3.14; - ai_bi:=3.30; % jcn - err_y_ai:=0; - err_x_bi:=-0.12; - inner_tilt:=tilt; - inner_superness:=0.80; - b_h:=0.935; - a_w:=1.12; - - notehead_calc; - half_notehead_width# := wd#; - notehead_draw; -fet_endchar; - - - -% quarter note -% Wanske p.38 -fet_beginchar("Quart notehead", "2", "quarthead") - setup_notehead_vars; - % a_b:=1.57; % after text - a_b:=1.54; % after drawing - err_y_a:=0.044; - tilt:=32; - superness:=0.707; - ai_a:=0; - ai_bi:=1; - err_y_ai:=0; - err_x_bi:=0; - inner_tilt:=0; - inner_superness:=0.707; - b_h:=0.85; - a_w:=1.09; - - notehead_calc; - black_notehead_width# := wd#; - notehead_draw; -fet_endchar; - - -% whole note -% Wanske, p.38 -fet_beginchar("Whole diamondhead", "0diamond", "wholediamondhead") - setup_notehead_vars; - - a_b:=1.80; - err_y_a:=0; % no slant - tilt:=0; - superness:=0.495; - ai_a:=0.350; - % ai_bi:=1.23; - ai_bi:=1.30; % jcn - % err_y_ai:=0.0938; - % err_x_bi:=0; - err_y_ai:=0; - err_x_bi:=0.115; - % inner_tilt:=135; - inner_tilt:=125; % jcn - % inner_superness:=0.69; - inner_superness:=0.6; % jcn - b_h:=1; %no rotate-> no height correction - a_w:=1; % no rotate-> no width correction - - notehead_calc; - whole_notehead_width# := wd#; - notehead_draw; -fet_endchar; - - -% half note -% Wanske, p.39 -fet_beginchar("Half diamondhead", "1diamond", - "halfdiamondhead") - setup_notehead_vars; +fet_endchar; + +% re - flat top, curved bottom: +% (0,h/2) {dir -90} .. (w/2,-h/2) .. {dir 90} (w,h/2) -- cycle; +% (broader along the base and with more vertical sides for half and +% whole notes) +% stem attachment: h/2 + +save reshape; path reshape; +reshape = (-1,1)--(-1,0.2){down} ... (0,-1) ... {up}(1,0.2)--(1,1)--cycle; + +fet_beginchar("Whole rehead", "s0re", "wholerehead") + save a_b, ai_a, bi_b, dx, dy, noteshape, noteishape; + path noteshape, noteishape; + noteshape = reshape; + noteishape = reshape; + a_b = 1.8; + bi_b = 0.65; + ai_a = 0.8; + (dx,dy)=(0,-0.1); + draw_solfa_note_shape; +fet_endchar; + +fet_beginchar("Half rehead", "s1re", "halfrehead") + save a_b, ai_a, bi_b, dx, dy, noteshape, noteishape; + path noteshape, noteishape; + noteshape = reshape; + noteishape = reshape; + a_b = 1.5; + bi_b = 0.65; + ai_a = 0.8; + (dx,dy)=(0,-0.1); + draw_solfa_note_shape; +fet_endchar; + +fet_beginchar("Quart rehead", "s2ro", "rehead") + save a_b, noteshape; + path noteshape; + a_b = 1.54; + + noteshape = reshape; + draw_solfa_quarter_note_shape; +fet_endchar; + +% me - diamond: (0,0) -- (w/2,h/2) -- (w,0) -- (w/2,-h/2) -- cycle; +% similar to existing diamond shaped head, but not quite the same +% stem attachment: 0 + +save mishape; path mishape; +mishape = (-1,0)--(0,1)--(1,0)--(0,-1)--cycle; + +fet_beginchar("Whole mihead", "s0mi", "wholemihead") + save a_b, ai_a, bi_b, dx, dy, noteshape, noteishape; + path noteshape, noteishape; + noteshape = mishape; + noteishape = (mishape slanted -0.35) rotated -10.5; + a_b = 1.8; + bi_b = 0.65; + ai_a = 0.7; + (dx,dy)=(0,0); + draw_solfa_note_shape; +fet_endchar; + +fet_beginchar("Half mihead", "s1mi", "halfmihead") + save a_b, ai_a, bi_b, dx, dy, noteshape, noteishape; + path noteshape, noteishape; + noteshape = mishape; + noteishape = (mishape slanted -0.35) rotated -10.5; + a_b = 1.5; + bi_b = 0.65; + ai_a = 0.7; + (dx,dy)=(0,0); + draw_solfa_note_shape; +fet_endchar; + +fet_beginchar("Quart mihead", "s2mi", "mihead") + save a_b, noteshape; + path noteshape; + a_b = 1.54; + + noteshape = mishape; + draw_solfa_quarter_note_shape; +fet_endchar; - a_b := 1.50; % after drawing - err_y_a:=0.157; - tilt:=34; - superness:=0.49; % jcn - ai_a:=0.550; % jcn - ai_bi:=3.30; % jcn +% fa - scalene triangle: +% for stem up: (0,h/2) -- (w,h/2) -- (w,-h/2) -- cycle; +% for stem down: (w,-h/2) -- (0,1h/2) -- (0,h/2) -- cycle; +% (one is a 180 degree rotation of the other) +% stem attachment: (doesn't much matter) + +save fashape; path fashape; +fashape = (-1,1)--(1,1)--(1,-1)--cycle; + +fet_beginchar("Whole fahead", "s0fa", "wholefahead") + save a_b, ai_a, bi_b, dx, dy, noteshape, noteishape; + path noteshape, noteishape; + noteshape = fashape; + noteishape = fashape; + a_b = 1.8; + bi_b = 0.6; + ai_a = 0.6; + (dx,dy)=(0.2,.05); + draw_solfa_note_shape; +fet_endchar; - err_y_ai:=0; - err_x_bi:=-0.12; - inner_tilt:=tilt; - inner_superness:=0.80; +fet_beginchar("Half stemup fahead", "u1fa", "halffauhead") + save a_b, ai_a, bi_b, dx, dy, noteshape, noteishape; + path noteshape, noteishape; + noteshape = fashape; + noteishape = fashape; + a_b = 1.5; + bi_b = 0.6; + ai_a = 0.6; + (dx,dy)=(0.2,.05); + draw_solfa_note_shape; +fet_endchar; - b_h:= 1.03; - a_w:= 1.2; +fet_beginchar("Quart stemup fahead", "u2fa", "fauhead") + save a_b, noteshape; + path noteshape; + a_b = 1.54; + + noteshape = fashape; + draw_solfa_quarter_note_shape; +fet_endchar; - notehead_calc; - half_notehead_width# := wd#; - notehead_draw; +fet_beginchar("Half stemdn fahead", "d1fa", "halffadhead") + save a_b, ai_a, bi_b, dx, dy, noteshape, noteishape; + path noteshape, noteishape; + noteshape = fashape rotated 180; + noteishape = fashape rotated 180; + a_b = 1.5; + bi_b = 0.6; + ai_a = 0.6; + (dx,dy)=(-0.2,-.05); + draw_solfa_note_shape; fet_endchar; +fet_beginchar("Quart stemdn fahead", "d2fa", "fadhead") + save a_b, noteshape; + path noteshape; + a_b = 1.54; + + noteshape = fashape rotated 180; + draw_solfa_quarter_note_shape; +fet_endchar; -% quarter note -% Wanske p.38 -fet_beginchar("Quart diamondhead", "2diamond", "diamondhead") - set_char_box(0, black_notehead_width#, noteheight#/2, noteheight#/2); - save a_b,err_y_a,tilt,superness; - save b_h,a_w; - save a,beta,ai,bi, ht, wd; - a_b:= 1.8; - err_y_a:=-0.044; - b_h:=0.90; - a_w:=1.1; - tilt:=35; - superness:=0.495; +% sol - oval ... the standard "round" note - ht# =noteheight#; - 2beta#=ht#*b_h; - a# = beta#*a_b; +% la - rectangle: (0,h/2)--(w,h.2)--(w,-h/2)--(0,-h/2)--cycle; +% stem attachment: (doesn't much matter) +save lashape; path lashape; +lashape = (-1,-1)--(-1,1)--(1,1)--(1,-1)--cycle; - define_pixels(a,beta); +fet_beginchar("Whole lahead", "s0la", "wholelahead") + save a_b, ai_a, bi_b, dx, dy, noteshape, noteishape; + path noteshape, noteishape; + noteshape = lashape; + noteishape = lashape; + a_b = 1.8; + bi_b = 0.6; + ai_a = 0.85; + (dx,dy)=(0,0); + draw_solfa_note_shape; +fet_endchar; - black := distorted_ellipse(.72 noteheight, .45 noteheight, -.2 noteheight , 0, superness) - -% beta,a*err_y_a,0,superness); +fet_beginchar("Half lahead", "s1la", "halflahead") + save a_b, ai_a, bi_b, dx, dy, noteshape, noteishape; + path noteshape, noteishape; + noteshape = lashape; + noteishape = lashape; + a_b = 1.5; + bi_b = 0.6; + ai_a = 0.85; + (dx,dy)=(0,0); + draw_solfa_note_shape; +fet_endchar; - black:=black rotated tilt; - black:=black shifted (w/2,0); - fill black; +fet_beginchar("Quart lahead", "s2la", "lahead") + save a_b, noteshape; + path noteshape; + a_b = 1.54; + + noteshape = lashape; + draw_solfa_quarter_note_shape; fet_endchar; -fet_beginchar("Crossed notehead", "2cross", "crossedhead") - set_char_box(0, black_notehead_width#, noteheight#/2, noteheight#/2); - pickup pencircle scaled 1.5 stafflinethickness; - lft x1 = 0; - bot y1 = -d; - top y2 = h; - rt x2 = w; - draw z1 .. z2; - draw (z1 .. z2) yscaled -1; -fet_endchar +% ti - an "icecream cone" with about 2/3 of +% the height in the cone and only 1/3 in the curved top: +% (0,h/6)--(w/2,-h/2)--(w,h/6)..(w/2,h/2)..cycle; +% stem attachment: h/6 +save tishape; path tishape; +tishape = (0,-1)--(-1,0.3)..(0,1)..(1,0.3)--cycle; + +fet_beginchar("Whole tihead", "s0ti", "wholetihead") + save a_b, ai_a, bi_b, dx, dy, noteshape, noteishape; + path noteshape, noteishape; + noteshape = tishape; + noteishape = tishape; + a_b = 1.8; + bi_b = 0.75; + ai_a = 0.75; + (dx,dy)=(0,-.02); + draw_solfa_note_shape; +fet_endchar; + +fet_beginchar("Half tihead", "s1ti", "halftihead") + save a_b, ai_a, bi_b, dx, dy, noteshape, noteishape; + path noteshape, noteishape; + noteshape = tishape; + noteishape = tishape; + a_b = 1.5; + bi_b = 0.75; + ai_a = 0.75; + (dx,dy)=(0,-.02); + draw_solfa_note_shape; +fet_endchar; + +fet_beginchar("Quart tihead", "2ti", "tihead") + save a_b, noteshape; + path noteshape; + a_b = 1.54; + + noteshape = tishape; + draw_solfa_quarter_note_shape; +fet_endchar; + fet_endgroup("noteheads"); + + +% +% we derive black_notehead_width# from the quarter head, +% so we have to define black_notehead_width (pixel qty) +% after the black_notehead_width# itself. Let's keep it outside the group as well. +% define_pixels(black_notehead_width); + + + +