Improved VU needle mode

This commit is contained in:
Boof2015
2026-05-05 19:21:02 -04:00
parent 98ebe3fc8f
commit d614952a15
11 changed files with 877 additions and 111 deletions
+11 -1
View File
@@ -16,6 +16,7 @@ import { AUDIO_SCOPE_KINDS, SCOPE_KINDS, normalizeScopeKind, type ScopeKind } fr
import { DEFAULT_SCOPE_SETTINGS, type ScopeSettings } from '../types/settings'
import { isLUFSMeterReadout } from '../types/lufsmeter'
import { normalizeSpectrumPeakInfoMode } from '../types/spectrum'
import { isVUMeterNeedleChannels } from '../types/vumeter'
import { clampWaveformScrollSpeed } from '../types/waveform'
export const DEFAULT_VISIBLE: ScopeKind[] = ['spectrum', 'oscilloscope', 'vectorscope', 'vumeter']
@@ -142,6 +143,9 @@ export function mergeScopeSettings(raw: unknown): ScopeSettings {
const rawLUFSMeter: Partial<ScopeSettings['lufsmeter']> = typeof parsed.lufsmeter === 'object' && parsed.lufsmeter !== null
? parsed.lufsmeter
: {}
const rawVUMeter: Partial<ScopeSettings['vumeter']> = typeof parsed.vumeter === 'object' && parsed.vumeter !== null
? parsed.vumeter
: {}
const rawNowPlaying: Partial<ScopeSettings['nowPlaying']> = typeof legacyParsed.nowPlaying === 'object' && legacyParsed.nowPlaying !== null
? legacyParsed.nowPlaying
: (typeof legacyParsed.astra === 'object' && legacyParsed.astra !== null ? legacyParsed.astra : {})
@@ -155,7 +159,13 @@ export function mergeScopeSettings(raw: unknown): ScopeSettings {
oscilloscope: { ...DEFAULT_SCOPE_SETTINGS.oscilloscope, ...(parsed.oscilloscope ?? {}) },
vectorscope: { ...DEFAULT_SCOPE_SETTINGS.vectorscope, ...(parsed.vectorscope ?? {}) },
spectrogram: { ...DEFAULT_SCOPE_SETTINGS.spectrogram, ...(parsed.spectrogram ?? {}) },
vumeter: { ...DEFAULT_SCOPE_SETTINGS.vumeter, ...(parsed.vumeter ?? {}) },
vumeter: {
...DEFAULT_SCOPE_SETTINGS.vumeter,
...rawVUMeter,
needleChannels: isVUMeterNeedleChannels(rawVUMeter.needleChannels)
? rawVUMeter.needleChannels
: DEFAULT_SCOPE_SETTINGS.vumeter.needleChannels,
},
lufsmeter: {
...DEFAULT_SCOPE_SETTINGS.lufsmeter,
...rawLUFSMeter,
+14
View File
@@ -47,6 +47,9 @@ const DEFAULT_BAND_HIGH = '#4488ff'
const DEFAULT_HEAT_LOW = 'rgb(15, 7, 33)'
const DEFAULT_HEAT_MID = 'rgb(163, 26, 121)'
const DEFAULT_HEAT_HIGH = 'rgb(255, 241, 209)'
const DEFAULT_VU_NEEDLE_LEFT = 'rgb(199, 223, 255)'
const DEFAULT_VU_NEEDLE_RIGHT = 'rgb(255, 71, 126)'
const DEFAULT_VU_NEEDLE_COMBINED = 'rgb(244, 248, 255)'
type SectionTokenMap = Partial<Record<string, string>>
type SectionSchema<T extends object> = Record<string, Extract<keyof T, string>>
@@ -138,6 +141,9 @@ const VUMETER_SCHEMA = {
clip: 'clip',
scale: 'scale',
labels: 'labels',
needle_left: 'needleLeft',
needle_right: 'needleRight',
needle_combined: 'needleCombined',
} as const satisfies SectionSchema<ThemeVUMeterTokens>
const LUFSMETER_SCHEMA = {
@@ -536,6 +542,9 @@ export function createDefaultTheme(): PrismTheme {
track: 'rgba(56, 189, 248, 0.08)',
peak: 'rgb(255, 127, 0)',
clip: 'rgba(255, 120, 80, 0.9)',
needleLeft: DEFAULT_VU_NEEDLE_LEFT,
needleRight: DEFAULT_VU_NEEDLE_RIGHT,
needleCombined: DEFAULT_VU_NEEDLE_COMBINED,
},
lufsmeter: {
level: DEFAULT_ACCENT,
@@ -1715,6 +1724,9 @@ function resolveVUMeterTheme(
clip: theme.vumeter.clip ?? 'rgba(255, 120, 80, 0.9)',
scale: theme.vumeter.scale ?? scopes.guides,
labels: theme.vumeter.labels ?? blendText(app.text, app.textMuted, 0.35),
needleLeft: theme.vumeter.needleLeft ?? level,
needleRight: theme.vumeter.needleRight ?? theme.vumeter.peak ?? 'rgb(255, 127, 0)',
needleCombined: theme.vumeter.needleCombined ?? level,
background: theme.vumeter.background ?? scopes.background,
}
}
@@ -1879,6 +1891,8 @@ export function createMigratedAccentTheme(accent: string): PrismTheme | null {
base.spectrogram.mono = base.app.accent
base.vumeter.level = base.app.accent
base.vumeter.track = withAlpha(base.app.accent, 0.08)
base.vumeter.needleLeft = base.app.accent
base.vumeter.needleCombined = base.app.accent
base.lufsmeter.level = base.app.accent
base.lufsmeter.track = withAlpha(base.app.accent, 0.08)
base.lufsmeter.target = withAlpha(base.app.accent, 0.25)