import { SpectrumRenderer } from './SpectrumRenderer' import { BarSpectrumRenderer } from './BarSpectrumRenderer' import { WaveSpectrumRenderer } from './WaveSpectrumRenderer' import { CircleSpectrumRenderer } from './CircleSpectrumRenderer' import { ParticleSpectrumRenderer } from './ParticleSpectrumRenderer' import { RadialPulseSpectrumRenderer } from './RadialPulseSpectrumRenderer' import { MirrorBarSpectrumRenderer } from './MirrorBarSpectrumRenderer' import { ShadowBarSpectrumRenderer } from './ShadowBarSpectrumRenderer' import { OrbitLineSpectrumRenderer } from './OrbitLineSpectrumRenderer' import { DotMatrixSpectrumRenderer } from './DotMatrixSpectrumRenderer' import { StarburstSpectrumRenderer } from './StarburstSpectrumRenderer' export type SpectrumPerformanceLevel = 'low' | 'medium' | 'high' export interface SpectrumEffectPerformanceProfile { targetFps: number minFps: number maxBandCount: number complexityFloor: number } export interface SpectrumEffectDefinition { effectId: string displayName: string performanceLevel: SpectrumPerformanceLevel performance: SpectrumEffectPerformanceProfile createRenderer: () => SpectrumRenderer } const EFFECTS: SpectrumEffectDefinition[] = [ { effectId: 'bar', displayName: '柱状', performanceLevel: 'medium', performance: { targetFps: 30, minFps: 18, maxBandCount: 32, complexityFloor: 0.60 }, createRenderer: (): SpectrumRenderer => new BarSpectrumRenderer() }, { effectId: 'wave', displayName: '波形', performanceLevel: 'medium', performance: { targetFps: 30, minFps: 18, maxBandCount: 32, complexityFloor: 0.62 }, createRenderer: (): SpectrumRenderer => new WaveSpectrumRenderer() }, { effectId: 'circle', displayName: '圆形', performanceLevel: 'high', performance: { targetFps: 30, minFps: 15, maxBandCount: 32, complexityFloor: 0.50 }, createRenderer: (): SpectrumRenderer => new CircleSpectrumRenderer() }, { effectId: 'particle', displayName: '粒子', performanceLevel: 'high', performance: { targetFps: 28, minFps: 12, maxBandCount: 24, complexityFloor: 0.45 }, createRenderer: (): SpectrumRenderer => new ParticleSpectrumRenderer() }, { effectId: 'radial-pulse', displayName: '脉冲', performanceLevel: 'low', performance: { targetFps: 30, minFps: 20, maxBandCount: 28, complexityFloor: 0.65 }, createRenderer: (): SpectrumRenderer => new RadialPulseSpectrumRenderer() }, { effectId: 'mirror-bar', displayName: '镜像柱', performanceLevel: 'low', performance: { targetFps: 30, minFps: 20, maxBandCount: 30, complexityFloor: 0.68 }, createRenderer: (): SpectrumRenderer => new MirrorBarSpectrumRenderer() }, { effectId: 'shadow-bar', displayName: '影子柱', performanceLevel: 'medium', performance: { targetFps: 30, minFps: 18, maxBandCount: 32, complexityFloor: 0.60 }, createRenderer: (): SpectrumRenderer => new ShadowBarSpectrumRenderer() }, { effectId: 'orbit-line', displayName: '轨道线', performanceLevel: 'medium', performance: { targetFps: 30, minFps: 18, maxBandCount: 28, complexityFloor: 0.60 }, createRenderer: (): SpectrumRenderer => new OrbitLineSpectrumRenderer() }, { effectId: 'dot-matrix', displayName: '点阵', performanceLevel: 'low', performance: { targetFps: 30, minFps: 22, maxBandCount: 24, complexityFloor: 0.72 }, createRenderer: (): SpectrumRenderer => new DotMatrixSpectrumRenderer() }, { effectId: 'starburst', displayName: '星爆', performanceLevel: 'medium', performance: { targetFps: 30, minFps: 18, maxBandCount: 30, complexityFloor: 0.58 }, createRenderer: (): SpectrumRenderer => new StarburstSpectrumRenderer() } ] const LEGACY_MODE_TO_EFFECT_ID: string[] = ['bar', 'wave', 'circle', 'particle'] export function getSpectrumEffects(): SpectrumEffectDefinition[] { return EFFECTS } export function getDefaultSpectrumEffectId(): string { return EFFECTS[0].effectId } export function findSpectrumEffectById(effectId: string): SpectrumEffectDefinition | undefined { for (let i = 0; i < EFFECTS.length; i++) { if (EFFECTS[i].effectId === effectId) { return EFFECTS[i] } } return undefined } export function normalizeSpectrumEffectId(effectId: string | undefined): string { if (!effectId) { return getDefaultSpectrumEffectId() } const effect: SpectrumEffectDefinition | undefined = findSpectrumEffectById(effectId) return effect ? effect.effectId : getDefaultSpectrumEffectId() } export function fromLegacySpectrumMode(mode: number | undefined): string { if (mode === undefined || mode < 0 || mode >= LEGACY_MODE_TO_EFFECT_ID.length) { return getDefaultSpectrumEffectId() } return LEGACY_MODE_TO_EFFECT_ID[mode] }