]> git.donarmstrong.com Git - lilypond.git/blob - mf/feta-bolletjes.mf
release: 0.1.27
[lilypond.git] / mf / feta-bolletjes.mf
1 % bolletjes.mf
2 % part of LilyPond's pretty-but-neat music font
3
4 % most beautiful noteheads are pronounced, not circular, 
5 % and not even symmetric.
6 % These examples are inspired by [Wanske], see literature list
7
8
9 save black_notehead_width;
10 numeric black_notehead_width;
11
12 fet_begingroup("balls");
13
14 noteheight#:=interline#+ (1 + overdone_heads) *stafflinethickness#;
15 define_pixels(noteheight);
16 brevis_wid# := 2 interline#;
17
18 def draw_brevis(expr brevwid) =
19         save beamheight, head_width;
20         save holeheight, stem_width;
21         save serif_size, serif_protrude;
22
23         head_width# = brevwid;
24         holeheight = 3 stafflinethickness;
25         stem_width = 1.4 stafflinethickness;
26
27
28         define_pixels(head_width);
29         set_char_box(0, head_width#, noteheight#/2, noteheight#/2);
30         
31         2 beamheight + holeheight = noteheight;
32         serif_size = (holeheight - stafflinethickness)/2;
33         serif_protrude = 1.5 serif_size;
34         penpos1(stem_width, 0);
35         penpos2(stem_width, 0);
36         penpos3(beamheight, 90);
37         penpos4(beamheight, 90);
38         penpos5(stem_width, 180);
39
40         z1l = (0, 0);
41         z2l = (0, -stafflinethickness/2);
42         z3r = z2r + serif_size *(1,-1);
43         y4r = y3r;
44         x4r = head_width/2;
45         z5l = z3l + (-serif_size, -serif_protrude);
46
47         penlabels(1,2,3,4, 5);
48         fill z1r -- z1l -- z5r{down} .. z5l{up} .. z3l{right}
49                 -- z4l -- z4r -- z3r{left} .. z2r{up} -- cycle;
50
51         addto currentpicture also currentpicture yscaled -1;
52         addto currentpicture also currentpicture reflectedabout(z4r, z4l);
53 enddef;
54
55 save uitsteek;
56  uitsteek = .25;
57 def draw_ledger(expr wid)=      
58         set_char_box(uitsteek * wid, (1+ uitsteek)*wid, 
59                 ledgerlinethickness#/2,ledgerlinethickness#/2);
60         pickup pencircle scaled ledgerlinethickness;
61         rt x2 = w;
62         lft x1 = -b;
63         y1 = y2 = 0;
64         draw z1 .. z2;
65 enddef;
66
67 fet_beginchar("Brevis notehead", "-1", "brevisball")
68         draw_brevis(brevis_wid#);
69 fet_endchar;
70 fet_beginchar("Brevis ledger", "-1l", "brevisledger")
71         draw_ledger(brevis_wid#);
72 fet_endchar;
73
74 %
75 % Some sources (eg Musix/OpusTeX think that the appendage should be on
76 % the right, my only other ref [Willemze], shows an appendage to the left
77 %
78 fet_beginchar("Longa notehead", "-2", "longaball");
79         draw_brevis(brevis_wid#);
80         save theta;
81         z7 = z5;
82         z6 - z7 = (-stem_width/2, -interline);
83         theta = angle(z6-z7)+ 90;
84         penpos7(stem_width, theta);
85         penpos6(1.2 stem_width, theta);
86         
87         fill z7r .. z6r{z6-z7} .. {z7-z6} z6l -- z7l -- cycle;
88         penlabels(6,7);
89 fet_endchar;
90 fet_beginchar("Longa ledger", "-2l", "longaledger")
91         draw_ledger(brevis_wid#);
92 fet_endchar;
93
94
95 % setup user vars
96 def setup_notehead_vars =
97         save a_b,err_y_a,tilt,superness;
98         save ai_a,ai_bi,err_y_ai,err_x_bi,inner_tilt,inner_superness;
99         save b_h,a_w;
100         enddef;
101
102 % setup addititional vars and calc them
103 def notehead_calc =
104         save a,beta,ai,bi, ht, wd;
105         ht# =noteheight#;
106         2beta#=ht#*b_h;
107         a# = beta#*a_b;
108         wd# = 2a# / a_w;
109         ai# = a# * ai_a;
110         bi# = ai#/ai_bi;
111         define_pixels(a,beta);
112         define_pixels(ai,bi);
113         set_char_box(0, wd#, .5 ht#, .5 ht#);
114         enddef;
115
116
117 % draw the outer and inner ellipse.
118 def notehead_draw =
119         path black,white;
120         black=distorted_ellipse(a,beta,a*err_y_a,0,superness);
121         white=distorted_ellipse(ai,bi,ai*err_y_ai,bi*err_x_bi,inner_superness);
122 if test>1: %fixme
123                 save x;
124                 x1=-x3=a; x2=x4=0; y1=y3=0; y2=-y4=b;
125                 penlabels(1,2,3,4);
126                 test_grid;
127 else:
128                 black:=black rotated tilt;
129                 black:=black shifted (w/2,0);
130                 white:=white rotated inner_tilt;
131                 white:=white shifted (w/2,0);
132 fi
133                 fill black;
134                 unfill white;
135
136                 
137         enddef;
138
139 % whole note
140 % Wanske, p.38
141 fet_beginchar("Whole notehead", "0", "wholeball")
142         setup_notehead_vars;
143         
144         a_b:=1.80;
145         err_y_a:=0; % no slant
146         tilt:=0;
147         superness:=0.707;
148         ai_a:=0.508;
149         % ai_bi:=1.23;
150         ai_bi:=1.30; % jcn
151         % err_y_ai:=0.0938;
152         % err_x_bi:=0;
153         err_y_ai:=0;
154         err_x_bi:=0.115;
155         % inner_tilt:=135;
156         inner_tilt:=125; % jcn
157         % inner_superness:=0.69;
158         inner_superness:=0.68; % jcn
159         b_h:=1; %no rotate-> no height correction
160         a_w:=1; % no rotate-> no width correction
161
162         notehead_calc;
163         whole_notehead_width# := wd#;
164         notehead_draw;
165 fet_endchar;
166
167
168 fet_beginchar("Whole ledger line", "0l", "wholeledger")
169         draw_ledger(whole_notehead_width#);
170 fet_endchar;
171
172 % half note
173 % Wanske, p.39
174 fet_beginchar("Half notehead", "1", 
175         "halfball")
176         setup_notehead_vars;
177                 % a_b:=1.49; % after text
178         a_b:=1.50; % after drawing
179         err_y_a:=0.157;
180         tilt:=34;
181         % superness:=0.66;
182         superness:=0.67; % jcn
183         % ai_a:=0.863;
184         ai_a:=0.850; % jcn
185         % ai_bi:=3.14;
186         ai_bi:=3.30; % jcn
187         err_y_ai:=0;
188         err_x_bi:=-0.12;
189         inner_tilt:=tilt;
190         inner_superness:=0.80;
191         b_h:=0.935;
192         a_w:=1.12;
193
194         notehead_calc;
195         half_notehead_width# := wd#;
196         notehead_draw;
197 fet_endchar;
198
199
200 fet_beginchar("Half ledger", "1l", "halfledger")
201         draw_ledger(half_notehead_width#);
202 fet_endchar;
203
204 % quarter note
205 % Wanske p.38
206 fet_beginchar("Quart notehead", "2", "quartball")
207         setup_notehead_vars;
208         % a_b:=1.57; % after text
209         a_b:=1.54; % after drawing
210         err_y_a:=0.044;
211         tilt:=32;
212         superness:=0.707;
213         ai_a:=0;
214         ai_bi:=1;
215         err_y_ai:=0;
216         err_x_bi:=0;
217         inner_tilt:=0;
218         inner_superness:=0.707;
219         b_h:=0.85;
220         a_w:=1.09;
221
222         notehead_calc;
223         black_notehead_width# := wd#;
224         notehead_draw;
225 fet_endchar;
226
227
228 fet_beginchar("Quart ledger", "2l", "quartledger")
229         draw_ledger(black_notehead_width#);
230 fet_endchar;
231
232 fet_endgroup("balls");
233
234 define_pixels(black_notehead_width);