|
@@ -5,7 +5,7 @@ import { metronomeData } from "./helpers/metronome";
|
|
import { GradualNote, GradualTimes, GradualVersion } from "./type";
|
|
import { GradualNote, GradualTimes, GradualVersion } from "./type";
|
|
import { handleEndEvaluat, handleStartEvaluat } from "./view/evaluating";
|
|
import { handleEndEvaluat, handleStartEvaluat } from "./view/evaluating";
|
|
import { IFingering, mappingVoicePart, subjectFingering, matchVoicePart } from "/src/view/fingering/fingering-config";
|
|
import { IFingering, mappingVoicePart, subjectFingering, matchVoicePart } from "/src/view/fingering/fingering-config";
|
|
-import { handleStartTick } from "./view/tick";
|
|
|
|
|
|
+import { handleStartTick, closeTick } from "./view/tick";
|
|
import { audioListStart, getAudioCurrentTime, getAudioDuration, setAudioCurrentTime, setAudioPlaybackRate, audioData } from "./view/audio-list";
|
|
import { audioListStart, getAudioCurrentTime, getAudioDuration, setAudioCurrentTime, setAudioPlaybackRate, audioData } from "./view/audio-list";
|
|
import { toggleFollow } from "./view/follow-practice";
|
|
import { toggleFollow } from "./view/follow-practice";
|
|
import { browser, setStorageSpeed, setGlobalData } from "./utils";
|
|
import { browser, setStorageSpeed, setGlobalData } from "./utils";
|
|
@@ -288,7 +288,9 @@ const state = reactive({
|
|
/** 扩展样式字段 */
|
|
/** 扩展样式字段 */
|
|
extStyleConfigJson: {} as any,
|
|
extStyleConfigJson: {} as any,
|
|
/** 是否开启节拍器(mp3节拍器) */
|
|
/** 是否开启节拍器(mp3节拍器) */
|
|
- isOpenMetronome: false,
|
|
|
|
|
|
+ isOpenMetronome: false,
|
|
|
|
+ /** 演唱模式是否开启节拍器(mp3节拍器) */
|
|
|
|
+ isSingOpenMetronome: false,
|
|
/** 是否显示指法 */
|
|
/** 是否显示指法 */
|
|
isShowFingering: false,
|
|
isShowFingering: false,
|
|
/** 原音 */
|
|
/** 原音 */
|
|
@@ -329,8 +331,10 @@ const state = reactive({
|
|
track: "",
|
|
track: "",
|
|
/** 当前显示声部索引 */
|
|
/** 当前显示声部索引 */
|
|
partIndex: 0,
|
|
partIndex: 0,
|
|
- /** 是否需要节拍器 */
|
|
|
|
- needTick: false,
|
|
|
|
|
|
+ /** 演奏是否需要节拍器 */
|
|
|
|
+ needTick: false,
|
|
|
|
+ /** 演唱模式是否需要节拍器 */
|
|
|
|
+ needSingTick: false,
|
|
/** 曲谱实例 */
|
|
/** 曲谱实例 */
|
|
osmd: null as unknown as OpenSheetMusicDisplay,
|
|
osmd: null as unknown as OpenSheetMusicDisplay,
|
|
/**是否是特殊乐谱类型, 主要针对管乐迷 */
|
|
/**是否是特殊乐谱类型, 主要针对管乐迷 */
|
|
@@ -704,14 +708,23 @@ export const togglePlay = async (playState?: "play" | "paused", sourceType?: str
|
|
if (state.playState === "play" && state.sectionStatus && state.section.length == 2 && state.playProgress === 0) {
|
|
if (state.playState === "play" && state.sectionStatus && state.section.length == 2 && state.playProgress === 0) {
|
|
resetPlaybackToStart();
|
|
resetPlaybackToStart();
|
|
}
|
|
}
|
|
- // 设置为开始播放时, 如果需要节拍,先播放节拍器
|
|
|
|
- if (state.playState === "play" && state.needTick) {
|
|
|
|
- const tickend = await handleStartTick();
|
|
|
|
- // console.log("🚀 ~ tickend:", tickend)
|
|
|
|
- // 节拍器返回false, 取消播放
|
|
|
|
- if (!tickend) {
|
|
|
|
- state.playState = "paused";
|
|
|
|
- return false;
|
|
|
|
|
|
+ // 当在节拍器播放期间暂停的话 就暂停节拍器
|
|
|
|
+ if(state.playState === "paused") {
|
|
|
|
+ closeTick()
|
|
|
|
+ }
|
|
|
|
+ // 设置为开始播放时, 如果需要节拍,先播放节拍器 只有在当前播放时间不为0的时候开启节拍器
|
|
|
|
+ if (state.playState === "play" && getAudioCurrentTime()===0 && (state.playType==="play"&&state.needTick)||(state.playType==="sing"&&state.needSingTick)) {
|
|
|
|
+ // 如果是系统节拍器 等系统节拍器播完了再播,如果是mp3节拍器 直接播
|
|
|
|
+ if((state.playType==="play" && !state.isOpenMetronome)||(state.playType==="sing" && !state.isSingOpenMetronome)){
|
|
|
|
+ const tickend = await handleStartTick();
|
|
|
|
+ // console.log("🚀 ~ tickend:", tickend)
|
|
|
|
+ // 节拍器返回false, 取消播放
|
|
|
|
+ if (!tickend) {
|
|
|
|
+ state.playState = "paused";
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ }else{
|
|
|
|
+ handleStartTick()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// 如果选段没有结束, 直接开始播放,清空选段状态
|
|
// 如果选段没有结束, 直接开始播放,清空选段状态
|
|
@@ -1203,7 +1216,9 @@ function xmlToTracks(xmlString: string) {
|
|
// 设置音源
|
|
// 设置音源
|
|
function initMusicSource (data: any, track?:string) {
|
|
function initMusicSource (data: any, track?:string) {
|
|
const { instrumentId } = storeData.user
|
|
const { instrumentId } = storeData.user
|
|
- const { musicSheetType, isAllSubject, musicSheetSoundList, musicSheetAccompanimentList } = data
|
|
|
|
|
|
+ let { musicSheetType, isAllSubject, musicSheetSoundList, musicSheetAccompanimentList } = data
|
|
|
|
+ musicSheetSoundList || (musicSheetSoundList = [])
|
|
|
|
+ musicSheetAccompanimentList || (musicSheetAccompanimentList = [])
|
|
let musicObj,accompanyObj,fanSongObj,banSongObj
|
|
let musicObj,accompanyObj,fanSongObj,banSongObj
|
|
// 独奏
|
|
// 独奏
|
|
if(musicSheetType === "SINGLE") {
|
|
if(musicSheetType === "SINGLE") {
|
|
@@ -1279,10 +1294,14 @@ const setState = (data: any, index: number) => {
|
|
state.gradualTimes = state.extConfigJson.gradualTimes;
|
|
state.gradualTimes = state.extConfigJson.gradualTimes;
|
|
state.repeatedBeats = state.extConfigJson.repeatedBeats || 0;
|
|
state.repeatedBeats = state.extConfigJson.repeatedBeats || 0;
|
|
state.isEvxml = state.extConfigJson.isEvxml == 1 ? true : false;
|
|
state.isEvxml = state.extConfigJson.isEvxml == 1 ? true : false;
|
|
- // 曲子包含节拍器,就不开启节拍器
|
|
|
|
- state.needTick = data.isUseSystemBeat && data.isPlayBeat ? true : false;
|
|
|
|
|
|
+ // 是否开启节拍器
|
|
|
|
+ state.needTick = !!data.isPlayBeat
|
|
|
|
+ state.needSingTick = !!data.isPlaySingBeat
|
|
// state.isOpenMetronome = data.isUseSystemBeat ? false : true;
|
|
// state.isOpenMetronome = data.isUseSystemBeat ? false : true;
|
|
|
|
+ // 演奏模式是否播mp3节拍器
|
|
state.isOpenMetronome = data.isPlayBeat && !data.isUseSystemBeat ? true : false
|
|
state.isOpenMetronome = data.isPlayBeat && !data.isUseSystemBeat ? true : false
|
|
|
|
+ // 演唱模式是否播mp3节拍器
|
|
|
|
+ state.isSingOpenMetronome = data.isPlaySingBeat && !data.isUseSingSystemBeat ? true : false
|
|
state.isShowFingering = data.isShowFingering ? true : false;
|
|
state.isShowFingering = data.isShowFingering ? true : false;
|
|
// 设置曲谱的播放模式, APP播放(midi音频是app播放) | h5播放
|
|
// 设置曲谱的播放模式, APP播放(midi音频是app播放) | h5播放
|
|
state.isAppPlay = data.playMode === 'MIDI';
|
|
state.isAppPlay = data.playMode === 'MIDI';
|