| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- 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]
- }
|