Enhance FM synthesis + cleaning code architecture
This commit is contained in:
56
src/services/ParameterManager.ts
Normal file
56
src/services/ParameterManager.ts
Normal 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()
|
||||
Reference in New Issue
Block a user