|
@@ -295,8 +295,9 @@ export default defineComponent({
|
|
|
musicCover: null, // 曲谱封面
|
|
|
remark: null, // 曲谱描述
|
|
|
// musicSheetSoundList: [] as any, // 原音
|
|
|
- musicSheetSoundList_YY: [] as any, // 原音
|
|
|
- musicSheetSoundList_YZ: [] as any, // 演奏
|
|
|
+ musicSheetSoundList_YY: [] as any, // 演唱原音
|
|
|
+ musicSheetSoundList_YZ: [] as any, // 演奏演奏
|
|
|
+ musicSheetSoundList_all_subject: null, // 全部声部原音
|
|
|
// musicSheetCategoriesId: null,
|
|
|
status: false,
|
|
|
musicSheetType: 'SINGLE', // 曲目类型
|
|
@@ -311,7 +312,10 @@ export default defineComponent({
|
|
|
audioType: 'HOMEMODE', // 伴奏类型
|
|
|
isPlayBeat: true, // 是否播放节拍器
|
|
|
isUseSystemBeat: true, // 是否使用系统节拍器(0:否;1:是)
|
|
|
+ isUseSingSystemBeat: true, //演唱是否使用系统节拍器(0:否;1:是)
|
|
|
repeatedBeats: false, // 是否重复节拍时长
|
|
|
+ repeatedBeatsToSing: false, //演唱是否重复节拍时长
|
|
|
+ isPlaySingBeat: true, //是否播入演唱节拍器(0: 否 1:是)
|
|
|
evaluationStandard: 'FREQUENCY', // 评分标准 节奏 AMPLITUDE 音准 FREQUENCY 分贝 DECIBELS
|
|
|
multiTracksSelection: [] as any, // 声轨
|
|
|
musicSheetExtend: {} as any, //所属人信息
|
|
@@ -320,7 +324,8 @@ export default defineComponent({
|
|
|
musicJianImg: '', // 简谱固定调
|
|
|
isEvxml: false, // 是否是evxml
|
|
|
isShowFingering: true, // 是否显示指法
|
|
|
- solmizationFileUrl:null, // 唱名文件
|
|
|
+ solmizationFileUrl: null, // 唱名文件
|
|
|
+ isAllSubject: false, // 适用声部
|
|
|
})
|
|
|
const state = reactive({
|
|
|
loading: false,
|
|
@@ -348,7 +353,7 @@ export default defineComponent({
|
|
|
isAutoSave: false, // 是否自动保存
|
|
|
fSongFile: null as any, // 范唱
|
|
|
bSongFile: null as any, // 伴唱
|
|
|
- musicSheetSoundList:[] as any,
|
|
|
+ musicSheetSoundList: [] as any,
|
|
|
})
|
|
|
const gradualData = reactive({
|
|
|
list: [] as any[],
|
|
@@ -373,7 +378,7 @@ export default defineComponent({
|
|
|
}
|
|
|
try {
|
|
|
//extConfigJson: {"repeatedBeats":0,"gradualTimes":{"75":"02:38:60","77":"02:43:39"}}
|
|
|
- let audioPlayTypes = [] as any;
|
|
|
+ let audioPlayTypes = [] as any;
|
|
|
let musicSheetSoundList = [];
|
|
|
let musicSheetType = forms.musicSheetType;
|
|
|
if (state.fSongFile) {
|
|
@@ -381,34 +386,56 @@ export default defineComponent({
|
|
|
musicSheetId: props.data.id,
|
|
|
audioFileUrl: state.fSongFile,
|
|
|
audioPlayType: 'SING',
|
|
|
- solmizationFileUrl:forms.solmizationFileUrl
|
|
|
+ solmizationFileUrl: forms.solmizationFileUrl
|
|
|
})
|
|
|
audioPlayTypes.push("SING")
|
|
|
}
|
|
|
- if (musicSheetType == 'SINGLE') {
|
|
|
- if (forms.musicalInstrumentIdList) {
|
|
|
+
|
|
|
+ if (forms.isAllSubject) {
|
|
|
+ if (musicSheetType == 'SINGLE' && forms.musicSheetSoundList_all_subject) {
|
|
|
audioPlayTypes.push("PLAY")
|
|
|
+ musicSheetSoundList.push({
|
|
|
+ audioFileUrl: forms.musicSheetSoundList_all_subject,
|
|
|
+ musicSheetId: props.data.id,
|
|
|
+ audioPlayType: 'PLAY'
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ if (musicSheetType == 'CONCERT' && forms.musicSheetSoundList_YY.length > 0) {
|
|
|
+ audioPlayTypes.push("PLAY")
|
|
|
+ forms.musicSheetSoundList_YY.forEach((musicSheetSound: any) => {
|
|
|
+ if (forms.multiTracksSelection.includes(musicSheetSound.musicalInstrumentId)) {
|
|
|
+ musicSheetSoundList.push({
|
|
|
+ ...musicSheetSound,
|
|
|
+ musicSheetId: props.data.id,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
}
|
|
|
- forms.musicSheetSoundList_YZ.forEach((musicSheetSound: any) => {
|
|
|
- if (forms.musicalInstrumentIdList.includes(musicSheetSound.musicalInstrumentId)) {
|
|
|
- musicSheetSoundList.push({
|
|
|
- ...musicSheetSound,
|
|
|
- musicSheetId: props.data.id,
|
|
|
- })
|
|
|
- }
|
|
|
- })
|
|
|
} else {
|
|
|
- if (forms.musicSheetSoundList_YY && forms.musicSheetSoundList_YY.length > 0) {
|
|
|
+ if (musicSheetType == 'SINGLE' && forms.musicSheetSoundList_YZ.length > 0) {
|
|
|
audioPlayTypes.push("PLAY")
|
|
|
+ forms.musicSheetSoundList_YZ.forEach((musicSheetSound: any) => {
|
|
|
+ if (forms.musicalInstrumentIdList.includes(musicSheetSound.musicalInstrumentId)) {
|
|
|
+ musicSheetSoundList.push({
|
|
|
+ ...musicSheetSound,
|
|
|
+ musicSheetId: props.data.id,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ if (musicSheetType == 'CONCERT' && forms.musicSheetSoundList_YY.length > 0) {
|
|
|
+ audioPlayTypes.push("PLAY")
|
|
|
+ forms.musicSheetSoundList_YY.forEach((musicSheetSound: any) => {
|
|
|
+ if (forms.multiTracksSelection.includes(musicSheetSound.musicalInstrumentId)) {
|
|
|
+ musicSheetSoundList.push({
|
|
|
+ ...musicSheetSound,
|
|
|
+ musicSheetId: props.data.id,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
}
|
|
|
- forms.musicSheetSoundList_YY.forEach((musicSheetSound: any) => {
|
|
|
- if (forms.multiTracksSelection.includes(musicSheetSound.musicalInstrumentId)) {
|
|
|
- musicSheetSoundList.push({
|
|
|
- ...musicSheetSound,
|
|
|
- musicSheetId: props.data.id,
|
|
|
- })
|
|
|
- }
|
|
|
- })
|
|
|
}
|
|
|
|
|
|
if (state.bSongFile) {
|
|
@@ -422,22 +449,21 @@ export default defineComponent({
|
|
|
//
|
|
|
|
|
|
|
|
|
-
|
|
|
const obj = {
|
|
|
musicCategoryId: forms.musicCategoryId,
|
|
|
musicCover: forms.musicCover,
|
|
|
name: forms.name,
|
|
|
appAuditFlag: forms.appAuditFlag,
|
|
|
- subjectIds: forms.subjectIds.join(','),
|
|
|
+ subjectIds: forms.isAllSubject ? "" : forms.subjectIds.join(','),
|
|
|
remark: forms.remark,
|
|
|
audioPlayTypes: audioPlayTypes.join(','),
|
|
|
- musicalInstrumentIds: forms.musicalInstrumentIdList.join(','),
|
|
|
+ musicalInstrumentIds: forms.isAllSubject ? "" : forms.musicalInstrumentIdList.join(','),
|
|
|
composer: forms.composer,
|
|
|
musicSheetType: forms.musicSheetType,
|
|
|
isUseSystemBeat: forms.isUseSystemBeat,
|
|
|
isShowFingering: forms.isShowFingering,
|
|
|
isPlayBeat: forms.isPlayBeat,
|
|
|
- multiTracksSelection: forms.multiTracksSelection.join(','),
|
|
|
+ multiTracksSelection: forms.isAllSubject ? "" : forms.multiTracksSelection.join(','),
|
|
|
playSpeed: forms.playSpeed,
|
|
|
playMode: forms.playMode,
|
|
|
xmlFileUrl: forms.xmlFileUrl,
|
|
@@ -448,15 +474,19 @@ export default defineComponent({
|
|
|
repeatedBeats: forms.repeatedBeats ? 1 : 0,
|
|
|
gradualTimes: forms.graduals,
|
|
|
isEvxml: forms.isEvxml ? 1 : 0,
|
|
|
+ repeatedBeatsToSing: forms.repeatedBeatsToSing ? 1 : 0
|
|
|
}),
|
|
|
// availableType: forms.availableType,
|
|
|
sourceType: forms.sourceType,
|
|
|
audioType: forms.audioType,
|
|
|
status: forms.status,
|
|
|
evaluationStandard: forms.evaluationStandard,
|
|
|
- musicSheetAccompanimentList:forms.musicSheetAccompanimentList,
|
|
|
+ musicSheetAccompanimentList: forms.musicSheetAccompanimentList,
|
|
|
musicSheetSoundList: musicSheetSoundList,
|
|
|
musicTag: '-1',
|
|
|
+ isUseSingSystemBeat: forms.isUseSingSystemBeat,
|
|
|
+ isPlaySingBeat: forms.isPlaySingBeat,
|
|
|
+ isAllSubject: forms.isAllSubject,
|
|
|
}
|
|
|
if (forms.audioType == 'MIDI') {
|
|
|
obj.musicSheetSoundList = []
|
|
@@ -493,7 +523,7 @@ export default defineComponent({
|
|
|
} catch (error) {
|
|
|
}
|
|
|
state.partListNames = getPartListNames(res?.target?.result as any) as any
|
|
|
- parseInstrumentAndSubject(res?.target?.result as any)
|
|
|
+ // parseInstrumentAndSubject(res?.target?.result as any)
|
|
|
// 这里是如果没有当前音轨就重新写
|
|
|
for (let j = 0; j < state.partListNames.length; j++) {
|
|
|
if (!forms.musicSheetSoundList_YY[j]) {
|
|
@@ -784,7 +814,7 @@ export default defineComponent({
|
|
|
'musicalInstrumentId': item.id + '',
|
|
|
'musicalInstrumentName': item.name,
|
|
|
'audioFileUrl': null,
|
|
|
- 'audioPlayType':'PLAY'
|
|
|
+ 'audioPlayType': 'PLAY'
|
|
|
});
|
|
|
})
|
|
|
state.instrumentList = tempList
|
|
@@ -846,6 +876,9 @@ export default defineComponent({
|
|
|
forms.appAuditFlag = data.appAuditFlag ? 1 : 0
|
|
|
forms.midiFileUrl = data.midiFileUrl
|
|
|
forms.isShowFingering = data.isShowFingering
|
|
|
+ forms.isAllSubject = data.isAllSubject
|
|
|
+ forms.isUseSingSystemBeat = data.isUseSingSystemBeat
|
|
|
+ forms.isPlaySingBeat = data.isPlaySingBeat
|
|
|
forms.subjectIds = []
|
|
|
if (data.subjectIds) {
|
|
|
const subjectIds = data.subjectIds.split(',') || []
|
|
@@ -868,6 +901,7 @@ export default defineComponent({
|
|
|
forms.graduals = extConfigJson.gradualTimes || {}
|
|
|
forms.repeatedBeats = !!extConfigJson.repeatedBeats
|
|
|
forms.isEvxml = !!extConfigJson.isEvxml
|
|
|
+ forms.repeatedBeatsToSing = !!extConfigJson.repeatedBeatsToSing
|
|
|
} catch (error) {
|
|
|
}
|
|
|
forms.evaluationStandard = data.evaluationStandard
|
|
@@ -892,13 +926,17 @@ export default defineComponent({
|
|
|
// 范唱 唱名
|
|
|
state.fSongFile = state.musicSheetSoundList[i].audioFileUrl
|
|
|
forms.solmizationFileUrl = state.musicSheetSoundList[i].solmizationFileUrl
|
|
|
- }
|
|
|
-
|
|
|
- // 乐器演奏原音
|
|
|
- for (let j = 0; j < forms.musicSheetSoundList_YZ.length; j++) {
|
|
|
- let musicalInstrumentId = state.musicSheetSoundList[i].musicalInstrumentId;
|
|
|
- if (musicalInstrumentId && musicalInstrumentId == forms.musicSheetSoundList_YZ[j].musicalInstrumentId) {
|
|
|
- forms.musicSheetSoundList_YZ[j].audioFileUrl = state.musicSheetSoundList[i].audioFileUrl
|
|
|
+ } else {
|
|
|
+ if (forms.isAllSubject) {
|
|
|
+ forms.musicSheetSoundList_all_subject = state.musicSheetSoundList[i].audioFileUrl
|
|
|
+ } else {
|
|
|
+ // 乐器演奏原音
|
|
|
+ for (let j = 0; j < forms.musicSheetSoundList_YZ.length; j++) {
|
|
|
+ let musicalInstrumentId = state.musicSheetSoundList[i].musicalInstrumentId;
|
|
|
+ if (musicalInstrumentId && musicalInstrumentId == forms.musicSheetSoundList_YZ[j].musicalInstrumentId) {
|
|
|
+ forms.musicSheetSoundList_YZ[j].audioFileUrl = state.musicSheetSoundList[i].audioFileUrl
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -913,15 +951,13 @@ export default defineComponent({
|
|
|
state.partListNames = getPartListNames(res?.data as any) as any
|
|
|
|
|
|
// 初始化音轨和原音
|
|
|
- forms.multiTracksSelection = data.multiTracksSelection
|
|
|
- ? data.multiTracksSelection.split(',')
|
|
|
- : []
|
|
|
+ forms.multiTracksSelection = data.multiTracksSelection ? data.multiTracksSelection.split(',') : []
|
|
|
|
|
|
if (state.musicSheetSoundList.length === 1 && state.musicSheetSoundList[0].track === 'P1') {
|
|
|
forms.musicSheetSoundList_YY.push({
|
|
|
audioFileUrl: state.musicSheetSoundList[0].audioFileUrl, // 原音
|
|
|
track: state.partListNames[0].value || null, // 轨道
|
|
|
- audioPlayType:'PLAY'
|
|
|
+ audioPlayType: 'PLAY'
|
|
|
})
|
|
|
} else {
|
|
|
const tracks = [] as any
|
|
@@ -935,7 +971,7 @@ export default defineComponent({
|
|
|
forms.musicSheetSoundList_YY.push({
|
|
|
audioFileUrl: audioFileUrl, // 原音
|
|
|
track: item.value, // 轨道
|
|
|
- audioPlayType:'PLAY'
|
|
|
+ audioPlayType: 'PLAY'
|
|
|
})
|
|
|
tracks.push(item.value)
|
|
|
})
|
|
@@ -949,7 +985,7 @@ export default defineComponent({
|
|
|
forms.musicSheetSoundList_YY.push({
|
|
|
audioFileUrl: next.audioFileUrl, // 原音
|
|
|
track: next.track ? next.track : null, // 轨道
|
|
|
- audioPlayType:'PLAY'
|
|
|
+ audioPlayType: 'PLAY'
|
|
|
})
|
|
|
})
|
|
|
}
|
|
@@ -1072,6 +1108,39 @@ export default defineComponent({
|
|
|
</NGrid>
|
|
|
<NGrid cols={2}>
|
|
|
<NFormItemGi
|
|
|
+ label="适用声部"
|
|
|
+ path="isAllSubject"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择适用声部',
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <NRadioGroup v-model:value={forms.isAllSubject}>
|
|
|
+ <NRadio value={false}>部分声部</NRadio>
|
|
|
+ <NRadio value={true}>全部声部</NRadio>
|
|
|
+ </NRadioGroup>
|
|
|
+ </NFormItemGi>
|
|
|
+ <NFormItemGi
|
|
|
+ label="速度"
|
|
|
+ path="playSpeed"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: false,
|
|
|
+ message: '请输入速度'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <NInputNumber
|
|
|
+ placeholder="请输入速度"
|
|
|
+ v-model:value={forms.playSpeed}
|
|
|
+ style="width:100%"
|
|
|
+ />
|
|
|
+ </NFormItemGi>
|
|
|
+ </NGrid>
|
|
|
+ <NGrid cols={2}>
|
|
|
+ <NFormItemGi
|
|
|
label="作者属性"
|
|
|
path="sourceType"
|
|
|
rule={[
|
|
@@ -1201,24 +1270,6 @@ export default defineComponent({
|
|
|
/>
|
|
|
</NFormItemGi>
|
|
|
</NGrid>
|
|
|
- <NGrid cols={2}>
|
|
|
- <NFormItemGi
|
|
|
- label="速度"
|
|
|
- path="playSpeed"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: false,
|
|
|
- message: '请输入速度'
|
|
|
- }
|
|
|
- ]}
|
|
|
- >
|
|
|
- <NInputNumber
|
|
|
- placeholder="请输入速度"
|
|
|
- v-model:value={forms.playSpeed}
|
|
|
- style="width:100%"
|
|
|
- />
|
|
|
- </NFormItemGi>
|
|
|
- </NGrid>
|
|
|
<NAlert showIcon={false} style={{marginBottom: '12px'}}>
|
|
|
曲目设置
|
|
|
</NAlert>
|
|
@@ -1293,28 +1344,11 @@ export default defineComponent({
|
|
|
forms.multiTracksSelection = []
|
|
|
state.partListNames = []
|
|
|
forms.musicSheetSoundList_YY = []
|
|
|
- forms.musicalInstrumentIdList = []
|
|
|
- forms.subjectIds = []
|
|
|
+ // forms.musicalInstrumentIdList = []
|
|
|
+ // forms.subjectIds = []
|
|
|
}}
|
|
|
/>
|
|
|
</NFormItemGi>
|
|
|
- </NGrid>
|
|
|
- <NGrid cols={2}>
|
|
|
- <NFormItemGi
|
|
|
- label="重复节拍时长"
|
|
|
- path="repeatedBeats"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: false,
|
|
|
- message: '请选择是否重复节拍时长'
|
|
|
- }
|
|
|
- ]}
|
|
|
- >
|
|
|
- <NRadioGroup v-model:value={forms.repeatedBeats}>
|
|
|
- <NRadio value={true}>是</NRadio>
|
|
|
- <NRadio value={false}>否</NRadio>
|
|
|
- </NRadioGroup>
|
|
|
- </NFormItemGi>
|
|
|
<NFormItemGi
|
|
|
label="评分标准"
|
|
|
path="evaluationStandard"
|
|
@@ -1332,58 +1366,6 @@ export default defineComponent({
|
|
|
</NFormItemGi>
|
|
|
</NGrid>
|
|
|
|
|
|
- <NGrid cols={2}>
|
|
|
- <NFormItemGi
|
|
|
- label="是否显示指法"
|
|
|
- path="isShowFingering"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请选择是否显示指法'
|
|
|
- }
|
|
|
- ]}
|
|
|
- >
|
|
|
- <NRadioGroup v-model:value={forms.isShowFingering}>
|
|
|
- <NRadio value={true}>是</NRadio>
|
|
|
- <NRadio value={false}>否</NRadio>
|
|
|
- </NRadioGroup>
|
|
|
- </NFormItemGi>
|
|
|
- </NGrid>
|
|
|
-
|
|
|
- <NGrid cols={2}>
|
|
|
- <NFormItemGi
|
|
|
- label="是否播放节拍器"
|
|
|
- path="isPlayBeat"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请选择是否播放节拍器'
|
|
|
- }
|
|
|
- ]}
|
|
|
- >
|
|
|
- <NRadioGroup v-model:value={forms.isPlayBeat}>
|
|
|
- <NRadio value={true}>是</NRadio>
|
|
|
- <NRadio value={false}>否</NRadio>
|
|
|
- </NRadioGroup>
|
|
|
- </NFormItemGi>
|
|
|
- {forms.isPlayBeat && (
|
|
|
- <NFormItemGi
|
|
|
- label="播放方式"
|
|
|
- path="isUseSystemBeat"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: '请选择播放方式'
|
|
|
- }
|
|
|
- ]}
|
|
|
- >
|
|
|
- <NRadioGroup v-model:value={forms.isUseSystemBeat}>
|
|
|
- <NRadio value={true}>系统节拍器</NRadio>
|
|
|
- <NRadio value={false}>MP3节拍器</NRadio>
|
|
|
- </NRadioGroup>
|
|
|
- </NFormItemGi>
|
|
|
- )}
|
|
|
- </NGrid>
|
|
|
{forms.musicSheetType == 'SINGLE' && (
|
|
|
<>
|
|
|
<NAlert showIcon={false} style={{marginBottom: '12px'}}>
|
|
@@ -1391,6 +1373,57 @@ export default defineComponent({
|
|
|
</NAlert>
|
|
|
<NGrid cols={2}>
|
|
|
<NFormItemGi
|
|
|
+ label="是否播放节拍器"
|
|
|
+ path="isPlaySingBeat"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择是否播放节拍器'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <NRadioGroup v-model:value={forms.isPlaySingBeat}>
|
|
|
+ <NRadio value={true}>是</NRadio>
|
|
|
+ <NRadio value={false}>否</NRadio>
|
|
|
+ </NRadioGroup>
|
|
|
+ </NFormItemGi>
|
|
|
+ {forms.isPlaySingBeat && (
|
|
|
+ <NFormItemGi
|
|
|
+ label="播放方式"
|
|
|
+ path="isUseSingSystemBeat"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择播放方式'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <NRadioGroup v-model:value={forms.isUseSingSystemBeat}>
|
|
|
+ <NRadio value={true}>系统节拍器</NRadio>
|
|
|
+ <NRadio value={false}>MP3节拍器</NRadio>
|
|
|
+ </NRadioGroup>
|
|
|
+ </NFormItemGi>
|
|
|
+ )}
|
|
|
+ </NGrid>
|
|
|
+ <NGrid cols={2}>
|
|
|
+ <NFormItemGi
|
|
|
+ label="重复节拍时长"
|
|
|
+ path="repeatedBeatsToSing"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: false,
|
|
|
+ message: '请选择是否重复节拍时长'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <NRadioGroup v-model:value={forms.repeatedBeatsToSing}>
|
|
|
+ <NRadio value={true}>是</NRadio>
|
|
|
+ <NRadio value={false}>否</NRadio>
|
|
|
+ </NRadioGroup>
|
|
|
+ </NFormItemGi>
|
|
|
+ </NGrid>
|
|
|
+ <NGrid cols={2}>
|
|
|
+ <NFormItemGi
|
|
|
label="上传范唱"
|
|
|
path="fSongFile"
|
|
|
rule={[
|
|
@@ -1474,51 +1507,119 @@ export default defineComponent({
|
|
|
</NAlert>
|
|
|
<NGrid cols={2}>
|
|
|
<NFormItemGi
|
|
|
- label="可用声部"
|
|
|
- path="subjectIds"
|
|
|
+ label="是否播放节拍器"
|
|
|
+ path="isPlayBeat"
|
|
|
rule={[
|
|
|
{
|
|
|
required: true,
|
|
|
- message: '请选择可用声部',
|
|
|
- trigger: 'change',
|
|
|
- type: 'array'
|
|
|
+ message: '请选择是否播放节拍器'
|
|
|
}
|
|
|
]}
|
|
|
>
|
|
|
- <NSelect
|
|
|
- v-model:value={forms.subjectIds}
|
|
|
- options={state.subjectList}
|
|
|
- multiple
|
|
|
- filterable
|
|
|
- clearable
|
|
|
- placeholder="请选择可用声部"
|
|
|
- maxTagCount={2}
|
|
|
- />
|
|
|
+ <NRadioGroup v-model:value={forms.isPlayBeat}>
|
|
|
+ <NRadio value={true}>是</NRadio>
|
|
|
+ <NRadio value={false}>否</NRadio>
|
|
|
+ </NRadioGroup>
|
|
|
</NFormItemGi>
|
|
|
+ {forms.isPlayBeat && (
|
|
|
+ <NFormItemGi
|
|
|
+ label="播放方式"
|
|
|
+ path="isUseSystemBeat"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择播放方式'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <NRadioGroup v-model:value={forms.isUseSystemBeat}>
|
|
|
+ <NRadio value={true}>系统节拍器</NRadio>
|
|
|
+ <NRadio value={false}>MP3节拍器</NRadio>
|
|
|
+ </NRadioGroup>
|
|
|
+ </NFormItemGi>
|
|
|
+ )}
|
|
|
+ </NGrid>
|
|
|
+ <NGrid cols={2}>
|
|
|
<NFormItemGi
|
|
|
- label="可用乐器"
|
|
|
- path="musicalInstrumentIdList"
|
|
|
+ label="重复节拍时长"
|
|
|
+ path="repeatedBeats"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: false,
|
|
|
+ message: '请选择是否重复节拍时长'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <NRadioGroup v-model:value={forms.repeatedBeats}>
|
|
|
+ <NRadio value={true}>是</NRadio>
|
|
|
+ <NRadio value={false}>否</NRadio>
|
|
|
+ </NRadioGroup>
|
|
|
+ </NFormItemGi>
|
|
|
+ <NFormItemGi
|
|
|
+ label="是否显示指法"
|
|
|
+ path="isShowFingering"
|
|
|
rule={[
|
|
|
{
|
|
|
required: true,
|
|
|
- message: '请选择可用乐器',
|
|
|
- trigger: 'change',
|
|
|
- type: 'array'
|
|
|
+ message: '请选择是否显示指法'
|
|
|
}
|
|
|
]}
|
|
|
>
|
|
|
- <NSelect
|
|
|
- placeholder="请选择可用乐器"
|
|
|
- options={state.instrumentList}
|
|
|
- v-model:value={forms.musicalInstrumentIdList}
|
|
|
- clearable
|
|
|
- multiple
|
|
|
- maxTagCount={2}
|
|
|
- onUpdateValue={async (value: any) => {
|
|
|
- }}
|
|
|
- />
|
|
|
+ <NRadioGroup v-model:value={forms.isShowFingering}>
|
|
|
+ <NRadio value={true}>是</NRadio>
|
|
|
+ <NRadio value={false}>否</NRadio>
|
|
|
+ </NRadioGroup>
|
|
|
</NFormItemGi>
|
|
|
</NGrid>
|
|
|
+ {!forms.isAllSubject && (
|
|
|
+ <NGrid cols={2}>
|
|
|
+ <NFormItemGi
|
|
|
+ label="可用声部"
|
|
|
+ path="subjectIds"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择可用声部',
|
|
|
+ trigger: 'change',
|
|
|
+ type: 'array'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <NSelect
|
|
|
+ v-model:value={forms.subjectIds}
|
|
|
+ options={state.subjectList}
|
|
|
+ multiple
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
+ placeholder="请选择可用声部"
|
|
|
+ maxTagCount={2}
|
|
|
+ />
|
|
|
+ </NFormItemGi>
|
|
|
+ <NFormItemGi
|
|
|
+ label="可用乐器"
|
|
|
+ path="musicalInstrumentIdList"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择可用乐器',
|
|
|
+ trigger: 'change',
|
|
|
+ type: 'array'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <NSelect
|
|
|
+ placeholder="请选择可用乐器"
|
|
|
+ options={state.instrumentList}
|
|
|
+ v-model:value={forms.musicalInstrumentIdList}
|
|
|
+ clearable
|
|
|
+ multiple
|
|
|
+ maxTagCount={2}
|
|
|
+ onUpdateValue={async (value: any) => {
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ </NFormItemGi>
|
|
|
+ </NGrid>
|
|
|
+ )}
|
|
|
<NGrid cols={2}>
|
|
|
{forms.playMode === 'MP3' && (
|
|
|
<NFormItemGi
|
|
@@ -1543,7 +1644,7 @@ export default defineComponent({
|
|
|
max={1}
|
|
|
desc={'上传伴奏文件'}
|
|
|
onUpload:success={(file) => {
|
|
|
- state.musicSheetAccompanimentUrls = [state.musicSheetAccompanimentUrls,file.url].filter(Boolean).join(',')
|
|
|
+ state.musicSheetAccompanimentUrls = [state.musicSheetAccompanimentUrls, file.url].filter(Boolean).join(',')
|
|
|
state.musicSheetAccompanimentUrlList = state.musicSheetAccompanimentUrls?.split(',').filter(Boolean)
|
|
|
|
|
|
// 清除伴奏
|
|
@@ -1568,6 +1669,34 @@ export default defineComponent({
|
|
|
/>
|
|
|
</NFormItemGi>
|
|
|
)}
|
|
|
+ {forms.isAllSubject && (
|
|
|
+ <NFormItemGi
|
|
|
+ label="上传原音"
|
|
|
+ path="musicSheetSoundList_all_subject"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: false,
|
|
|
+ message: '请选择上传原音',
|
|
|
+ trigger: ['change', 'input']
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <UploadFile
|
|
|
+ desc={'上传原音'}
|
|
|
+ disabled={state.previewMode}
|
|
|
+ size={10}
|
|
|
+ max={1}
|
|
|
+ v-model:fileList={forms.musicSheetSoundList_all_subject}
|
|
|
+ tips="仅支持上传.mp3格式文件"
|
|
|
+ listType="image"
|
|
|
+ accept=".mp3"
|
|
|
+ bucketName="cloud-coach"
|
|
|
+ text="点击上传原音"
|
|
|
+ onRemove={() => {
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ </NFormItemGi>
|
|
|
+ )}
|
|
|
</NGrid>
|
|
|
|
|
|
{/*渐变速*/}
|
|
@@ -1625,63 +1754,65 @@ export default defineComponent({
|
|
|
</NFormItem>
|
|
|
</>
|
|
|
)}
|
|
|
- <NGrid cols={1}>
|
|
|
- <NFormItemGi
|
|
|
- label={`${forms.musicSheetType === 'SINGLE' ? '页面渲染声轨' : '用户可切换声轨'}`}
|
|
|
- path="multiTracksSelection"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: true,
|
|
|
- message: `请选择${
|
|
|
- forms.musicSheetType === 'SINGLE' ? '页面渲染声轨' : '用户可切换声轨'
|
|
|
- }`,
|
|
|
- trigger: 'change',
|
|
|
- type: 'array'
|
|
|
- }
|
|
|
- ]}
|
|
|
- >
|
|
|
- <NGrid style="padding-top: 4px;">
|
|
|
- <NGi span={24}>
|
|
|
- <NRadioGroup
|
|
|
- v-model:value={state.multiTracks}
|
|
|
- onUpdateValue={(value) => {
|
|
|
- checkMultiTracks(value)
|
|
|
- }}
|
|
|
- >
|
|
|
- <NRadio value={'all'}>全选</NRadio>
|
|
|
- <NRadio value={'allUncheck'}>重置</NRadio>
|
|
|
- <NRadio value={'invert'}>反选</NRadio>
|
|
|
- </NRadioGroup>
|
|
|
- </NGi>
|
|
|
- {state.partListNames && state.partListNames.length > 0 && (
|
|
|
- <NGi span={24} style={'margin-top:5px'}>
|
|
|
- <NFormItemGi
|
|
|
- label=""
|
|
|
- path="multiTracksSelection"
|
|
|
- rule={[
|
|
|
- {
|
|
|
- required: false
|
|
|
- }
|
|
|
- ]}
|
|
|
+ {!forms.isAllSubject && (
|
|
|
+ <NGrid cols={1}>
|
|
|
+ <NFormItemGi
|
|
|
+ label={`${forms.musicSheetType === 'SINGLE' ? '页面渲染声轨' : '用户可切换声轨'}`}
|
|
|
+ path="multiTracksSelection"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: `请选择${
|
|
|
+ forms.musicSheetType === 'SINGLE' ? '页面渲染声轨' : '用户可切换声轨'
|
|
|
+ }`,
|
|
|
+ trigger: 'change',
|
|
|
+ type: 'array'
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <NGrid style="padding-top: 4px;">
|
|
|
+ <NGi span={24}>
|
|
|
+ <NRadioGroup
|
|
|
+ v-model:value={state.multiTracks}
|
|
|
+ onUpdateValue={(value) => {
|
|
|
+ checkMultiTracks(value)
|
|
|
+ }}
|
|
|
>
|
|
|
- <NCheckboxGroup v-model:value={forms.multiTracksSelection}>
|
|
|
- <NGrid yGap={2} cols={4}>
|
|
|
- {state.partListNames.map((item: any) => (
|
|
|
- <NGi>
|
|
|
- <NCheckbox value={item.value} label={item.label}/>
|
|
|
- </NGi>
|
|
|
- ))}
|
|
|
- </NGrid>
|
|
|
- </NCheckboxGroup>
|
|
|
- </NFormItemGi>
|
|
|
+ <NRadio value={'all'}>全选</NRadio>
|
|
|
+ <NRadio value={'allUncheck'}>重置</NRadio>
|
|
|
+ <NRadio value={'invert'}>反选</NRadio>
|
|
|
+ </NRadioGroup>
|
|
|
</NGi>
|
|
|
- )}
|
|
|
+ {state.partListNames && state.partListNames.length > 0 && (
|
|
|
+ <NGi span={24} style={'margin-top:5px'}>
|
|
|
+ <NFormItemGi
|
|
|
+ label=""
|
|
|
+ path="multiTracksSelection"
|
|
|
+ rule={[
|
|
|
+ {
|
|
|
+ required: false
|
|
|
+ }
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <NCheckboxGroup v-model:value={forms.multiTracksSelection}>
|
|
|
+ <NGrid yGap={2} cols={4}>
|
|
|
+ {state.partListNames.map((item: any) => (
|
|
|
+ <NGi>
|
|
|
+ <NCheckbox value={item.value} label={item.label}/>
|
|
|
+ </NGi>
|
|
|
+ ))}
|
|
|
+ </NGrid>
|
|
|
+ </NCheckboxGroup>
|
|
|
+ </NFormItemGi>
|
|
|
+ </NGi>
|
|
|
+ )}
|
|
|
+ </NGrid>
|
|
|
+ </NFormItemGi>
|
|
|
</NGrid>
|
|
|
- </NFormItemGi>
|
|
|
- </NGrid>
|
|
|
+ )}
|
|
|
|
|
|
- {/*单曲*/}
|
|
|
- {forms.musicSheetType == 'SINGLE' && forms.playMode === 'MP3' && forms.musicSheetSoundList_YZ.map((item: any, index: any) => {
|
|
|
+ {/*独奏*/}
|
|
|
+ {forms.musicSheetType == 'SINGLE' && forms.playMode === 'MP3' && !forms.isAllSubject && forms.musicSheetSoundList_YZ.map((item: any, index: any) => {
|
|
|
return (
|
|
|
<>
|
|
|
<NGrid cols={1}>
|