effect 响度阈值最低支持 -40
This commit is contained in:
@@ -2,8 +2,13 @@
|
||||
|
||||
> This document records feature updates and bug fixes for the Luxsin X8 controller. A new entry is appended here after each release.
|
||||
|
||||
## 2026.08.06
|
||||
## v2026.08.06
|
||||
|
||||
### New Features
|
||||
- Added a "What's New" entry on the home page, allowing you to view release notes online.
|
||||
- Added Undo support on the EQ page: tap the Undo button to revert your most recent change. It covers band parameter edits (frequency / gain / Q / filter type), slider drag adjustments, preamp and auto-preamp changes, A/B mode copy & switch, and batch edits. Each undo shows a toast describing exactly what was reverted (e.g. "A Band 3 GAIN +2.0 → 0.0").
|
||||
|
||||
## v2026.08.12
|
||||
|
||||
### Bug Fixes
|
||||
- Effects → Loudness: fixed the threshold slider minimum incorrectly stopping at -30 dB; it now correctly goes down to -40 dB.
|
||||
|
||||
@@ -44,7 +44,6 @@ import { ShareDialog } from "./eq/components/ShareDialog";
|
||||
import { BrandDrawer } from "./eq/components/BrandDrawer";
|
||||
import { PeqOverwriteConfirmDialog } from "./eq/components/PeqOverwriteConfirmDialog";
|
||||
import { PeqPresetManageDialog } from "./eq/components/PeqPresetManageDialog";
|
||||
import { PeqUndoButton } from "./eq/components/PeqUndoButton";
|
||||
import { useRawCurve } from "./eq/hooks/useRawCurve";
|
||||
import {
|
||||
usePeqUndoHistory,
|
||||
@@ -1607,11 +1606,6 @@ export default function EQPage() {
|
||||
)}
|
||||
</div>
|
||||
<div className="flex shrink-0 items-center gap-2">
|
||||
<PeqUndoButton
|
||||
disabled={!canUndo}
|
||||
label={eqUi.undo ?? "Undo"}
|
||||
onClick={handleUndo}
|
||||
/>
|
||||
<button
|
||||
className="w-9 h-9 rounded-full flex items-center justify-center text-white/60 active:text-white transition-colors"
|
||||
style={{ background: "rgba(44,44,46,0.8)", border: "1px solid rgba(255,255,255,0.1)" }}
|
||||
@@ -1647,6 +1641,8 @@ export default function EQPage() {
|
||||
abMode={abMode}
|
||||
onAbToggle={handleAbToggle}
|
||||
onCopyAndSwitchTo={handleCopyAndSwitchTo}
|
||||
canUndo={canUndo}
|
||||
onUndo={handleUndo}
|
||||
onApplyB={() => void handleApplyB()}
|
||||
onSaveB={openSaveBDialog}
|
||||
onBandDrag={(idx, patch) => setBands((prev) => prev.map((b, i) => i === idx ? { ...b, ...patch } : b))}
|
||||
|
||||
@@ -379,7 +379,7 @@ export default function EffectsPage() {
|
||||
</div>
|
||||
<CyanSlider
|
||||
value={localLoudnessThreshold}
|
||||
min={-30}
|
||||
min={-40}
|
||||
max={0}
|
||||
step={1}
|
||||
onChange={(v) => {
|
||||
|
||||
@@ -4,6 +4,7 @@ import { useStrokeDrawAnimation } from "@/lib/useStrokeDrawAnimation";
|
||||
import { buildPeqSvgCurveData, sampleCombinedPeqMagnitudeDb } from "@/lib/peqAudio";
|
||||
import { eqInterp } from "../eqFormatters";
|
||||
import type { EqBand, PeqEqUi } from "../types";
|
||||
import { PeqUndoButton } from "./PeqUndoButton";
|
||||
|
||||
function LegendCurveIndicator({
|
||||
loading,
|
||||
@@ -32,6 +33,8 @@ export type FreqChartProps = {
|
||||
abMode: "A" | "B";
|
||||
onAbToggle: (m: "A" | "B") => void;
|
||||
onCopyAndSwitchTo: (to: "A" | "B") => void;
|
||||
canUndo: boolean;
|
||||
onUndo: () => void;
|
||||
onApplyB: () => void;
|
||||
onSaveB: () => void;
|
||||
onBandDrag: (idx: number, patch: Partial<{ freq: number; gain: number }>) => void;
|
||||
@@ -49,6 +52,8 @@ export function FreqChart({
|
||||
abMode,
|
||||
onAbToggle,
|
||||
onCopyAndSwitchTo,
|
||||
canUndo,
|
||||
onUndo,
|
||||
onApplyB,
|
||||
onSaveB,
|
||||
onBandDrag,
|
||||
@@ -307,6 +312,11 @@ export function FreqChart({
|
||||
>
|
||||
{copyButtonText}
|
||||
</button>
|
||||
<PeqUndoButton
|
||||
disabled={!canUndo}
|
||||
label={eqUi.undo ?? "Undo"}
|
||||
onClick={onUndo}
|
||||
/>
|
||||
</div>
|
||||
<div className="ml-auto flex shrink-0 items-center gap-2">
|
||||
<button
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import { Undo2 } from "lucide-react";
|
||||
import { cn } from "@/lib/utils";
|
||||
|
||||
type PeqUndoButtonProps = {
|
||||
@@ -8,6 +7,11 @@ type PeqUndoButtonProps = {
|
||||
className?: string;
|
||||
};
|
||||
|
||||
const pillStyle = {
|
||||
background: "rgba(44,44,46,0.7)",
|
||||
border: "1px solid rgba(255,255,255,0.08)",
|
||||
} as const;
|
||||
|
||||
/**
|
||||
* EQ page undo control — disabled when the undo stack is empty.
|
||||
*/
|
||||
@@ -25,22 +29,15 @@ export function PeqUndoButton({
|
||||
title={label}
|
||||
onClick={onClick}
|
||||
className={cn(
|
||||
"w-9 h-9 rounded-full flex items-center justify-center transition-colors active:scale-95",
|
||||
"px-3 py-1 rounded-[8px] text-[11px] transition-colors",
|
||||
disabled
|
||||
? "text-white/25 cursor-not-allowed"
|
||||
: "text-white/70 active:text-white",
|
||||
? "text-white/25 cursor-not-allowed opacity-50"
|
||||
: "text-white/50 active:text-white",
|
||||
className,
|
||||
)}
|
||||
style={{
|
||||
background: disabled
|
||||
? "rgba(44,44,46,0.45)"
|
||||
: "rgba(44,44,46,0.8)",
|
||||
border: disabled
|
||||
? "1px solid rgba(255,255,255,0.06)"
|
||||
: "1px solid rgba(255,255,255,0.1)",
|
||||
}}
|
||||
style={pillStyle}
|
||||
>
|
||||
<Undo2 size={18} />
|
||||
{label}
|
||||
</button>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user