🐞 fix: 调整均衡器

This commit is contained in:
imsyy
2025-10-22 00:49:31 +08:00
parent d4d16b71ae
commit f238845f9b
2 changed files with 24 additions and 31 deletions

View File

@@ -1,5 +1,6 @@
<template> <template>
<div class="equalizer"> <n-flex class="equalizer" size="large" vertical>
<n-alert :show-icon="false"> 实验性功能请谨慎使用 </n-alert>
<n-flex align="center" justify="space-between" :size="8"> <n-flex align="center" justify="space-between" :size="8">
<n-flex wrap :size="8" class="eq-presets"> <n-flex wrap :size="8" class="eq-presets">
<n-tag <n-tag
@@ -18,22 +19,21 @@
</n-flex> </n-flex>
<div class="eq-sliders"> <div class="eq-sliders">
<div v-for="(freq, i) in frequencies" :key="freq" class="eq-col"> <div v-for="(freq, i) in freqLabels" :key="freq" class="eq-col">
<div class="eq-freq">{{ freqLabels[i] }}</div> <div class="eq-freq">{{ freq }}</div>
<n-slider <n-slider
v-model:value="bands[i]" v-model:value="bands[i]"
:min="-12" :min="-12"
:max="12" :max="12"
:step="0.5" :step="0.1"
:tooltip="false"
vertical
:disabled="!enabled || !isElectron" :disabled="!enabled || !isElectron"
vertical
@update:value="onBandChange(i, $event)" @update:value="onBandChange(i, $event)"
/> />
<div class="eq-value">{{ formatDb(bands[i]) }}</div> <div class="eq-value">{{ formatDb(bands[i]) }}</div>
</div> </div>
</div> </div>
</div> </n-flex>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@@ -46,34 +46,30 @@ const statusStore = useStatusStore();
type PresetKey = keyof typeof presetList; type PresetKey = keyof typeof presetList;
// 10 段中心频率 // 10 段中心频率
const frequencies = [31, 62, 125, 250, 500, 1000, 2000, 4000, 8000, 16000]; const frequencies = [31, 63, 125, 250, 500, 1000, 2000, 4000, 8000, 16000];
const freqLabels = [
"31Hz", // 频率文本
"62Hz", const freqLabels = frequencies.map((f) => (f >= 1000 ? `${f / 1000}kHz` : `${f}Hz`));
"125Hz",
"250Hz",
"500Hz",
"1kHz",
"2kHz",
"4kHz",
"8kHz",
"16kHz",
];
// 预设(单位 dB范围建议在 [-12, 12] // 预设(单位 dB范围建议在 [-12, 12]
const presetList = { const presetList = {
acoustic: { label: "原声", bands: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }, acoustic: { label: "原声", bands: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] },
pop: { label: "流行", bands: [0, 2, 4, 4, 1, -1, -1, 1, 2, 2] }, pop: { label: "流行", bands: [-1, -1, 0, 2, 4, 4, 2, 1, -1, 1] },
rock: { label: "摇滚", bands: [4, 3, 2, 0, -1, 1, 2, 3, 3, 2] }, dance: { label: "舞曲", bands: [4, 6, 7, 0, 2, 3, 5, 4, 3, 0] },
classical: { label: "古典", bands: [0, 0, 1, 2, 3, 3, 2, 1, 0, 0] }, rock: { label: "摇滚", bands: [5, 3, 3, 1, 0, -1, 0, 2, 3, 5] },
jazz: { label: "爵士", bands: [0, 2, 3, 2, 0, 1, 2, 2, 1, 0] }, classical: { label: "古典", bands: [5, 4, 3, 2, -1, -1, 0, 2, 3, 5] },
jazz: { label: "爵士", bands: [3, 3, 2, 2, -1, -1, 0, 2, 2, 5] },
vocal: { label: "人声", bands: [-2, -1, 0, 2, 4, 4, 2, 0, -1, -2] }, vocal: { label: "人声", bands: [-2, -1, 0, 2, 4, 4, 2, 0, -1, -2] },
dance: { label: "舞曲", bands: [5, 4, 3, 1, -1, 0, 2, 3, 3, 2] }, bass: { label: "重低音", bands: [6, 6, 8, 2, 0, 0, 0, 0, 0, 0] },
custom: { label: "自定义", bands: [] as number[] }, custom: { label: "自定义", bands: [] as number[] },
} as const; } as const;
const enabled = ref<boolean>(statusStore.eqEnabled); const enabled = ref<boolean>(statusStore.eqEnabled);
// 当前预设
const currentPreset = ref<PresetKey>((statusStore.eqPreset as PresetKey) || "custom"); const currentPreset = ref<PresetKey>((statusStore.eqPreset as PresetKey) || "custom");
// 当前频段
const bands = ref<number[]>( const bands = ref<number[]>(
statusStore.eqBands?.length === 10 ? [...statusStore.eqBands] : Array(10).fill(0), statusStore.eqBands?.length === 10 ? [...statusStore.eqBands] : Array(10).fill(0),
); );
@@ -126,11 +122,6 @@ const onBandChange = (index: number, value: number) => {
}; };
watch(enabled, () => applyEq()); watch(enabled, () => applyEq());
onMounted(() => {
// 初始状态:若持久化为开启,则直接应用
if (isElectron && enabled.value) player.enableEq({ bands: bands.value, frequencies });
});
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@@ -154,6 +145,8 @@ onMounted(() => {
height: 160px; height: 160px;
} }
.eq-value { .eq-value {
width: 46px;
text-align: center;
margin-top: 6px; margin-top: 6px;
font-size: 12px; font-size: 12px;
opacity: 0.8; opacity: 0.8;

View File

@@ -287,7 +287,7 @@ export const openEqualizer = () => {
preset: "card", preset: "card",
transformOrigin: "center", transformOrigin: "center",
autoFocus: false, autoFocus: false,
style: { width: "600px" }, style: { width: "620px" },
title: "均衡器", title: "均衡器",
content: () => { content: () => {
return h(Equalizer); return h(Equalizer);