Просмотр исходного кода

曲目兼容,处理没有声轨的xml

yuanliang 1 год назад
Родитель
Сommit
5df3d8987a
1 измененных файлов с 40 добавлено и 17 удалено
  1. 40 17
      src/views/music-library/music-sheet/modal/music-operation.tsx

+ 40 - 17
src/views/music-library/music-sheet/modal/music-operation.tsx

@@ -516,14 +516,24 @@ export default defineComponent({
       const partList: any =
         xmlParse.getElementsByTagName('part-list')?.[0]?.getElementsByTagName('score-part') || []
       let partListNames = Array.from(partList).map((item: any) => {
-        let part = item.getElementsByTagName('part-name')?.[0]?.textContent || ''
+        let part = item.getElementsByTagName('part-name')?.[0]
         // evxml没有分轨,需要手动设置一个默认的名称,用于上传原音
-        if (forms.isEvxml) {
-          part = part || 'noPartName'
+        // if (forms.isEvxml) {
+        //   part = part || 'noPartName'
+        // }
+        // 优先解析声轨,没有就取id值
+        let track = ''
+        if (part) {
+          track = part.textContent || ''
+        } else {
+          let id = item.getAttribute('id')
+          if (id) {
+            track = id
+          }
         }
         return {
-          value: part.trim(),
-          label: part.trim()
+          value: track.trim(),
+          label: track.trim()
         }
       })
 
@@ -682,6 +692,19 @@ export default defineComponent({
       }
     }
 
+    // 声轨数据兼容
+    const formatTrack = (track: string) => {
+      if (!track) {
+        return '';
+      }
+      const trim = track.trim().toUpperCase();
+      // 导入后的脏数据兼容
+      if (trim == 'P1' || trim == 'NULL') {
+        return '';
+      }
+      return track.trim();
+    }
+
     onMounted(async () => {
       state.loading = true
       if (props.type === 'preview') {
@@ -797,25 +820,26 @@ export default defineComponent({
               state.partListNames = getPartListNames(res?.data as any) as any
 
               // 初始化音轨和原音
+              let tracks = state.partListNames.map((next: any) => next.label)
               if (data.multiTracksSelection) {
-                data.multiTracksSelection = data.multiTracksSelection.toLocaleUpperCase()
-              }
-              if (!data.multiTracksSelection || data.multiTracksSelection.trim() == '' || data.multiTracksSelection.trim() == 'NULL') {
-                forms.multiTracksSelection = ['']
+                forms.multiTracksSelection = data.multiTracksSelection.toLocaleUpperCase().split(',')
               } else {
-                forms.multiTracksSelection = data.multiTracksSelection.split(',')
+                forms.multiTracksSelection.push('');
               }
-              let names = state.partListNames.map((next: any) => next.label)
-              forms.multiTracksSelection = names.filter((next: any) => forms.multiTracksSelection.includes(next.toLocaleUpperCase()))
+              forms.multiTracksSelection = tracks.filter((next: any) => forms.multiTracksSelection.includes(next.toLocaleUpperCase()))
 
               const existSoundList = data.musicSheetSoundList ? data.musicSheetSoundList : []
-              if (existSoundList.length === 1 && existSoundList[0].track === 'P1') {
+              // 如果只有一个原音文件,并且原音没有对应声轨,取xml解析中的第一个声轨绑定当当前原音
+              if (existSoundList.length === 1 && !formatTrack(existSoundList[0].track)) {
+                let track = state.partListNames.length > 0 ? state.partListNames[0].value : null;
                 forms.musicSheetSoundList.push({
                   audioFileUrl: existSoundList[0].audioFileUrl, // 原音
-                  track: state.partListNames[0].value || null // 轨道
+                  track: track // 轨道
                 })
+                if (track && !forms.multiTracksSelection.includes(track)) {
+                  forms.multiTracksSelection.push(track)
+                }
               } else {
-                const tracks = [] as any
                 state.partListNames.forEach((item: any) => {
                   let audioFileUrl = null
                   existSoundList.forEach((next: any) => {
@@ -828,9 +852,8 @@ export default defineComponent({
                   })
                   forms.musicSheetSoundList.push({
                     audioFileUrl: audioFileUrl, // 原音
-                    track: item.value ? item.value : '' // 轨道
+                    track: item.value // 轨道
                   })
-                  tracks.push(item.value)
                 })
 
                 // 处理没有声轨,但有原音