Skip to content

Commit 679089e

Browse files
committed
fix: 修复音量调整不同步的问题
fixed(#331): 软件存在两套音量调整逻辑,快捷键调整和音量条调整音量不一致
1 parent f2eba9a commit 679089e

File tree

3 files changed

+50
-22
lines changed

3 files changed

+50
-22
lines changed

src/renderer/components/player/PlayBar.vue

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@
123123
<template #trigger>
124124
<i
125125
class="iconfont ri-netease-cloud-music-line"
126-
:class="{ 'text-green-500': isLyricWindowOpen, 'disabled-icon': !(playMusic?.id) }"
126+
:class="{ 'text-green-500': isLyricWindowOpen, 'disabled-icon': !playMusic?.id }"
127127
@click="playMusic?.id && openLyricWindow()"
128128
></i>
129129
</template>
@@ -245,27 +245,22 @@ const formatTooltip = (value: number) => {
245245
return `${secondToMinute(value)} / ${secondToMinute(allTime.value)}`;
246246
};
247247
248-
// 音量条
249-
const audioVolume = ref(
250-
localStorage.getItem('volume') ? parseFloat(localStorage.getItem('volume') as string) : 1
251-
);
248+
// 音量条 - 使用 playerStore 的统一音量管理
252249
const getVolumeIcon = computed(() => {
253250
// 0 静音 ri-volume-mute-line 0.5 ri-volume-down-line 1 ri-volume-up-line
254-
if (audioVolume.value === 0) {
251+
if (playerStore.volume === 0) {
255252
return 'ri-volume-mute-line';
256253
}
257-
if (audioVolume.value <= 0.5) {
254+
if (playerStore.volume <= 0.5) {
258255
return 'ri-volume-down-line';
259256
}
260257
return 'ri-volume-up-line';
261258
});
262259
263260
const volumeSlider = computed({
264-
get: () => audioVolume.value * 100,
261+
get: () => playerStore.volume * 100,
265262
set: (value) => {
266-
localStorage.setItem('volume', (value / 100).toString());
267-
audioService.setVolume(value / 100);
268-
audioVolume.value = value / 100;
263+
playerStore.setVolume(value / 100);
269264
}
270265
});
271266

src/renderer/store/modules/player.ts

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,9 @@ export const usePlayerStore = defineStore('player', () => {
411411
// 播放速度状态
412412
const playbackRate = ref(parseFloat(getLocalStorageItem('playbackRate', '1.0')));
413413

414+
// 音量状态管理
415+
const volume = ref(parseFloat(getLocalStorageItem('volume', '1')));
416+
414417
// 清空播放列表
415418
const clearPlayAll = async () => {
416419
audioService.pause();
@@ -1439,6 +1442,35 @@ export const usePlayerStore = defineStore('player', () => {
14391442
}
14401443
};
14411444

1445+
// 音量管理方法
1446+
const setVolume = (newVolume: number) => {
1447+
// 确保音量值在0-1范围内
1448+
const normalizedVolume = Math.max(0, Math.min(1, newVolume));
1449+
volume.value = normalizedVolume;
1450+
1451+
// 保存到localStorage
1452+
localStorage.setItem('volume', normalizedVolume.toString());
1453+
1454+
// 应用到音频服务
1455+
audioService.setVolume(normalizedVolume);
1456+
};
1457+
1458+
const getVolume = () => {
1459+
return volume.value;
1460+
};
1461+
1462+
const increaseVolume = (step: number = 0.1) => {
1463+
const newVolume = Math.min(1, volume.value + step);
1464+
setVolume(newVolume);
1465+
return newVolume;
1466+
};
1467+
1468+
const decreaseVolume = (step: number = 0.1) => {
1469+
const newVolume = Math.max(0, volume.value - step);
1470+
setVolume(newVolume);
1471+
return newVolume;
1472+
};
1473+
14421474
return {
14431475
play,
14441476
isPlay,
@@ -1491,6 +1523,13 @@ export const usePlayerStore = defineStore('player', () => {
14911523
setPlayListDrawerVisible,
14921524
handlePause,
14931525
playbackRate,
1494-
setPlaybackRate
1526+
setPlaybackRate,
1527+
1528+
// 音量管理
1529+
volume,
1530+
setVolume,
1531+
getVolume,
1532+
increaseVolume,
1533+
decreaseVolume
14951534
};
14961535
});

src/renderer/utils/appShortcuts.ts

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -96,23 +96,17 @@ export async function handleShortcutAction(action: string) {
9696
showToast(t('player.playBar.next'), 'ri-skip-forward-line');
9797
break;
9898
case 'volumeUp':
99-
// 从localStorage获取当前音量
100-
const currentVolumeUp = parseFloat(localStorage.getItem('volume') || '1');
101-
if (currentVolumeUp < 1) {
102-
const newVolume = Math.min(1, currentVolumeUp + 0.1);
103-
await audioService.setVolume(newVolume);
99+
if (playerStore.getVolume() < 1) {
100+
const newVolume = playerStore.increaseVolume(0.1);
104101
showToast(
105102
`${t('player.playBar.volume')}${Math.round(newVolume * 100)}%`,
106103
'ri-volume-up-line'
107104
);
108105
}
109106
break;
110107
case 'volumeDown':
111-
// 从localStorage获取当前音量
112-
const currentVolumeDown = parseFloat(localStorage.getItem('volume') || '1');
113-
if (currentVolumeDown > 0) {
114-
const newVolume = Math.max(0, currentVolumeDown - 0.1);
115-
await audioService.setVolume(newVolume);
108+
if (playerStore.getVolume() > 0) {
109+
const newVolume = playerStore.decreaseVolume(0.1);
116110
showToast(
117111
`${t('player.playBar.volume')}${Math.round(newVolume * 100)}%`,
118112
'ri-volume-down-line'

0 commit comments

Comments
 (0)