From 97455a862ec20c39de3054742df3356c9ebbdc9d Mon Sep 17 00:00:00 2001 From: Kainoa Kanter Date: Fri, 22 Aug 2025 10:11:51 -0700 Subject: [PATCH 1/3] feat: make audio visualizer FPS configurable --- Commons/Settings.qml | 1 + Modules/SettingsPanel/Tabs/AudioTab.qml | 33 +++++++++++++++++++++++++ Services/CavaService.qml | 2 +- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/Commons/Settings.qml b/Commons/Settings.qml index 23fa432..08cebaf 100644 --- a/Commons/Settings.qml +++ b/Commons/Settings.qml @@ -234,6 +234,7 @@ Singleton { property bool showMiniplayerCava: false property string visualizerType: "linear" property int volumeStep: 5 + property int cavaFps: 60 } // ui diff --git a/Modules/SettingsPanel/Tabs/AudioTab.qml b/Modules/SettingsPanel/Tabs/AudioTab.qml index a644a47..9f992da 100644 --- a/Modules/SettingsPanel/Tabs/AudioTab.qml +++ b/Modules/SettingsPanel/Tabs/AudioTab.qml @@ -308,6 +308,39 @@ ColumnLayout { Settings.data.audio.visualizerType = key } } + + NText { + text: "Audio Visualizer FPS" + font.pointSize: Style.fontSizeM * scaling + font.weight: Style.fontWeightBold + color: Color.mOnSurface + } + + ColumnLayout { + spacing: Style.marginS * scaling + Layout.fillWidth: true + Layout.topMargin: Style.marginM * scaling + + RowLayout { + NSlider { + Layout.fillWidth: true + from: 0 + to: 360 + value: Settings.data.audio.cavaFps + stepSize: 1 + onMoved: { + Settings.data.audio.cavaFps = value + } + } + + NText { + text: Settings.data.audio.cavaFps + " FPS" + Layout.alignment: Qt.AlignVCenter + Layout.leftMargin: Style.marginS * scaling + color: Color.mOnSurface + } + } + } } } } diff --git a/Services/CavaService.qml b/Services/CavaService.qml index 4d41a91..c8d6f05 100644 --- a/Services/CavaService.qml +++ b/Services/CavaService.qml @@ -14,7 +14,7 @@ Singleton { property var config: ({ "general": { "bars": barsCount, - "framerate": 60, + "framerate": Settings.data.audio.cavaFps, "autosens": 1, "sensitivity": 100, "lower_cutoff_freq": 50, From 32e6828cc4c694aad5854d4bec6f372a666a6833 Mon Sep 17 00:00:00 2001 From: Kainoa Kanter Date: Fri, 22 Aug 2025 11:03:55 -0700 Subject: [PATCH 2/3] use dropdown for framerate selector, update variable name, add common FPSes (144 & 165) to FPS dropdowns --- Commons/Settings.qml | 2 +- Modules/SettingsPanel/Tabs/AudioTab.qml | 58 ++++++++++--------- .../SettingsPanel/Tabs/ScreenRecorderTab.qml | 8 +++ Services/CavaService.qml | 2 +- 4 files changed, 40 insertions(+), 30 deletions(-) diff --git a/Commons/Settings.qml b/Commons/Settings.qml index 08cebaf..df6692f 100644 --- a/Commons/Settings.qml +++ b/Commons/Settings.qml @@ -234,7 +234,7 @@ Singleton { property bool showMiniplayerCava: false property string visualizerType: "linear" property int volumeStep: 5 - property int cavaFps: 60 + property int cavaFrameRate: 60 } // ui diff --git a/Modules/SettingsPanel/Tabs/AudioTab.qml b/Modules/SettingsPanel/Tabs/AudioTab.qml index 9f992da..2e57df5 100644 --- a/Modules/SettingsPanel/Tabs/AudioTab.qml +++ b/Modules/SettingsPanel/Tabs/AudioTab.qml @@ -309,37 +309,39 @@ ColumnLayout { } } - NText { - text: "Audio Visualizer FPS" - font.pointSize: Style.fontSizeM * scaling - font.weight: Style.fontWeightBold - color: Color.mOnSurface - } - - ColumnLayout { - spacing: Style.marginS * scaling - Layout.fillWidth: true - Layout.topMargin: Style.marginM * scaling - - RowLayout { - NSlider { - Layout.fillWidth: true - from: 0 - to: 360 - value: Settings.data.audio.cavaFps - stepSize: 1 - onMoved: { - Settings.data.audio.cavaFps = value - } + NComboBox { + label: "Frame Rate" + description: "Target frame rate for audio visualizer. (default: 60)" + model: ListModel { + ListElement { + key: "30" + name: "30 FPS" } - - NText { - text: Settings.data.audio.cavaFps + " FPS" - Layout.alignment: Qt.AlignVCenter - Layout.leftMargin: Style.marginS * scaling - color: Color.mOnSurface + ListElement { + key: "60" + name: "60 FPS" + } + ListElement { + key: "120" + name: "120 FPS" + } + ListElement { + key: "144" + name: "144 FPS" + } + ListElement { + key: "165" + name: "165 FPS" + } + ListElement { + key: "240" + name: "240 FPS" } } + currentKey: Settings.data.audio.cavaFrameRate + onSelected: key => { + Settings.data.audio.cavaFrameRate = key + } } } } diff --git a/Modules/SettingsPanel/Tabs/ScreenRecorderTab.qml b/Modules/SettingsPanel/Tabs/ScreenRecorderTab.qml index a02b3a3..6d23795 100644 --- a/Modules/SettingsPanel/Tabs/ScreenRecorderTab.qml +++ b/Modules/SettingsPanel/Tabs/ScreenRecorderTab.qml @@ -121,6 +121,14 @@ ColumnLayout { key: "120" name: "120 FPS" } + ListElement { + key: "144" + name: "144 FPS" + } + ListElement { + key: "165" + name: "165 FPS" + } ListElement { key: "240" name: "240 FPS" diff --git a/Services/CavaService.qml b/Services/CavaService.qml index c8d6f05..cb7b603 100644 --- a/Services/CavaService.qml +++ b/Services/CavaService.qml @@ -14,7 +14,7 @@ Singleton { property var config: ({ "general": { "bars": barsCount, - "framerate": Settings.data.audio.cavaFps, + "framerate": Settings.data.audio.cavaFrameRate, "autosens": 1, "sensitivity": 100, "lower_cutoff_freq": 50, From 1d88ec9018d76adcb58ceaa7d121fbbee031ad00 Mon Sep 17 00:00:00 2001 From: Kainoa Kanter Date: Fri, 22 Aug 2025 11:06:57 -0700 Subject: [PATCH 3/3] add 100 FPS as common target --- Modules/SettingsPanel/Tabs/AudioTab.qml | 4 ++++ Modules/SettingsPanel/Tabs/ScreenRecorderTab.qml | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/Modules/SettingsPanel/Tabs/AudioTab.qml b/Modules/SettingsPanel/Tabs/AudioTab.qml index 2e57df5..2f64aca 100644 --- a/Modules/SettingsPanel/Tabs/AudioTab.qml +++ b/Modules/SettingsPanel/Tabs/AudioTab.qml @@ -321,6 +321,10 @@ ColumnLayout { key: "60" name: "60 FPS" } + ListElement { + key: "100" + name: "100 FPS" + } ListElement { key: "120" name: "120 FPS" diff --git a/Modules/SettingsPanel/Tabs/ScreenRecorderTab.qml b/Modules/SettingsPanel/Tabs/ScreenRecorderTab.qml index 6d23795..39b8b35 100644 --- a/Modules/SettingsPanel/Tabs/ScreenRecorderTab.qml +++ b/Modules/SettingsPanel/Tabs/ScreenRecorderTab.qml @@ -117,6 +117,10 @@ ColumnLayout { key: "60" name: "60 FPS" } + ListElement { + key: "100" + name: "100 FPS" + } ListElement { key: "120" name: "120 FPS"