From dc567d014436479a6972a9909119133c3c9ad9f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Kr=C3=BCger?= Date: Tue, 18 Nov 2025 15:26:10 +0100 Subject: [PATCH] feat: add professional gradient to level meters matching dB scale MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaced solid color blocks with smooth gradient to match professional audio metering standards and dB scale mapping. The Problem: - Hard color transitions (green/yellow/red) looked jarring - Didn't match professional DAW aesthetics - Color didn't reflect actual dB values visually The Solution: - Implemented CSS linear gradient across meter bar - Gradient matches dB scale breakpoints: * Green: 0-70% (-60dB to -18dB) - Safe zone * Yellow: 70-90% (-18dB to -6dB) - Getting hot * Red: 90-100% (-6dB to 0dB) - Very loud/clipping Gradient Details: Horizontal: linear-gradient(to right, ...) Vertical: linear-gradient(to top, ...) Color stops: 0%: rgb(34, 197, 94) - Green start 70%: rgb(34, 197, 94) - Green hold 85%: rgb(234, 179, 8) - Yellow transition 100%: rgb(239, 68, 68) - Red peak Visual Behavior: - Smooth color transition as levels increase - Green dominates safe zone (-60dB to -18dB) - Yellow appears in warning zone (-18dB to -6dB) - Red shows critical/clipping zone (-6dB to 0dB) - Matches Pro Tools, Logic Pro, Ableton Live style Benefits: ✅ Professional appearance matching industry DAWs ✅ Smooth visual feedback instead of jarring transitions ✅ Colors accurately represent dB ranges ✅ Better user experience for mixing/mastering ✅ Gradient visible even at low levels 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- components/recording/InputLevelMeter.tsx | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/components/recording/InputLevelMeter.tsx b/components/recording/InputLevelMeter.tsx index 9bc80f2..8a6e669 100644 --- a/components/recording/InputLevelMeter.tsx +++ b/components/recording/InputLevelMeter.tsx @@ -4,7 +4,7 @@ import * as React from 'react'; import { cn } from '@/lib/utils/cn'; export interface InputLevelMeterProps { - level: number; // 0.0 to 1.0 + level: number; // 0.0 to 1.0 (normalized dB scale) orientation?: 'horizontal' | 'vertical'; className?: string; } @@ -17,15 +17,16 @@ export function InputLevelMeter({ // Clamp level between 0 and 1 const clampedLevel = Math.max(0, Math.min(1, level)); - // Calculate color based on level - const getColor = (level: number): string => { - if (level > 0.9) return 'bg-red-500'; - if (level > 0.7) return 'bg-yellow-500'; - return 'bg-green-500'; - }; - const isHorizontal = orientation === 'horizontal'; + // Professional audio meter gradient: + // Green (0-70% = -60dB to -18dB) + // Yellow (70-90% = -18dB to -6dB) + // Red (90-100% = -6dB to 0dB) + const gradient = isHorizontal + ? 'linear-gradient(to right, rgb(34, 197, 94) 0%, rgb(34, 197, 94) 70%, rgb(234, 179, 8) 85%, rgb(239, 68, 68) 100%)' + : 'linear-gradient(to top, rgb(34, 197, 94) 0%, rgb(34, 197, 94) 70%, rgb(234, 179, 8) 85%, rgb(239, 68, 68) 100%)'; + return (
- {/* Level bar */} + {/* Level bar with gradient */}