Enhance FM synthesis + cleaning code architecture

This commit is contained in:
2025-10-06 13:48:14 +02:00
parent 324cf9d2ed
commit ff5add97e8
38 changed files with 893 additions and 548 deletions

View File

@ -0,0 +1,56 @@
import { engineSettings, effectSettings, lfoSettings } from '../stores/settings'
import type { TileState } from '../types/tiles'
import type { LFOSettings, LFOConfig } from '../stores/settings'
export class ParameterManager {
loadTileParams(tile: TileState): void {
Object.entries(tile.engineParams).forEach(([key, value]) => {
engineSettings.setKey(key as any, value)
})
Object.entries(tile.effectParams).forEach(([key, value]) => {
effectSettings.setKey(key as any, value as any)
})
if (tile.lfoConfigs) {
Object.entries(tile.lfoConfigs).forEach(([key, value]) => {
lfoSettings.setKey(key as keyof LFOSettings, value)
})
}
}
saveTileParams(tile: TileState): TileState {
return {
...tile,
engineParams: { ...engineSettings.get() },
effectParams: { ...effectSettings.get() },
lfoConfigs: JSON.parse(JSON.stringify(lfoSettings.get()))
}
}
getEngineParams(): Record<string, number> {
return engineSettings.get() as Record<string, number>
}
getEffectParams(): Record<string, number | boolean | string> {
return effectSettings.get()
}
getLFOConfigs(): LFOSettings {
return lfoSettings.get()
}
setEngineParam(key: string, value: number): void {
engineSettings.setKey(key as any, value)
}
setEffectParam(key: string, value: number | boolean | string): void {
effectSettings.setKey(key as any, value as any)
}
setLFOConfig(lfoKey: keyof LFOSettings, config: LFOConfig): void {
lfoSettings.setKey(lfoKey, config)
}
}
export const parameterManager = new ParameterManager()