|
@@ -150,6 +150,14 @@ export class InstrumentReader {
|
|
|
this.maxTieNoteFraction = new Fraction(0, 1);
|
|
|
let lastNoteWasGrace: boolean = false;
|
|
|
const notes: IXmlElement[] = [];
|
|
|
+ // 根据hiddenSpeed关键字控制谱面速度是否隐藏
|
|
|
+ let hideSpeed: boolean = false;
|
|
|
+ /**
|
|
|
+ * needPitchVoice:是否需要转调
|
|
|
+ * <clef-octave-change>1</clef-octave-change>
|
|
|
+ * 根据<clef>标签里面的<clef-octave-change>的值判断,为0或者不存在<clef-octave-change>标签,则需要转调
|
|
|
+ *
|
|
|
+ */
|
|
|
try {
|
|
|
const measureNode: IXmlElement = this.xmlMeasureList[this.currentXmlMeasureIndex];
|
|
|
const xmlMeasureListArr: IXmlElement[] = measureNode.elements();
|
|
@@ -553,6 +561,14 @@ export class InstrumentReader {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // 曲子移调
|
|
|
+ const clefNode: IXmlElement = xmlNode.element("clef");
|
|
|
+ if (clefNode) {
|
|
|
+ const clefChangeNode: IXmlElement = clefNode.element('clef-octave-change');
|
|
|
+ if (!clefChangeNode || Number(clefChangeNode?.value) === 0) {
|
|
|
+ (window as any).needPitchVoice = true
|
|
|
+ }
|
|
|
+ }
|
|
|
} else if (xmlNode.name === "forward") {
|
|
|
const forFraction: number = parseInt(xmlNode.element("duration").value, 10);
|
|
|
currentFraction.Add(new Fraction(forFraction, 4 * this.divisions));
|
|
@@ -640,6 +656,12 @@ export class InstrumentReader {
|
|
|
// console.log(words.value, this.currentGradualChangeMeasure.speedInfo);
|
|
|
this.xmlNotes = [];
|
|
|
}
|
|
|
+ // 隐藏速度显示
|
|
|
+ if (words.value && words.value.toLocaleLowerCase() === 'hiddenspeed') {
|
|
|
+ hideSpeed = true
|
|
|
+ } else {
|
|
|
+ hideSpeed = false
|
|
|
+ }
|
|
|
}
|
|
|
if (directionTypeNodes.find(ele => ele.element("metronome")) && this.currentGradualChangeMeasure?.speedInfo) {
|
|
|
// console.log(this.xmlNotes.length, this.currentGradualChangeMeasure.speedInfo);
|
|
@@ -660,7 +682,7 @@ export class InstrumentReader {
|
|
|
expressionReader.readExpressionParameters(
|
|
|
xmlNode, this.instrument, this.divisions, currentFraction, previousFraction, this.currentMeasure.MeasureNumber, false
|
|
|
);
|
|
|
- expressionReader.read(xmlNode, this.currentMeasure, currentFraction, previousFraction.clone(), notes.length);
|
|
|
+ expressionReader.read(xmlNode, this.currentMeasure, currentFraction, previousFraction.clone(), notes.length, hideSpeed);
|
|
|
}
|
|
|
}
|
|
|
} else if (xmlNode.name === "barline") {
|