|
@@ -1093,4 +1093,191 @@ export const setCustomNoteRealValue = () => {
|
|
|
if (["12667", "12673"].includes(detailId)){
|
|
|
customData.customNoteCurrentTime = true
|
|
|
}
|
|
|
-};
|
|
|
+};
|
|
|
+
|
|
|
+/** 转换简谱的全休止符和二分休止符 */
|
|
|
+export const transferJianNote = (measure: any, divisions: number, preBeats: number, preBeatType: number) => {
|
|
|
+ const multipleXs = preBeatType / 4;
|
|
|
+ const notes = measure.getElementsByTagName("note")
|
|
|
+ for (const note of notes) {
|
|
|
+ const noteType = note.getElementsByTagName("type")?.[0]?.textContent || '';
|
|
|
+ if ((noteType === 'whole' || noteType === 'half') && note.getElementsByTagName("rest").length) {
|
|
|
+ // 4/4拍,3/4拍
|
|
|
+ if ((preBeats === 4 && preBeatType === 4) || (preBeats === 3 && preBeatType === 4)) {
|
|
|
+ let maxNumber = noteType === 'half' ? 2 : preBeats / multipleXs;
|
|
|
+ // 如果二分音符带附点,需要判断处理下
|
|
|
+ if (note.getElementsByTagName("dot").length) {
|
|
|
+ maxNumber = maxNumber + 1;
|
|
|
+ }
|
|
|
+ if (!Number.isInteger(maxNumber)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // console.log('几个1/4音符',maxNumber)
|
|
|
+ let quarterNoteNumber = 1;
|
|
|
+ while (quarterNoteNumber <= maxNumber) {
|
|
|
+ const newnote = document.createElement('note');
|
|
|
+ newnote.innerHTML = `
|
|
|
+ <rest></rest>
|
|
|
+ <duration>${divisions}</duration>
|
|
|
+ <voice>1</voice>
|
|
|
+ <type>quarter</type>`
|
|
|
+ measure.insertBefore(newnote, note);
|
|
|
+ quarterNoteNumber += 1;
|
|
|
+ };
|
|
|
+ measure.removeChild(note);
|
|
|
+ } else if (preBeats === 3 && preBeatType === 8) {
|
|
|
+ const maxNumber = noteType === 'half' ? 2 : 3;
|
|
|
+ let quarterNoteNumber = 1;
|
|
|
+ while (quarterNoteNumber <= maxNumber) {
|
|
|
+ const newnote = document.createElement('note');
|
|
|
+ newnote.innerHTML = `
|
|
|
+ <rest></rest>
|
|
|
+ <duration>${divisions/2}</duration>
|
|
|
+ <voice>1</voice>
|
|
|
+ <type>eighth</type>`
|
|
|
+ measure.insertBefore(newnote, note);
|
|
|
+ quarterNoteNumber += 1;
|
|
|
+ };
|
|
|
+ measure.removeChild(note);
|
|
|
+ } else if (preBeats === 5 && preBeatType === 8) {
|
|
|
+ if (noteType === 'whole') {
|
|
|
+ const newnote = document.createElement('note');
|
|
|
+ newnote.innerHTML = `
|
|
|
+ <rest></rest>
|
|
|
+ <duration>${divisions+divisions/2}</duration>
|
|
|
+ <voice>1</voice>
|
|
|
+ <type>quarter</type>
|
|
|
+ <dot></dot>`
|
|
|
+ measure.insertBefore(newnote, note);
|
|
|
+ const newnote2 = document.createElement('note');
|
|
|
+ newnote2.innerHTML = `
|
|
|
+ <rest></rest>
|
|
|
+ <duration>${divisions}</duration>
|
|
|
+ <voice>1</voice>
|
|
|
+ <type>quarter</type>`
|
|
|
+ measure.insertBefore(newnote2, note);
|
|
|
+ measure.removeChild(note);
|
|
|
+ } else if (noteType === 'half') {
|
|
|
+ const newnote = document.createElement('note');
|
|
|
+ newnote.innerHTML = `
|
|
|
+ <rest></rest>
|
|
|
+ <duration>${divisions+divisions/2}</duration>
|
|
|
+ <voice>1</voice>
|
|
|
+ <type>quarter</type>
|
|
|
+ <dot></dot>`
|
|
|
+ measure.insertBefore(newnote, note);
|
|
|
+ const newnote2 = document.createElement('note');
|
|
|
+ newnote2.innerHTML = `
|
|
|
+ <rest></rest>
|
|
|
+ <duration>${divisions/2}</duration>
|
|
|
+ <voice>1</voice>
|
|
|
+ <type>eighth</type>`
|
|
|
+ measure.insertBefore(newnote2, note);
|
|
|
+ measure.removeChild(note);
|
|
|
+ }
|
|
|
+ } else if (preBeats === 6 && preBeatType === 8) {
|
|
|
+ if (noteType === 'whole') {
|
|
|
+ const maxNumber = 2;
|
|
|
+ let quarterNoteNumber = 1;
|
|
|
+ while (quarterNoteNumber <= maxNumber) {
|
|
|
+ const newnote = document.createElement('note');
|
|
|
+ newnote.innerHTML = `
|
|
|
+ <rest></rest>
|
|
|
+ <duration>${divisions+divisions/2}</duration>
|
|
|
+ <voice>1</voice>
|
|
|
+ <type>quarter</type>
|
|
|
+ <dot></dot>`
|
|
|
+ measure.insertBefore(newnote, note);
|
|
|
+ quarterNoteNumber += 1;
|
|
|
+ };
|
|
|
+ measure.removeChild(note);
|
|
|
+ } else if (noteType === 'half') {
|
|
|
+ const newnote = document.createElement('note');
|
|
|
+ newnote.innerHTML = `
|
|
|
+ <rest></rest>
|
|
|
+ <duration>${divisions+divisions/2}</duration>
|
|
|
+ <voice>1</voice>
|
|
|
+ <type>quarter</type>
|
|
|
+ <dot></dot>`
|
|
|
+ measure.insertBefore(newnote, note);
|
|
|
+ const newnote2 = document.createElement('note');
|
|
|
+ newnote2.innerHTML = `
|
|
|
+ <rest></rest>
|
|
|
+ <duration>${divisions/2}</duration>
|
|
|
+ <voice>1</voice>
|
|
|
+ <type>eighth</type>`
|
|
|
+ measure.insertBefore(newnote2, note);
|
|
|
+ measure.removeChild(note);
|
|
|
+ }
|
|
|
+ } else if (preBeats === 9 && preBeatType === 8) {
|
|
|
+ if (noteType === 'whole') {
|
|
|
+ const maxNumber = 3;
|
|
|
+ let quarterNoteNumber = 1;
|
|
|
+ while (quarterNoteNumber <= maxNumber) {
|
|
|
+ const newnote = document.createElement('note');
|
|
|
+ newnote.innerHTML = `
|
|
|
+ <rest></rest>
|
|
|
+ <duration>${divisions+divisions/2}</duration>
|
|
|
+ <voice>1</voice>
|
|
|
+ <type>quarter</type>
|
|
|
+ <dot></dot>`
|
|
|
+ measure.insertBefore(newnote, note);
|
|
|
+ quarterNoteNumber += 1;
|
|
|
+ };
|
|
|
+ measure.removeChild(note);
|
|
|
+ } else if (noteType === 'half') {
|
|
|
+ const newnote = document.createElement('note');
|
|
|
+ newnote.innerHTML = `
|
|
|
+ <rest></rest>
|
|
|
+ <duration>${divisions+divisions/2}</duration>
|
|
|
+ <voice>1</voice>
|
|
|
+ <type>quarter</type>
|
|
|
+ <dot></dot>`
|
|
|
+ measure.insertBefore(newnote, note);
|
|
|
+ const newnote2 = document.createElement('note');
|
|
|
+ newnote2.innerHTML = `
|
|
|
+ <rest></rest>
|
|
|
+ <duration>${divisions/2}</duration>
|
|
|
+ <voice>1</voice>
|
|
|
+ <type>eighth</type>`
|
|
|
+ measure.insertBefore(newnote2, note);
|
|
|
+ measure.removeChild(note);
|
|
|
+ }
|
|
|
+ } else if (preBeats === 12 && preBeatType === 8) {
|
|
|
+ if (noteType === 'whole') {
|
|
|
+ const maxNumber = 4;
|
|
|
+ let quarterNoteNumber = 1;
|
|
|
+ while (quarterNoteNumber <= maxNumber) {
|
|
|
+ const newnote = document.createElement('note');
|
|
|
+ newnote.innerHTML = `
|
|
|
+ <rest></rest>
|
|
|
+ <duration>${divisions+divisions/2}</duration>
|
|
|
+ <voice>1</voice>
|
|
|
+ <type>quarter</type>
|
|
|
+ <dot></dot>`
|
|
|
+ measure.insertBefore(newnote, note);
|
|
|
+ quarterNoteNumber += 1;
|
|
|
+ };
|
|
|
+ measure.removeChild(note);
|
|
|
+ } else if (noteType === 'half') {
|
|
|
+ const newnote = document.createElement('note');
|
|
|
+ newnote.innerHTML = `
|
|
|
+ <rest></rest>
|
|
|
+ <duration>${divisions+divisions/2}</duration>
|
|
|
+ <voice>1</voice>
|
|
|
+ <type>quarter</type>
|
|
|
+ <dot></dot>`
|
|
|
+ measure.insertBefore(newnote, note);
|
|
|
+ const newnote2 = document.createElement('note');
|
|
|
+ newnote2.innerHTML = `
|
|
|
+ <rest></rest>
|
|
|
+ <duration>${divisions/2}</duration>
|
|
|
+ <voice>1</voice>
|
|
|
+ <type>eighth</type>`
|
|
|
+ measure.insertBefore(newnote2, note);
|
|
|
+ measure.removeChild(note);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|