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) 2021 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 "symbolsmetaparser.h"
24 :
25 : #include "dom/articulation.h"
26 :
27 : using namespace mu::engraving;
28 : using namespace muse;
29 :
30 0 : static mpe::ArticulationType textTypeToArticulationType(ArticulationTextType textType)
31 : {
32 0 : switch (textType) {
33 0 : case ArticulationTextType::NO_TEXT: return mpe::ArticulationType::Standard;
34 0 : case ArticulationTextType::SLAP: return mpe::ArticulationType::Slap;
35 0 : case ArticulationTextType::POP: return mpe::ArticulationType::Pop;
36 0 : case ArticulationTextType::TD: return mpe::ArticulationType::ThumbDamp;
37 0 : case ArticulationTextType::BD: return mpe::ArticulationType::BrushDamp;
38 0 : case ArticulationTextType::RT: return mpe::ArticulationType::RingTouch;
39 0 : case ArticulationTextType::PL: return mpe::ArticulationType::Pluck;
40 0 : case ArticulationTextType::SB: return mpe::ArticulationType::SingingBell;
41 0 : case ArticulationTextType::VIB: return mpe::ArticulationType::SingingVibrate;
42 : }
43 :
44 0 : UNREACHABLE;
45 : return mpe::ArticulationType::Undefined;
46 : }
47 :
48 1514 : mpe::ArticulationTypeSet SymbolsMetaParser::symbolToArticulations(SymId symId, OrnamentStyle ornamentStyle)
49 : {
50 1514 : mpe::ArticulationTypeSet types;
51 :
52 1514 : switch (symId) {
53 1 : case SymId::articAccentAbove:
54 : case SymId::articAccentBelow:
55 1 : types.emplace(mpe::ArticulationType::Accent);
56 1 : break;
57 0 : case SymId::articAccentStaccatoAbove:
58 : case SymId::articAccentStaccatoBelow:
59 0 : types.emplace(mpe::ArticulationType::Accent);
60 0 : types.emplace(mpe::ArticulationType::Staccato);
61 0 : break;
62 0 : case SymId::articLaissezVibrerAbove:
63 : case SymId::articLaissezVibrerBelow:
64 0 : types.emplace(mpe::ArticulationType::LaissezVibrer);
65 0 : break;
66 0 : case SymId::articMarcatoAbove:
67 : case SymId::articMarcatoBelow:
68 0 : types.emplace(mpe::ArticulationType::Marcato);
69 0 : break;
70 0 : case SymId::articMarcatoStaccatoAbove:
71 : case SymId::articMarcatoStaccatoBelow:
72 0 : types.emplace(mpe::ArticulationType::Marcato);
73 0 : types.emplace(mpe::ArticulationType::Staccato);
74 0 : break;
75 0 : case SymId::articMarcatoTenutoAbove:
76 : case SymId::articMarcatoTenutoBelow:
77 0 : types.emplace(mpe::ArticulationType::Marcato);
78 0 : types.emplace(mpe::ArticulationType::Tenuto);
79 0 : break;
80 0 : case SymId::articSoftAccentAbove:
81 : case SymId::articSoftAccentBelow:
82 0 : types.emplace(mpe::ArticulationType::SoftAccent);
83 0 : break;
84 0 : case SymId::articSoftAccentStaccatoAbove:
85 : case SymId::articSoftAccentStaccatoBelow:
86 0 : types.emplace(mpe::ArticulationType::SoftAccent);
87 0 : types.emplace(mpe::ArticulationType::Staccato);
88 0 : break;
89 0 : case SymId::articSoftAccentTenutoAbove:
90 : case SymId::articSoftAccentTenutoBelow:
91 0 : types.emplace(mpe::ArticulationType::SoftAccent);
92 0 : types.emplace(mpe::ArticulationType::Tenuto);
93 0 : break;
94 0 : case SymId::articSoftAccentTenutoStaccatoAbove:
95 : case SymId::articSoftAccentTenutoStaccatoBelow:
96 0 : types.emplace(mpe::ArticulationType::SoftAccent);
97 0 : types.emplace(mpe::ArticulationType::Tenuto);
98 0 : types.emplace(mpe::ArticulationType::Staccato);
99 0 : break;
100 1 : case SymId::articStaccatissimoAbove:
101 : case SymId::articStaccatissimoBelow:
102 : case SymId::articStaccatissimoStrokeAbove:
103 : case SymId::articStaccatissimoStrokeBelow:
104 : case SymId::articStaccatissimoWedgeAbove:
105 : case SymId::articStaccatissimoWedgeBelow:
106 1 : types.emplace(mpe::ArticulationType::Staccatissimo);
107 1 : break;
108 1 : case SymId::articStaccatoAbove:
109 : case SymId::articStaccatoBelow:
110 1 : types.emplace(mpe::ArticulationType::Staccato);
111 1 : break;
112 1 : case SymId::articTenutoAbove:
113 : case SymId::articTenutoBelow:
114 1 : types.emplace(mpe::ArticulationType::Tenuto);
115 1 : break;
116 0 : case SymId::articTenutoStaccatoAbove:
117 : case SymId::articTenutoStaccatoBelow:
118 0 : types.emplace(mpe::ArticulationType::Tenuto);
119 0 : types.emplace(mpe::ArticulationType::Staccato);
120 0 : break;
121 0 : case SymId::articTenutoAccentAbove:
122 : case SymId::articTenutoAccentBelow:
123 0 : types.emplace(mpe::ArticulationType::Tenuto);
124 0 : types.emplace(mpe::ArticulationType::Accent);
125 0 : break;
126 0 : case SymId::dynamicSforzando:
127 : case SymId::dynamicSforzando1:
128 : case SymId::dynamicSforzandoPianissimo:
129 : case SymId::dynamicSforzandoPiano:
130 : case SymId::dynamicSforzato:
131 : case SymId::dynamicSforzatoFF:
132 : case SymId::dynamicSforzatoPiano:
133 0 : types.emplace(mpe::ArticulationType::Subito);
134 0 : break;
135 0 : case SymId::guitarFadeIn:
136 0 : types.emplace(mpe::ArticulationType::FadeIn);
137 0 : break;
138 0 : case SymId::guitarVolumeSwell:
139 0 : types.emplace(mpe::ArticulationType::VolumeSwell);
140 0 : break;
141 0 : case SymId::guitarFadeOut:
142 0 : types.emplace(mpe::ArticulationType::FadeOut);
143 0 : break;
144 0 : case SymId::stringsHalfHarmonic:
145 : case SymId::stringsHarmonic:
146 0 : types.emplace(mpe::ArticulationType::Harmonic);
147 0 : break;
148 0 : case SymId::stringsMuteOn:
149 : case SymId::elecMute:
150 : case SymId::brassMuteHalfClosed:
151 : case SymId::brassMuteClosed:
152 : case SymId::brassHarmonMuteStemHalfRight:
153 : case SymId::brassHarmonMuteStemHalfLeft:
154 : case SymId::brassHarmonMuteClosed:
155 0 : types.emplace(mpe::ArticulationType::Mute);
156 0 : break;
157 0 : case SymId::brassHarmonMuteStemOpen:
158 : case SymId::brassMuteOpen:
159 : case SymId::guitarHalfOpenPedal:
160 : case SymId::guitarOpenPedal:
161 : case SymId::vocalMouthOpen:
162 : case SymId::vocalMouthSlightlyOpen:
163 : case SymId::vocalMouthWideOpen:
164 : case SymId::windOpenHole:
165 : case SymId::elecUnmute:
166 : case SymId::stringsMuteOff:
167 0 : types.emplace(mpe::ArticulationType::Open);
168 0 : break;
169 0 : case SymId::pluckedLeftHandPizzicato:
170 0 : types.emplace(mpe::ArticulationType::Pizzicato);
171 0 : break;
172 0 : case SymId::pluckedSnapPizzicatoAbove:
173 : case SymId::pluckedSnapPizzicatoBelow:
174 0 : types.emplace(mpe::ArticulationType::SnapPizzicato);
175 0 : break;
176 0 : case SymId::stringsUpBow:
177 0 : types.emplace(mpe::ArticulationType::UpBow);
178 0 : break;
179 0 : case SymId::stringsDownBow:
180 0 : types.emplace(mpe::ArticulationType::DownBow);
181 0 : break;
182 0 : case SymId::stringsJeteAbove:
183 : case SymId::stringsJeteBelow:
184 0 : types.emplace(mpe::ArticulationType::Jete);
185 0 : break;
186 0 : case SymId::noteheadXWhole:
187 : case SymId::noteheadXBlack:
188 : case SymId::noteheadXDoubleWhole:
189 : case SymId::noteheadWholeWithX:
190 : case SymId::noteheadVoidWithX:
191 0 : types.emplace(mpe::ArticulationType::CrossNote);
192 0 : break;
193 0 : case SymId::noteheadSlashX:
194 0 : types.emplace(mpe::ArticulationType::CrossLargeNote);
195 0 : break;
196 0 : case SymId::noteheadXOrnate:
197 : case SymId::noteheadXOrnateEllipse:
198 0 : types.emplace(mpe::ArticulationType::CrossOrnateNote);
199 0 : break;
200 0 : case SymId::noteheadCircleSlash:
201 : case SymId::noteheadCircledBlack:
202 : case SymId::noteheadCircledHalf:
203 : case SymId::noteheadCircledBlackLarge:
204 : case SymId::noteheadCircledDoubleWhole:
205 : case SymId::noteheadCircledDoubleWholeLarge:
206 : case SymId::noteheadCircledHalfLarge:
207 : case SymId::noteheadCircledWhole:
208 : case SymId::noteheadCircledWholeLarge:
209 0 : types.emplace(mpe::ArticulationType::CircleNote);
210 0 : break;
211 0 : case SymId::noteheadCircleX:
212 : case SymId::noteheadCircleXDoubleWhole:
213 : case SymId::noteheadCircleXHalf:
214 : case SymId::noteheadCircleXWhole:
215 0 : types.emplace(mpe::ArticulationType::CircleCrossNote);
216 0 : break;
217 0 : case SymId::noteheadRoundWhiteWithDot:
218 : case SymId::noteheadRoundWhiteWithDotLarge:
219 0 : types.emplace(mpe::ArticulationType::CircleDotNote);
220 0 : break;
221 0 : case SymId::noteheadDiamondBlack:
222 : case SymId::noteheadDiamondBlackOld:
223 : case SymId::noteheadDiamondBlackWide:
224 : case SymId::noteheadDiamondDoubleWhole:
225 : case SymId::noteheadDiamondHalfWide:
226 : case SymId::noteheadDiamondDoubleWholeOld:
227 : case SymId::noteheadDiamondWhole:
228 : case SymId::noteheadDiamondWholeOld:
229 : case SymId::noteheadDiamondHalf:
230 : case SymId::noteheadDiamondHalfFilled:
231 : case SymId::noteheadDiamondHalfOld:
232 0 : types.emplace(mpe::ArticulationType::DiamondNote);
233 0 : break;
234 0 : case SymId::noteShapeMoonBlack:
235 : case SymId::noteShapeMoonDoubleWhole:
236 : case SymId::noteShapeMoonWhite:
237 0 : types.emplace(mpe::ArticulationType::MoonNote);
238 0 : break;
239 0 : case SymId::noteheadTriangleLeftBlack:
240 : case SymId::noteheadTriangleLeftWhite:
241 0 : types.emplace(mpe::ArticulationType::TriangleLeftNote);
242 0 : break;
243 0 : case SymId::noteheadTriangleRightBlack:
244 : case SymId::noteheadTriangleRightWhite:
245 : case SymId::noteShapeTriangleRightWhite:
246 : case SymId::noteShapeTriangleRightBlack:
247 : case SymId::noteShapeTriangleRightDoubleWhole:
248 0 : types.emplace(mpe::ArticulationType::TriangleRightNote);
249 0 : break;
250 0 : case SymId::noteheadTriangleDownBlack:
251 : case SymId::noteheadTriangleDownDoubleWhole:
252 : case SymId::noteheadTriangleDownHalf:
253 : case SymId::noteheadTriangleDownWhite:
254 : case SymId::noteheadTriangleDownWhole:
255 0 : types.emplace(mpe::ArticulationType::TriangleDownNote);
256 0 : break;
257 0 : case SymId::noteheadTriangleUpBlack:
258 : case SymId::noteheadTriangleUpDoubleWhole:
259 : case SymId::noteheadTriangleUpHalf:
260 : case SymId::noteheadTriangleUpRightBlack:
261 : case SymId::noteheadTriangleUpRightWhite:
262 : case SymId::noteheadTriangleUpWhite:
263 : case SymId::noteheadTriangleUpWhole:
264 : case SymId::noteShapeTriangleUpBlack:
265 : case SymId::noteShapeTriangleUpWhite:
266 : case SymId::noteShapeTriangleUpDoubleWhole:
267 0 : types.emplace(mpe::ArticulationType::TriangleUpNote);
268 0 : break;
269 0 : case SymId::noteheadTriangleRoundDownBlack:
270 : case SymId::noteheadTriangleRoundDownWhite:
271 : case SymId::noteShapeTriangleRoundBlack:
272 : case SymId::noteShapeTriangleRoundWhite:
273 : case SymId::noteShapeTriangleRoundDoubleWhole:
274 0 : types.emplace(mpe::ArticulationType::TriangleRoundDownNote);
275 0 : break;
276 0 : case SymId::noteheadPlusBlack:
277 : case SymId::noteheadPlusDoubleWhole:
278 : case SymId::noteheadPlusHalf:
279 : case SymId::noteheadPlusWhole:
280 0 : types.emplace(mpe::ArticulationType::PlusNote);
281 0 : break;
282 0 : case SymId::noteheadSlashWhiteWhole:
283 : case SymId::noteheadSlashWhiteHalf:
284 : case SymId::noteheadSlashHorizontalEnds:
285 : case SymId::noteheadSlashWhiteDoubleWhole:
286 0 : types.emplace(mpe::ArticulationType::SlashNote);
287 0 : break;
288 0 : case SymId::noteShapeSquareBlack:
289 : case SymId::noteShapeSquareWhite:
290 : case SymId::noteShapeSquareDoubleWhole:
291 0 : types.emplace(mpe::ArticulationType::SquareNote);
292 0 : break;
293 0 : case SymId::noteheadSlashedWhole1:
294 : case SymId::noteheadSlashedHalf1:
295 : case SymId::noteheadSlashedBlack1:
296 : case SymId::noteheadSlashedDoubleWhole1:
297 0 : types.emplace(mpe::ArticulationType::SlashedForwardsNote);
298 0 : break;
299 0 : case SymId::noteheadSlashedWhole2:
300 : case SymId::noteheadSlashedHalf2:
301 : case SymId::noteheadSlashedBlack2:
302 : case SymId::noteheadSlashedDoubleWhole2:
303 0 : types.emplace(mpe::ArticulationType::SlashedBackwardsNote);
304 0 : break;
305 0 : case SymId::brassScoop:
306 0 : types.emplace(mpe::ArticulationType::Scoop);
307 0 : break;
308 0 : case SymId::brassPlop:
309 0 : types.emplace(mpe::ArticulationType::Plop);
310 0 : break;
311 0 : case SymId::brassFallLipLong:
312 : case SymId::brassFallLipMedium:
313 : case SymId::brassFallLipShort:
314 : case SymId::brassFallRoughLong:
315 : case SymId::brassFallRoughMedium:
316 : case SymId::brassFallRoughShort:
317 0 : types.emplace(mpe::ArticulationType::QuickFall);
318 0 : break;
319 0 : case SymId::brassFallSmoothLong:
320 : case SymId::brassFallSmoothMedium:
321 : case SymId::brassFallSmoothShort:
322 0 : types.emplace(mpe::ArticulationType::Fall);
323 0 : break;
324 0 : case SymId::brassDoitLong:
325 : case SymId::brassDoitMedium:
326 : case SymId::brassDoitShort:
327 0 : types.emplace(mpe::ArticulationType::Doit);
328 0 : break;
329 0 : case SymId::brassBend:
330 0 : types.emplace(mpe::ArticulationType::BrassBend);
331 0 : break;
332 0 : case SymId::dynamicCrescendoHairpin:
333 0 : types.emplace(mpe::ArticulationType::Crescendo);
334 0 : break;
335 0 : case SymId::dynamicDiminuendoHairpin:
336 0 : types.emplace(mpe::ArticulationType::Diminuendo);
337 0 : break;
338 0 : case SymId::ornamentUpPrall:
339 0 : types.emplace(mpe::ArticulationType::UpPrall);
340 0 : break;
341 0 : case SymId::ornamentPrallDown:
342 0 : types.emplace(mpe::ArticulationType::PrallDown);
343 0 : break;
344 0 : case SymId::ornamentPrallUp:
345 0 : types.emplace(mpe::ArticulationType::PrallUp);
346 0 : break;
347 0 : case SymId::ornamentLinePrall:
348 0 : types.emplace(mpe::ArticulationType::LinePrall);
349 0 : break;
350 0 : case SymId::ornamentPrallMordent:
351 0 : types.emplace(mpe::ArticulationType::PrallMordent);
352 0 : break;
353 0 : case SymId::ornamentUpMordent:
354 0 : types.emplace(mpe::ArticulationType::UpMordent);
355 0 : break;
356 1 : case SymId::ornamentMordent:
357 : case SymId::ornamentPinceCouperin:
358 1 : types.emplace(mpe::ArticulationType::LowerMordent);
359 1 : break;
360 0 : case SymId::ornamentDownMordent:
361 0 : types.emplace(mpe::ArticulationType::DownMordent);
362 0 : break;
363 1 : case SymId::ornamentTurn:
364 : case SymId::ornamentTurnUp:
365 : case SymId::ornamentHaydn:
366 : case SymId::brassJazzTurn:
367 1 : types.emplace(mpe::ArticulationType::Turn);
368 1 : break;
369 2 : case SymId::ornamentTurnInverted:
370 : case SymId::ornamentTurnUpS:
371 : case SymId::ornamentTurnSlash:
372 2 : types.emplace(mpe::ArticulationType::InvertedTurn);
373 2 : break;
374 5 : case SymId::ornamentTrill:
375 : case SymId::ornamentShake3:
376 : case SymId::ornamentShakeMuffat1:
377 5 : if (ornamentStyle == OrnamentStyle::DEFAULT) {
378 4 : types.emplace(mpe::ArticulationType::Trill);
379 : } else {
380 1 : types.emplace(mpe::ArticulationType::TrillBaroque);
381 : }
382 5 : break;
383 1 : case SymId::ornamentShortTrill:
384 1 : if (ornamentStyle == OrnamentStyle::DEFAULT) {
385 1 : types.emplace(mpe::ArticulationType::UpperMordent);
386 : } else {
387 0 : types.emplace(mpe::ArticulationType::UpperMordentBaroque);
388 : }
389 1 : break;
390 0 : case SymId::ornamentTremblement:
391 : case SymId::ornamentTremblementCouperin:
392 0 : types.emplace(mpe::ArticulationType::Tremblement);
393 0 : break;
394 0 : case SymId::graceNoteAcciaccaturaStemDown:
395 : case SymId::graceNoteAcciaccaturaStemUp:
396 : case SymId::graceNoteSlashStemDown:
397 : case SymId::graceNoteSlashStemUp:
398 0 : types.emplace(mpe::ArticulationType::Acciaccatura);
399 0 : break;
400 0 : case SymId::graceNoteAppoggiaturaStemDown:
401 : case SymId::graceNoteAppoggiaturaStemUp:
402 0 : types.emplace(mpe::ArticulationType::PreAppoggiatura);
403 0 : break;
404 0 : case SymId::glissandoUp:
405 : case SymId::glissandoDown:
406 0 : types.emplace(mpe::ArticulationType::DiscreteGlissando);
407 0 : break;
408 0 : case SymId::wiggleArpeggiatoDown:
409 : case SymId::wiggleArpeggiatoDownArrow:
410 0 : types.emplace(mpe::ArticulationType::ArpeggioDown);
411 0 : break;
412 0 : case SymId::wiggleArpeggiatoUp:
413 : case SymId::wiggleArpeggiatoUpArrow:
414 0 : types.emplace(mpe::ArticulationType::ArpeggioUp);
415 0 : break;
416 0 : case SymId::wiggleArpeggiatoDownSwash:
417 0 : types.emplace(mpe::ArticulationType::ArpeggioStraightDown);
418 0 : break;
419 0 : case SymId::wiggleArpeggiatoUpSwash:
420 0 : types.emplace(mpe::ArticulationType::ArpeggioStraightUp);
421 0 : break;
422 0 : case SymId::wiggleVibratoLargeFaster:
423 : case SymId::wiggleVibratoLargeFasterStill:
424 : case SymId::wiggleVibratoLargeFastest:
425 : case SymId::wiggleVibratoLargeSlow:
426 : case SymId::wiggleVibratoLargeSlower:
427 : case SymId::wiggleVibratoLargeSlowest:
428 : case SymId::wiggleVibratoLargestFast:
429 : case SymId::wiggleVibratoLargestFaster:
430 : case SymId::wiggleVibratoLargestFasterStill:
431 : case SymId::wiggleVibratoLargestFastest:
432 : case SymId::wiggleVibratoLargestSlow:
433 : case SymId::wiggleVibratoLargestSlowest:
434 : case SymId::wiggleVibratoMediumFast:
435 : case SymId::wiggleVibratoMediumFaster:
436 : case SymId::wiggleVibratoMediumFasterStill:
437 : case SymId::wiggleVibratoMediumFastest:
438 : case SymId::wiggleVibratoMediumSlow:
439 : case SymId::wiggleVibratoMediumSlowest:
440 : case SymId::wiggleVibratoSmallFast:
441 : case SymId::wiggleVibratoSmallFaster:
442 : case SymId::wiggleVibratoSmallFasterStill:
443 : case SymId::wiggleVibratoSmallFastest:
444 : case SymId::wiggleVibratoSmallSlow:
445 : case SymId::wiggleVibratoSmallSlower:
446 : case SymId::wiggleVibratoSmallSlowest:
447 : case SymId::wiggleVibratoSmallestFast:
448 : case SymId::wiggleVibratoSmallestFaster:
449 : case SymId::wiggleVibratoSmallestFasterStill:
450 : case SymId::wiggleVibratoSmallestFastest:
451 : case SymId::wiggleVibratoSmallestSlow:
452 : case SymId::wiggleVibratoSmallestSlower:
453 : case SymId::wiggleVibratoSmallestSlowest:
454 : case SymId::wiggleVibratoStart:
455 : case SymId::wiggleVibratoLargeFast:
456 : case SymId::wiggleVibrato:
457 0 : types.emplace(mpe::ArticulationType::Vibrato);
458 0 : break;
459 0 : case SymId::wiggleVibratoWide:
460 0 : types.emplace(mpe::ArticulationType::WideVibrato);
461 0 : break;
462 0 : case SymId::handbellsMalletBellOnTable:
463 0 : types.emplace(mpe::ArticulationType::MalletBellOnTable);
464 0 : break;
465 0 : case SymId::handbellsMalletBellSuspended:
466 0 : types.emplace(mpe::ArticulationType::MalletBellSuspended);
467 0 : break;
468 0 : case SymId::handbellsMalletLft:
469 0 : types.emplace(mpe::ArticulationType::MalletLift);
470 0 : break;
471 0 : case SymId::handbellsPluckLift:
472 0 : types.emplace(mpe::ArticulationType::PluckLift);
473 0 : break;
474 0 : case SymId::handbellsGyro:
475 0 : types.emplace(mpe::ArticulationType::Gyro);
476 0 : break;
477 0 : case SymId::handbellsMartellato:
478 0 : types.emplace(mpe::ArticulationType::Martellato);
479 0 : break;
480 0 : case SymId::handbellsMartellatoLift:
481 0 : types.emplace(mpe::ArticulationType::MartellatoLift);
482 0 : break;
483 0 : case SymId::handbellsHandMartellato:
484 0 : types.emplace(mpe::ArticulationType::HandMartellato);
485 0 : break;
486 0 : case SymId::handbellsMutedMartellato:
487 0 : types.emplace(mpe::ArticulationType::MutedMartellato);
488 0 : break;
489 1500 : default:
490 1500 : break;
491 : }
492 :
493 1514 : return types;
494 0 : }
495 :
496 14 : void SymbolsMetaParser::doParse(const EngravingItem* item, const RenderingContext& ctx, mpe::ArticulationMap& result)
497 : {
498 14 : IF_ASSERT_FAILED(item->isArticulationFamily()) {
499 0 : return;
500 : }
501 :
502 14 : const Articulation* articulationSymbol = toArticulation(item);
503 14 : if (!articulationSymbol->playArticulation()) {
504 0 : return;
505 : }
506 :
507 14 : mpe::ArticulationTypeSet types;
508 :
509 14 : if (articulationSymbol->textType() != ArticulationTextType::NO_TEXT) {
510 0 : types.insert(textTypeToArticulationType(articulationSymbol->textType()));
511 : } else {
512 14 : types = symbolToArticulations(articulationSymbol->symId(), articulationSymbol->ornamentStyle());
513 : }
514 :
515 28 : for (mpe::ArticulationType type : types) {
516 14 : const mpe::ArticulationPattern& pattern = ctx.profile->pattern(type, mpe::ArticulationType::Standard);
517 14 : if (pattern.empty()) {
518 1 : continue;
519 : }
520 :
521 13 : appendArticulationData(mpe::ArticulationMeta(type, pattern, ctx.nominalTimestamp, ctx.nominalDuration), result);
522 : }
523 14 : }
|