Jelajahi Sumber

feat(Options): can set chord symbol text for all chords (except major). (#784)

sschmidPS 5 tahun lalu
induk
melakukan
6f53f1c1bf

+ 43 - 0
src/MusicalScore/Graphical/EngravingRules.ts

@@ -8,6 +8,7 @@ import { ColoringModes as ColoringMode } from "./DrawingParameters";
 import { Dictionary } from "typescript-collections";
 import { FontStyles } from "../../Common/Enums";
 import { NoteEnum } from "../../Common/DataObjects/Pitch";
+import { ChordSymbolEnum } from "../../MusicalScore/VoiceData/ChordSymbolContainer";
 
 export class EngravingRules {
     /** A unit of distance. 1.0 is the distance between lines of a stave for OSMD, which is 10 pixels in Vexflow. */
@@ -95,6 +96,7 @@ export class EngravingRules {
     private chordSymbolTextHeight: number;
     private chordSymbolXSpacing: number;
     private chordSymbolYOffset: number;
+    private chordSymbolLabelTexts: Dictionary<ChordSymbolEnum, string>;
     private measureNumberLabelHeight: number;
     private measureNumberLabelOffset: number;
     private measureNumberLabelXOffset: number;
@@ -346,6 +348,9 @@ export class EngravingRules {
         this.chordSymbolTextHeight = 2.0;
         this.chordSymbolXSpacing = 1.0;
         this.chordSymbolYOffset = 2.0;
+        this.chordSymbolLabelTexts = new Dictionary<ChordSymbolEnum, string>();
+        this.resetChordSymbolLabelTexts(this.chordSymbolLabelTexts);
+
 
         // Tuplets, MeasureNumber and TupletNumber Labels
         this.measureNumberLabelHeight = 1.5 * EngravingRules.unit;
@@ -974,6 +979,15 @@ export class EngravingRules {
     public set ChordSymbolYOffset(value: number) {
         this.chordSymbolYOffset = value;
     }
+    public setChordSymbolLabelText(key: ChordSymbolEnum, value: string): void {
+        this.chordSymbolLabelTexts.setValue(key, value);
+    }
+    public get ChordSymbolLabelTexts(): Dictionary<ChordSymbolEnum, string> {
+        return this.chordSymbolLabelTexts;
+    }
+    public set ChordSymbolLabelTexts(value: Dictionary<ChordSymbolEnum, string>) {
+        this.chordSymbolLabelTexts = value;
+    }
     public get MeasureNumberLabelHeight(): number {
         return this.measureNumberLabelHeight;
     }
@@ -1696,6 +1710,35 @@ export class EngravingRules {
         this.restoreCursorAfterRerender = value;
     }
 
+    public resetChordSymbolLabelTexts(chordtexts: Dictionary<ChordSymbolEnum, string>): Dictionary<ChordSymbolEnum, string> {
+        chordtexts.setValue(ChordSymbolEnum.minor, "m");
+        chordtexts.setValue(ChordSymbolEnum.augmented, "aug");
+        chordtexts.setValue(ChordSymbolEnum.diminished, "dim");
+        chordtexts.setValue(ChordSymbolEnum.dominant, "7");
+        chordtexts.setValue(ChordSymbolEnum.majorseventh, "maj7");
+        chordtexts.setValue(ChordSymbolEnum.minorseventh, "m7");
+        chordtexts.setValue(ChordSymbolEnum.diminishedseventh, "dim7");
+        chordtexts.setValue(ChordSymbolEnum.augmentedseventh, "aug7");
+        chordtexts.setValue(ChordSymbolEnum.halfdiminished, "m7b5");
+        chordtexts.setValue(ChordSymbolEnum.majorminor, "m(maj7)");
+        chordtexts.setValue(ChordSymbolEnum.majorsixth, "maj6");
+        chordtexts.setValue(ChordSymbolEnum.minorsixth, "m6");
+        chordtexts.setValue(ChordSymbolEnum.dominantninth, "9");
+        chordtexts.setValue(ChordSymbolEnum.majorninth, "maj9");
+        chordtexts.setValue(ChordSymbolEnum.minorninth, "m9");
+        chordtexts.setValue(ChordSymbolEnum.dominant11th, "11");
+        chordtexts.setValue(ChordSymbolEnum.major11th, "maj11");
+        chordtexts.setValue(ChordSymbolEnum.minor11th, "m11");
+        chordtexts.setValue(ChordSymbolEnum.dominant13th, "13");
+        chordtexts.setValue(ChordSymbolEnum.major13th, "maj13");
+        chordtexts.setValue(ChordSymbolEnum.minor13th, "m13");
+        chordtexts.setValue(ChordSymbolEnum.suspendedsecond, "sus2");
+        chordtexts.setValue(ChordSymbolEnum.suspendedfourth, "sus4");
+        chordtexts.setValue(ChordSymbolEnum.power, "5");
+
+        return chordtexts;
+    }
+
     /**
      * This method maps NoteDurations to Distances and DistancesScalingFactors.
      */

+ 1 - 1
src/MusicalScore/ScoreIO/MusicSymbolModules/ChordSymbolReader.ts

@@ -151,6 +151,6 @@ export class ChordSymbolReader {
 
             degree = new Degree(value, alter, text);
         }
-        return new ChordSymbolContainer(rootPitch, chordKind, bassPitch, degree);
+        return new ChordSymbolContainer(rootPitch, chordKind, bassPitch, degree, musicSheet.Rules);
     }
 }

+ 10 - 90
src/MusicalScore/VoiceData/ChordSymbolContainer.ts

@@ -2,18 +2,21 @@ import {Pitch} from "../../Common/DataObjects/Pitch";
 import {KeyInstruction} from "./Instructions/KeyInstruction";
 import {MusicSheetCalculator} from "../Graphical/MusicSheetCalculator";
 import {AccidentalEnum} from "../../Common/DataObjects/Pitch";
+import { EngravingRules } from "../Graphical";
 
 export class ChordSymbolContainer {
     private rootPitch: Pitch;
     private chordKind: ChordSymbolEnum;
     private bassPitch: Pitch;
     private degree: Degree;
+    private rules: EngravingRules;
 
-    constructor(rootPitch: Pitch, chordKind: ChordSymbolEnum, bassPitch: Pitch, chordDegree: Degree) {
+    constructor(rootPitch: Pitch, chordKind: ChordSymbolEnum, bassPitch: Pitch, chordDegree: Degree, rules: EngravingRules) {
         this.rootPitch = rootPitch;
         this.chordKind = chordKind;
         this.bassPitch = bassPitch;
         this.degree = chordDegree;
+        this.rules = rules;
     }
 
     public get RootPitch(): Pitch {
@@ -49,7 +52,10 @@ export class ChordSymbolContainer {
             text += this.getTextForAccidental(transposedRootPitch.Accidental);
         }
         // chord kind text
-        text += ChordSymbolContainer.getTextFromChordKindEnum(chordSymbol.ChordKind);
+        text += chordSymbol.getTextFromChordKindEnum(chordSymbol.ChordKind);
+        // if (chordSymbol.ChordKind === ChordSymbolEnum.major) {
+        console.log("string used: " + chordSymbol.getTextFromChordKindEnum(chordSymbol.ChordKind));
+        // }
         // degree
         if (chordSymbol.ChordDegree !== undefined) {
             switch (chordSymbol.ChordDegree.text) {
@@ -108,94 +114,8 @@ export class ChordSymbolContainer {
         return text;
     }
 
-    private static getTextFromChordKindEnum(kind: ChordSymbolEnum): string {
-        let text: string = "";
-        switch (kind) {
-            case ChordSymbolEnum.major:
-                break;
-            case ChordSymbolEnum.minor:
-                text += "m";
-                break;
-            case ChordSymbolEnum.augmented:
-                text += "aug";
-                break;
-            case ChordSymbolEnum.diminished:
-                text += "dim";
-                break;
-            case ChordSymbolEnum.dominant:
-                text += "7";
-                break;
-            case ChordSymbolEnum.majorseventh:
-                text += "maj7";
-                break;
-            case ChordSymbolEnum.minorseventh:
-                text += "m7";
-                break;
-            case ChordSymbolEnum.diminishedseventh:
-                text += "dim7";
-                break;
-            case ChordSymbolEnum.augmentedseventh:
-                text += "aug7";
-                break;
-            case ChordSymbolEnum.halfdiminished:
-                text += "m7b5";
-                break;
-            case ChordSymbolEnum.majorminor:
-                text += "m(maj7)";
-                break;
-            case ChordSymbolEnum.majorsixth:
-                text += "maj6";
-                break;
-            case ChordSymbolEnum.minorsixth:
-                text += "m6";
-                break;
-            case ChordSymbolEnum.dominantninth:
-                text += "9";
-                break;
-            case ChordSymbolEnum.majorninth:
-                text += "maj9";
-                break;
-            case ChordSymbolEnum.minorninth:
-                text += "m9";
-                break;
-            case ChordSymbolEnum.dominant11th:
-                text += "11";
-                break;
-            case ChordSymbolEnum.major11th:
-                text += "maj11";
-                break;
-            case ChordSymbolEnum.minor11th:
-                text += "m11";
-                break;
-            case ChordSymbolEnum.dominant13th:
-                text += "13";
-                break;
-            case ChordSymbolEnum.major13th:
-                text += "maj13";
-                break;
-            case ChordSymbolEnum.minor13th:
-                text += "m13";
-                break;
-            case ChordSymbolEnum.suspendedsecond:
-                text += "sus2";
-                break;
-            case ChordSymbolEnum.suspendedfourth:
-                text += "sus4";
-                break;
-            case ChordSymbolEnum.Neapolitan:
-            case ChordSymbolEnum.Italian:
-            case ChordSymbolEnum.French:
-            case ChordSymbolEnum.German:
-            case ChordSymbolEnum.pedal:
-            case ChordSymbolEnum.power:
-                text += "5";
-                break;
-            case ChordSymbolEnum.Tristan:
-                break;
-            default:
-                break;
-        }
-        return text;
+    private getTextFromChordKindEnum(kind: ChordSymbolEnum): string {
+        return this.rules.ChordSymbolLabelTexts.getValue(kind) ?? "";
     }
 
 }