播放速率设置面板新增是否音调补偿设置

pull/1397/head
lyswhut 2023-05-31 20:26:19 +08:00
parent 0adb4f5ae5
commit 677c3f16e4
9 changed files with 43 additions and 3 deletions

View File

@ -1,6 +1,7 @@
### 新增
- 新增音效设置实验性功能支持10段均衡器设置、内置的一些环境混响音效、3D立体环绕音效
- 播放速率设置面板新增是否音调补偿设置,在调整播放速率后,可以选择是否启用音调补偿,默认启用
### 修复

View File

@ -29,6 +29,7 @@ const defaultSetting: LX.AppSetting = {
'player.volume': 1,
'player.isMute': false,
'player.playbackRate': 1,
'player.preservesPitch': true,
'player.mediaDeviceId': 'default',
'player.isMediaDeviceRemovedStopPlay': false,
'player.isShowLyricTranslation': false,

View File

@ -113,6 +113,11 @@ declare global {
*/
'player.playbackRate': number
/**
*
*/
'player.preservesPitch': boolean
/**
* id
*/

View File

@ -223,6 +223,7 @@
"player__play_toggle_mode_off": "Disable",
"player__play_toggle_mode_random": "List Random",
"player__play_toggle_mode_single_loop": "Single Loop",
"player__playback_preserves_pitch": "Pitch compensation",
"player__playback_rate": "Current playback rate:",
"player__playback_rate_reset_btn": "Reset",
"player__playing": "Now playing...",

View File

@ -223,6 +223,7 @@
"player__play_toggle_mode_off": "禁用",
"player__play_toggle_mode_random": "列表随机",
"player__play_toggle_mode_single_loop": "单曲循环",
"player__playback_preserves_pitch": "音调补偿",
"player__playback_rate": "当前播放速率:",
"player__playback_rate_reset_btn": "重置",
"player__playing": "播放中...",

View File

@ -223,6 +223,7 @@
"player__play_toggle_mode_off": "禁用",
"player__play_toggle_mode_random": "列表隨機",
"player__play_toggle_mode_single_loop": "單曲循環",
"player__playback_preserves_pitch": "音調補償",
"player__playback_rate": "當前播放速率:",
"player__playback_rate_reset_btn": "重置",
"player__playing": "播放中...",

View File

@ -9,9 +9,17 @@
<div :class="$style.setting">
<div :class="$style.info">
<span>{{ playbackRate.toFixed(2) }}x</span>
<div :class="$style.control">
<base-checkbox
id="player__playback_preserves_pitch"
:model-value="appSetting['player.preservesPitch']"
:label="$t('player__playback_preserves_pitch')"
@update:model-value="updatePreservesPitch"
/>
<base-btn min @click="handleUpdatePlaybackRate(100)">{{ $t('player__playback_rate_reset_btn') }}</base-btn>
</div>
<base-slider-bar :class="$style.slider" :value="playbackRate * 100" :min="60" :max="200" @change="handleUpdatePlaybackRate" />
</div>
<base-slider-bar :class="$style.slider" :value="playbackRate * 100" :min="50" :max="200" @change="handleUpdatePlaybackRate" />
</div>
</template>
</material-popup-btn>
@ -20,11 +28,17 @@
<script setup>
// import { computed } from '@common/utils/vueTools'
import { playbackRate } from '@renderer/store/player/playbackRate'
import { appSetting, updateSetting } from '@renderer/store/setting'
const handleUpdatePlaybackRate = (val) => {
window.app_event.setPlaybackRate(Math.round(val) / 100)
}
const updatePreservesPitch = (enabled) => {
updateSetting({ 'player.preservesPitch': enabled })
}
// const icon = computed(() => {
// return playbackRate.value == 0
// ? '#icon-volume-off-outline'
@ -100,6 +114,11 @@ const handleUpdatePlaybackRate = (val) => {
line-height: 1;
}
}
.control {
align-items: center;
display: flex;
gap: 10px;
}
.slider {
width: 100%;

View File

@ -1,5 +1,5 @@
import { onBeforeUnmount, watch } from '@common/utils/vueTools'
import { setPlaybackRate as setPlayerPlaybackRate } from '@renderer/plugins/player'
import { setPlaybackRate as setPlayerPlaybackRate, setPreservesPitch } from '@renderer/plugins/player'
import { debounce } from '@common/utils'
// import { HOTKEY_PLAYER } from '@common/hotKey'
@ -11,6 +11,7 @@ export default () => {
setPlaybackRate(appSetting['player.playbackRate'])
setPlayerPlaybackRate(appSetting['player.playbackRate'])
setPreservesPitch(appSetting['player.preservesPitch'])
const handleSetPlaybackRate = (num: number) => {
@ -41,6 +42,11 @@ export default () => {
})
watch(() => appSetting['player.preservesPitch'], preservesPitch => {
setPreservesPitch(preservesPitch)
})
// window.key_event.on(HOTKEY_PLAYER.volume_up.action, hotkeyVolumeUp)
// window.key_event.on(HOTKEY_PLAYER.volume_down.action, hotkeyVolumeDown)
window.app_event.on('setPlaybackRate', handleSetPlaybackRate)

View File

@ -254,6 +254,11 @@ export const setPlaybackRate = (rate: number) => {
audio.playbackRate = rate
}
export const setPreservesPitch = (preservesPitch: boolean) => {
if (!audio) return
audio.preservesPitch = preservesPitch
}
export const getMute = (): boolean => {
return audio?.muted ?? false
}