|
@@ -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)
|
|
|
})
|
|
|
|
|
|
// 处理没有声轨,但有原音
|