From 1adfd3f1dd294bf8f40238b45261ef2996bb92c1 Mon Sep 17 00:00:00 2001 From: L-Sun Date: Sun, 28 Dec 2025 15:11:38 +0800 Subject: [PATCH 1/3] fix(exporter): add missing tags of percussion in gp exporter --- packages/alphatab/src/exporter/GpifWriter.ts | 37 +- .../model/InstrumentArticulationSerializer.ts | 20 + .../src/model/InstrumentArticulation.ts | 37 +- .../alphatab/src/model/PercussionMapper.ts | 1258 +++++++++-------- 4 files changed, 779 insertions(+), 573 deletions(-) diff --git a/packages/alphatab/src/exporter/GpifWriter.ts b/packages/alphatab/src/exporter/GpifWriter.ts index a01ed2701..d7522a229 100644 --- a/packages/alphatab/src/exporter/GpifWriter.ts +++ b/packages/alphatab/src/exporter/GpifWriter.ts @@ -1739,34 +1739,31 @@ export class GpifWriter { instrumentSet.addElement('Name').innerText = GpifWriter._drumKitProgramInfo.instrumentSetName; instrumentSet.addElement('Type').innerText = GpifWriter._drumKitProgramInfo.instrumentSetType; - const currentElementType: string = ''; let currentElementName: string = ''; + let currentElement: XmlNode | null = null; let currentArticulations: XmlNode = new XmlNode(); - const counterPerType = new Map(); const elements = instrumentSet.addElement('Elements'); for (const articulation of articulations) { - if (!currentElementType || currentElementType !== articulation.elementType) { - const currentElement = elements.addElement('Element'); - - let name = articulation.elementType; - if (counterPerType.has(name)) { - const counter = counterPerType.get(name)!; - name += ` ${counter}`; - counterPerType.set(name, counter + 1); - } else { - counterPerType.set(name, 1); - } - - currentElementName = name; - currentElement.addElement('Name').innerText = name; + // Group by elementName (e.g., 'Snare', 'Charley', 'Kick Drum') + // If elementName is not set, fall back to elementType + const elementNameToUse = articulation.elementName || articulation.elementType; + + if (!currentElementName || currentElementName !== elementNameToUse) { + currentElement = elements.addElement('Element'); + currentElementName = elementNameToUse; + + currentElement.addElement('Name').innerText = elementNameToUse; currentElement.addElement('Type').innerText = articulation.elementType; + currentElement.addElement('SoundbankName').innerText = articulation.soundbankName || ''; currentArticulations = currentElement.addElement('Articulations'); } const articulationNode = currentArticulations.addElement('Articulation'); - articulationNode.addElement('Name').innerText = + // Use articulationName if available, otherwise generate a name + const articulationNameToUse = articulation.articulationName || `${currentElementName} ${currentArticulations.childNodes.length}`; + articulationNode.addElement('Name').innerText = articulationNameToUse; articulationNode.addElement('StaffLine').innerText = articulation.staffLine.toString(); articulationNode.addElement('Noteheads').innerText = [ this._mapMusicSymbol(articulation.noteHeadDefault), @@ -1791,7 +1788,11 @@ export class GpifWriter { articulationNode.addElement('TechniqueSymbol').innerText = this._mapMusicSymbol( articulation.techniqueSymbol ); - articulationNode.addElement('InputMidiNumbers').innerText = ''; + // Write InputMidiNumbers using the inputMidiNumber field + articulationNode.addElement('InputMidiNumbers').innerText = + articulation.inputMidiNumber > 0 ? articulation.inputMidiNumber.toString() : ''; + // Write OutputRSESound + articulationNode.addElement('OutputRSESound').innerText = articulation.outputRSESound || ''; articulationNode.addElement('OutputMidiNumber').innerText = articulation.outputMidiNumber.toString(); } } else { diff --git a/packages/alphatab/src/generated/model/InstrumentArticulationSerializer.ts b/packages/alphatab/src/generated/model/InstrumentArticulationSerializer.ts index 2e91ec8b8..3049e83a0 100644 --- a/packages/alphatab/src/generated/model/InstrumentArticulationSerializer.ts +++ b/packages/alphatab/src/generated/model/InstrumentArticulationSerializer.ts @@ -30,6 +30,11 @@ export class InstrumentArticulationSerializer { o.set("techniquesymbol", obj.techniqueSymbol as number); o.set("techniquesymbolplacement", obj.techniqueSymbolPlacement as number); o.set("outputmidinumber", obj.outputMidiNumber); + o.set("inputmidinumber", obj.inputMidiNumber); + o.set("outputrsesound", obj.outputRSESound); + o.set("soundbankname", obj.soundbankName); + o.set("articulationname", obj.articulationName); + o.set("elementname", obj.elementName); return o; } public static setProperty(obj: InstrumentArticulation, property: string, v: unknown): boolean { @@ -58,6 +63,21 @@ export class InstrumentArticulationSerializer { case "outputmidinumber": obj.outputMidiNumber = v! as number; return true; + case "inputmidinumber": + obj.inputMidiNumber = v! as number; + return true; + case "outputrsesound": + obj.outputRSESound = v! as string; + return true; + case "soundbankname": + obj.soundbankName = v! as string; + return true; + case "articulationname": + obj.articulationName = v! as string; + return true; + case "elementname": + obj.elementName = v! as string; + return true; } return false; } diff --git a/packages/alphatab/src/model/InstrumentArticulation.ts b/packages/alphatab/src/model/InstrumentArticulation.ts index 47d1415aa..6e465778d 100644 --- a/packages/alphatab/src/model/InstrumentArticulation.ts +++ b/packages/alphatab/src/model/InstrumentArticulation.ts @@ -72,6 +72,31 @@ export class InstrumentArticulation { */ public outputMidiNumber: number; + /** + * Gets or sets the input MIDI number for this articulation. + */ + public inputMidiNumber: number; + + /** + * Gets or sets the RSE sound path for playback (e.g., 'stick.hit.hit'). + */ + public outputRSESound: string; + + /** + * Gets or sets the soundbank name for the element (e.g., 'Master-Snare'). + */ + public soundbankName: string; + + /** + * Gets or sets the display name for this articulation (e.g., 'Snare (hit)'). + */ + public articulationName: string; + + /** + * Gets or sets the display name for the element (e.g., 'Snare'). + */ + public elementName: string; + public constructor( elementType: string = '', staffLine: number = 0, @@ -80,7 +105,12 @@ export class InstrumentArticulation { noteHeadHalf: MusicFontSymbol = MusicFontSymbol.None, noteHeadWhole: MusicFontSymbol = MusicFontSymbol.None, techniqueSymbol: MusicFontSymbol = MusicFontSymbol.None, - techniqueSymbolPlacement: TechniqueSymbolPlacement = TechniqueSymbolPlacement.Inside + techniqueSymbolPlacement: TechniqueSymbolPlacement = TechniqueSymbolPlacement.Inside, + inputMidiNumber: number = 0, + outputRSESound: string = '', + soundbankName: string = '', + articulationName: string = '', + elementName: string = '' ) { this.elementType = elementType; this.outputMidiNumber = outputMidiNumber; @@ -90,6 +120,11 @@ export class InstrumentArticulation { this.noteHeadWhole = noteHeadWhole !== MusicFontSymbol.None ? noteHeadWhole : noteHeadDefault; this.techniqueSymbol = techniqueSymbol; this.techniqueSymbolPlacement = techniqueSymbolPlacement; + this.inputMidiNumber = inputMidiNumber; + this.outputRSESound = outputRSESound; + this.soundbankName = soundbankName; + this.articulationName = articulationName; + this.elementName = elementName; } public getSymbol(duration: Duration): MusicFontSymbol { diff --git a/packages/alphatab/src/model/PercussionMapper.ts b/packages/alphatab/src/model/PercussionMapper.ts index 6654fce0f..28e289b19 100644 --- a/packages/alphatab/src/model/PercussionMapper.ts +++ b/packages/alphatab/src/model/PercussionMapper.ts @@ -42,10 +42,11 @@ export class PercussionMapper { /* * This map was generated using the following steps: - * 1. Make a new GP7 file with a drumkit track + * 1. Make a new GP8 file with a drumkit track * 2. Add one note for each midi value using the instrument panel - * 3. Load the file in alphaTab and set a breakpoint in the GP7 importer. - * 4. Use the following snipped in the console to generate the map initializer (fix enums manually): + * 3. Load the file in alphaTab and set a breakpoint in the GP8 importer. + * 4. Use the following snippet in the console to generate the map initializer (fix enums manually): + * * parser = new DOMParser(); * xmlDoc = parser.parseFromString(xml, 'text/xml'); * articulations = xmlDoc.getElementsByTagName('Articulation'); @@ -53,186 +54,274 @@ export class PercussionMapper { * s = ''; * for(let i = 0; i < articulations.length; i++) { * const articulation = articulations[i]; - * let midi = articulation.getElementsByTagName('InputMidiNumbers'); - * if(midi.length === 1) { - * midi = midi[0].textContent; - * const elementType = articulation.parentElement.parentElement.getElementsByTagName('Type')[0].textContent; - * const outputMidiNumber = articulation.getElementsByTagName('OutputMidiNumber')[0].textContent; - * const staffLine = articulation.getElementsByTagName('StaffLine')[0].textContent; - * const techniqueSymbol = articulation.getElementsByTagName('TechniqueSymbol')[0].textContent; - * const techniquePlacement = articulation.getElementsByTagName('TechniquePlacement')[0].textContent; - * const noteHeads = articulation.getElementsByTagName('Noteheads')[0].textContent.split(' ').map(n=>n = 'MusicFontSymbol.' + n); - * if(!existingArticulations.has(midi)) { - * if(techniqueSymbol) { - * s += `['${elementType}', ${midi}, new InstrumentArticulation(${staffLine}, ${outputMidiNumber}, ${noteHeads[0]}, ${noteHeads[1]}, ${noteHeads[2]}, ${techniqueSymbol}, ${techniquePlacement})],\r\n`; - * } - * else { - * s += `['${elementType}', ${midi}, new InstrumentArticulation(${staffLine}, ${outputMidiNumber}, ${noteHeads[0]}, ${noteHeads[1]}, ${noteHeads[2]})],\r\n`; - * } - * existingArticulations.set(midi, true); - * } - * } + * let inputMidiNumbers = articulation.getElementsByTagName('InputMidiNumbers'); + * if(inputMidiNumbers.length === 1 && inputMidiNumbers[0].textContent) { + * const midi = inputMidiNumbers[0].textContent; + * if(!existingArticulations.has(midi)) { + * // Get Element-level data + * const element = articulation.parentElement.parentElement; + * const elementType = element.getElementsByTagName('Type')[0].textContent; + * const elementName = element.getElementsByTagName('Name')[0].textContent; + * const soundbankName = element.getElementsByTagName('SoundbankName')[0]?.textContent || ''; + * + * // Get Articulation-level data + * const articulationName = articulation.getElementsByTagName('Name')[0].textContent; + * const outputMidiNumber = articulation.getElementsByTagName('OutputMidiNumber')[0].textContent; + * const staffLine = articulation.getElementsByTagName('StaffLine')[0].textContent; + * const techniqueSymbol = articulation.getElementsByTagName('TechniqueSymbol')[0].textContent; + * const techniquePlacement = articulation.getElementsByTagName('TechniquePlacement')[0].textContent; + * const outputRSESound = articulation.getElementsByTagName('OutputRSESound')[0]?.textContent || ''; + * const noteHeads = articulation.getElementsByTagName('Noteheads')[0].textContent.split(' ').map(n => 'MusicFontSymbol.' + n); + * + * // Map technique placement to enum + * const placementMap = { + * 'above': 'TechniqueSymbolPlacement.Above', + * 'below': 'TechniqueSymbolPlacement.Below', + * 'inside': 'TechniqueSymbolPlacement.Inside', + * 'outside': 'TechniqueSymbolPlacement.Outside' + * }; + * const placementEnum = placementMap[techniquePlacement] || 'TechniqueSymbolPlacement.Inside'; + * + * // Map technique symbol to enum (if exists) + * const techniqueSymbolEnum = techniqueSymbol ? 'MusicFontSymbol.' + techniqueSymbol : 'MusicFontSymbol.None'; + * + * // Generate the code + * s += ` new InstrumentArticulation(\r\n`; + * s += ` '${elementType}',\r\n`; + * s += ` ${staffLine},\r\n`; + * s += ` ${outputMidiNumber},\r\n`; + * s += ` ${noteHeads[0]},\r\n`; + * s += ` ${noteHeads[1]},\r\n`; + * s += ` ${noteHeads[2]},\r\n`; + * s += ` ${techniqueSymbolEnum},\r\n`; + * s += ` ${placementEnum},\r\n`; + * s += ` ${midi},\r\n`; + * s += ` '${outputRSESound}',\r\n`; + * s += ` '${soundbankName}',\r\n`; + * s += ` '${articulationName}',\r\n`; + * s += ` '${elementName}'\r\n`; + * s += ` ), \r\n`; + * + * existingArticulations.set(midi, true); + * } + * } * } - * copy(s) + * // Add the array wrapper + * console.log('[\r\n' + s + ' ].map(articulation => [articulation.inputMidiNumber, articulation])'); + * copy('[\r\n' + s + ' ].map(articulation => [articulation.inputMidiNumber, articulation])'); */ - public static instrumentArticulations: Map = new Map([ - [ - 38, - new InstrumentArticulation( + public static instrumentArticulations: Map = new Map([ + new InstrumentArticulation( 'snare', 3, 38, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ) - ], - [ - 37, - new InstrumentArticulation( + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 38, + 'stick.hit.hit', + 'Master-Snare', + 'Snare (hit)', + 'Snare' + ), + new InstrumentArticulation( 'snare', 3, 37, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack - ) - ], - [ - 91, - new InstrumentArticulation( + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 37, + 'stick.hit.sidestick', + 'Master-Snare', + 'Snare (side stick)', + 'Snare' + ), + new InstrumentArticulation( 'snare', 3, 38, MusicFontSymbol.NoteheadDiamondWhite, MusicFontSymbol.NoteheadDiamondWhite, - MusicFontSymbol.NoteheadDiamondWhite - ) - ], - [ - 42, - new InstrumentArticulation( + MusicFontSymbol.NoteheadDiamondWhite, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 91, + 'stick.hit.rimshot', + 'Master-Snare', + 'Snare (rim shot)', + 'Snare' + ), + new InstrumentArticulation( 'hiHat', -1, 42, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack - ) - ], - [ - 92, - new InstrumentArticulation( + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 42, + 'stick.hit.closed', + 'Master-Hihat', + 'Hi-Hat (closed)', + 'Charley' + ), + new InstrumentArticulation( 'hiHat', -1, 46, MusicFontSymbol.NoteheadCircleSlash, MusicFontSymbol.NoteheadCircleSlash, - MusicFontSymbol.NoteheadCircleSlash - ) - ], - [ - 46, - new InstrumentArticulation( + MusicFontSymbol.NoteheadCircleSlash, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 92, + 'stick.hit.half', + 'Master-Hihat', + 'Hi-Hat (half)', + 'Charley' + ), + new InstrumentArticulation( 'hiHat', -1, 46, MusicFontSymbol.NoteheadCircleX, MusicFontSymbol.NoteheadCircleX, - MusicFontSymbol.NoteheadCircleX - ) - ], - [ - 44, - new InstrumentArticulation( + MusicFontSymbol.NoteheadCircleX, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 46, + 'stick.hit.open', + 'Master-Hihat', + 'Hi-Hat (open)', + 'Charley' + ), + new InstrumentArticulation( 'hiHat', 9, 44, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack - ) - ], - [ - 35, - new InstrumentArticulation( + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 44, + 'pedal.hit.pedal', + 'Master-Hihat', + 'Pedal Hi-Hat (hit)', + 'Charley' + ), + new InstrumentArticulation( 'kickDrum', 8, 35, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ) - ], - [ - 36, - new InstrumentArticulation( + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 35, + 'pedal.hit.hit', + 'AcousticKick-Percu', + 'Kick (hit)', + 'Acoustic Kick Drum' + ), + new InstrumentArticulation( 'kickDrum', 7, 36, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ) - ], - [ - 50, - new InstrumentArticulation( + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 36, + 'pedal.hit.hit', + 'Master-Kick', + 'Kick (hit)', + 'Kick Drum' + ), + new InstrumentArticulation( 'tom', 1, 50, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ) - ], - [ - 48, - new InstrumentArticulation( + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 50, + 'stick.hit.hit', + 'Master-Tom05', + 'High Floor Tom (hit)', + 'Tom Very High' + ), + new InstrumentArticulation( 'tom', 2, 48, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ) - ], - [ - 47, - new InstrumentArticulation( + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 48, + 'stick.hit.hit', + 'Master-Tom04', + 'High Tom (hit)', + 'Tom High' + ), + new InstrumentArticulation( 'tom', 4, 47, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ) - ], - [ - 45, - new InstrumentArticulation( + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 47, + 'stick.hit.hit', + 'Master-Tom03', + 'Mid Tom (hit)', + 'Tom Medium' + ), + new InstrumentArticulation( 'tom', 5, 45, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ) - ], - [ - 43, - new InstrumentArticulation( + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 45, + 'stick.hit.hit', + 'Master-Tom02', + 'Low Tom (hit)', + 'Tom Low' + ), + new InstrumentArticulation( 'tom', 6, 43, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ) - ], - [ - 93, - new InstrumentArticulation( + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 43, + 'stick.hit.hit', + 'Master-Tom01', + 'Very Low Tom (hit)', + 'Tom Very Low' + ), + new InstrumentArticulation( 'ride', 0, 51, @@ -240,34 +329,44 @@ export class PercussionMapper { MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.PictEdgeOfCymbal, - TechniqueSymbolPlacement.Below - ) - ], - [ - 51, - new InstrumentArticulation( + TechniqueSymbolPlacement.Above, + 93, + 'stick.hit.edge', + 'Master-Ride', + 'Ride (edge)', + 'Ride' + ), + new InstrumentArticulation( 'ride', 0, 51, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack - ) - ], - [ - 53, - new InstrumentArticulation( + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 51, + 'stick.hit.mid', + 'Master-Ride', + 'Ride (middle)', + 'Ride' + ), + new InstrumentArticulation( 'ride', 0, 53, MusicFontSymbol.NoteheadDiamondWhite, MusicFontSymbol.NoteheadDiamondWhite, - MusicFontSymbol.NoteheadDiamondWhite - ) - ], - [ - 94, - new InstrumentArticulation( + MusicFontSymbol.NoteheadDiamondWhite, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 53, + 'stick.hit.bell', + 'Master-Ride', + 'Ride (bell)', + 'Ride' + ), + new InstrumentArticulation( 'ride', 0, 51, @@ -275,23 +374,29 @@ export class PercussionMapper { MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.ArticStaccatoAbove, - TechniqueSymbolPlacement.Above - ) - ], - [ - 55, - new InstrumentArticulation( + TechniqueSymbolPlacement.Outside, + 94, + 'stick.hit.choke', + 'Master-Ride', + 'Ride (choke)', + 'Ride' + ), + new InstrumentArticulation( 'splash', -2, 55, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack - ) - ], - [ - 95, - new InstrumentArticulation( + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 55, + 'stick.hit.hit', + 'Master-Splash', + 'Splash (hit)', + 'Splash' + ), + new InstrumentArticulation( 'splash', -2, 55, @@ -299,45 +404,59 @@ export class PercussionMapper { MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.ArticStaccatoAbove, - TechniqueSymbolPlacement.Below - ) - ], - [ - 52, - new InstrumentArticulation( + TechniqueSymbolPlacement.Outside, + 95, + 'stick.hit.choke', + 'Master-Splash', + 'Splash (choke)', + 'Splash' + ), + new InstrumentArticulation( 'china', -3, 52, MusicFontSymbol.NoteheadHeavyXHat, MusicFontSymbol.NoteheadHeavyXHat, - MusicFontSymbol.NoteheadHeavyXHat - ) - ], - [ - 96, - new InstrumentArticulation( + MusicFontSymbol.NoteheadHeavyXHat, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 52, + 'stick.hit.hit', + 'Master-China', + 'China (hit)', + 'China' + ), + new InstrumentArticulation( 'china', -3, 52, MusicFontSymbol.NoteheadHeavyXHat, MusicFontSymbol.NoteheadHeavyXHat, - MusicFontSymbol.NoteheadHeavyXHat - ) - ], - [ - 49, - new InstrumentArticulation( + MusicFontSymbol.NoteheadHeavyXHat, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 96, + 'stick.hit.choke', + 'Master-China', + 'China (choke)', + 'China' + ), + new InstrumentArticulation( 'crash', -2, 49, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.NoteheadHeavyX, - MusicFontSymbol.NoteheadHeavyX - ) - ], - [ - 97, - new InstrumentArticulation( + MusicFontSymbol.NoteheadHeavyX, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 49, + 'stick.hit.hit', + 'Master-Crash02', + 'Crash high (hit)', + 'Crash High' + ), + new InstrumentArticulation( 'crash', -2, 49, @@ -345,23 +464,29 @@ export class PercussionMapper { MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.ArticStaccatoAbove, - TechniqueSymbolPlacement.Below - ) - ], - [ - 57, - new InstrumentArticulation( + TechniqueSymbolPlacement.Outside, + 97, + 'stick.hit.choke', + 'Master-Crash02', + 'Crash high (choke)', + 'Crash High' + ), + new InstrumentArticulation( 'crash', -1, 57, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.NoteheadHeavyX, - MusicFontSymbol.NoteheadHeavyX - ) - ], - [ - 98, - new InstrumentArticulation( + MusicFontSymbol.NoteheadHeavyX, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 57, + 'stick.hit.hit', + 'Master-Crash01', + 'Crash medium (hit)', + 'Crash Medium' + ), + new InstrumentArticulation( 'crash', -1, 57, @@ -369,111 +494,149 @@ export class PercussionMapper { MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.NoteheadHeavyX, MusicFontSymbol.ArticStaccatoAbove, - TechniqueSymbolPlacement.Below - ) - ], - [ - 99, - new InstrumentArticulation( + TechniqueSymbolPlacement.Outside, + 98, + 'stick.hit.choke', + 'Master-Crash01', + 'Crash medium (choke)', + 'Crash Medium' + ), + new InstrumentArticulation( 'cowbell', 1, 56, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpHalf, - MusicFontSymbol.NoteheadTriangleUpWhole - ) - ], - [ - 100, - new InstrumentArticulation( + MusicFontSymbol.NoteheadTriangleUpWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 99, + 'stick.hit.hit', + 'CowbellBig-Percu', + 'Cowbell low (hit)', + 'Cowbell Low' + ), + new InstrumentArticulation( 'cowbell', 1, 56, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXHalf, - MusicFontSymbol.NoteheadXWhole - ) - ], - [ - 56, - new InstrumentArticulation( + MusicFontSymbol.NoteheadXWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 100, + 'stick.hit.tip', + 'CowbellBig-Percu', + 'Cowbell low (tip)', + 'Cowbell Low' + ), + new InstrumentArticulation( 'cowbell', 0, 56, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpHalf, - MusicFontSymbol.NoteheadTriangleUpWhole - ) - ], - [ - 101, - new InstrumentArticulation( + MusicFontSymbol.NoteheadTriangleUpWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 56, + 'stick.hit.hit', + 'CowbellMid-Percu', + 'Cowbell medium (hit)', + 'Cowbell Medium' + ), + new InstrumentArticulation( 'cowbell', 0, 56, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXHalf, - MusicFontSymbol.NoteheadXWhole - ) - ], - [ - 102, - new InstrumentArticulation( + MusicFontSymbol.NoteheadXWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 101, + 'stick.hit.tip', + 'CowbellMid-Percu', + 'Cowbell medium (tip)', + 'Cowbell Medium' + ), + new InstrumentArticulation( 'cowbell', -1, 56, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpHalf, - MusicFontSymbol.NoteheadTriangleUpWhole - ) - ], - [ - 103, - new InstrumentArticulation( + MusicFontSymbol.NoteheadTriangleUpWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 102, + 'stick.hit.hit', + 'CowbellSmall-Percu', + 'Cowbell high (hit)', + 'Cowbell High' + ), + new InstrumentArticulation( 'cowbell', -1, 56, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXHalf, - MusicFontSymbol.NoteheadXWhole - ) - ], - [ - 77, - new InstrumentArticulation( + MusicFontSymbol.NoteheadXWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 103, + 'stick.hit.tip', + 'CowbellSmall-Percu', + 'Cowbell high (tip)', + 'Cowbell High' + ), + new InstrumentArticulation( 'woodblock', -9, 77, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack, - MusicFontSymbol.NoteheadTriangleUpBlack - ) - ], - [ - 76, - new InstrumentArticulation( + MusicFontSymbol.NoteheadTriangleUpBlack, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 77, + 'stick.hit.hit', + 'WoodblockLow-Percu', + 'Woodblock low (hit)', + 'Woodblock Low' + ), + new InstrumentArticulation( 'woodblock', -10, 76, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack, - MusicFontSymbol.NoteheadTriangleUpBlack - ) - ], - [ - 60, - new InstrumentArticulation( + MusicFontSymbol.NoteheadTriangleUpBlack, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 76, + 'stick.hit.hit', + 'WoodblockHigh-Percu', + 'Woodblock high (hit)', + 'Woodblock High' + ), + new InstrumentArticulation( 'bongo', -4, 60, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ) - ], - [ - 104, - new InstrumentArticulation( + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 60, + 'hand.hit.hit', + 'BongoHigh-Percu', + 'Bongo High (hit)', + 'Bongo High' + ), + new InstrumentArticulation( 'bongo', -5, 60, @@ -481,34 +644,44 @@ export class PercussionMapper { MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole, MusicFontSymbol.NoteheadParenthesis, - TechniqueSymbolPlacement.Inside - ) - ], - [ - 105, - new InstrumentArticulation( + TechniqueSymbolPlacement.Inside, + 104, + 'hand.hit.mute', + 'BongoHigh-Percu', + 'Bongo High (mute)', + 'Bongo High' + ), + new InstrumentArticulation( 'bongo', -6, 60, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack - ) - ], - [ - 61, - new InstrumentArticulation( + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 105, + 'hand.hit.slap', + 'BongoHigh-Percu', + 'Bongo High (slap)', + 'Bongo High' + ), + new InstrumentArticulation( 'bongo', -7, 61, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ) - ], - [ - 106, - new InstrumentArticulation( + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 61, + 'hand.hit.hit', + 'BongoLow-Percu', + 'Bongo Low (hit)', + 'Bongo Low' + ), + new InstrumentArticulation( 'bongo', -8, 61, @@ -516,89 +689,119 @@ export class PercussionMapper { MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole, MusicFontSymbol.NoteheadParenthesis, - TechniqueSymbolPlacement.Inside - ) - ], - [ - 107, - new InstrumentArticulation( + TechniqueSymbolPlacement.Inside, + 106, + 'hand.hit.mute', + 'BongoLow-Percu', + 'Bongo Low (mute)', + 'Bongo Low' + ), + new InstrumentArticulation( 'bongo', -16, 61, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack - ) - ], - [ - 66, - new InstrumentArticulation( + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 107, + 'hand.hit.slap', + 'BongoLow-Percu', + 'Bongo Low (slap)', + 'Bongo Low' + ), + new InstrumentArticulation( 'timbale', 10, 66, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ) - ], - [ - 65, - new InstrumentArticulation( + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 66, + 'stick.hit.hit', + 'TimbaleLow-Percu', + 'Timbale low (hit)', + 'Timbale Low' + ), + new InstrumentArticulation( 'timbale', 9, 65, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ) - ], - [ - 68, - new InstrumentArticulation( + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 65, + 'stick.hit.hit', + 'TimbaleHigh-Percu', + 'Timbale high (hit)', + 'Timbale High' + ), + new InstrumentArticulation( 'agogo', 12, 68, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ) - ], - [ - 67, - new InstrumentArticulation( + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 68, + 'stick.hit.hit', + 'AgogoLow-Percu', + 'Agogo low (hit)', + 'Agogo Low' + ), + new InstrumentArticulation( 'agogo', 11, 67, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ) - ], - [ - 64, - new InstrumentArticulation( + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 67, + 'stick.hit.hit', + 'AgogoHigh-Percu', + 'Agogo high (hit)', + 'Agogo High' + ), + new InstrumentArticulation( 'conga', 17, 64, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ) - ], - [ - 108, - new InstrumentArticulation( + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 64, + 'hand.hit.hit', + 'CongaLow-Percu', + 'Conga low (hit)', + 'Conga Low' + ), + new InstrumentArticulation( 'conga', 16, 64, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack - ) - ], - [ - 109, - new InstrumentArticulation( + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 108, + 'hand.hit.slap', + 'CongaLow-Percu', + 'Conga low (slap)', + 'Conga Low' + ), + new InstrumentArticulation( 'conga', 15, 64, @@ -606,34 +809,44 @@ export class PercussionMapper { MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole, MusicFontSymbol.NoteheadParenthesis, - TechniqueSymbolPlacement.Inside - ) - ], - [ - 63, - new InstrumentArticulation( + TechniqueSymbolPlacement.Inside, + 109, + 'hand.hit.mute', + 'CongaLow-Percu', + 'Conga low (mute)', + 'Conga Low' + ), + new InstrumentArticulation( 'conga', 14, 63, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ) - ], - [ - 110, - new InstrumentArticulation( + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 63, + 'hand.hit.hit', + 'CongaHigh-Percu', + 'Conga high (hit)', + 'Conga High' + ), + new InstrumentArticulation( 'conga', 13, 63, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack - ) - ], - [ - 62, - new InstrumentArticulation( + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 110, + 'hand.hit.slap', + 'CongaHigh-Percu', + 'Conga high (slap)', + 'Conga High' + ), + new InstrumentArticulation( 'conga', 19, 62, @@ -641,67 +854,89 @@ export class PercussionMapper { MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole, MusicFontSymbol.NoteheadParenthesis, - TechniqueSymbolPlacement.Inside - ) - ], - [ - 72, - new InstrumentArticulation( + TechniqueSymbolPlacement.Inside, + 62, + 'hand.hit.mute', + 'CongaHigh-Percu', + 'Conga high (mute)', + 'Conga High' + ), + new InstrumentArticulation( 'whistle', -11, 72, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ) - ], - [ - 71, - new InstrumentArticulation( + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 72, + 'blow.hit.hit', + 'WhistleLow-Percu', + 'Whistle low (hit)', + 'Whistle Low' + ), + new InstrumentArticulation( 'whistle', -17, 71, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ) - ], - [ - 73, - new InstrumentArticulation( + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 71, + 'blow.hit.hit', + 'WhistleHigh-Percu', + 'Whistle high (hit)', + 'Whistle High' + ), + new InstrumentArticulation( 'guiro', 38, 73, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ) - ], - [ - 74, - new InstrumentArticulation( + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 73, + 'stick.hit.hit', + 'Guiro-Percu', + 'Guiro (hit)', + 'Guiro' + ), + new InstrumentArticulation( 'guiro', 37, 74, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ) - ], - [ - 86, - new InstrumentArticulation( + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 74, + 'stick.scrape.return', + 'Guiro-Percu', + 'Guiro (scrap-return)', + 'Guiro' + ), + new InstrumentArticulation( 'surdo', 36, 86, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ) - ], - [ - 87, - new InstrumentArticulation( + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 86, + 'brush.hit.hit', + 'Surdo-Percu', + 'Surdo (hit)', + 'Surdo' + ), + new InstrumentArticulation( 'surdo', 35, 87, @@ -709,23 +944,29 @@ export class PercussionMapper { MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadParenthesis, - TechniqueSymbolPlacement.Inside - ) - ], - [ - 54, - new InstrumentArticulation( + TechniqueSymbolPlacement.Inside, + 87, + 'brush.hit.mute', + 'Surdo-Percu', + 'Surdo (mute)', + 'Surdo' + ), + new InstrumentArticulation( 'tambourine', 3, 54, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack, - MusicFontSymbol.NoteheadTriangleUpBlack - ) - ], - [ - 111, - new InstrumentArticulation( + MusicFontSymbol.NoteheadTriangleUpBlack, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 54, + 'hand.hit.hit', + 'Tambourine-Percu', + 'Tambourine (hit)', + 'Tambourine' + ), + new InstrumentArticulation( 'tambourine', 2, 54, @@ -733,12 +974,14 @@ export class PercussionMapper { MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.StringsUpBow, - TechniqueSymbolPlacement.Below - ) - ], - [ - 112, - new InstrumentArticulation( + TechniqueSymbolPlacement.Above, + 111, + 'hand.hit.return', + 'Tambourine-Percu', + 'Tambourine (return)', + 'Tambourine' + ), + new InstrumentArticulation( 'tambourine', 1, 54, @@ -746,67 +989,61 @@ export class PercussionMapper { MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.NoteheadTriangleUpBlack, MusicFontSymbol.StringsDownBow, - TechniqueSymbolPlacement.Below - ) - ], - [ - 113, - new InstrumentArticulation( + TechniqueSymbolPlacement.Above, + 112, + 'hand.hit.roll', + 'Tambourine-Percu', + 'Tambourine (roll)', + 'Tambourine' + ), + new InstrumentArticulation( 'tambourine', -7, 54, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack - ) - ], - [ - 79, - new InstrumentArticulation( + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.None, + TechniqueSymbolPlacement.Outside, + 113, + 'hand.hit.handhit', + 'Tambourine-Percu', + 'Tambourine (hand)', + 'Tambourine' + ), + new InstrumentArticulation( 'cuica', 30, 79, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole - ) - ], - [ - 78, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'cuica', 29, 78, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack - ) - ], - [ - 58, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'vibraslap', 28, 58, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole - ) - ], - [ - 81, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'triangle', 27, 81, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole - ) - ], - [ - 80, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'triangle', 26, 80, @@ -815,55 +1052,40 @@ export class PercussionMapper { MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadParenthesis, TechniqueSymbolPlacement.Inside - ) - ], - [ - 114, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'grancassa', 25, 43, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole - ) - ], - [ - 115, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'piatti', 18, 49, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole - ) - ], - [ - 116, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'piatti', 24, 49, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack - ) - ], - [ - 69, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'cabasa', 23, 69, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole - ) - ], - [ - 117, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'cabasa', 22, 69, @@ -872,44 +1094,32 @@ export class PercussionMapper { MusicFontSymbol.NoteheadWhole, MusicFontSymbol.StringsUpBow, TechniqueSymbolPlacement.Below - ) - ], - [ - 85, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'castanets', 21, 85, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole - ) - ], - [ - 75, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'claves', 20, 75, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole - ) - ], - [ - 70, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'maraca', -12, 70, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole - ) - ], - [ - 118, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'maraca', -13, 70, @@ -918,22 +1128,16 @@ export class PercussionMapper { MusicFontSymbol.NoteheadWhole, MusicFontSymbol.StringsUpBow, TechniqueSymbolPlacement.Below - ) - ], - [ - 119, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'maraca', -14, 70, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole - ) - ], - [ - 120, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'maraca', -15, 70, @@ -942,22 +1146,16 @@ export class PercussionMapper { MusicFontSymbol.NoteheadWhole, MusicFontSymbol.StringsUpBow, TechniqueSymbolPlacement.Below - ) - ], - [ - 82, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'shaker', -23, 54, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole - ) - ], - [ - 122, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'shaker', -24, 54, @@ -966,22 +1164,16 @@ export class PercussionMapper { MusicFontSymbol.NoteheadWhole, MusicFontSymbol.StringsUpBow, TechniqueSymbolPlacement.Below - ) - ], - [ - 84, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'bellTree', -18, 53, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole - ) - ], - [ - 123, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'bellTree', -19, 53, @@ -990,22 +1182,16 @@ export class PercussionMapper { MusicFontSymbol.NoteheadWhole, MusicFontSymbol.StringsUpBow, TechniqueSymbolPlacement.Below - ) - ], - [ - 83, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'jingleBell', -20, 53, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole - ) - ], - [ - 124, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'unpitched', -21, 62, @@ -1014,11 +1200,8 @@ export class PercussionMapper { MusicFontSymbol.NoteheadNull, MusicFontSymbol.GuitarGolpe, TechniqueSymbolPlacement.Above - ) - ], - [ - 125, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'unpitched', -22, 62, @@ -1027,55 +1210,40 @@ export class PercussionMapper { MusicFontSymbol.NoteheadNull, MusicFontSymbol.GuitarGolpe, TechniqueSymbolPlacement.Below - ) - ], - [ - 39, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'handClap', 3, 39, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole - ) - ], - [ - 40, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'snare', 3, 40, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole - ) - ], - [ - 31, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'snare', 3, 40, MusicFontSymbol.NoteheadSlashedBlack2, MusicFontSymbol.NoteheadSlashedBlack2, MusicFontSymbol.NoteheadSlashedBlack2 - ) - ], - [ - 41, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'tom', 5, 41, MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole - ) - ], - [ - 59, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'ride', 2, 59, @@ -1084,33 +1252,24 @@ export class PercussionMapper { MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.PictEdgeOfCymbal, TechniqueSymbolPlacement.Below - ) - ], - [ - 126, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'ride', 2, 59, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack - ) - ], - [ - 127, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'ride', 2, 59, MusicFontSymbol.NoteheadDiamondWhite, MusicFontSymbol.NoteheadDiamondWhite, MusicFontSymbol.NoteheadDiamondWhite - ) - ], - [ - 29, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'ride', 2, 59, @@ -1119,33 +1278,24 @@ export class PercussionMapper { MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.ArticStaccatoAbove, TechniqueSymbolPlacement.Above - ) - ], - [ - 30, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'crash', -3, 49, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack - ) - ], - [ - 33, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'snare', 3, 37, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack, MusicFontSymbol.NoteheadXBlack - ) - ], - [ - 34, - new InstrumentArticulation( + ), + new InstrumentArticulation( 'snare', 3, 38, @@ -1153,8 +1303,8 @@ export class PercussionMapper { MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadBlack ) - ] - ]); + ].map(articulation => [articulation.inputMidiNumber, articulation]) +); // these are manually defined names/identifiers for the articulation list above. // they are currently only used in the AlphaTex importer when using default articulations From 8b564e40adea0238e832a84b43cb40ace067fda7 Mon Sep 17 00:00:00 2001 From: L-Sun Date: Sun, 28 Dec 2025 16:10:32 +0800 Subject: [PATCH 2/3] refactor: adjust parameters order --- .../src/model/InstrumentArticulation.ts | 24 +- .../alphatab/src/model/PercussionMapper.ts | 2494 +++++++++-------- 2 files changed, 1299 insertions(+), 1219 deletions(-) diff --git a/packages/alphatab/src/model/InstrumentArticulation.ts b/packages/alphatab/src/model/InstrumentArticulation.ts index 6e465778d..08e42d266 100644 --- a/packages/alphatab/src/model/InstrumentArticulation.ts +++ b/packages/alphatab/src/model/InstrumentArticulation.ts @@ -98,33 +98,33 @@ export class InstrumentArticulation { public elementName: string; public constructor( + elementName: string = '', elementType: string = '', + articulationName: string = '', staffLine: number = 0, + inputMidiNumber: number = 0, outputMidiNumber: number = 0, + outputRSESound: string = '', + soundbankName: string = '', noteHeadDefault: MusicFontSymbol = MusicFontSymbol.None, noteHeadHalf: MusicFontSymbol = MusicFontSymbol.None, noteHeadWhole: MusicFontSymbol = MusicFontSymbol.None, techniqueSymbol: MusicFontSymbol = MusicFontSymbol.None, - techniqueSymbolPlacement: TechniqueSymbolPlacement = TechniqueSymbolPlacement.Inside, - inputMidiNumber: number = 0, - outputRSESound: string = '', - soundbankName: string = '', - articulationName: string = '', - elementName: string = '' + techniqueSymbolPlacement: TechniqueSymbolPlacement = TechniqueSymbolPlacement.Outside, ) { + this.elementName = elementName; this.elementType = elementType; - this.outputMidiNumber = outputMidiNumber; + this.articulationName = articulationName; this.staffLine = staffLine; + this.inputMidiNumber = inputMidiNumber; + this.outputMidiNumber = outputMidiNumber; + this.outputRSESound = outputRSESound; + this.soundbankName = soundbankName; this.noteHeadDefault = noteHeadDefault; this.noteHeadHalf = noteHeadHalf !== MusicFontSymbol.None ? noteHeadHalf : noteHeadDefault; this.noteHeadWhole = noteHeadWhole !== MusicFontSymbol.None ? noteHeadWhole : noteHeadDefault; this.techniqueSymbol = techniqueSymbol; this.techniqueSymbolPlacement = techniqueSymbolPlacement; - this.inputMidiNumber = inputMidiNumber; - this.outputRSESound = outputRSESound; - this.soundbankName = soundbankName; - this.articulationName = articulationName; - this.elementName = elementName; } public getSymbol(duration: Duration): MusicFontSymbol { diff --git a/packages/alphatab/src/model/PercussionMapper.ts b/packages/alphatab/src/model/PercussionMapper.ts index 28e289b19..a4648b27d 100644 --- a/packages/alphatab/src/model/PercussionMapper.ts +++ b/packages/alphatab/src/model/PercussionMapper.ts @@ -50,28 +50,31 @@ export class PercussionMapper { * parser = new DOMParser(); * xmlDoc = parser.parseFromString(xml, 'text/xml'); * articulations = xmlDoc.getElementsByTagName('Articulation'); + * capitalize = (str) => str.charAt(0).toUpperCase() + str.slice(1); * existingArticulations = new Map(); * s = ''; * for(let i = 0; i < articulations.length; i++) { * const articulation = articulations[i]; * let inputMidiNumbers = articulation.getElementsByTagName('InputMidiNumbers'); * if(inputMidiNumbers.length === 1 && inputMidiNumbers[0].textContent) { - * const midi = inputMidiNumbers[0].textContent; - * if(!existingArticulations.has(midi)) { + * const inputMidiNumber = inputMidiNumbers[0].textContent; + * if(!existingArticulations.has(inputMidiNumber)) { * // Get Element-level data * const element = articulation.parentElement.parentElement; * const elementType = element.getElementsByTagName('Type')[0].textContent; * const elementName = element.getElementsByTagName('Name')[0].textContent; * const soundbankName = element.getElementsByTagName('SoundbankName')[0]?.textContent || ''; - * + * * // Get Articulation-level data * const articulationName = articulation.getElementsByTagName('Name')[0].textContent; * const outputMidiNumber = articulation.getElementsByTagName('OutputMidiNumber')[0].textContent; * const staffLine = articulation.getElementsByTagName('StaffLine')[0].textContent; - * const techniqueSymbol = articulation.getElementsByTagName('TechniqueSymbol')[0].textContent; + * const techniqueSymbol = capitalize(articulation.getElementsByTagName('TechniqueSymbol')[0].textContent); * const techniquePlacement = articulation.getElementsByTagName('TechniquePlacement')[0].textContent; * const outputRSESound = articulation.getElementsByTagName('OutputRSESound')[0]?.textContent || ''; - * const noteHeads = articulation.getElementsByTagName('Noteheads')[0].textContent.split(' ').map(n => 'MusicFontSymbol.' + n); + * const noteHeads = articulation.getElementsByTagName('Noteheads')[0] + * .textContent.split(' ') + * .map(n => 'MusicFontSymbol.' + capitalize(n)); * * // Map technique placement to enum * const placementMap = { @@ -87,22 +90,22 @@ export class PercussionMapper { * * // Generate the code * s += ` new InstrumentArticulation(\r\n`; + * s += ` '${elementName}',\r\n`; * s += ` '${elementType}',\r\n`; + * s += ` '${articulationName}',\r\n`; * s += ` ${staffLine},\r\n`; + * s += ` ${inputMidiNumber},\r\n`; * s += ` ${outputMidiNumber},\r\n`; + * s += ` '${outputRSESound}',\r\n`; + * s += ` '${soundbankName}',\r\n`; * s += ` ${noteHeads[0]},\r\n`; * s += ` ${noteHeads[1]},\r\n`; * s += ` ${noteHeads[2]},\r\n`; * s += ` ${techniqueSymbolEnum},\r\n`; - * s += ` ${placementEnum},\r\n`; - * s += ` ${midi},\r\n`; - * s += ` '${outputRSESound}',\r\n`; - * s += ` '${soundbankName}',\r\n`; - * s += ` '${articulationName}',\r\n`; - * s += ` '${elementName}'\r\n`; + * s += ` ${placementEnum}\r\n`; * s += ` ), \r\n`; * - * existingArticulations.set(midi, true); + * existingArticulations.set(inputMidiNumber, true); * } * } * } @@ -110,1201 +113,1274 @@ export class PercussionMapper { * console.log('[\r\n' + s + ' ].map(articulation => [articulation.inputMidiNumber, articulation])'); * copy('[\r\n' + s + ' ].map(articulation => [articulation.inputMidiNumber, articulation])'); */ - public static instrumentArticulations: Map = new Map([ - new InstrumentArticulation( - 'snare', - 3, - 38, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 38, - 'stick.hit.hit', - 'Master-Snare', - 'Snare (hit)', - 'Snare' - ), - new InstrumentArticulation( - 'snare', - 3, - 37, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 37, - 'stick.hit.sidestick', - 'Master-Snare', - 'Snare (side stick)', - 'Snare' - ), - new InstrumentArticulation( - 'snare', - 3, - 38, - MusicFontSymbol.NoteheadDiamondWhite, - MusicFontSymbol.NoteheadDiamondWhite, - MusicFontSymbol.NoteheadDiamondWhite, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 91, - 'stick.hit.rimshot', - 'Master-Snare', - 'Snare (rim shot)', - 'Snare' - ), - new InstrumentArticulation( - 'hiHat', - -1, - 42, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 42, - 'stick.hit.closed', - 'Master-Hihat', - 'Hi-Hat (closed)', - 'Charley' - ), - new InstrumentArticulation( - 'hiHat', - -1, - 46, - MusicFontSymbol.NoteheadCircleSlash, - MusicFontSymbol.NoteheadCircleSlash, - MusicFontSymbol.NoteheadCircleSlash, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 92, - 'stick.hit.half', - 'Master-Hihat', - 'Hi-Hat (half)', - 'Charley' - ), - new InstrumentArticulation( - 'hiHat', - -1, - 46, - MusicFontSymbol.NoteheadCircleX, - MusicFontSymbol.NoteheadCircleX, - MusicFontSymbol.NoteheadCircleX, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 46, - 'stick.hit.open', - 'Master-Hihat', - 'Hi-Hat (open)', - 'Charley' - ), - new InstrumentArticulation( - 'hiHat', - 9, - 44, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 44, - 'pedal.hit.pedal', - 'Master-Hihat', - 'Pedal Hi-Hat (hit)', - 'Charley' - ), - new InstrumentArticulation( - 'kickDrum', - 8, - 35, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 35, - 'pedal.hit.hit', - 'AcousticKick-Percu', - 'Kick (hit)', - 'Acoustic Kick Drum' - ), - new InstrumentArticulation( - 'kickDrum', - 7, - 36, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 36, - 'pedal.hit.hit', - 'Master-Kick', - 'Kick (hit)', - 'Kick Drum' - ), - new InstrumentArticulation( - 'tom', - 1, - 50, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 50, - 'stick.hit.hit', - 'Master-Tom05', - 'High Floor Tom (hit)', - 'Tom Very High' - ), - new InstrumentArticulation( - 'tom', - 2, - 48, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 48, - 'stick.hit.hit', - 'Master-Tom04', - 'High Tom (hit)', - 'Tom High' - ), - new InstrumentArticulation( - 'tom', - 4, - 47, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 47, - 'stick.hit.hit', - 'Master-Tom03', - 'Mid Tom (hit)', - 'Tom Medium' - ), - new InstrumentArticulation( - 'tom', - 5, - 45, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 45, - 'stick.hit.hit', - 'Master-Tom02', - 'Low Tom (hit)', - 'Tom Low' - ), - new InstrumentArticulation( - 'tom', - 6, - 43, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 43, - 'stick.hit.hit', - 'Master-Tom01', - 'Very Low Tom (hit)', - 'Tom Very Low' - ), - new InstrumentArticulation( - 'ride', - 0, - 51, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.PictEdgeOfCymbal, - TechniqueSymbolPlacement.Above, - 93, - 'stick.hit.edge', - 'Master-Ride', - 'Ride (edge)', - 'Ride' - ), - new InstrumentArticulation( - 'ride', - 0, - 51, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 51, - 'stick.hit.mid', - 'Master-Ride', - 'Ride (middle)', - 'Ride' - ), - new InstrumentArticulation( - 'ride', - 0, - 53, - MusicFontSymbol.NoteheadDiamondWhite, - MusicFontSymbol.NoteheadDiamondWhite, - MusicFontSymbol.NoteheadDiamondWhite, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 53, - 'stick.hit.bell', - 'Master-Ride', - 'Ride (bell)', - 'Ride' - ), - new InstrumentArticulation( - 'ride', - 0, - 51, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.ArticStaccatoAbove, - TechniqueSymbolPlacement.Outside, - 94, - 'stick.hit.choke', - 'Master-Ride', - 'Ride (choke)', - 'Ride' - ), - new InstrumentArticulation( - 'splash', - -2, - 55, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 55, - 'stick.hit.hit', - 'Master-Splash', - 'Splash (hit)', - 'Splash' - ), - new InstrumentArticulation( - 'splash', - -2, - 55, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.ArticStaccatoAbove, - TechniqueSymbolPlacement.Outside, - 95, - 'stick.hit.choke', - 'Master-Splash', - 'Splash (choke)', - 'Splash' - ), - new InstrumentArticulation( - 'china', - -3, - 52, - MusicFontSymbol.NoteheadHeavyXHat, - MusicFontSymbol.NoteheadHeavyXHat, - MusicFontSymbol.NoteheadHeavyXHat, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 52, - 'stick.hit.hit', - 'Master-China', - 'China (hit)', - 'China' - ), - new InstrumentArticulation( - 'china', - -3, - 52, - MusicFontSymbol.NoteheadHeavyXHat, - MusicFontSymbol.NoteheadHeavyXHat, - MusicFontSymbol.NoteheadHeavyXHat, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 96, - 'stick.hit.choke', - 'Master-China', - 'China (choke)', - 'China' - ), - new InstrumentArticulation( - 'crash', - -2, - 49, - MusicFontSymbol.NoteheadHeavyX, - MusicFontSymbol.NoteheadHeavyX, - MusicFontSymbol.NoteheadHeavyX, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 49, - 'stick.hit.hit', - 'Master-Crash02', - 'Crash high (hit)', - 'Crash High' - ), - new InstrumentArticulation( - 'crash', - -2, - 49, - MusicFontSymbol.NoteheadHeavyX, - MusicFontSymbol.NoteheadHeavyX, - MusicFontSymbol.NoteheadHeavyX, - MusicFontSymbol.ArticStaccatoAbove, - TechniqueSymbolPlacement.Outside, - 97, - 'stick.hit.choke', - 'Master-Crash02', - 'Crash high (choke)', - 'Crash High' - ), - new InstrumentArticulation( - 'crash', - -1, - 57, - MusicFontSymbol.NoteheadHeavyX, - MusicFontSymbol.NoteheadHeavyX, - MusicFontSymbol.NoteheadHeavyX, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 57, - 'stick.hit.hit', - 'Master-Crash01', - 'Crash medium (hit)', - 'Crash Medium' - ), - new InstrumentArticulation( - 'crash', - -1, - 57, - MusicFontSymbol.NoteheadHeavyX, - MusicFontSymbol.NoteheadHeavyX, - MusicFontSymbol.NoteheadHeavyX, - MusicFontSymbol.ArticStaccatoAbove, - TechniqueSymbolPlacement.Outside, - 98, - 'stick.hit.choke', - 'Master-Crash01', - 'Crash medium (choke)', - 'Crash Medium' - ), - new InstrumentArticulation( - 'cowbell', - 1, - 56, - MusicFontSymbol.NoteheadTriangleUpBlack, - MusicFontSymbol.NoteheadTriangleUpHalf, - MusicFontSymbol.NoteheadTriangleUpWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 99, - 'stick.hit.hit', - 'CowbellBig-Percu', - 'Cowbell low (hit)', - 'Cowbell Low' - ), - new InstrumentArticulation( - 'cowbell', - 1, - 56, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXHalf, - MusicFontSymbol.NoteheadXWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 100, - 'stick.hit.tip', - 'CowbellBig-Percu', - 'Cowbell low (tip)', - 'Cowbell Low' - ), - new InstrumentArticulation( - 'cowbell', - 0, - 56, - MusicFontSymbol.NoteheadTriangleUpBlack, - MusicFontSymbol.NoteheadTriangleUpHalf, - MusicFontSymbol.NoteheadTriangleUpWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 56, - 'stick.hit.hit', - 'CowbellMid-Percu', - 'Cowbell medium (hit)', - 'Cowbell Medium' - ), - new InstrumentArticulation( - 'cowbell', - 0, - 56, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXHalf, - MusicFontSymbol.NoteheadXWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 101, - 'stick.hit.tip', - 'CowbellMid-Percu', - 'Cowbell medium (tip)', - 'Cowbell Medium' - ), - new InstrumentArticulation( - 'cowbell', - -1, - 56, - MusicFontSymbol.NoteheadTriangleUpBlack, - MusicFontSymbol.NoteheadTriangleUpHalf, - MusicFontSymbol.NoteheadTriangleUpWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 102, - 'stick.hit.hit', - 'CowbellSmall-Percu', - 'Cowbell high (hit)', - 'Cowbell High' - ), - new InstrumentArticulation( - 'cowbell', - -1, - 56, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXHalf, - MusicFontSymbol.NoteheadXWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 103, - 'stick.hit.tip', - 'CowbellSmall-Percu', - 'Cowbell high (tip)', - 'Cowbell High' - ), - new InstrumentArticulation( - 'woodblock', - -9, - 77, - MusicFontSymbol.NoteheadTriangleUpBlack, - MusicFontSymbol.NoteheadTriangleUpBlack, - MusicFontSymbol.NoteheadTriangleUpBlack, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 77, - 'stick.hit.hit', - 'WoodblockLow-Percu', - 'Woodblock low (hit)', - 'Woodblock Low' - ), - new InstrumentArticulation( - 'woodblock', - -10, - 76, - MusicFontSymbol.NoteheadTriangleUpBlack, - MusicFontSymbol.NoteheadTriangleUpBlack, - MusicFontSymbol.NoteheadTriangleUpBlack, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 76, - 'stick.hit.hit', - 'WoodblockHigh-Percu', - 'Woodblock high (hit)', - 'Woodblock High' - ), - new InstrumentArticulation( - 'bongo', - -4, - 60, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 60, - 'hand.hit.hit', - 'BongoHigh-Percu', - 'Bongo High (hit)', - 'Bongo High' - ), - new InstrumentArticulation( - 'bongo', - -5, - 60, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.NoteheadParenthesis, - TechniqueSymbolPlacement.Inside, - 104, - 'hand.hit.mute', - 'BongoHigh-Percu', - 'Bongo High (mute)', - 'Bongo High' - ), - new InstrumentArticulation( - 'bongo', - -6, - 60, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 105, - 'hand.hit.slap', - 'BongoHigh-Percu', - 'Bongo High (slap)', - 'Bongo High' - ), - new InstrumentArticulation( - 'bongo', - -7, - 61, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 61, - 'hand.hit.hit', - 'BongoLow-Percu', - 'Bongo Low (hit)', - 'Bongo Low' - ), - new InstrumentArticulation( - 'bongo', - -8, - 61, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.NoteheadParenthesis, - TechniqueSymbolPlacement.Inside, - 106, - 'hand.hit.mute', - 'BongoLow-Percu', - 'Bongo Low (mute)', - 'Bongo Low' - ), - new InstrumentArticulation( - 'bongo', - -16, - 61, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 107, - 'hand.hit.slap', - 'BongoLow-Percu', - 'Bongo Low (slap)', - 'Bongo Low' - ), - new InstrumentArticulation( - 'timbale', - 10, - 66, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 66, - 'stick.hit.hit', - 'TimbaleLow-Percu', - 'Timbale low (hit)', - 'Timbale Low' - ), - new InstrumentArticulation( - 'timbale', - 9, - 65, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 65, - 'stick.hit.hit', - 'TimbaleHigh-Percu', - 'Timbale high (hit)', - 'Timbale High' - ), - new InstrumentArticulation( - 'agogo', - 12, - 68, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 68, - 'stick.hit.hit', - 'AgogoLow-Percu', - 'Agogo low (hit)', - 'Agogo Low' - ), - new InstrumentArticulation( - 'agogo', - 11, - 67, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 67, - 'stick.hit.hit', - 'AgogoHigh-Percu', - 'Agogo high (hit)', - 'Agogo High' - ), - new InstrumentArticulation( - 'conga', - 17, - 64, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 64, - 'hand.hit.hit', - 'CongaLow-Percu', - 'Conga low (hit)', - 'Conga Low' - ), - new InstrumentArticulation( - 'conga', - 16, - 64, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 108, - 'hand.hit.slap', - 'CongaLow-Percu', - 'Conga low (slap)', - 'Conga Low' - ), - new InstrumentArticulation( - 'conga', - 15, - 64, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.NoteheadParenthesis, - TechniqueSymbolPlacement.Inside, - 109, - 'hand.hit.mute', - 'CongaLow-Percu', - 'Conga low (mute)', - 'Conga Low' - ), - new InstrumentArticulation( - 'conga', - 14, - 63, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 63, - 'hand.hit.hit', - 'CongaHigh-Percu', - 'Conga high (hit)', - 'Conga High' - ), - new InstrumentArticulation( - 'conga', - 13, - 63, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 110, - 'hand.hit.slap', - 'CongaHigh-Percu', - 'Conga high (slap)', - 'Conga High' - ), - new InstrumentArticulation( - 'conga', - 19, - 62, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.NoteheadParenthesis, - TechniqueSymbolPlacement.Inside, - 62, - 'hand.hit.mute', - 'CongaHigh-Percu', - 'Conga high (mute)', - 'Conga High' - ), - new InstrumentArticulation( - 'whistle', - -11, - 72, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 72, - 'blow.hit.hit', - 'WhistleLow-Percu', - 'Whistle low (hit)', - 'Whistle Low' - ), - new InstrumentArticulation( - 'whistle', - -17, - 71, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 71, - 'blow.hit.hit', - 'WhistleHigh-Percu', - 'Whistle high (hit)', - 'Whistle High' - ), - new InstrumentArticulation( - 'guiro', - 38, - 73, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 73, - 'stick.hit.hit', - 'Guiro-Percu', - 'Guiro (hit)', - 'Guiro' - ), - new InstrumentArticulation( - 'guiro', - 37, - 74, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 74, - 'stick.scrape.return', - 'Guiro-Percu', - 'Guiro (scrap-return)', - 'Guiro' - ), - new InstrumentArticulation( - 'surdo', - 36, - 86, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 86, - 'brush.hit.hit', - 'Surdo-Percu', - 'Surdo (hit)', - 'Surdo' - ), - new InstrumentArticulation( - 'surdo', - 35, - 87, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadParenthesis, - TechniqueSymbolPlacement.Inside, - 87, - 'brush.hit.mute', - 'Surdo-Percu', - 'Surdo (mute)', - 'Surdo' - ), - new InstrumentArticulation( - 'tambourine', - 3, - 54, - MusicFontSymbol.NoteheadTriangleUpBlack, - MusicFontSymbol.NoteheadTriangleUpBlack, - MusicFontSymbol.NoteheadTriangleUpBlack, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 54, - 'hand.hit.hit', - 'Tambourine-Percu', - 'Tambourine (hit)', - 'Tambourine' - ), - new InstrumentArticulation( - 'tambourine', - 2, - 54, - MusicFontSymbol.NoteheadTriangleUpBlack, - MusicFontSymbol.NoteheadTriangleUpBlack, - MusicFontSymbol.NoteheadTriangleUpBlack, - MusicFontSymbol.StringsUpBow, - TechniqueSymbolPlacement.Above, - 111, - 'hand.hit.return', - 'Tambourine-Percu', - 'Tambourine (return)', - 'Tambourine' - ), - new InstrumentArticulation( - 'tambourine', - 1, - 54, - MusicFontSymbol.NoteheadTriangleUpBlack, - MusicFontSymbol.NoteheadTriangleUpBlack, - MusicFontSymbol.NoteheadTriangleUpBlack, - MusicFontSymbol.StringsDownBow, - TechniqueSymbolPlacement.Above, - 112, - 'hand.hit.roll', - 'Tambourine-Percu', - 'Tambourine (roll)', - 'Tambourine' - ), - new InstrumentArticulation( - 'tambourine', - -7, - 54, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.None, - TechniqueSymbolPlacement.Outside, - 113, - 'hand.hit.handhit', - 'Tambourine-Percu', - 'Tambourine (hand)', - 'Tambourine' - ), - new InstrumentArticulation( - 'cuica', - 30, - 79, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ), - new InstrumentArticulation( - 'cuica', - 29, - 78, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack - ), - new InstrumentArticulation( - 'vibraslap', - 28, - 58, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ), - new InstrumentArticulation( - 'triangle', - 27, - 81, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ), - new InstrumentArticulation( - 'triangle', - 26, - 80, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadParenthesis, - TechniqueSymbolPlacement.Inside - ), - new InstrumentArticulation( - 'grancassa', - 25, - 43, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ), - new InstrumentArticulation( - 'piatti', - 18, - 49, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ), - new InstrumentArticulation( - 'piatti', - 24, - 49, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack - ), - new InstrumentArticulation( - 'cabasa', - 23, - 69, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ), - new InstrumentArticulation( - 'cabasa', - 22, - 69, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.StringsUpBow, - TechniqueSymbolPlacement.Below - ), - new InstrumentArticulation( - 'castanets', - 21, - 85, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ), - new InstrumentArticulation( - 'claves', - 20, - 75, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ), - new InstrumentArticulation( - 'maraca', - -12, - 70, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ), - new InstrumentArticulation( - 'maraca', - -13, - 70, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.StringsUpBow, - TechniqueSymbolPlacement.Below - ), - new InstrumentArticulation( - 'maraca', - -14, - 70, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ), - new InstrumentArticulation( - 'maraca', - -15, - 70, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.StringsUpBow, - TechniqueSymbolPlacement.Below - ), - new InstrumentArticulation( - 'shaker', - -23, - 54, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ), - new InstrumentArticulation( - 'shaker', - -24, - 54, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.StringsUpBow, - TechniqueSymbolPlacement.Below - ), - new InstrumentArticulation( - 'bellTree', - -18, - 53, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ), - new InstrumentArticulation( - 'bellTree', - -19, - 53, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole, - MusicFontSymbol.StringsUpBow, - TechniqueSymbolPlacement.Below - ), - new InstrumentArticulation( - 'jingleBell', - -20, - 53, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ), - new InstrumentArticulation( - 'unpitched', - -21, - 62, - MusicFontSymbol.NoteheadNull, - MusicFontSymbol.NoteheadNull, - MusicFontSymbol.NoteheadNull, - MusicFontSymbol.GuitarGolpe, - TechniqueSymbolPlacement.Above - ), - new InstrumentArticulation( - 'unpitched', - -22, - 62, - MusicFontSymbol.NoteheadNull, - MusicFontSymbol.NoteheadNull, - MusicFontSymbol.NoteheadNull, - MusicFontSymbol.GuitarGolpe, - TechniqueSymbolPlacement.Below - ), - new InstrumentArticulation( - 'handClap', - 3, - 39, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ), - new InstrumentArticulation( - 'snare', - 3, - 40, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ), - new InstrumentArticulation( - 'snare', - 3, - 40, - MusicFontSymbol.NoteheadSlashedBlack2, - MusicFontSymbol.NoteheadSlashedBlack2, - MusicFontSymbol.NoteheadSlashedBlack2 - ), - new InstrumentArticulation( - 'tom', - 5, - 41, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadHalf, - MusicFontSymbol.NoteheadWhole - ), - new InstrumentArticulation( - 'ride', - 2, - 59, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.PictEdgeOfCymbal, - TechniqueSymbolPlacement.Below - ), - new InstrumentArticulation( - 'ride', - 2, - 59, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack - ), - new InstrumentArticulation( - 'ride', - 2, - 59, - MusicFontSymbol.NoteheadDiamondWhite, - MusicFontSymbol.NoteheadDiamondWhite, - MusicFontSymbol.NoteheadDiamondWhite - ), - new InstrumentArticulation( - 'ride', - 2, - 59, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.ArticStaccatoAbove, - TechniqueSymbolPlacement.Above - ), - new InstrumentArticulation( - 'crash', - -3, - 49, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack - ), - new InstrumentArticulation( - 'snare', - 3, - 37, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack, - MusicFontSymbol.NoteheadXBlack - ), - new InstrumentArticulation( - 'snare', - 3, - 38, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadBlack, - MusicFontSymbol.NoteheadBlack - ) - ].map(articulation => [articulation.inputMidiNumber, articulation]) -); + public static instrumentArticulations: Map = new Map([ + new InstrumentArticulation( + 'Snare', + 'snare', + 'Snare (hit)', + 3, + 38, + 38, + 'stick.hit.hit', + 'Master-Snare', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Snare', + 'snare', + 'Snare (side stick)', + 3, + 37, + 37, + 'stick.hit.sidestick', + 'Master-Snare', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack + ), + new InstrumentArticulation( + 'Snare', + 'snare', + 'Snare (rim shot)', + 3, + 91, + 38, + 'stick.hit.rimshot', + 'Master-Snare', + MusicFontSymbol.NoteheadDiamondWhite, + MusicFontSymbol.NoteheadDiamondWhite, + MusicFontSymbol.NoteheadDiamondWhite + ), + new InstrumentArticulation( + 'Charley', + 'hiHat', + 'Hi-Hat (closed)', + -1, + 42, + 42, + 'stick.hit.closed', + 'Master-Hihat', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack + ), + new InstrumentArticulation( + 'Charley', + 'hiHat', + 'Hi-Hat (half)', + -1, + 92, + 46, + 'stick.hit.half', + 'Master-Hihat', + MusicFontSymbol.NoteheadCircleSlash, + MusicFontSymbol.NoteheadCircleSlash, + MusicFontSymbol.NoteheadCircleSlash + ), + new InstrumentArticulation( + 'Charley', + 'hiHat', + 'Hi-Hat (open)', + -1, + 46, + 46, + 'stick.hit.open', + 'Master-Hihat', + MusicFontSymbol.NoteheadCircleX, + MusicFontSymbol.NoteheadCircleX, + MusicFontSymbol.NoteheadCircleX + ), + new InstrumentArticulation( + 'Charley', + 'hiHat', + 'Pedal Hi-Hat (hit)', + 9, + 44, + 44, + 'pedal.hit.pedal', + 'Master-Hihat', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack + ), + new InstrumentArticulation( + 'Acoustic Kick Drum', + 'kickDrum', + 'Kick (hit)', + 8, + 35, + 35, + 'pedal.hit.hit', + 'AcousticKick-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Kick Drum', + 'kickDrum', + 'Kick (hit)', + 7, + 36, + 36, + 'pedal.hit.hit', + 'Master-Kick', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Tom Very High', + 'tom', + 'High Floor Tom (hit)', + 1, + 50, + 50, + 'stick.hit.hit', + 'Master-Tom05', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Tom High', + 'tom', + 'High Tom (hit)', + 2, + 48, + 48, + 'stick.hit.hit', + 'Master-Tom04', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Tom Medium', + 'tom', + 'Mid Tom (hit)', + 4, + 47, + 47, + 'stick.hit.hit', + 'Master-Tom03', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Tom Low', + 'tom', + 'Low Tom (hit)', + 5, + 45, + 45, + 'stick.hit.hit', + 'Master-Tom02', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Tom Very Low', + 'tom', + 'Very Low Tom (hit)', + 6, + 43, + 43, + 'stick.hit.hit', + 'Master-Tom01', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Ride', + 'ride', + 'Ride (edge)', + 0, + 93, + 51, + 'stick.hit.edge', + 'Master-Ride', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.PictEdgeOfCymbal, + TechniqueSymbolPlacement.Above + ), + new InstrumentArticulation( + 'Ride', + 'ride', + 'Ride (middle)', + 0, + 51, + 51, + 'stick.hit.mid', + 'Master-Ride', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack + ), + new InstrumentArticulation( + 'Ride', + 'ride', + 'Ride (bell)', + 0, + 53, + 53, + 'stick.hit.bell', + 'Master-Ride', + MusicFontSymbol.NoteheadDiamondWhite, + MusicFontSymbol.NoteheadDiamondWhite, + MusicFontSymbol.NoteheadDiamondWhite + ), + new InstrumentArticulation( + 'Ride', + 'ride', + 'Ride (choke)', + 0, + 94, + 51, + 'stick.hit.choke', + 'Master-Ride', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.ArticStaccatoAbove, + TechniqueSymbolPlacement.Outside + ), + new InstrumentArticulation( + 'Splash', + 'splash', + 'Splash (hit)', + -2, + 55, + 55, + 'stick.hit.hit', + 'Master-Splash', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack + ), + new InstrumentArticulation( + 'Splash', + 'splash', + 'Splash (choke)', + -2, + 95, + 55, + 'stick.hit.choke', + 'Master-Splash', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.ArticStaccatoAbove, + TechniqueSymbolPlacement.Outside + ), + new InstrumentArticulation( + 'China', + 'china', + 'China (hit)', + -3, + 52, + 52, + 'stick.hit.hit', + 'Master-China', + MusicFontSymbol.NoteheadHeavyXHat, + MusicFontSymbol.NoteheadHeavyXHat, + MusicFontSymbol.NoteheadHeavyXHat + ), + new InstrumentArticulation( + 'China', + 'china', + 'China (choke)', + -3, + 96, + 52, + 'stick.hit.choke', + 'Master-China', + MusicFontSymbol.NoteheadHeavyXHat, + MusicFontSymbol.NoteheadHeavyXHat, + MusicFontSymbol.NoteheadHeavyXHat + ), + new InstrumentArticulation( + 'Crash High', + 'crash', + 'Crash high (hit)', + -2, + 49, + 49, + 'stick.hit.hit', + 'Master-Crash02', + MusicFontSymbol.NoteheadHeavyX, + MusicFontSymbol.NoteheadHeavyX, + MusicFontSymbol.NoteheadHeavyX + ), + new InstrumentArticulation( + 'Crash High', + 'crash', + 'Crash high (choke)', + -2, + 97, + 49, + 'stick.hit.choke', + 'Master-Crash02', + MusicFontSymbol.NoteheadHeavyX, + MusicFontSymbol.NoteheadHeavyX, + MusicFontSymbol.NoteheadHeavyX, + MusicFontSymbol.ArticStaccatoAbove, + TechniqueSymbolPlacement.Outside + ), + new InstrumentArticulation( + 'Crash Medium', + 'crash', + 'Crash medium (hit)', + -1, + 57, + 57, + 'stick.hit.hit', + 'Master-Crash01', + MusicFontSymbol.NoteheadHeavyX, + MusicFontSymbol.NoteheadHeavyX, + MusicFontSymbol.NoteheadHeavyX + ), + new InstrumentArticulation( + 'Crash Medium', + 'crash', + 'Crash medium (choke)', + -1, + 98, + 57, + 'stick.hit.choke', + 'Master-Crash01', + MusicFontSymbol.NoteheadHeavyX, + MusicFontSymbol.NoteheadHeavyX, + MusicFontSymbol.NoteheadHeavyX, + MusicFontSymbol.ArticStaccatoAbove, + TechniqueSymbolPlacement.Outside + ), + new InstrumentArticulation( + 'Cowbell Low', + 'cowbell', + 'Cowbell low (hit)', + 1, + 99, + 56, + 'stick.hit.hit', + 'CowbellBig-Percu', + MusicFontSymbol.NoteheadTriangleUpBlack, + MusicFontSymbol.NoteheadTriangleUpHalf, + MusicFontSymbol.NoteheadTriangleUpWhole + ), + new InstrumentArticulation( + 'Cowbell Low', + 'cowbell', + 'Cowbell low (tip)', + 1, + 100, + 56, + 'stick.hit.tip', + 'CowbellBig-Percu', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXHalf, + MusicFontSymbol.NoteheadXWhole + ), + new InstrumentArticulation( + 'Cowbell Medium', + 'cowbell', + 'Cowbell medium (hit)', + 0, + 56, + 56, + 'stick.hit.hit', + 'CowbellMid-Percu', + MusicFontSymbol.NoteheadTriangleUpBlack, + MusicFontSymbol.NoteheadTriangleUpHalf, + MusicFontSymbol.NoteheadTriangleUpWhole + ), + new InstrumentArticulation( + 'Cowbell Medium', + 'cowbell', + 'Cowbell medium (tip)', + 0, + 101, + 56, + 'stick.hit.tip', + 'CowbellMid-Percu', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXHalf, + MusicFontSymbol.NoteheadXWhole + ), + new InstrumentArticulation( + 'Cowbell High', + 'cowbell', + 'Cowbell high (hit)', + -1, + 102, + 56, + 'stick.hit.hit', + 'CowbellSmall-Percu', + MusicFontSymbol.NoteheadTriangleUpBlack, + MusicFontSymbol.NoteheadTriangleUpHalf, + MusicFontSymbol.NoteheadTriangleUpWhole + ), + new InstrumentArticulation( + 'Cowbell High', + 'cowbell', + 'Cowbell high (tip)', + -1, + 103, + 56, + 'stick.hit.tip', + 'CowbellSmall-Percu', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXHalf, + MusicFontSymbol.NoteheadXWhole + ), + new InstrumentArticulation( + 'Woodblock Low', + 'woodblock', + 'Woodblock low (hit)', + -9, + 77, + 77, + 'stick.hit.hit', + 'WoodblockLow-Percu', + MusicFontSymbol.NoteheadTriangleUpBlack, + MusicFontSymbol.NoteheadTriangleUpBlack, + MusicFontSymbol.NoteheadTriangleUpBlack + ), + new InstrumentArticulation( + 'Woodblock High', + 'woodblock', + 'Woodblock high (hit)', + -10, + 76, + 76, + 'stick.hit.hit', + 'WoodblockHigh-Percu', + MusicFontSymbol.NoteheadTriangleUpBlack, + MusicFontSymbol.NoteheadTriangleUpBlack, + MusicFontSymbol.NoteheadTriangleUpBlack + ), + new InstrumentArticulation( + 'Bongo High', + 'bongo', + 'Bongo High (hit)', + -4, + 60, + 60, + 'hand.hit.hit', + 'BongoHigh-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Bongo High', + 'bongo', + 'Bongo High (mute)', + -5, + 104, + 60, + 'hand.hit.mute', + 'BongoHigh-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.NoteheadParenthesis, + TechniqueSymbolPlacement.Inside + ), + new InstrumentArticulation( + 'Bongo High', + 'bongo', + 'Bongo High (slap)', + -6, + 105, + 60, + 'hand.hit.slap', + 'BongoHigh-Percu', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack + ), + new InstrumentArticulation( + 'Bongo Low', + 'bongo', + 'Bongo Low (hit)', + -7, + 61, + 61, + 'hand.hit.hit', + 'BongoLow-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Bongo Low', + 'bongo', + 'Bongo Low (mute)', + -8, + 106, + 61, + 'hand.hit.mute', + 'BongoLow-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.NoteheadParenthesis, + TechniqueSymbolPlacement.Inside + ), + new InstrumentArticulation( + 'Bongo Low', + 'bongo', + 'Bongo Low (slap)', + -16, + 107, + 61, + 'hand.hit.slap', + 'BongoLow-Percu', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack + ), + new InstrumentArticulation( + 'Timbale Low', + 'timbale', + 'Timbale low (hit)', + 10, + 66, + 66, + 'stick.hit.hit', + 'TimbaleLow-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Timbale High', + 'timbale', + 'Timbale high (hit)', + 9, + 65, + 65, + 'stick.hit.hit', + 'TimbaleHigh-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Agogo Low', + 'agogo', + 'Agogo low (hit)', + 12, + 68, + 68, + 'stick.hit.hit', + 'AgogoLow-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Agogo High', + 'agogo', + 'Agogo high (hit)', + 11, + 67, + 67, + 'stick.hit.hit', + 'AgogoHigh-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Conga Low', + 'conga', + 'Conga low (hit)', + 17, + 64, + 64, + 'hand.hit.hit', + 'CongaLow-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Conga Low', + 'conga', + 'Conga low (slap)', + 16, + 108, + 64, + 'hand.hit.slap', + 'CongaLow-Percu', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack + ), + new InstrumentArticulation( + 'Conga Low', + 'conga', + 'Conga low (mute)', + 15, + 109, + 64, + 'hand.hit.mute', + 'CongaLow-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.NoteheadParenthesis, + TechniqueSymbolPlacement.Inside + ), + new InstrumentArticulation( + 'Conga High', + 'conga', + 'Conga high (hit)', + 14, + 63, + 63, + 'hand.hit.hit', + 'CongaHigh-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Conga High', + 'conga', + 'Conga high (slap)', + 13, + 110, + 63, + 'hand.hit.slap', + 'CongaHigh-Percu', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack + ), + new InstrumentArticulation( + 'Conga High', + 'conga', + 'Conga high (mute)', + 19, + 62, + 62, + 'hand.hit.mute', + 'CongaHigh-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.NoteheadParenthesis, + TechniqueSymbolPlacement.Inside + ), + new InstrumentArticulation( + 'Whistle Low', + 'whistle', + 'Whistle low (hit)', + -11, + 72, + 72, + 'blow.hit.hit', + 'WhistleLow-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Whistle High', + 'whistle', + 'Whistle high (hit)', + -17, + 71, + 71, + 'blow.hit.hit', + 'WhistleHigh-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Guiro', + 'guiro', + 'Guiro (hit)', + 38, + 73, + 73, + 'stick.hit.hit', + 'Guiro-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Guiro', + 'guiro', + 'Guiro (scrap-return)', + 37, + 74, + 74, + 'stick.scrape.return', + 'Guiro-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Surdo', + 'surdo', + 'Surdo (hit)', + 36, + 86, + 86, + 'brush.hit.hit', + 'Surdo-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Surdo', + 'surdo', + 'Surdo (mute)', + 35, + 87, + 87, + 'brush.hit.mute', + 'Surdo-Percu', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadParenthesis, + TechniqueSymbolPlacement.Inside + ), + new InstrumentArticulation( + 'Tambourine', + 'tambourine', + 'Tambourine (hit)', + 3, + 54, + 54, + 'hand.hit.hit', + 'Tambourine-Percu', + MusicFontSymbol.NoteheadTriangleUpBlack, + MusicFontSymbol.NoteheadTriangleUpBlack, + MusicFontSymbol.NoteheadTriangleUpBlack + ), + new InstrumentArticulation( + 'Tambourine', + 'tambourine', + 'Tambourine (return)', + 2, + 111, + 54, + 'hand.hit.return', + 'Tambourine-Percu', + MusicFontSymbol.NoteheadTriangleUpBlack, + MusicFontSymbol.NoteheadTriangleUpBlack, + MusicFontSymbol.NoteheadTriangleUpBlack, + MusicFontSymbol.StringsUpBow, + TechniqueSymbolPlacement.Above + ), + new InstrumentArticulation( + 'Tambourine', + 'tambourine', + 'Tambourine (roll)', + 1, + 112, + 54, + 'hand.hit.roll', + 'Tambourine-Percu', + MusicFontSymbol.NoteheadTriangleUpBlack, + MusicFontSymbol.NoteheadTriangleUpBlack, + MusicFontSymbol.NoteheadTriangleUpBlack, + MusicFontSymbol.StringsDownBow, + TechniqueSymbolPlacement.Above + ), + new InstrumentArticulation( + 'Tambourine', + 'tambourine', + 'Tambourine (hand)', + -7, + 113, + 54, + 'hand.hit.handhit', + 'Tambourine-Percu', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack + ), + new InstrumentArticulation( + 'Cuica', + 'cuica', + 'Cuica (open)', + 30, + 79, + 79, + 'hand.hit.hit', + 'Cuica-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Cuica', + 'cuica', + 'Cuica (mute)', + 29, + 78, + 78, + 'hand.hit.mute', + 'Cuica-Percu', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack + ), + new InstrumentArticulation( + 'Vibraslap', + 'vibraslap', + 'Vibraslap (hit)', + 28, + 58, + 58, + 'hand.hit.hit', + 'Vibraslap-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Triangle', + 'triangle', + 'Triangle (hit)', + 27, + 81, + 81, + 'stick.hit.hit', + 'Triangle-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Triangle', + 'triangle', + 'Triangle (mute)', + 26, + 80, + 80, + 'stick.hit.mute', + 'Triangle-Percu', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadParenthesis, + TechniqueSymbolPlacement.Inside + ), + new InstrumentArticulation( + 'Grancassa', + 'grancassa', + 'Grancassa (hit)', + 25, + 114, + 43, + 'mallet.hit.hit', + 'Grancassa-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Piatti', + 'piatti', + 'Piatti (hit)', + 18, + 115, + 49, + 'hand.hit.hit', + 'Piatti-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Piatti', + 'piatti', + 'Piatti (hand)', + 24, + 116, + 49, + 'hand.hit.hit', + 'Piatti-Percu', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack + ), + new InstrumentArticulation( + 'Cabasa', + 'cabasa', + 'Cabasa (hit)', + 23, + 69, + 69, + 'hand.hit.hit', + 'Cabasa-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Cabasa', + 'cabasa', + 'Cabasa (return)', + 22, + 117, + 69, + 'hand.hit.return', + 'Cabasa-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.StringsUpBow, + TechniqueSymbolPlacement.Outside + ), + new InstrumentArticulation( + 'Castanets', + 'castanets', + 'Castanets (hit)', + 21, + 85, + 85, + 'hand.hit.hit', + 'Castanets-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Claves', + 'claves', + 'Claves (hit)', + 20, + 75, + 75, + 'stick.hit.hit', + 'Claves-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Left Maraca', + 'maraca', + 'Left Maraca (hit)', + -12, + 70, + 70, + 'hand.hit.hit', + 'Maracas-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Left Maraca', + 'maraca', + 'Left Maraca (return)', + -13, + 118, + 70, + 'hand.hit.return', + 'Maracas-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.StringsUpBow, + TechniqueSymbolPlacement.Outside + ), + new InstrumentArticulation( + 'Right Maraca', + 'maraca', + 'Right Maraca (hit)', + -14, + 119, + 70, + 'hand.hit.hit', + 'Maracas-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Right Maraca', + 'maraca', + 'Right Maraca (return)', + -15, + 120, + 70, + 'hand.hit.return', + 'Maracas-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.StringsUpBow, + TechniqueSymbolPlacement.Outside + ), + new InstrumentArticulation( + 'Shaker', + 'shaker', + 'Shaker (hit)', + -23, + 82, + 82, + 'hand.hit.hit', + 'ShakerStudio-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Shaker', + 'shaker', + 'Shaker (return)', + -24, + 122, + 82, + 'hand.hit.return', + 'ShakerStudio-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.StringsUpBow, + TechniqueSymbolPlacement.Outside + ), + new InstrumentArticulation( + 'Bell Tree', + 'bellTree', + 'Bell Tree (hit)', + -18, + 84, + 53, + 'stick.hit.hit', + 'BellTree-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Bell Tree', + 'bellTree', + 'Bell Tree (return)', + -19, + 123, + 53, + 'stick.hit.return', + 'BellTree-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole, + MusicFontSymbol.StringsUpBow, + TechniqueSymbolPlacement.Outside + ), + new InstrumentArticulation( + 'Jingle Bell', + 'jingleBell', + 'Jingle Bell (hit)', + -20, + 83, + 53, + 'stick.hit.hit', + 'JingleBell-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Golpe', + 'unpitched', + 'Golpe (thumb)', + -21, + 124, + 62, + 'thumb.hit.body', + 'Golpe-Percu', + MusicFontSymbol.NoteheadNull, + MusicFontSymbol.NoteheadNull, + MusicFontSymbol.NoteheadNull, + MusicFontSymbol.GuitarGolpe, + TechniqueSymbolPlacement.Below + ), + new InstrumentArticulation( + 'Golpe', + 'unpitched', + 'Golpe (finger)', + -22, + 125, + 62, + 'finger4.hit.body', + 'Golpe-Percu', + MusicFontSymbol.NoteheadNull, + MusicFontSymbol.NoteheadNull, + MusicFontSymbol.NoteheadNull, + MusicFontSymbol.GuitarGolpe, + TechniqueSymbolPlacement.Above + ), + new InstrumentArticulation( + 'Hand Clap', + 'handClap', + 'Hand Clap (hit)', + 3, + 39, + 39, + 'hand.hit.hit', + 'GroupHandClap-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Electric Snare', + 'snare', + 'Electric Snare (hit)', + 3, + 40, + 40, + 'stick.hit.hit', + 'ElectricSnare-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Sticks', + 'snare', + 'Snare (side stick)', + 3, + 31, + 40, + 'stick.hit.sidestick', + 'Stick-Percu', + MusicFontSymbol.NoteheadSlashedBlack2, + MusicFontSymbol.NoteheadSlashedBlack2, + MusicFontSymbol.NoteheadSlashedBlack2 + ), + new InstrumentArticulation( + 'Very Low Floor Tom', + 'tom', + 'Low Floor Tom (hit)', + 5, + 41, + 41, + 'stick.hit.hit', + 'LowFloorTom-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadHalf, + MusicFontSymbol.NoteheadWhole + ), + new InstrumentArticulation( + 'Ride Cymbal 2', + 'ride', + 'Ride (edge)', + 2, + 59, + 59, + 'stick.hit.edge', + 'Ride-Percu', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.PictEdgeOfCymbal, + TechniqueSymbolPlacement.Above + ), + new InstrumentArticulation( + 'Ride Cymbal 2', + 'ride', + 'Ride (middle)', + 2, + 126, + 59, + 'stick.hit.mid', + 'Ride-Percu', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack + ), + new InstrumentArticulation( + 'Ride Cymbal 2', + 'ride', + 'Ride (bell)', + 2, + 127, + 59, + 'stick.hit.bell', + 'Ride-Percu', + MusicFontSymbol.NoteheadDiamondWhite, + MusicFontSymbol.NoteheadDiamondWhite, + MusicFontSymbol.NoteheadDiamondWhite + ), + new InstrumentArticulation( + 'Ride Cymbal 2', + 'ride', + 'Ride (choke)', + 2, + 29, + 59, + 'stick.hit.choke', + 'Ride-Percu', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.ArticStaccatoAbove, + TechniqueSymbolPlacement.Outside + ), + new InstrumentArticulation( + 'Reverse Cymbal', + 'crash', + 'Reverse Cymbal (hit)', + -3, + 30, + 49, + 'stick.hit.hit', + 'Reverse-Cymbal', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack + ), + new InstrumentArticulation( + 'Metronome', + 'snare', + 'Metronome (hit)', + 3, + 33, + 37, + 'stick.hit.sidestick', + 'Metronome-Percu', + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack, + MusicFontSymbol.NoteheadXBlack + ), + new InstrumentArticulation( + 'Metronome', + 'snare', + 'Metronome (bell)', + 3, + 34, + 38, + 'stick.hit.hit', + 'Metronome-Percu', + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadBlack, + MusicFontSymbol.NoteheadBlack + ), + ].map(articulation => [articulation.inputMidiNumber, articulation])); // these are manually defined names/identifiers for the articulation list above. // they are currently only used in the AlphaTex importer when using default articulations @@ -1411,6 +1487,10 @@ export class PercussionMapper { public static getArticulationName(n: Note): string { const articulation = PercussionMapper.getArticulation(n); + if(articulation && articulation.articulationName !== '') { + return articulation.articulationName; + } + let input = n.percussionArticulation; if (articulation) { input = articulation.outputMidiNumber; From 370460269db998941cbea0b2f9adaff2c58f96f4 Mon Sep 17 00:00:00 2001 From: L-Sun Date: Sun, 28 Dec 2025 16:17:04 +0800 Subject: [PATCH 3/3] fix: missing parameters in InstrumentArticulation constructor --- packages/alphatab/src/generated/DisplaySettingsJson.ts | 1 + packages/alphatab/src/importer/MusicXmlImporter.ts | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/packages/alphatab/src/generated/DisplaySettingsJson.ts b/packages/alphatab/src/generated/DisplaySettingsJson.ts index cdbaf34b1..8b3febfa4 100644 --- a/packages/alphatab/src/generated/DisplaySettingsJson.ts +++ b/packages/alphatab/src/generated/DisplaySettingsJson.ts @@ -354,6 +354,7 @@ export interface DisplaySettingsJson { * * * Comparing files against each other (top/bottom comparison) * * Aligning the playback of multiple files on one screen assuming the same tempo (e.g. one file per track). + * @deprecated Use the {@link LayoutMode.Parchment} to display a music sheet respecting the systems layout. */ systemsLayoutMode?: SystemsLayoutMode | keyof typeof SystemsLayoutMode | Lowercase; } diff --git a/packages/alphatab/src/importer/MusicXmlImporter.ts b/packages/alphatab/src/importer/MusicXmlImporter.ts index 51c1ef281..1f16f3be0 100644 --- a/packages/alphatab/src/importer/MusicXmlImporter.ts +++ b/packages/alphatab/src/importer/MusicXmlImporter.ts @@ -128,8 +128,13 @@ class TrackInfo { private static _defaultNoteArticulation: InstrumentArticulation = new InstrumentArticulation( 'Default', + 'Default', + 'Default', + 0, 0, 0, + '', + '', MusicFontSymbol.NoteheadBlack, MusicFontSymbol.NoteheadHalf, MusicFontSymbol.NoteheadWhole @@ -169,9 +174,14 @@ class TrackInfo { const staffLine = musicXmlStaffSteps - stepDifference; const newArticulation = new InstrumentArticulation( + articulation.elementName, articulation.elementType, + articulation.articulationName, staffLine, + articulation.inputMidiNumber, articulation.outputMidiNumber, + articulation.outputRSESound, + articulation.soundbankName, articulation.noteHeadDefault, articulation.noteHeadHalf, articulation.noteHeadWhole,