Line data Source code
1 : /*
2 : * SPDX-License-Identifier: GPL-3.0-only
3 : * MuseScore-Studio-CLA-applies
4 : *
5 : * MuseScore Studio
6 : * Music Composition & Notation
7 : *
8 : * Copyright (C) 2023 MuseScore Limited and others
9 : *
10 : * This program is free software: you can redistribute it and/or modify
11 : * it under the terms of the GNU General Public License version 3 as
12 : * published by the Free Software Foundation.
13 : *
14 : * This program is distributed in the hope that it will be useful,
15 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 : * GNU General Public License for more details.
18 : *
19 : * You should have received a copy of the GNU General Public License
20 : * along with this program. If not, see <https://www.gnu.org/licenses/>.
21 : */
22 :
23 : #include <sstream>
24 : #include <vector>
25 :
26 : #include "braillecode.h"
27 :
28 : #include "log.h"
29 :
30 : namespace mu::engraving {
31 : std::vector<braille_code*> master_braille_code_list;
32 :
33 515 : braille_code::braille_code(std::string t, std::string c)
34 : {
35 515 : tag = t;
36 515 : code = c;
37 515 : braille = translate2Braille(code);
38 515 : num_cells = static_cast<int>(braille.length());
39 515 : master_braille_code_list.push_back(this);
40 515 : }
41 :
42 515 : braille_code::~braille_code()
43 : {
44 515 : tag.clear();
45 515 : code.clear();
46 515 : braille.clear();
47 515 : }
48 :
49 0 : void braille_code::print()
50 : {
51 0 : LOGD() << " Braille code " << tag << " " << code << " " << braille << " " << num_cells;
52 0 : }
53 :
54 : braille_code Braille_CapIndicator = braille_code("CapIndicator", "6");
55 : braille_code Braille_NumIndicator = braille_code("NumIndicator", "3456");
56 : braille_code Braille_TxtIndicator = braille_code("TextIndicator", "345");
57 :
58 : //[Letter]
59 : braille_code Braille_a = braille_code("a", "1");
60 : braille_code Braille_b = braille_code("b", "12");
61 : braille_code Braille_c = braille_code("c", "14");
62 : braille_code Braille_d = braille_code("d", "145");
63 : braille_code Braille_e = braille_code("e", "15");
64 : braille_code Braille_f = braille_code("f", "124");
65 : braille_code Braille_g = braille_code("g", "1245");
66 : braille_code Braille_h = braille_code("h", "125");
67 : braille_code Braille_i = braille_code("i", "24");
68 : braille_code Braille_j = braille_code("j", "245");
69 : braille_code Braille_k = braille_code("k", "13");
70 : braille_code Braille_l = braille_code("l", "123");
71 : braille_code Braille_m = braille_code("m", "134");
72 : braille_code Braille_n = braille_code("n", "1345");
73 : braille_code Braille_o = braille_code("o", "135");
74 : braille_code Braille_p = braille_code("p", "1234");
75 : braille_code Braille_q = braille_code("q", "12345");
76 : braille_code Braille_r = braille_code("r", "1235");
77 : braille_code Braille_s = braille_code("s", "234");
78 : braille_code Braille_t = braille_code("t", "2345");
79 : braille_code Braille_u = braille_code("u", "136");
80 : braille_code Braille_v = braille_code("v", "1236");
81 : braille_code Braille_w = braille_code("w", "2456");
82 : braille_code Braille_x = braille_code("x", "1346");
83 : braille_code Braille_y = braille_code("y", "13456");
84 : braille_code Braille_z = braille_code("z", "1356");
85 :
86 : braille_code* Braille_Letters[] = {
87 : &Braille_a, &Braille_b, &Braille_c, &Braille_d, &Braille_e,
88 : &Braille_f, &Braille_g, &Braille_h, &Braille_i, &Braille_j,
89 : &Braille_k, &Braille_l, &Braille_m, &Braille_n, &Braille_o,
90 : &Braille_p, &Braille_q, &Braille_r, &Braille_s, &Braille_t,
91 : &Braille_u, &Braille_v, &Braille_w, &Braille_x, &Braille_y,
92 : &Braille_z };
93 :
94 : //upper and lower numbers
95 : braille_code Braille_Upper0 = braille_code("Upper0", "245");
96 : braille_code Braille_Upper1 = braille_code("Upper1", "1");
97 : braille_code Braille_Upper2 = braille_code("Upper2", "12");
98 : braille_code Braille_Upper3 = braille_code("Upper3", "14");
99 : braille_code Braille_Upper4 = braille_code("Upper4", "145");
100 : braille_code Braille_Upper5 = braille_code("Upper5", "15");
101 : braille_code Braille_Upper6 = braille_code("Upper6", "124");
102 : braille_code Braille_Upper7 = braille_code("Upper7", "1245");
103 : braille_code Braille_Upper8 = braille_code("Upper8", "125");
104 : braille_code Braille_Upper9 = braille_code("Upper9", "24");
105 :
106 : braille_code* Braille_UpperNumbers[] = {
107 : &Braille_Upper0, &Braille_Upper1, &Braille_Upper2, &Braille_Upper3,
108 : &Braille_Upper4, &Braille_Upper5, &Braille_Upper6, &Braille_Upper7,
109 : &Braille_Upper8, &Braille_Upper9, };
110 :
111 : //#lower numbers
112 : braille_code Braille_Lower0 = braille_code("Lower0", "356");
113 : braille_code Braille_Lower1 = braille_code("Lower1", "2");
114 : braille_code Braille_Lower2 = braille_code("Lower2", "23");
115 : braille_code Braille_Lower3 = braille_code("Lower3", "25");
116 : braille_code Braille_Lower4 = braille_code("Lower4", "256");
117 : braille_code Braille_Lower5 = braille_code("Lower5", "26");
118 : braille_code Braille_Lower6 = braille_code("Lower6", "235");
119 : braille_code Braille_Lower7 = braille_code("Lower7", "2356");
120 : braille_code Braille_Lower8 = braille_code("Lower8", "236");
121 : braille_code Braille_Lower9 = braille_code("Lower9", "35");
122 :
123 : braille_code* Braille_LowerNumbers[] ={
124 : &Braille_Lower0, &Braille_Lower1, &Braille_Lower2, &Braille_Lower3,
125 : &Braille_Lower4, &Braille_Lower5, &Braille_Lower6, &Braille_Lower7,
126 : &Braille_Lower8, &Braille_Lower9 };
127 :
128 : //[NoteShape]
129 : //#Notes: Braille note shapes are same such as whole=16th=256, half=32nd=512 etc.
130 : //#to deal with complicate back-translation and reading issues, each note should be defined, even it could easily handle by coding.
131 : braille_code Braille_aWhole = braille_code("aWhole", "2346");
132 : braille_code Braille_aHalf = braille_code("aHalf", "234");
133 : braille_code Braille_aQuarter = braille_code("aQuarter", "246");
134 : braille_code Braille_a8th = braille_code("a8th", "24");
135 : braille_code Braille_bWhole = braille_code("bWhole", "23456");
136 : braille_code Braille_bHalf = braille_code("bHalf", "2345");
137 : braille_code Braille_bQuarter = braille_code("bQuarter", "2456");
138 : braille_code Braille_b8th = braille_code("b8th", "245");
139 : braille_code Braille_cWhole = braille_code("cWhole", "13456");
140 : braille_code Braille_cHalf = braille_code("cHalf", "1345");
141 : braille_code Braille_cQuarter = braille_code("cQuarter", "1456");
142 : braille_code Braille_c8th = braille_code("c8th", "145");
143 : braille_code Braille_dWhole = braille_code("dWhole", "1356");
144 : braille_code Braille_dHalf = braille_code("dHalf", "135");
145 : braille_code Braille_dQuarter = braille_code("dQuarter", "156");
146 : braille_code Braille_d8th = braille_code("d8th", "15");
147 : braille_code Braille_eWhole = braille_code("eWhole", "12346");
148 : braille_code Braille_eHalf = braille_code("eHalf", "1234");
149 : braille_code Braille_eQuarter = braille_code("eQuarter", "1246");
150 : braille_code Braille_e8th = braille_code("e8th", "124");
151 : braille_code Braille_fWhole = braille_code("fWhole", "123456");
152 : braille_code Braille_fHalf = braille_code("fHalf", "12345");
153 : braille_code Braille_fQuarter = braille_code("fQuarter", "12456");
154 : braille_code Braille_f8th = braille_code("f8th", "1245");
155 : braille_code Braille_gWhole = braille_code("gWhole", "12356");
156 : braille_code Braille_gHalf = braille_code("gHalf", "1235");
157 : braille_code Braille_gQuarter = braille_code("gQuarter", "1256");
158 : braille_code Braille_g8th = braille_code("g8th", "125");
159 : //#16th to 128th notes
160 : braille_code Braille_a16th = braille_code("a16th", "2346");
161 : braille_code Braille_a32nd = braille_code("a32nd", "234");
162 : braille_code Braille_a64th = braille_code("a64th", "246");
163 : braille_code Braille_a128th = braille_code("a128th", "24");
164 : braille_code Braille_b16th = braille_code("b16th", "23456");
165 : braille_code Braille_b32nd = braille_code("b32nd", "2345");
166 : braille_code Braille_b64th = braille_code("b64th", "2456");
167 : braille_code Braille_b128th = braille_code("b128th", "245");
168 : braille_code Braille_c16th = braille_code("c16th", "13456");
169 : braille_code Braille_c32nd = braille_code("c32nd", "1345");
170 : braille_code Braille_c64th = braille_code("c64th", "1456");
171 : braille_code Braille_c128th = braille_code("c128th", "145");
172 : braille_code Braille_d16th = braille_code("d16th", "1356");
173 : braille_code Braille_d32nd = braille_code("d32nd", "135");
174 : braille_code Braille_d64th = braille_code("d64th", "156");
175 : braille_code Braille_d128th = braille_code("d128th", "15");
176 : braille_code Braille_e16th = braille_code("e16th", "12346");
177 : braille_code Braille_e32nd = braille_code("e32nd", "1234");
178 : braille_code Braille_e64th = braille_code("e64th", "1246");
179 : braille_code Braille_e128th = braille_code("e128th", "124");
180 : braille_code Braille_f16th = braille_code("f16th", "123456");
181 : braille_code Braille_f32nd = braille_code("f32nd", "12345");
182 : braille_code Braille_f64th = braille_code("f64th", "12456");
183 : braille_code Braille_f128th = braille_code("f128th", "1245");
184 : braille_code Braille_g16th = braille_code("g16th", "12356");
185 : braille_code Braille_g32nd = braille_code("g32nd", "1235");
186 : braille_code Braille_g64th = braille_code("g64th", "1256");
187 : braille_code Braille_g128th = braille_code("g128th", "125");
188 : //#256th to 2048th notes
189 : braille_code Braille_a256th = braille_code("a256th", "2346");
190 : braille_code Braille_a512th = braille_code("a512th", "234");
191 : braille_code Braille_a1024th = braille_code("a1024th", "246");
192 : braille_code Braille_a2048th = braille_code("a2048th", "24");
193 : braille_code Braille_b256th = braille_code("b256th", "23456");
194 : braille_code Braille_b512th = braille_code("b512th", "2345");
195 : braille_code Braille_b1024th = braille_code("b1024th", "2456");
196 : braille_code Braille_b2048th = braille_code("b2048th", "245");
197 : braille_code Braille_c256th = braille_code("c256th", "13456");
198 : braille_code Braille_c512th = braille_code("c512th", "1345");
199 : braille_code Braille_c1024th = braille_code("c1024th", "1456");
200 : braille_code Braille_c2048th = braille_code("c2048th", "145");
201 : braille_code Braille_d256th = braille_code("d256th", "1356");
202 : braille_code Braille_d512th = braille_code("d512th", "135");
203 : braille_code Braille_d1024th = braille_code("d1024th", "156");
204 : braille_code Braille_d2048th = braille_code("d2048th", "15");
205 : braille_code Braille_e256th = braille_code("e256th", "12346");
206 : braille_code Braille_e512th = braille_code("e512th", "1234");
207 : braille_code Braille_e1024th = braille_code("e1024th", "1246");
208 : braille_code Braille_e2048th = braille_code("e2048th", "124");
209 : braille_code Braille_f256th = braille_code("f256th", "123456");
210 : braille_code Braille_f512th = braille_code("f512th", "12345");
211 : braille_code Braille_f1024th = braille_code("f1024th", "12456");
212 : braille_code Braille_f2048th = braille_code("f2048th", "1245");
213 : braille_code Braille_g256th = braille_code("g256th", "12356");
214 : braille_code Braille_g512th = braille_code("g512th", "1235");
215 : braille_code Braille_g1024th = braille_code("g1024th", "1256");
216 : braille_code Braille_g2048th = braille_code("g2048th", "125");
217 : //#special notes: breve (double whole notes)
218 : //#Advised to use the definitions of Haipeng as first option for breve notes right below this section.
219 : braille_code Braille_aBreve = braille_code("aBreve", "2346-13");
220 : braille_code Braille_bBreve = braille_code("bBreve", "23456-13");
221 : braille_code Braille_cBreve = braille_code("cBreve", "13456-13");
222 : braille_code Braille_dBreve = braille_code("dBreve", "1356-13");
223 : braille_code Braille_eBreve = braille_code("eBreve", "12346-13");
224 : braille_code Braille_fBreve = braille_code("fBreve", "123456-13");
225 : braille_code Braille_gBreve = braille_code("gBreve", "12356-13");
226 : //##########Added by Haipeng
227 : //#Another kind of breve, mainly used other than the above one which should be used mainly in plain chant
228 : braille_code Braille_aBreveAlt = braille_code("aBreveAlt", "2346-45-14-2346");
229 : braille_code Braille_bBreveAlt = braille_code("bBreveAlt", "23456-45-14-23456");
230 : braille_code Braille_cBreveAlt = braille_code("cBreveAlt", "13456-45-14-13456");
231 : braille_code Braille_dBreveAlt = braille_code("dBreveAlt", "1356-45-14-1356");
232 : braille_code Braille_eBreveAlt = braille_code("eBreveAlt", "12346-45-14-12346");
233 : braille_code Braille_fBreveAlt = braille_code("fBreveAlt", "123456-45-14-123456");
234 : braille_code Braille_gBreveAlt = braille_code("gBreveAlt", "12356-45-14-12356");
235 : //##Other longer notes in ancient music, including Longa and Maxima (quadruple whole note)
236 : braille_code Braille_aLonga = braille_code("aLonga", "2346-45-14-45-14-2346");
237 : braille_code Braille_bLonga = braille_code("bLonga", "23456-45-14-45-14-23456");
238 : braille_code Braille_cLonga = braille_code("cLonga", "13456-45-14-45-14-13456");
239 : braille_code Braille_dLonga = braille_code("dLonga", "1356-45-14-45-14-1356");
240 : braille_code Braille_eLonga = braille_code("eLonga", "12346-45-14-45-14-12346");
241 : braille_code Braille_fLonga = braille_code("fLonga", "123456-45-14-45-14-123456");
242 : braille_code Braille_gLonga = braille_code("gLonga", "12356-45-14-45-14-12356");
243 : braille_code Braille_aMaxima = braille_code("aMaxima", "2346-45-14-45-14-45-14-2346");
244 : braille_code Braille_bMaxima = braille_code("bMaxima", "23456-45-14-45-14-45-14-23456");
245 : braille_code Braille_cMaxima = braille_code("cMaxima", "13456-45-14-45-14-45-14-13456");
246 : braille_code Braille_dMaxima = braille_code("dMaxima", "1356-45-14-45-14-45-14-1356");
247 : braille_code Braille_eMaxima = braille_code("eMaxima", "12346-45-14-45-14-45-14-12346");
248 : braille_code Braille_fMaxima = braille_code("fMaxima", "123456-45-14-45-14-45-14-123456");
249 : braille_code Braille_gMaxima = braille_code("gMaxima", "12356-45-14-45-14-45-14-12356");
250 :
251 : braille_code* Braille_aNotes[] = {
252 : &Braille_aMaxima, &Braille_aLonga, &Braille_aBreve,
253 : &Braille_aWhole, &Braille_aHalf, &Braille_aQuarter,
254 : &Braille_a8th, &Braille_a16th, &Braille_a32nd,
255 : &Braille_a64th, &Braille_a128th, &Braille_a256th,
256 : &Braille_a512th, &Braille_a128th, &Braille_a2048th,
257 : &Braille_aBreveAlt };
258 : braille_code* Braille_bNotes[] = {
259 : &Braille_bMaxima, &Braille_bLonga, &Braille_bBreve,
260 : &Braille_bWhole, &Braille_bHalf, &Braille_bQuarter,
261 : &Braille_b8th, &Braille_b16th, &Braille_b32nd,
262 : &Braille_b64th, &Braille_b128th, &Braille_b256th,
263 : &Braille_b512th, &Braille_b128th, &Braille_b2048th,
264 : &Braille_bBreveAlt };
265 : braille_code* Braille_cNotes[] = {
266 : &Braille_cMaxima, &Braille_cLonga, &Braille_cBreve,
267 : &Braille_cWhole, &Braille_cHalf, &Braille_cQuarter,
268 : &Braille_c8th, &Braille_c16th, &Braille_c32nd,
269 : &Braille_c64th, &Braille_c128th, &Braille_c256th,
270 : &Braille_c512th, &Braille_c128th, &Braille_c2048th,
271 : &Braille_cBreveAlt };
272 : braille_code* Braille_dNotes[] = {
273 : &Braille_dMaxima, &Braille_dLonga, &Braille_dBreve,
274 : &Braille_dWhole, &Braille_dHalf, &Braille_dQuarter,
275 : &Braille_d8th, &Braille_d16th, &Braille_d32nd,
276 : &Braille_d64th, &Braille_d128th, &Braille_d256th,
277 : &Braille_d512th, &Braille_d128th, &Braille_d2048th,
278 : &Braille_dBreveAlt };
279 : braille_code* Braille_eNotes[] = {
280 : &Braille_eMaxima, &Braille_eLonga, &Braille_eBreve,
281 : &Braille_eWhole, &Braille_eHalf, &Braille_eQuarter,
282 : &Braille_e8th, &Braille_e16th, &Braille_e32nd,
283 : &Braille_e64th, &Braille_e128th, &Braille_e256th,
284 : &Braille_e512th, &Braille_e128th, &Braille_e2048th,
285 : &Braille_eBreveAlt };
286 : braille_code* Braille_fNotes[] = {
287 : &Braille_fMaxima, &Braille_fLonga, &Braille_fBreve,
288 : &Braille_fWhole, &Braille_fHalf, &Braille_fQuarter,
289 : &Braille_f8th, &Braille_f16th, &Braille_f32nd,
290 : &Braille_f64th, &Braille_f128th, &Braille_f256th,
291 : &Braille_f512th, &Braille_f128th, &Braille_f2048th,
292 : &Braille_fBreveAlt };
293 : braille_code* Braille_gNotes[] = {
294 : &Braille_gMaxima, &Braille_gLonga, &Braille_gBreve,
295 : &Braille_gWhole, &Braille_gHalf, &Braille_gQuarter,
296 : &Braille_g8th, &Braille_g16th, &Braille_g32nd,
297 : &Braille_g64th, &Braille_g128th, &Braille_g256th,
298 : &Braille_g512th, &Braille_g128th, &Braille_g2048th,
299 : &Braille_gBreveAlt };
300 :
301 : braille_code* Braille_wholeNotes[] = {
302 : &Braille_aWhole, &Braille_bWhole, &Braille_cWhole,
303 : &Braille_dWhole, &Braille_eWhole, &Braille_fWhole, &Braille_gWhole
304 : };
305 : braille_code* Braille_halfNotes[] = {
306 : &Braille_aHalf, &Braille_bHalf, &Braille_cHalf,
307 : &Braille_dHalf, &Braille_eHalf, &Braille_fHalf, &Braille_gHalf
308 : };
309 : braille_code* Braille_quarterNotes[] = {
310 : &Braille_aQuarter, &Braille_bQuarter, &Braille_cQuarter,
311 : &Braille_dQuarter, &Braille_eQuarter, &Braille_fQuarter, &Braille_gQuarter
312 : };
313 : braille_code* Braille_8thNotes[] = {
314 : &Braille_a8th, &Braille_b8th, &Braille_c8th,
315 : &Braille_d8th, &Braille_e8th, &Braille_f8th, &Braille_g8th
316 : };
317 : braille_code* Braille_16thNotes[] = {
318 : &Braille_a16th, &Braille_b16th, &Braille_c16th,
319 : &Braille_d16th, &Braille_e16th, &Braille_f16th, &Braille_g16th
320 : };
321 : braille_code* Braille_32ndNotes[] = {
322 : &Braille_a32nd, &Braille_b32nd, &Braille_c32nd,
323 : &Braille_d32nd, &Braille_e32nd, &Braille_f32nd, &Braille_g32nd
324 : };
325 : braille_code* Braille_64thNotes[] = {
326 : &Braille_a64th, &Braille_b64th, &Braille_c64th,
327 : &Braille_d64th, &Braille_e64th, &Braille_f64th, &Braille_g64th
328 : };
329 : braille_code* Braille_128thNotes[] = {
330 : &Braille_a128th, &Braille_b128th, &Braille_c128th,
331 : &Braille_d128th, &Braille_e128th, &Braille_f128th, &Braille_g128th
332 : };
333 : braille_code* Braille_256thNotes[] = {
334 : &Braille_a256th, &Braille_b256th, &Braille_c256th,
335 : &Braille_d256th, &Braille_e256th, &Braille_f256th, &Braille_g256th
336 : };
337 : braille_code* Braille_512thNotes[] = {
338 : &Braille_a512th, &Braille_b512th, &Braille_c512th,
339 : &Braille_d512th, &Braille_e512th, &Braille_f512th, &Braille_g512th
340 : };
341 : braille_code* Braille_1024thNotes[] = {
342 : &Braille_a1024th, &Braille_b1024th, &Braille_c1024th,
343 : &Braille_d1024th, &Braille_e1024th, &Braille_f1024th, &Braille_g1024th
344 : };
345 : braille_code* Braille_2048thNotes[] = {
346 : &Braille_a2048th, &Braille_b2048th, &Braille_c2048th,
347 : &Braille_d2048th, &Braille_e2048th, &Braille_f2048th, &Braille_g2048th
348 : };
349 :
350 : //####################
351 :
352 : //#Braille rests' shapes are same as notes above, whole rest=16th rest=256th etc.
353 : braille_code Braille_RestWhole = braille_code("RestWhole", "134");
354 : braille_code Braille_RestHalf = braille_code("RestHalf", "136");
355 : braille_code Braille_RestQuarter = braille_code("RestQuarter", "1236");
356 : braille_code Braille_Rest8th = braille_code("Rest8th", "1346");
357 : //#16th to 128th rests
358 : braille_code Braille_Rest16th = braille_code("Rest16th", "134");
359 : braille_code Braille_Rest32nd = braille_code("Rest32nd", "136");
360 : braille_code Braille_Rest64th = braille_code("Rest64th", "1236");
361 : braille_code Braille_Rest128th = braille_code("Rest128th", "1346");
362 : //#256th to 2048th rests
363 : braille_code Braille_Rest256th = braille_code("Rest256th", "134");
364 : braille_code Braille_Rest512th = braille_code("Rest512th", "136");
365 : braille_code Braille_Rest1024th = braille_code("Rest1024th", "1236");
366 : braille_code Braille_Rest2048th = braille_code("Rest2048th", "1346");
367 : //#breve rest, use Haipeng's breve rest definition below as first option.
368 : braille_code Braille_RestBreve = braille_code("RestBreve", "134-13");
369 : //##########Added by Haipeng##########
370 : //#More widely used Breve rest, swap the above with Alt
371 : braille_code Braille_RestBreveAlt = braille_code("RestBreveAlt", "134-45-14-134");
372 : //#Other longer rests in ancient music
373 : braille_code Braille_RestLonga = braille_code("RestLonga", "134-45-14-45-14-134");
374 : braille_code Braille_RestMaxima = braille_code("RestMaxima", "134-45-14-45-14-45-14-134");
375 :
376 : braille_code* Braille_Rests[] = {
377 : &Braille_RestMaxima, &Braille_RestLonga, &Braille_RestBreve,
378 : &Braille_RestWhole, &Braille_RestHalf, &Braille_RestQuarter,
379 : &Braille_Rest8th, &Braille_Rest16th, &Braille_Rest32nd,
380 : &Braille_Rest64th, &Braille_Rest128th, &Braille_Rest256th,
381 : &Braille_Rest512th, &Braille_Rest128th, &Braille_Rest2048th,
382 : &Braille_RestBreveAlt };
383 : //####################
384 :
385 : //[MusicPunctuation]
386 : braille_code Braille_PlusSign = braille_code("PlusSign", "346");
387 : braille_code Braille_MinusSign = braille_code("MinusSign", "36");
388 : braille_code Braille_SlashSign = braille_code("SlashSign", "34");
389 : //#note dot sign, to add value for the associated note and some other situations
390 : braille_code Braille_Dot = braille_code("Dot", "3");
391 : braille_code Braille_Parentheses = braille_code("Parentheses", "6-3");
392 : braille_code Braille_OpenParentheses = braille_code("OpenParentheses", "6-3");
393 : braille_code Braille_CloseParentheses = braille_code("CloseParentheses", "6-3");
394 : braille_code Braille_SpecialParentheses = braille_code("SpecialParentheses", "2356");
395 : braille_code Braille_PageIndicator = braille_code("PageIndicator", "5-25");
396 : braille_code Braille_LineIndicator = braille_code("LineIndicator", "6-123");
397 : braille_code Braille_Hyphen = braille_code("Hyphen", "5");
398 : braille_code Braille_MusicComma = braille_code("MusicComma", "126-2");
399 : braille_code Braille_MusicCommaEnd = braille_code("MusicCommaEnd", "126-2-3");
400 : //##########Added by Haipeng##########
401 : //#Prefix for cautionary accidentals and hidden rests
402 : braille_code Braille_Cautionary = braille_code("Cautionary", "5");
403 : //#Prefix for editorial elements such as dashed slurs, ties and hairpins
404 : braille_code Braille_Editorial = braille_code("Editorial", "5-123");
405 : //####################
406 : braille_code Braille_EqualSign = braille_code("EqualSign", "2356");
407 : braille_code Braille_UpperOpenBracket = braille_code("UpperOpenBracket", "56-2");
408 : braille_code Braille_UpperCloseBracket = braille_code("UpperCloseBracket", "5-23");
409 : braille_code Braille_UpperBrokenOpenBracket = braille_code("UpperBrokenOpenBracket", "56-2-2");
410 : braille_code Braille_UpperBrokenCloseBracket = braille_code("UpperBrokenCloseBracket", "5-5-23");
411 : braille_code Braille_UpperOpenEndedBracket = braille_code("UpperOpenEndedBracket", "56-2");
412 : braille_code Braille_UpperCloseEndedBracket = braille_code("UpperCloseEndedBracket", "5-3");
413 : braille_code Braille_LowerOpenBracket = braille_code("LowerOpenBracket", "56-3");
414 : braille_code Braille_LowerCloseBracket = braille_code("LowerCloseBracket", "6-23");
415 : braille_code Braille_LowerBrokenOpenBracket = braille_code("LowerBrokenOpenBracket", "56-3-3");
416 : braille_code Braille_LowerBrokenCloseBracket = braille_code("LowerBrokenCloseBracket", "6-6-23");
417 : braille_code Braille_LowerOpenEndedBracket = braille_code("LowerOpenEndedBracket", "56-3");
418 : braille_code Braille_LowerCloseEndedBracket = braille_code("LowerCloseEndedBracket", "6-2");
419 : braille_code Braille_OpenMusicCodeIndicator = braille_code("OpenMusicCodeIndicator", "6-3");
420 : braille_code Braille_CloseMusicCodeIndicator = braille_code("CloseMusicCodeIndicator", "56-23");
421 : braille_code Braille_AsteriskSign = braille_code("AsteriskSign", "345-26-35");
422 : braille_code Braille_FootnoteSeparator = braille_code("FootnoteSeparator", "36-36-36-36-36");
423 : //[Harmony]
424 : braille_code Braille_Diminished = braille_code("Diminished", "256");
425 : braille_code Braille_HalfDiminished = braille_code("", "256-3");
426 : braille_code Braille_Triangle = braille_code("HalfDiminished", "356");
427 : braille_code Braille_HalfTriangle = braille_code("HalfTriangle", "356-3");
428 : //#No chord
429 : braille_code Braille_NoHarmony = braille_code("NoHarmony", "6-6-1345-14");
430 :
431 : //##########Newly added by Haipeng
432 : //#A figure is prefixed by a number sign, so here only give the signs not available elsewhere
433 : braille_code Braille_IsolatedSharp = braille_code("IsolatedSharp", "146-13");
434 : braille_code Braille_IsolatedDoubleSharp = braille_code("IsolatedDoubleSharp", "146-146-13");
435 : braille_code Braille_IsolatedFlat = braille_code("IsolatedFlat", "126-13");
436 : braille_code Braille_IsolatedDoubleFlat = braille_code("IsolatedDoubleFlat", "126-126-13");
437 : braille_code Braille_IsolatedNatural = braille_code("IsolatedNatural", "16-13");
438 : braille_code Braille_Cross = braille_code("Cross", "56");
439 :
440 : braille_code Braille_FiguredBassIndicator = braille_code("FiguredBassIndicator", "56-345");
441 : braille_code Braille_FiguredBassSeparator = braille_code("FiguredBassSeparator", "36");
442 : braille_code Braille_PlusAccidental = braille_code("PlusAccidental", "346");
443 : braille_code Braille_AccidentalIsolator = braille_code("AccidentalIsolator", "13");
444 : braille_code Braille_BackslashFigure = braille_code("BackslashFigure", "56");
445 : braille_code Braille_SlashFigure = braille_code("SlashFigure", "34");
446 : braille_code Braille_FigureExtension = braille_code("FigureExtension", "1");
447 : //####################
448 : //#note value indicators: to add before a note having same Braille shape but with different value like between half and 32nd notes.
449 : //#whole-8th notes range
450 : braille_code Braille_FirstValueRange = braille_code("FirstValueRange", "45-126-2");
451 : //#16th-128th notes range
452 : braille_code Braille_SecondValueRange = braille_code("SecondValueRange", "6-126-2");
453 : //#256th notes and further range
454 : braille_code Braille_ThirdValueRange = braille_code("ThirdValueRange", "56-126-2");
455 :
456 : braille_code* Braille_ValueRanges[] = { &Braille_FirstValueRange, &Braille_SecondValueRange, &Braille_ThirdValueRange };
457 : //#octave signs
458 : //#based on Piano keyboard, octave 0 and 8 for lowest and highest notes out of the full octave
459 : //#there are 7 full octaves from 1 to 7
460 : braille_code Braille_Octave0 = braille_code("Octave0", "4-4");
461 : braille_code Braille_Octave1 = braille_code("Octave1", "4");
462 : braille_code Braille_Octave2 = braille_code("Octave2", "45");
463 : braille_code Braille_Octave3 = braille_code("Octave3", "456");
464 : braille_code Braille_Octave4 = braille_code("Octave4", "5");
465 : braille_code Braille_Octave5 = braille_code("Octave5", "46");
466 : braille_code Braille_Octave6 = braille_code("Octave6", "56");
467 : braille_code Braille_Octave7 = braille_code("Octave7", "6");
468 : braille_code Braille_Octave8 = braille_code("Octave8", "6-6");
469 :
470 : braille_code* Braille_Octaves[] = {
471 : &Braille_Octave0, &Braille_Octave1, &Braille_Octave2,
472 : &Braille_Octave3, &Braille_Octave4, &Braille_Octave5,
473 : &Braille_Octave6, &Braille_Octave7, &Braille_Octave8 };
474 : //#clef signs
475 : braille_code Braille_ClefG = braille_code("ClefG", "345-34-123");
476 : braille_code Braille_ClefF = braille_code("ClefF", "345-3456-123");
477 : braille_code Braille_ClefC = braille_code("ClefC", "345-346-123");
478 : //#Treble and bass clefs used in different hands
479 : braille_code Braille_ClefGLeft = braille_code("ClefGLeft", "345-34-13");
480 : braille_code Braille_ClefFRight = braille_code("ClefFRight", "345-3456-13");
481 : //#special clefs
482 : //#G/F/C clef on first line (French violin), second/third/fourth/fifth line etc
483 : braille_code Braille_ClefGFirstLine = braille_code("ClefGFirstLine", "345-34-4-123");
484 : braille_code Braille_ClefGThirdLine = braille_code("ClefGThirdLine", "345-34-456-123");
485 : braille_code Braille_ClefGFourthLine = braille_code("ClefGFourthLine", "345-34-5-123");
486 : braille_code Braille_ClefGFifthLine = braille_code("ClefGFifthLine", "345-34-46-123");
487 : braille_code Braille_ClefFFirstLine = braille_code("ClefFFirstLine", "345-3456-4-123");
488 : braille_code Braille_ClefFSecondLine = braille_code("ClefFSecondLine", "345-3456-45-123");
489 : braille_code Braille_ClefFThirdLine = braille_code("ClefFThirdLine", "345-3456-456-123");
490 : //braille_code Braille_ClefFFourthLine = braille_code("ClefFFourthLine", "345-3456-5-123");
491 : braille_code Braille_ClefFFifthLine = braille_code("ClefFFifthLine", "345-3456-46-123");
492 : braille_code Braille_ClefCFirstLine = braille_code("ClefCFirstLine", "345-346-4-123");
493 : braille_code Braille_ClefCSecondLine = braille_code("ClefCSecondLine", "345-346-45-123");
494 : //braille_code Braille_ClefCThirdLine = braille_code("ClefCThirdLine", "345-346-456-123");
495 : braille_code Braille_ClefCFourthLine = braille_code("ClefCFourthLine", "345-346-5-123");
496 : braille_code Braille_ClefCFifthLine = braille_code("ClefCFifthLine", "345-346-46-123");
497 : //#hands
498 : braille_code Braille_RightHand = braille_code("RightHand", "46-345");
499 : braille_code Braille_LeftHand = braille_code("LeftHand", "456-345");
500 : //##########Added by Haipeng##########
501 : //#Right and left hands with reversed interval directions in hand-changing passage. Not used for general interval direction changes such as piano left hand reading downwards in orchestral scores where all intervals are down.
502 : braille_code Braille_RightHandUp = braille_code("RightHandUp", "46-345-345");
503 : braille_code Braille_LeftHandDown = braille_code("LeftHandDown", "456-345-345");
504 : //####################
505 : braille_code Braille_OrganPedal = braille_code("OrganPedal", "45-345");
506 : //##########Added by Haipeng##########
507 : //#Chord and figured bass prefix
508 : braille_code Braille_ChordPrefix = braille_code("ChordPrefix", "25-345");
509 : //#Accordion prefix, detected by instrument definition
510 : //AccordionBass 6-345
511 : //#Outline prefix, when producing piano accompaniment with melody outline
512 : braille_code Braille_Outline = braille_code("Outline", "5-345");
513 : //####################
514 : //#accidental signs: natural, sharp and flat.
515 : braille_code Braille_NaturalAccidental = braille_code("NaturalAccidental", "16");
516 : //#sharps
517 : braille_code Braille_SharpAccidental = braille_code("SharpAccidental", "146");
518 : //#1/4 sharp
519 : braille_code Braille_QuarterSharp = braille_code("QuarterSharp", "4-146");
520 : //#3/4 sharp
521 : braille_code Braille_ThreeQuarterSharp = braille_code("ThreeQuarterSharp", "456-146");
522 : //#flats
523 : braille_code Braille_FlatAccidental = braille_code("FlatAccidental", "126");
524 : braille_code Braille_QuarterFlat = braille_code("QuarterFlat", "4-126");
525 : braille_code Braille_ThreeQuarterFlat = braille_code("ThreeQuarterFlat", "456-126");
526 :
527 : braille_code* Braille_Accidentals[] = {
528 : &Braille_NaturalAccidental,
529 : &Braille_SharpAccidental, &Braille_QuarterSharp, &Braille_ThreeQuarterSharp,
530 : &Braille_FlatAccidental, &Braille_QuarterFlat, &Braille_ThreeQuarterFlat
531 : };
532 : //#Time signatures
533 : braille_code Braille_CommonTime = braille_code("CommonTime", "46-14");
534 : braille_code Braille_CutTime = braille_code("CutTime", "456-14");
535 : //# time signature by seconds
536 : braille_code Braille_TimeInSecondSign = braille_code("TimeInSecondSign", "45");
537 : braille_code Braille_TimeExtensionSign = braille_code("TimeExtensionSign", "36-36");
538 : //#ties
539 : braille_code Braille_NoteTie = braille_code("NoteTie", "4-14");
540 : braille_code Braille_ChordTie = braille_code("ChordTie", "46-14");
541 : braille_code Braille_ChordTieDoubling = braille_code("ChordTieDoubling", "46-14-14");
542 : braille_code Braille_Arpeggio = braille_code("Arpeggio", "45-14");
543 : braille_code Braille_TieLetRing = braille_code("TieLetRing", "56-14");
544 : braille_code Braille_TieNoStart = braille_code("TieNoStart", "46-56-14");
545 : //##########Added by Haipeng##########
546 : braille_code Braille_TieCrossVoice = braille_code("TieCrossVoice", "456-4-14");
547 : braille_code Braille_TieCrossVoiceFrom = braille_code("TieCrossVoiceFrom", "46-456-4-14");
548 : braille_code Braille_TieCrossStaff = braille_code("TieCrossStaff", "5-4-14");
549 : braille_code Braille_TieCrossStaffFrom = braille_code("TieCrossStaffFrom", "46-5-4-14");
550 : braille_code Braille_ChordTieCrossVoice = braille_code("ChordTieCrossVoice", "456-46-14");
551 : braille_code Braille_ChordTieCrossVoiceFrom = braille_code("ChordTieCrossVoiceFrom", "46-456-46-14");
552 : braille_code Braille_ChordTieCrossStaff = braille_code("ChordTieCrossStaff", "5-46-14");
553 : braille_code Braille_ChordTieCrossStaffFrom = braille_code("ChordTieCrossStaffFrom", "46-5-46-14");
554 : //####################
555 : //#slurs
556 : braille_code Braille_NoteSlur = braille_code("NoteSlur", "14");
557 : braille_code Braille_LongSlurOpenBracket = braille_code("LongSlurOpenBracket", "56-12");
558 : braille_code Braille_LongSlurCloseBracket = braille_code("LongSlurCloseBracket", "45-23");
559 : braille_code Braille_ConvergentSlur = braille_code("ConvergentSlur", "6-14");
560 : braille_code Braille_SameNoteSlur = braille_code("SameNoteSlur", "56-14");
561 :
562 : braille_code Braille_GraceSlur = braille_code("GraceSlur", "56-14");
563 : braille_code Braille_GraceSlurDoubling = braille_code("GraceSlurDoubling", "56-14-14");
564 : //##########Added by Haipeng##########
565 : braille_code Braille_SlurCrossVoice = braille_code("SlurCrossVoice", "456-14");
566 : braille_code Braille_SlurCrossVoiceFrom = braille_code("SlurCrossVoiceFrom", "46-456-14");
567 : braille_code Braille_SlurCrossStaff = braille_code("slurCrossStaff", "5-14");
568 : braille_code Braille_SlurCrossStaffFrom = braille_code("SlurCrossStaffFrom", "46-5-14");
569 : //####################
570 : //#Intervals, Braille signs to write for chords
571 : //#Braille sign for second interval has same dots for 9, 16, 23 (+7)
572 : braille_code Braille_Interval2 = braille_code("Interval2", "34");
573 : braille_code Braille_Interval3 = braille_code("Interval3", "346");
574 : braille_code Braille_Interval4 = braille_code("Interval4", "3456");
575 : braille_code Braille_Interval5 = braille_code("Interval5", "35");
576 : braille_code Braille_Interval6 = braille_code("Interval6", "356");
577 : braille_code Braille_Interval7 = braille_code("Interval7", "25");
578 : braille_code Braille_Interval8 = braille_code("Interval8", "36");
579 :
580 : braille_code* Braille_Intervals[] = {
581 : &Braille_Interval2, &Braille_Interval3, &Braille_Interval4,
582 : &Braille_Interval5, &Braille_Interval6, &Braille_Interval7,
583 : &Braille_Interval8 };
584 : //#tuplet: note grouping 2/3/5/6/XXX-notes grouping
585 : braille_code Braille_Tuplet3 = braille_code("Tuplet3", "23");
586 : braille_code Braille_TupletPrefix = braille_code("TupletPrefix", "456");
587 : //#repeats' signs in print score
588 : braille_code Braille_RepetitionForward = braille_code("RepetitionForward", "126-2356");
589 : braille_code Braille_RepetitionBackward = braille_code("RepetitionBackward", "126-23");
590 : braille_code Braille_Coda = braille_code("Coda", "346-123");
591 : braille_code Braille_Segno = braille_code("Segno", "346");
592 : // Fermata
593 : braille_code Braille_InvertedType = braille_code("InvertedType", "5");
594 : braille_code Braille_FermataDefault = braille_code("FermataDefault", "126-123");
595 : braille_code Braille_FermataSquare = braille_code("FermataSquare", "56-126-123");
596 : braille_code Braille_FermataAngled = braille_code("FermataAngled", "45-126-123");
597 : braille_code Braille_FermataDoubleSquare = braille_code("FermataDoubleSquare", "56-56-126-123");
598 : braille_code Braille_FermataDoubleAngled = braille_code("FermataDoubleAngled", "45-45-126-123");
599 : braille_code Braille_FermataHalfCurve = braille_code("FermataHalfCurve", "45-126-123");
600 : braille_code Braille_FermataDoubleDot = braille_code("FermataDoubleDot", "56-126-123");
601 : //##Newly added by Haipeng##
602 : braille_code Braille_FermataBarline = braille_code("FermataBarline", "456-126-123");
603 : braille_code Braille_FermataNormalBarline = braille_code("FermataNormalBarline", "456");
604 : //#Braille measure or partial repetition sign
605 : braille_code Braille_NotesRepeat = braille_code("NotesRepeat", "2356");
606 : //#Newly added by Haipeng##
607 : //#This repeat should be used according to beamings in unmeasured passage. It should be used between beams, within a long beam, but can't cross beams in different places, thus break the musical meaning implied by the beaming.
608 : braille_code Braille_StartingBeamRepeat = braille_code("StartingBeamRepeat", "16-2356");
609 : //#barlines
610 : braille_code Braille_SingleBarline = braille_code("SingleBarline", "0");
611 : braille_code Braille_DashedBarline = braille_code("DashedBarline", "13");
612 : braille_code Braille_SpecialBarline = braille_code("SpecialBarline", "123");
613 : braille_code Braille_SectionalDouble = braille_code("SectionalDouble", "126-13-3");
614 : braille_code Braille_FinalDouble = braille_code("FinalDouble", "126-13");
615 : //#fingering
616 : braille_code Braille_Finger0 = braille_code("Finger0", "13"); //#thumb
617 : braille_code Braille_Finger1 = braille_code("Finger1", "1"); //#index
618 : braille_code Braille_Finger2 = braille_code("Finger2", "12"); //#middle
619 : braille_code Braille_Finger3 = braille_code("Finger3", "123"); //#ring
620 : braille_code Braille_Finger4 = braille_code("Finger4", "2"); //#little
621 : braille_code Braille_Finger5 = braille_code("Finger5", "13"); //#open string
622 :
623 : braille_code Braille_FingerSlur = braille_code("FingerSlur", "14"); //Finger slur
624 :
625 : braille_code* Braille_Fingers[] = { &Braille_Finger0, &Braille_Finger1, &Braille_Finger2,
626 : &Braille_Finger3, &Braille_Finger4, &Braille_Finger5 };
627 : //##Comment by Haipeng: The names above are not strict, but I believe they can be correctly mapped to Musicxml.##
628 : //#plucks, for string instruments
629 : braille_code Braille_PluckP = braille_code("PluckP", "1234"); //#thumb
630 : braille_code Braille_PluckI = braille_code("PluckI", "24"); //#index
631 : braille_code Braille_PluckM = braille_code("PluckM", "134"); //#middle
632 : braille_code Braille_PluckA = braille_code("PluckA", "1"); //#ring
633 : braille_code Braille_PluckC = braille_code("PluckC", "1346"); //#little
634 :
635 : braille_code* Braille_Plucks[] = { &Braille_PluckP, &Braille_PluckI, &Braille_PluckM,
636 : &Braille_PluckA, &Braille_PluckC };
637 :
638 : braille_code Braille_Dot6PluckP = braille_code("Dot6PluckP", "6-1");
639 : braille_code Braille_Dot6PluckI = braille_code("Dot6PluckI", "6-12");
640 : braille_code Braille_Dot6PluckM = braille_code("Dot6PluckM", "6-123");
641 : braille_code Braille_Dot6PluckA = braille_code("Dot6PluckA", "6-2");
642 : braille_code Braille_Dot6PluckC = braille_code("Dot6PluckC", "6-13");
643 : //#string
644 : braille_code Braille_String1 = braille_code("String1", "146-1");
645 : braille_code Braille_String2 = braille_code("String2", "146-12");
646 : braille_code Braille_String3 = braille_code("String3", "146-123");
647 : braille_code Braille_String4 = braille_code("String4", "146-2");
648 : braille_code Braille_String5 = braille_code("String5", "146-13");
649 : braille_code Braille_String6 = braille_code("String6", "146-23");
650 : braille_code Braille_String7 = braille_code("String7", "146-3");
651 :
652 : braille_code* Braille_Strings[] = {
653 : &Braille_String1, &Braille_String2, &Braille_String3,
654 : &Braille_String4, &Braille_String5, &Braille_String6,
655 : &Braille_String7 };
656 :
657 : braille_code Braille_String1_Doubling = braille_code("String1Doubling", "146-1-1");
658 : braille_code Braille_String2_Doubling = braille_code("String2Doubling", "146-12-12");
659 : braille_code Braille_String3_Doubling = braille_code("String3Doubling", "146-123-123");
660 : braille_code Braille_String4_Doubling = braille_code("String4Doubling", "146-2-2");
661 : braille_code Braille_String5_Doubling = braille_code("String5Doubling", "146-13-13");
662 : braille_code Braille_String6_Doubling = braille_code("String6Doubling", "146-23-23");
663 : braille_code Braille_String7_Doubling = braille_code("String7Doubling", "146-3-3");
664 :
665 : braille_code* Braille_Strings_Doubling[] = {
666 : &Braille_String1_Doubling, &Braille_String2_Doubling, &Braille_String3_Doubling,
667 : &Braille_String4_Doubling, &Braille_String5_Doubling, &Braille_String6_Doubling,
668 : &Braille_String7_Doubling };
669 : //[Fret]
670 : //#frets
671 : braille_code Braille_Fret1 = braille_code("Fret1", "345-345");
672 : braille_code Braille_Fret2 = braille_code("Fret2", "345-34");
673 : braille_code Braille_Fret3 = braille_code("Fret3", "345-346");
674 : braille_code Braille_Fret4 = braille_code("Fret4", "345-3456");
675 : braille_code Braille_Fret5 = braille_code("Fret5", "345-35");
676 : braille_code Braille_Fret6 = braille_code("Fret6", "345-356");
677 : braille_code Braille_Fret7 = braille_code("Fret7", "6-345-25");
678 : braille_code Braille_Fret8 = braille_code("Fret8", "345-36");
679 : braille_code Braille_Fret9 = braille_code("Fret9", "345-36-34");
680 : braille_code Braille_Fret10 = braille_code("Fret10", "345-36-346");
681 : braille_code Braille_Fret11 = braille_code("Fret11", "345-36-3456");
682 : braille_code Braille_Fret12 = braille_code("Fret12", "345-36-35");
683 : braille_code Braille_Fret13 = braille_code("Fret13", "345-36-356");
684 :
685 : braille_code* Braille_Frets[] = {
686 : &Braille_Fret1, &Braille_Fret2, &Braille_Fret3,
687 : &Braille_Fret4, &Braille_Fret5, &Braille_Fret6,
688 : &Braille_Fret7, &Braille_Fret8, &Braille_Fret9,
689 : &Braille_Fret10, &Braille_Fret11, &Braille_Fret12,
690 : &Braille_Fret13 };
691 : //[VoiceAccord]
692 : //#accord
693 : braille_code Braille_FullMeasureAccord = braille_code("FullMeasureAccord", "126-345");
694 : braille_code Braille_PartialMeasureAccord = braille_code("PartialMeasureAccord", "5-2");
695 : braille_code Braille_MeasureSeparator = braille_code("MeasureSeparator", "46-13");
696 : //[Pedal]
697 : //#pedal signs
698 : braille_code Braille_PedalDown = braille_code("PedalDown", "126-14");
699 : braille_code Braille_PedalUp = braille_code("PedalUp", "16-14");
700 : braille_code Braille_NotePedalUpDownAtNote = braille_code("NotePedalUpDownAtNote", "16-126-14");
701 : braille_code Braille_HalfPedal = braille_code("HalfPedal", "5-126-14");
702 : braille_code Braille_AfterNotePedalDown = braille_code("AfterNotePedalDown", "6-126-14");
703 : braille_code Braille_AfterNotePedalUp = braille_code("AfterNotePedalUp", "5-16-14");
704 : braille_code Braille_NoPedal = braille_code("NoPedal", "16-14");
705 : //[Ornament]
706 : //#articulations, ornaments
707 : braille_code Braille_Spiccato = braille_code("Spiccato", "236");
708 : braille_code Braille_Staccato = braille_code("Staccato", "236");
709 : braille_code Braille_Staccatissimo = braille_code("Staccatissimo", "6-236");
710 : braille_code Braille_DetachedLegato = braille_code("DetachedLegato", "5-236");
711 : braille_code Braille_Tenuto = braille_code("Tenuto", "456-236");
712 : braille_code Braille_Accent = braille_code("Accent", "46-236");
713 : braille_code Braille_Stress = braille_code("Stress", "45-236");
714 : braille_code Braille_Unstress = braille_code("Unstress", "4-236");
715 : braille_code Braille_StrongAccent = braille_code("StrongAccent", "56-236");
716 : //##########Added by Haipeng##########
717 : braille_code Braille_SoftAccent = braille_code("SoftAccent", "16-3");
718 : braille_code Braille_Scoop = braille_code("Scoop", "126-3-14");
719 : braille_code Braille_Plop = braille_code("Plop", "126-12-14");
720 : braille_code Braille_Doit = braille_code("Doit", "14-126-3");
721 : braille_code Braille_Falloff = braille_code("Falloff", "14-126-12");
722 : braille_code Braille_UpBow = braille_code("UpBow", "126-3");
723 : braille_code Braille_DownBow = braille_code("DownBow", "126-12");
724 : braille_code Braille_HarmonicNatural = braille_code("HarmonicNatural", "13");
725 : braille_code Braille_HarmonicArtificial = braille_code("HarmonicArtificial", "16-123");
726 : braille_code Braille_OpenString = braille_code("OpenString", "13");
727 : braille_code Braille_Stopped = braille_code("Stopped", "126-12");
728 : braille_code Braille_SnapPizzicato = braille_code("SnapPizzicato", "16-13");
729 : braille_code Braille_HammerOn = braille_code("HammerOn", "126-3");
730 : braille_code Braille_PullOff = braille_code("PullOff", "126-12");
731 : //####################
732 : braille_code Braille_ArpeggiateUp = braille_code("ArpeggiateUp", "345-13");
733 : braille_code Braille_ArpeggiateDown = braille_code("ArpeggiateDown", "345-13-13");
734 : braille_code Braille_Cue = braille_code("Cue", "6-26");
735 : braille_code Braille_GraceShort = braille_code("GraceShort", "26");
736 : braille_code Braille_GraceLong = braille_code("GraceLong", "5-26");
737 : braille_code Braille_TrillMark = braille_code("TrillMark", "235");
738 : braille_code Braille_Turn = braille_code("Turn", "6-256");
739 : braille_code Braille_InvertedTurn = braille_code("InvertedTurn", "6-256-123");
740 : braille_code Braille_DelayedTurn = braille_code("DelayedTurn", "256");
741 : braille_code Braille_DelayedInvertedTurn = braille_code("DelayedInvertedTurn", "256-123");
742 : braille_code Braille_MordentShort = braille_code("MordentShort", "5-235-123");
743 : braille_code Braille_MordentLong = braille_code("MordentLong", "56-235-123");
744 : braille_code Braille_InvertedMordentShort = braille_code("InvertedMordentShort", "5-235");
745 : braille_code Braille_InvertedMordentLong = braille_code("InvertedMordentLong", "56-235");
746 : //##Added by Haipeng##
747 : braille_code Braille_Schleifer = braille_code("Schleifer", "4-26");
748 : braille_code Braille_Shake = braille_code("Shake", "5-235-123");
749 : braille_code Braille_BreathMark = braille_code("BreathMark", "345-2");
750 : braille_code Braille_Caesura = braille_code("Caesura", "6-34");
751 :
752 : braille_code Braille_TremoloSingle1 = braille_code("TremoloSingle1", "45-12");
753 : braille_code Braille_TremoloSingle2 = braille_code("TremoloSingle2", "45-123");
754 : braille_code Braille_TremoloSingle3 = braille_code("TremoloSingle3", "45-2");
755 : braille_code Braille_TremoloSingle4 = braille_code("TremoloSingle4", "45-13");
756 : braille_code Braille_TremoloSingle5 = braille_code("TremoloSingle5", "45-3");
757 :
758 : braille_code* Braille_TremoloSingles[] = {
759 : &Braille_TremoloSingle1, &Braille_TremoloSingle2, &Braille_TremoloSingle3,
760 : &Braille_TremoloSingle4, &Braille_TremoloSingle5 };
761 :
762 : braille_code Braille_TremoloDouble1 = braille_code("TremoloDouble1", "46-12");
763 : braille_code Braille_TremoloDouble2 = braille_code("TremoloDouble2", "46-123");
764 : braille_code Braille_TremoloDouble3 = braille_code("TremoloDouble3", "46-2");
765 : braille_code Braille_TremoloDouble4 = braille_code("TremoloDouble4", "46-1");
766 : braille_code Braille_TremoloDouble5 = braille_code("TremoloDouble5", "46-3");
767 :
768 : braille_code* Braille_TremoloDoubles[] = {
769 : &Braille_TremoloDouble1, &Braille_TremoloDouble2, &Braille_TremoloDouble3,
770 : &Braille_TremoloDouble4, &Braille_TremoloDouble5 };
771 :
772 : braille_code Braille_Glissando = braille_code("Glissando", "4-1");
773 : braille_code Braille_LongGlissandoStart = braille_code("LongGlissandoStart", "4-1-3");
774 : braille_code Braille_LongGlissandoStop = braille_code("LongGlissandoStop", "6-4-1");
775 : braille_code Braille_Slide = braille_code("Slide", "4-1");
776 : braille_code Braille_LongSlideStart = braille_code("LongSlideStart", "4-1-3");
777 : braille_code Braille_LongSlideStop = braille_code("LongSlideStop", "6-4-1");
778 : //##########Added by Haipeng##########
779 : //[Noteheads]
780 : braille_code Braille_blackHead = braille_code("blackHead", "26-1");
781 : braille_code Braille_XShape = braille_code("XShape", "26-12");
782 : braille_code Braille_Diamond = braille_code("Diamond", "26-123");
783 : braille_code Braille_DiamondHarmonic = braille_code("DiamondHarmonic", "16-123");
784 : braille_code Braille_Slashed = braille_code("Slashed", "26-13");
785 : //#Comment: If the diamond is in a chord, then use DiamondHarmonic, since it's an artificial harmonic.
786 : braille_code Braille_StemOnly = braille_code("StemOnly", "26-13");
787 : braille_code Braille_Circled = braille_code("Circled", "26-2");
788 : //[Stems]
789 : braille_code Braille_StemPrefix = braille_code("StemPrefix", "456");
790 : braille_code Braille_StemWhole = braille_code("StemWhole", "3");
791 : braille_code Braille_StemHalf = braille_code("StemHalf", "13");
792 : braille_code Braille_StemQuarter = braille_code("StemQuarter", "1");
793 : braille_code Braille_Stem8th = braille_code("Stem8th", "12");
794 : braille_code Braille_Stem16th = braille_code("Stem16th", "123");
795 : braille_code Braille_Stem32nd = braille_code("Stem32nd", "2");
796 : //[HarpPedalDiagram]
797 : braille_code Braille_HarpPedalBegin = braille_code("HarpPedalBegin", "345-36");
798 : braille_code Braille_HarpPedalEnd = braille_code("HarpPedalEnd", "3-345");
799 : braille_code Braille_HarpPedalRaised = braille_code("HarpPedalRaised", "12");
800 : braille_code Braille_HarpPedalCentered = braille_code("HarpPedalCentered", "2");
801 : braille_code Braille_HarpPedalLowered = braille_code("HarpPedalLowered", "23");
802 : braille_code Braille_HarpPedalDivider = braille_code("HarpPedalDivider", "123");
803 : //[FetherBeams]
804 : braille_code Braille_FanBeamAccelerando = braille_code("FanBeamAccelerando", "45-126-2-6-126-2");
805 : braille_code Braille_FanBeamRitardando = braille_code("FanBeamRitardando", "6-126-2-45-126-2");
806 : braille_code Braille_FanBeamSteady = braille_code("FanBeamSteady", "6-126-2-6-126-2");
807 : braille_code Braille_FanBeamEnd = braille_code("FanBeamEnd", "56-13");
808 : // Placement
809 : braille_code Braille_PlacementBelow = braille_code("PlacementBelow", "6");
810 : // Hand interval up/down
811 : braille_code Braille_LeftHandIntervalDown = braille_code("LeftHandIntervalDown", "456-345-345");
812 : braille_code Braille_RightHandIntervalUp = braille_code("RightHandIntervalUp", "46-345-345");
813 : // Additional braille codes
814 : braille_code Braille_NewLine = braille_code("NewLine", "\n");
815 : // Slurs
816 : braille_code Braille_SlurCrossVoiceDubling = braille_code("SlurCrossVoiceDubling", "456-14-14");
817 : braille_code Braille_SlurCrossStaffDubling = braille_code("SlurCrossStaffDubling", "5-14-14");
818 : // Wavy
819 : braille_code Braille_OrnamentWavyStart = braille_code("OrnamentWavyStart", "3-3");
820 : braille_code Braille_OrnamentWavyStop = braille_code("OrnamentWavyStop", "345-3");
821 : braille_code Braille_WavyRepetitionLine = braille_code("WavyRepetitionLine", "26-2356");
822 : // Dubling
823 : braille_code Braille_CueDubling = braille_code("CueDubling", "6-26-26");
824 : braille_code Braille_GraceLongDubling = braille_code("GraceLongDubling", "5-26-26");
825 : // Noteheads dubling
826 : braille_code Braille_blackHeadDubling = braille_code("blackHeadDubling", "26-1-1");
827 : braille_code Braille_XShapeDubling = braille_code("XShapeDubling", "26-12-12");
828 : braille_code Braille_DiamondDubling = braille_code("DiamondDubling", "26-123-123");
829 : braille_code Braille_DiamondHarmonicDubling = braille_code("DiamondHarmonicDubling", "16-123-16-123");
830 : braille_code Braille_SlashedDubling = braille_code("SlashedDubling", "26-13-13");
831 : braille_code Braille_StemOnlyDubling = braille_code("StemOnlyDubling", "26-13-13");
832 : braille_code Braille_CircledDubling = braille_code("CircledDubling", "26-2-2");
833 : // Tremolo dubling
834 : braille_code Braille_TremoloSingle1Dubling = braille_code("TremoloSingle1Dubling", "45-12-12");
835 : braille_code Braille_TremoloSingle2Dubling = braille_code("TremoloSingle2Dubling", "45-123-123");
836 : braille_code Braille_TremoloSingle3Dubling = braille_code("TremoloSingle3Dubling", "45-2-2");
837 : braille_code Braille_TremoloSingle4Dubling = braille_code("TremoloSingle4Dubling", "45-13-13");
838 : braille_code Braille_TremoloSingle5Dubling = braille_code("TremoloSingle5Dubling", "45-3-3");
839 : braille_code Braille_TremoloDouble1Dubling = braille_code("TremoloDouble1Dubling", "46-12-12");
840 : braille_code Braille_TremoloDouble2Dubling = braille_code("TremoloDouble2Dubling", "46-123-123");
841 : braille_code Braille_TremoloDouble3Dubling = braille_code("TremoloDouble3Dubling", "46-2-2");
842 : braille_code Braille_TremoloDouble4Dubling = braille_code("TremoloDouble4Dubling", "46-1-1");
843 : braille_code Braille_TremoloDouble5Dubling = braille_code("TremoloDouble5Dubling", "46-3-3");
844 : // Dash sign
845 : braille_code Braille_DashSign = braille_code("DashSign", "36");
846 : // Dashline
847 : braille_code Braille_DashLineStart = braille_code("DashLineStart", "3-3");
848 : braille_code Braille_DashLineStop = braille_code("DashLineStop", "345-3");
849 : braille_code Braille_DashNestedLineStart = braille_code("DashNestedLineStart", "36-36");
850 : braille_code Braille_DashNestedLineStop = braille_code("DashNestedLineStop", "345-36");
851 : // Elision
852 : braille_code Braille_Elision2 = braille_code("Elision2", "12");
853 : braille_code Braille_Elision3 = braille_code("Elision3", "123");
854 : // Empty
855 : braille_code Braille_Empty = braille_code("Empty", "");
856 : // line over line format
857 : braille_code Braille_HarmonyLineIndicator = braille_code("HarmonyLineIndicator", "25-345");
858 : braille_code Braille_LyricLineIndicator = braille_code("LyricLineIndicator", "56-23");
859 : braille_code Braille_MusicLineIndicator = braille_code("MusicLineIndicator", "6-3");
860 : braille_code Braille_PluckLineIndicator = braille_code("PluckLineIndicator", "0-0");
861 : braille_code Braille_SoloMelodyLineIndicator = braille_code("SoloMelodyLineIndicator", "5-345");
862 : // wedge stop
863 : braille_code Braille_WedgeCStop = braille_code("WedgeCStop", "345-25");
864 : braille_code Braille_WedgeDStop = braille_code("WedgeDStop", "345-256");
865 : // Repeats
866 : braille_code Braille_PartialRepeat = braille_code("PartialRepeat", "2356");
867 : braille_code Braille_MeasureRepeat = braille_code("MeasureRepeat", "2356"); // ??? 2356?
868 : // Check dot
869 : braille_code Braille_CheckDot = braille_code("CheckDot", "");
870 : // Check figure Bass Separator
871 : braille_code Braille_CheckFiguredBassSeparator = braille_code("CheckFiguredBassSeparator", "");
872 : // Thumb
873 : braille_code Braille_ThumbPosition = braille_code("ThumbPosition", "16-13");
874 : // Accordion
875 : braille_code Braille_AccordionMiddle2 = braille_code("AccordionMiddle2", "34");
876 : braille_code Braille_AccordionMiddle3 = braille_code("AccordionMiddle3", "346");
877 : // String intrument
878 : braille_code Braille_LeftHandPizzicato = braille_code("LeftHandPizzicato", "456-345");
879 :
880 1031 : std::string getBraillePattern(std::string dots)
881 : {
882 1031 : const char* dotc = dots.c_str();
883 1031 : int d = atoi(dotc);
884 :
885 1031 : switch (d) {
886 : // No dots
887 12 : case 0: return " ";
888 :
889 : // One dot
890 66 : case 1: return "⠁";
891 105 : case 2: return "⠂";
892 117 : case 3: return "⠄";
893 63 : case 4: return "⠈";
894 90 : case 5: return "⠐";
895 114 : case 6: return "⠠";
896 :
897 : // Two dots
898 75 : case 12: return "⠃";
899 135 : case 13: return "⠅";
900 282 : case 14: return "⠉";
901 15 : case 15: return "⠑";
902 42 : case 16: return "⠡";
903 42 : case 23: return "⠆";
904 18 : case 24: return "⠊";
905 21 : case 25: return "⠒";
906 69 : case 26: return "⠢";
907 39 : case 34: return "⠌";
908 15 : case 35: return "⠔";
909 63 : case 36: return "⠤";
910 219 : case 45: return "⠘";
911 99 : case 46: return "⠨";
912 81 : case 56: return "⠰";
913 :
914 : // Three dots
915 162 : case 123: return "⠇";
916 15 : case 124: return "⠋";
917 15 : case 125: return "⠓";
918 129 : case 126: return "⠣";
919 36 : case 134: return "⠍";
920 12 : case 135: return "⠕";
921 12 : case 136: return "⠥";
922 15 : case 145: return "⠙";
923 60 : case 146: return "⠩";
924 9 : case 156: return "⠱";
925 12 : case 234: return "⠎";
926 21 : case 235: return "⠖";
927 30 : case 236: return "⠦";
928 15 : case 245: return "⠚";
929 9 : case 246: return "⠪";
930 24 : case 256: return "⠲";
931 183 : case 345: return "⠜";
932 39 : case 346: return "⠬";
933 18 : case 356: return "⠴";
934 66 : case 456: return "⠸";
935 :
936 : // Four dots
937 15 : case 1234: return "⠏";
938 12 : case 1235: return "⠗";
939 12 : case 1236: return "⠧";
940 15 : case 1245: return "⠛";
941 9 : case 1246: return "⠫";
942 9 : case 1256: return "⠳";
943 15 : case 1345: return "⠝";
944 15 : case 1346: return "⠭";
945 33 : case 1356: return "⠵";
946 9 : case 1456: return "⠹";
947 12 : case 2345: return "⠞";
948 30 : case 2346: return "⠮";
949 27 : case 2356: return "⠶";
950 12 : case 2456: return "⠺";
951 30 : case 3456: return "⠼";
952 :
953 : // Five dots
954 12 : case 12345: return "⠟";
955 30 : case 12346: return "⠯";
956 30 : case 12356: return "⠷";
957 9 : case 12456: return "⠻";
958 33 : case 13456: return "⠽";
959 30 : case 23456: return "⠾";
960 :
961 : // Six dots
962 30 : case 123456: return "⠿";
963 : }
964 :
965 0 : return " ";
966 : }
967 :
968 515 : std::string translate2Braille(std::string codes)
969 : {
970 515 : std::stringstream test(codes);
971 515 : std::string segment;
972 515 : std::vector<std::string> seglist;
973 :
974 515 : std::string txt = "";
975 1546 : while (std::getline(test, segment, '-')) {
976 1031 : txt.append(getBraillePattern(segment));
977 : }
978 515 : return txt;
979 515 : }
980 :
981 0 : std::string intToBrailleUpperNumbers(std::string txt, bool indicator)
982 : {
983 0 : std::string braille = "";
984 0 : if (indicator) {
985 0 : braille.append(translate2Braille(Braille_NumIndicator.code));
986 : }
987 :
988 0 : for (size_t i=0; i < txt.length(); i++) {
989 0 : char c = txt.at(i);
990 0 : if (c - '0' <= 9) {
991 0 : braille.append(translate2Braille(Braille_UpperNumbers[c - '0']->code));
992 : }
993 : }
994 0 : return braille;
995 0 : }
996 :
997 0 : std::string intToBrailleLowerNumbers(std::string txt, bool indicator)
998 : {
999 0 : std::string braille = "";
1000 0 : if (indicator) {
1001 0 : braille.append(Braille_NumIndicator.code);
1002 : }
1003 :
1004 0 : for (size_t i=0; i < txt.length(); i++) {
1005 0 : char c = txt.at(i);
1006 0 : if (c - '0' <= 9) {
1007 0 : braille.append(Braille_LowerNumbers[c - '0']->code);
1008 : }
1009 : }
1010 0 : return braille;
1011 0 : }
1012 :
1013 0 : std::vector<std::string> splitCodes(std::string code)
1014 : {
1015 0 : std::stringstream test(code);
1016 0 : std::string segment;
1017 0 : std::vector<std::string> seglist;
1018 :
1019 0 : std::vector<std::string> lst;
1020 0 : while (std::getline(test, segment, '-')) {
1021 0 : lst.push_back(segment);
1022 : }
1023 0 : return lst;
1024 0 : }
1025 : }
|