Skip to content

Commit b365810

Browse files
committed
feat: 试听编辑器增强波形交互
新增滚轮缩放、时间轴、悬停竖线三个 wavesurfer 插件,支持 Ctrl+点击设起点 / Shift+点击设终点,弹窗加宽并禁用 ESC 关闭
1 parent fe71a22 commit b365810

4 files changed

Lines changed: 35 additions & 5 deletions

File tree

ChuChartManager/Front/src/components/AudioPreviewEditor.tsx

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
import { computed, defineComponent, ref, watch } from 'vue'
22
import { Button, Modal, NumberInput, addToast } from '@munet/ui'
33
import { useI18n } from 'vue-i18n'
4+
import { useMagicKeys } from '@vueuse/core'
45
import WaveSurfer from 'wavesurfer.js'
56
import RegionsPlugin, { type Region } from 'wavesurfer.js/dist/plugins/regions.esm.js'
7+
import ZoomPlugin from 'wavesurfer.js/dist/plugins/zoom.esm.js'
8+
import HoverPlugin from 'wavesurfer.js/dist/plugins/hover.esm.js'
9+
import TimelinePlugin from 'wavesurfer.js/dist/plugins/timeline.esm.js'
610
import { getAudioPreview, setAudioPreview, getAudioUrl } from '@/api'
711
import { globalCapture } from '@/utils/globalCapture'
812

@@ -26,6 +30,7 @@ export default defineComponent({
2630
let ws: WaveSurfer | undefined
2731
let region: Region | undefined
2832
let updatingFromInput = false
33+
const { ctrl, shift } = useMagicKeys()
2934

3035
const playIcon = computed(() => isPlaying.value ? 'i-mdi-pause' : 'i-mdi-play')
3136

@@ -83,7 +88,12 @@ export default defineComponent({
8388
waveColor: 'rgb(107,203,152)',
8489
progressColor: 'rgb(33,194,118)',
8590
url: getAudioUrl(props.id, props.assetDir),
86-
plugins: [regions],
91+
plugins: [
92+
regions,
93+
ZoomPlugin.create({ scale: 0.05 }),
94+
HoverPlugin.create({ lineColor: 'rgba(89,89,89,0.8)' }),
95+
TimelinePlugin.create(),
96+
],
8797
})
8898

8999
ws.on('decode', dur => {
@@ -101,6 +111,26 @@ export default defineComponent({
101111
dataLoad.value = false
102112
})
103113

114+
ws.on('click', progress => {
115+
if (!region || !ws) return
116+
const time = ws.getDuration() * progress
117+
if (ctrl.value) {
118+
if (time >= region.end) {
119+
addToast({ message: t('music.previewStartGtEnd'), type: 'error' })
120+
return
121+
}
122+
region.setOptions({ start: time })
123+
syncFromRegion()
124+
} else if (shift.value) {
125+
if (time <= region.start) {
126+
addToast({ message: t('music.previewEndLtStart'), type: 'error' })
127+
return
128+
}
129+
region.setOptions({ end: time, start: region.start })
130+
syncFromRegion()
131+
}
132+
})
133+
104134
regions.on('region-out', () => {
105135
if (isPlaySection.value) region?.play()
106136
})
@@ -134,7 +164,7 @@ export default defineComponent({
134164
return () => (
135165
<>
136166
<Button class="ws-nowrap shrink-0" onClick={() => show.value = true}>{t('music.editPreview')}</Button>
137-
<Modal width="min(90vw,55em)" title={t('music.editPreview')} v-model:show={show.value}>
167+
<Modal width="min(60vw,80em)" title={t('music.editPreview')} v-model:show={show.value} esc={false}>
138168
{{
139169
default: () => (
140170
<div class="relative flex flex-col gap-3">

ChuChartManager/Front/src/locales/en.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ music:
207207
clickToReplaceJacket: Click to replace jacket
208208
replaceAudio: Replace Audio
209209
editPreview: Edit Preview
210-
previewHint: Drag the region to adjust the preview range, or set it precisely below
210+
previewHint: Drag the region to adjust; Ctrl+click sets start / Shift+click sets end; set precisely below; scroll to zoom
211211
previewStart: Start (s)
212212
previewEnd: End (s)
213213
previewPlayRegion: Play Region

ChuChartManager/Front/src/locales/ja.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ music:
207207
clickToReplaceJacket: クリックでジャケットを置換
208208
replaceAudio: 音声を置換
209209
editPreview: 試聴を編集
210-
previewHint: 選択範囲をドラッグして試聴区間を調整、または下の入力欄で精密に設定
210+
previewHint: 範囲をドラッグして調整、Ctrl+クリックで開始 / Shift+クリックで終了、下の入力欄で精密設定、ホイールでズーム
211211
previewStart: 開始(秒)
212212
previewEnd: 終了(秒)
213213
previewPlayRegion: 選択範囲を試聴

ChuChartManager/Front/src/locales/zh.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ music:
207207
clickToReplaceJacket: 点击替换封面
208208
replaceAudio: 替换音频
209209
editPreview: 编辑试听
210-
previewHint: 拖动选区调整试听区间,或用下方输入框精确设置
210+
previewHint: 拖动选区调整试听区间,Ctrl+点击设起点 / Shift+点击设终点,或用下方输入框精确设置;滚轮缩放波形
211211
previewStart: 起点(秒)
212212
previewEnd: 终点(秒)
213213
previewPlayRegion: 试听选区

0 commit comments

Comments
 (0)