diff --git a/public/config.json b/public/config.json index fdbb182..2d9e42d 100644 --- a/public/config.json +++ b/public/config.json @@ -58,6 +58,9 @@ "qua_len_1_16": "0" } }, + "editor": { + "playhead_update_frequency": 10 + }, "chatbox": { "default_open": true }, diff --git a/src/components/settings/sections/BehaviorSettings.tsx b/src/components/settings/sections/BehaviorSettings.tsx index eed41ea..d0f6f9a 100644 --- a/src/components/settings/sections/BehaviorSettings.tsx +++ b/src/components/settings/sections/BehaviorSettings.tsx @@ -3,6 +3,7 @@ import { ConfigManager } from '../../../core/config/ConfigManager'; import { KGAudioInterface } from '../../../core/audio-interface/KGAudioInterface'; const BehaviorSettings: React.FC = () => { + const [playheadUpdateFrequency, setPlayheadUpdateFrequency] = useState(10); const [chatboxDefaultOpen, setChatboxDefaultOpen] = useState(true); const [audioLookaheadTime, setAudioLookaheadTime] = useState('50'); const [playbackDelay, setPlaybackDelay] = useState('200'); @@ -19,6 +20,7 @@ const BehaviorSettings: React.FC = () => { await configManager.initialize(); } + setPlayheadUpdateFrequency((configManager.get('editor.playhead_update_frequency') as number) ?? 10); setChatboxDefaultOpen((configManager.get('chatbox.default_open') as boolean) ?? true); const lookaheadTimeSeconds = (configManager.get('audio.lookahead_time') as number) ?? 0.05; setAudioLookaheadTime(((lookaheadTimeSeconds * 1000).toFixed(0))); @@ -31,6 +33,13 @@ const BehaviorSettings: React.FC = () => { }, [configManager]); // Save configuration when values change + const handlePlayheadUpdateFrequencyChange = async (value: string) => { + const numValue = parseInt(value, 10); + setPlayheadUpdateFrequency(numValue); + await configManager.set('editor.playhead_update_frequency', numValue); + console.log(`Playhead update frequency changed to: ${numValue} fps`); + }; + const handleChatboxDefaultOpenChange = async (value: string) => { const boolValue = value === 'yes'; setChatboxDefaultOpen(boolValue); @@ -104,8 +113,30 @@ const BehaviorSettings: React.FC = () => {

Behavior

- +
+
+

Editor

+ +
+ + +
+ Update frequency for the playhead animation during playback. Higher values (60 fps) provide smoother animation but use more CPU. Lower values (10 fps) are more efficient. Changes apply immediately without restart. +
+
+
+

Chat Box

diff --git a/src/core/KGCore.ts b/src/core/KGCore.ts index 381fa62..3ac5d67 100644 --- a/src/core/KGCore.ts +++ b/src/core/KGCore.ts @@ -1,6 +1,5 @@ import type { Selectable } from '../components/interfaces'; import { KGProject } from './KGProject'; -import { PLAYING_CONSTANTS } from '../constants/uiConstants'; import { KGAudioInterface } from './audio-interface/KGAudioInterface'; import { ConfigManager } from './config/ConfigManager'; import { KGMidiRegion } from './region/KGMidiRegion'; @@ -298,10 +297,15 @@ export class KGCore { if (this.playbackIntervalId !== null) { this.stopPlaybackUpdates(); // Clear any existing timer } - + + // Get playhead update frequency from config (in fps) + const configManager = ConfigManager.instance(); + const updateFrequency = (configManager.get('editor.playhead_update_frequency') as number) ?? 10; + const updateIntervalMs = 1000 / updateFrequency; // Convert fps to milliseconds + this.playbackIntervalId = window.setInterval(() => { this.onPlaybackUpdate(); - }, PLAYING_CONSTANTS.UPDATE_INTERVAL_MS); + }, updateIntervalMs); } private stopPlaybackUpdates(): void { diff --git a/src/core/config/ConfigManager.ts b/src/core/config/ConfigManager.ts index 7a9cedb..44c61cf 100644 --- a/src/core/config/ConfigManager.ts +++ b/src/core/config/ConfigManager.ts @@ -64,6 +64,9 @@ interface AppConfig { qua_len_1_16: string; }; }; + editor: { + playhead_update_frequency: number; + }; chatbox: { default_open: boolean; }; @@ -225,6 +228,9 @@ export class ConfigManager { qua_len_1_16: '0' }, }, + editor: { + playhead_update_frequency: 10 + }, chatbox: { default_open: true },