Files
PodTui/src/pages/Settings/VisualizerSettings.tsx

91 lines
2.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* VisualizerSettings — exposes bars/sensitivity/noise/lowCut/highCut as
* SettingItems for the yazi depth-stack. No own useKeyboard.
*/
import { useAppStore } from "@/stores/app";
import type { SettingItem } from "./types";
export function useVisualizerItems(): SettingItem[] {
const app = useAppStore();
const viz = () => app.state().settings.visualizer;
return [
{
id: "enabled",
label: "Waveform",
kind: "toggle",
display: () => (viz().enabled ? "On" : "Off"),
help: () =>
`Realtime waveform visualizer in the player.\nType: toggle\nDefault: on\nCurrent: ${viz().enabled ? "on" : "off"}\nSpace/Enter to toggle.`,
toggle: () => app.updateVisualizer({ enabled: !viz().enabled }),
},
{
id: "bars",
label: "Bars",
kind: "number",
display: () => String(viz().bars),
help: () =>
`Number of visualizer bars.\nType: number (8128, step 8)\nDefault: 64\nCurrent: ${viz().bars}\nj/k to /+8.`,
cycle: (dir) =>
app.updateVisualizer({
bars: Math.min(128, Math.max(8, viz().bars + dir * 8)),
}),
},
{
id: "sensitivity",
label: "Auto Sensitivity",
kind: "toggle",
display: () => (viz().sensitivity === 1 ? "On" : "Off"),
help: () =>
`Automatic gain sensitivity.\nType: toggle\nDefault: on\nCurrent: ${viz().sensitivity === 1 ? "on" : "off"}\nSpace/Enter to toggle.`,
toggle: () =>
app.updateVisualizer({
sensitivity: viz().sensitivity === 1 ? 0 : 1,
}),
},
{
id: "noiseReduction",
label: "Noise Reduction",
kind: "number",
display: () => viz().noiseReduction.toFixed(2),
help: () =>
`FFT noise reduction factor.\nType: number (0.001.00, step 0.05)\nDefault: 0.20\nCurrent: ${viz().noiseReduction.toFixed(2)}\nj/k to /+0.05.`,
cycle: (dir) =>
app.updateVisualizer({
noiseReduction: Math.min(
1,
Math.max(0, Number((viz().noiseReduction + dir * 0.05).toFixed(2))),
),
}),
},
{
id: "lowCutOff",
label: "Low Cutoff",
kind: "number",
display: () => `${viz().lowCutOff} Hz`,
help: () =>
`Lower frequency cutoff.\nType: number (20500 Hz, step 10)\nDefault: 20\nCurrent: ${viz().lowCutOff}\nj/k to /+10.`,
cycle: (dir) =>
app.updateVisualizer({
lowCutOff: Math.min(500, Math.max(20, viz().lowCutOff + dir * 10)),
}),
},
{
id: "highCutOff",
label: "High Cutoff",
kind: "number",
display: () => `${viz().highCutOff} Hz`,
help: () =>
`Upper frequency cutoff.\nType: number (100020000 Hz, step 500)\nDefault: 20000\nCurrent: ${viz().highCutOff}\nj/k to /+500.`,
cycle: (dir) =>
app.updateVisualizer({
highCutOff: Math.min(
20000,
Math.max(1000, viz().highCutOff + dir * 500),
),
}),
},
];
}