|
@@ -675,7 +675,7 @@ export const formatXML = (xml: string, xmlUrl?: string): string => {
|
|
|
const wordList = Array.from(measure.getElementsByTagName("words")) || [];
|
|
|
wordList.forEach((word: any) => {
|
|
|
// TODO:删除妙极客曲子无意义的words
|
|
|
- if (word?.textContent && word?.parentNode?.parentNode) {
|
|
|
+ if (word?.textContent && !word?.textContent?.includes('D') && word?.parentNode?.parentNode) {
|
|
|
measure.removeChild(word.parentNode.parentNode);
|
|
|
}
|
|
|
// if(hideSpeedWords.includes(word?.textContent) && word?.parentNode?.parentNode) {
|
|
@@ -863,7 +863,7 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
|
|
|
}
|
|
|
// 是否是变速的曲子
|
|
|
const hasVaryingSpeed = _notes.some((item: any) => item.measuresTempoInBPM !== _notes[0].measuresTempoInBPM)
|
|
|
- // console.log('变速曲子',hasVaryingSpeed, _notes)
|
|
|
+ console.log('变速曲子',hasVaryingSpeed, _notes)
|
|
|
let noteIds: any = [];
|
|
|
// let voicesBBox: any = null;
|
|
|
for (let { note, iterator, currentTime, isDouble, isMutileSubject } of _notes) {
|
|
@@ -1112,6 +1112,8 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
|
|
|
const idx = noteIds.filter((item: any) => item === svgElement?.attrs.id)?.length || 0
|
|
|
evNoteStartTime = note?.noteTimeInfo[idx]?.begin
|
|
|
evNoteEndTime = note?.noteTimeInfo[idx]?.end
|
|
|
+ relativeTime = evNoteStartTime - fixtime
|
|
|
+ // usetime = evNoteStartTime - fixtime
|
|
|
}
|
|
|
svgElement?.attrs.id && noteIds.push(svgElement?.attrs.id)
|
|
|
const nodeDetail = {
|
|
@@ -1161,6 +1163,13 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
|
|
|
measureSpeed, // 小节速度
|
|
|
maxNoteNum: note.maxNoteNum, // 当前小节音符最多的分轨的音符数量
|
|
|
};
|
|
|
+ // 如果是妙极客的曲子,并且第二遍循环播放需要等待时间,并且是第二遍循环的第一个小节的第一个音符
|
|
|
+ if (state.isEvxml && state.secondEvXmlBeginTime && nodeDetail.i > 0 && nodeDetail.MeasureNumberXML === 1 && nodeDetail.noteId === 0) {
|
|
|
+ nodeDetail.time = nodeDetail.time + state.secondEvXmlBeginTime;
|
|
|
+ nodeDetail.endtime = nodeDetail.endtime + state.secondEvXmlBeginTime;
|
|
|
+ usetime = usetime + state.secondEvXmlBeginTime;
|
|
|
+ relativeTime = relativeTime + state.secondEvXmlBeginTime;
|
|
|
+ }
|
|
|
nodeDetail.realKey = formatRealKey(note.halfTone - fixedKey * 12, nodeDetail);
|
|
|
nodeDetail.duration = nodeDetail.endtime - nodeDetail.time;
|
|
|
let tickables = activeVerticalMeasureList[0]?.vfVoices["1"]?.tickables || [];
|
|
@@ -1192,6 +1201,7 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
|
|
|
}
|
|
|
// 按照时间轴排序
|
|
|
const sortArray = allNotes.sort((a, b) => a.relativeTime - b.relativeTime).map((item, index) => ({ ...item, i: index }));
|
|
|
+ // const sortArray = allNotes.sort((a, b) => a.time - b.time).map((item, index) => ({ ...item, i: index }));
|
|
|
console.timeEnd("音符跑完时间");
|
|
|
try {
|
|
|
osmd.cursor.reset();
|
|
@@ -1325,11 +1335,14 @@ const analyzeEvxml = (xmlParse: any, xmlUrl?: string) => {
|
|
|
// xml拍号数
|
|
|
const xmlNum = xmlParse.getElementsByTagName("timegap")[0]?.getElementsByTagName("values")[0]?.getElementsByTagName("item")[0]?.getAttribute('num');
|
|
|
const denNum = xmlParse.getElementsByTagName("timegap")[0]?.getElementsByTagName("values")[0]?.getElementsByTagName("item")[0]?.getAttribute('den');
|
|
|
+ const xmlNum2 = xmlParse.getElementsByTagName("timegap")[0]?.getElementsByTagName("values")[0]?.getElementsByTagName("item")[1]?.getAttribute('num');
|
|
|
+ const denNum2 = xmlParse.getElementsByTagName("timegap")[0]?.getElementsByTagName("values")[0]?.getElementsByTagName("item")[1]?.getAttribute('den');
|
|
|
// 第一个音符的起始时间
|
|
|
const firstMeasure = xmlParse.getElementsByTagName("measure")[0];
|
|
|
if (firstMeasure) {
|
|
|
const firstNoteBeginTime = firstMeasure.getElementsByTagName("times")[0]?.getElementsByTagName("time")[0]?.getAttribute('begin');
|
|
|
state.evXmlBeginTime = firstNoteBeginTime ? firstNoteBeginTime / 1000 : xmlNum ? 60 / state.originSpeed * xmlNum * 4/denNum : 0;
|
|
|
+ state.secondEvXmlBeginTime = firstNoteBeginTime ? 0 : xmlNum2 ? 60 / state.originSpeed * xmlNum2 * 4/denNum2 : 0;
|
|
|
const hasTimeGap = xmlParse.getElementsByTagName("timegap").length > 0;
|
|
|
const hasTimes = xmlParse.getElementsByTagName("times").length > 0;
|
|
|
console.log('🚀 ~ evxml解析','有timegap:',hasTimeGap,'有times:',hasTimes)
|