|
@@ -140,6 +140,8 @@ const state = reactive({
|
|
|
} as {[key: string]: () => void},
|
|
|
/** 阶段评测,延迟检测是否检测过 */
|
|
|
delayCheckFirst: false,
|
|
|
+ /** xml的速度和后台设置的速度,计算出的基础音频播放倍率 */
|
|
|
+ originAudioPlayRate: 1,
|
|
|
/** 开始播放时,记录的mp3播放倍率,用户当前设置的速度/当前小节的速度 */
|
|
|
basePlayRate: 1,
|
|
|
/** 播放中,更加当前小节速度动态计算的展示速度 */
|
|
@@ -335,10 +337,12 @@ export const changeSpeed = (speed: number, isSave: boolean = true) => {
|
|
|
state.speed = speed
|
|
|
state.playIngSpeed = speed
|
|
|
// 当前的音符
|
|
|
- const currentItem: any = (detailState.sectionStatus && detailState.section.length === 2) ? detailState.section[0] : detailState.times[state.activeIndex];
|
|
|
+ const currentItem: any = (detailState.sectionStatus && detailState.section.length === 2) ? detailState.befireSection || detailState.section[0] : detailState.times[state.activeIndex];
|
|
|
state.basePlayRate = currentItem?.measureSpeed ? state.speed / currentItem.measureSpeed : state.speed / detailState.baseSpeed;
|
|
|
+ const actualRate = state.originAudioPlayRate * state.basePlayRate;
|
|
|
if (!detailState.activeDetail) return
|
|
|
- state.audiosInstance?.setSpeed(state.basePlayRate)
|
|
|
+ state.audiosInstance?.setSpeed(actualRate)
|
|
|
+ console.log('速度设置',speed,isSave,'小节计算的倍率',state.basePlayRate,'实际播放倍率',actualRate)
|
|
|
promisefiyPostMessage({
|
|
|
api: 'cloudChangeSpeed',
|
|
|
content: {
|
|
@@ -364,7 +368,8 @@ export const resetCursor = () => {
|
|
|
} else {
|
|
|
state.osmd.cursor.reset()
|
|
|
}
|
|
|
- state.osmd.cursor.hide()
|
|
|
+ // 隐藏音符指针
|
|
|
+ // state.osmd.cursor.hide()
|
|
|
detailState.fixedKey = 0
|
|
|
}
|
|
|
}
|
|
@@ -400,8 +405,8 @@ export const refreshIndexBase = (index: number) => {
|
|
|
|
|
|
// 练习模式下,开始播放时,记录mp3的播放倍率
|
|
|
export const initSetPlayRate = () => {
|
|
|
- const item: any = (detailState.sectionStatus && detailState.section.length === 2) ? detailState.section[0] : detailState.times[state.activeIndex];
|
|
|
- if (item && modelType.value === "practice" && item.measureSpeed) {
|
|
|
+ const item: any = (detailState.sectionStatus && detailState.section.length === 2) ? detailState.befireSection || detailState.section[0] : detailState.times[state.activeIndex];
|
|
|
+ if (item && item.measureSpeed) {
|
|
|
const ratio = state.speed / item.measureSpeed
|
|
|
// state.audiosInstance?.setSpeed(ratio)
|
|
|
state.basePlayRate = ratio || 1;
|
|
@@ -418,6 +423,7 @@ const dynamicShowPlaySpeed = (index: number) => {
|
|
|
// }
|
|
|
if (item && item.measureSpeed ) {
|
|
|
state.playIngSpeed = Math.floor(state.basePlayRate * item.measureSpeed)
|
|
|
+ state.speed = state.playIngSpeed
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -539,6 +545,8 @@ export const refreshPlayer = async (ctime?: number) => {
|
|
|
setTimeout(() => {
|
|
|
// 开启了循环播放
|
|
|
if (detailState.section.length && SettingState.sett.loop){
|
|
|
+ state.activeIndex = detailState.befireSection ? detailState.befireSection.i : detailState.section[0].i
|
|
|
+ dynamicShowPlaySpeed(state.activeIndex)
|
|
|
setPlayState()
|
|
|
}
|
|
|
}, 1000)
|
|
@@ -674,7 +682,7 @@ const setDelayTime = async (time: number) => {
|
|
|
*/
|
|
|
export const pause = async () => {
|
|
|
if (detailState.sectionStatus) {
|
|
|
- state.osmd.cursor.hide()
|
|
|
+ // state.osmd.cursor.hide()
|
|
|
}
|
|
|
if (detailState.activeDetail.isAppPlay) {
|
|
|
await syncPlayState()
|
|
@@ -704,6 +712,12 @@ export const ended = debounce(async (evt: Event, flag?: string) => {
|
|
|
if (!state.evaluatingStatus) {
|
|
|
refreshPlayer(0)
|
|
|
if (SettingState.sett.loop || (flag && flag === 'isRePlay')) {
|
|
|
+ if (detailState.section.length === 2) {
|
|
|
+ state.activeIndex = detailState.befireSection ? detailState.befireSection.i : detailState.section[0].i
|
|
|
+ } else {
|
|
|
+ state.activeIndex = 0
|
|
|
+ }
|
|
|
+ dynamicShowPlaySpeed(state.activeIndex)
|
|
|
await setPlayState()
|
|
|
}
|
|
|
}
|
|
@@ -790,19 +804,21 @@ export const getFirsrNoteByMeasureListIndex = (index: number, tie = true) => {
|
|
|
return null
|
|
|
}
|
|
|
|
|
|
+// 设置当前的播放时间,和光标的位置
|
|
|
export const setSectionModeCurrentTime = () => {
|
|
|
- if (detailState.needTick) {
|
|
|
- setCurrentTime(detailState.section[0].sourceStartTime || detailState.section[0].time)
|
|
|
- } else {
|
|
|
- const measureListIndex = detailState.section[0].noteElement?.sourceMeasure?.measureListIndex
|
|
|
- if (measureListIndex > 0) {
|
|
|
- setCurrentTime(getFirsrNoteByMeasureListIndex(measureListIndex - 1).time)
|
|
|
- // 如果没有节拍器,默认提前一个小节
|
|
|
- // setCurrentTime(getFirsrNoteByMeasureListIndex(measureListIndex).time)
|
|
|
- detailState.sectionFlash = true
|
|
|
- } else {
|
|
|
- setCurrentTime(0)
|
|
|
+ console.log(detailState.needTick, 'setSectionModeCurrentTime')
|
|
|
+ if (detailState.section.length === 2) {
|
|
|
+ // 预备小节的小节数
|
|
|
+ const preMeasureNum = detailState.befireSection?.measureNumberPrinted;
|
|
|
+ let preNoteNum = detailState.section[0].i - 1;
|
|
|
+ while (preMeasureNum === detailState.times[preNoteNum]?.measureNumberPrinted && preNoteNum >= 1 && preMeasureNum === detailState.times[preNoteNum-1].measureNumberPrinted) {
|
|
|
+ preNoteNum -= 1;
|
|
|
}
|
|
|
+ const preTime = detailState.befireSection ? detailState.times[preNoteNum].time : detailState.section[0].time
|
|
|
+ detailState.sectionFlash = true
|
|
|
+ setCurrentTime(preTime)
|
|
|
+ } else {
|
|
|
+ setCurrentTime(0)
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -987,6 +1003,7 @@ export const setPlayState = async () => {
|
|
|
await toggleState()
|
|
|
return
|
|
|
}
|
|
|
+ initSetPlayRate();
|
|
|
setPlayerView()
|
|
|
setTick(setTickStop)
|
|
|
}
|