mirror of
https://github.com/imsyy/SPlayer.git
synced 2025-11-25 19:37:35 +08:00
🐞 fix: 调整均衡器
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user