Settings window2 #19
@@ -10,6 +10,7 @@ import qs.Config
|
|||||||
Singleton {
|
Singleton {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
|
readonly property alias beatTracker: beatTracker
|
||||||
readonly property alias cava: cava
|
readonly property alias cava: cava
|
||||||
readonly property bool muted: !!sink?.audio?.muted
|
readonly property bool muted: !!sink?.audio?.muted
|
||||||
readonly property var nodes: Pipewire.nodes.values.reduce((acc, node) => {
|
readonly property var nodes: Pipewire.nodes.values.reduce((acc, node) => {
|
||||||
@@ -138,6 +139,11 @@ Singleton {
|
|||||||
bars: Config.services.visualizerBars
|
bars: Config.services.visualizerBars
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BeatTracker {
|
||||||
|
id: beatTracker
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
PwObjectTracker {
|
PwObjectTracker {
|
||||||
objects: [...root.sinks, ...root.sources, ...root.streams]
|
objects: [...root.sinks, ...root.sources, ...root.streams]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import Quickshell
|
|||||||
import QtQuick
|
import QtQuick
|
||||||
import QtQuick.Layouts
|
import QtQuick.Layouts
|
||||||
import QtQuick.Shapes
|
import QtQuick.Shapes
|
||||||
|
import ZShell.Services
|
||||||
import qs.Daemons
|
import qs.Daemons
|
||||||
import qs.Components
|
import qs.Components
|
||||||
import qs.Config
|
import qs.Config
|
||||||
@@ -37,54 +38,55 @@ Item {
|
|||||||
onTriggered: Players.active?.positionChanged()
|
onTriggered: Players.active?.positionChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Shape {
|
ServiceRef {
|
||||||
// id: visualizer
|
service: Audio.cava
|
||||||
//
|
}
|
||||||
// readonly property real centerX: width / 2
|
|
||||||
// readonly property real centerY: height / 2
|
Shape {
|
||||||
// property color colour: DynamicColors.palette.m3primary
|
id: visualizer
|
||||||
// readonly property real innerX: cover.implicitWidth / 2 + Appearance.spacing.small
|
|
||||||
// readonly property real innerY: cover.implicitHeight / 2 + Appearance.spacing.small
|
readonly property real barW: Math.max(0, (width - gap * (bars - 1)) / bars)
|
||||||
//
|
readonly property int bars: Config.services.visualizerBars
|
||||||
// anchors.fill: cover
|
property color color: DynamicColors.palette.m3primary
|
||||||
// anchors.margins: -Config.dashboard.sizes.mediaVisualiserSize
|
readonly property real gap: Appearance.spacing.small
|
||||||
// asynchronous: true
|
|
||||||
// data: visualizerBars.instances
|
anchors.fill: layout
|
||||||
// preferredRendererType: Shape.CurveRenderer
|
asynchronous: true
|
||||||
// }
|
data: visualizerBars.instances
|
||||||
//
|
preferredRendererType: Shape.CurveRenderer
|
||||||
// Variants {
|
}
|
||||||
// id: visualizerBars
|
|
||||||
//
|
Variants {
|
||||||
// model: Array.from({
|
id: visualizerBars
|
||||||
// length: Config.services.visualizerBars
|
|
||||||
// }, (_, i) => i)
|
model: Array.from({
|
||||||
//
|
length: Config.services.visualizerBars
|
||||||
// ShapePath {
|
}, (_, i) => i)
|
||||||
// id: visualizerBar
|
|
||||||
//
|
ShapePath {
|
||||||
// readonly property real angle: modelData * 2 * Math.PI / Config.services.visualizerBars
|
id: visualizerBar
|
||||||
// readonly property real cos: Math.cos(angle)
|
|
||||||
// readonly property real magnitude: value * Config.dashboard.sizes.mediaVisualiserSize
|
readonly property real magnitude: value * Config.dashboard.sizes.mediaVisualiserSize
|
||||||
// required property int modelData
|
required property int modelData
|
||||||
// readonly property real sin: Math.sin(angle)
|
readonly property real value: Math.max(1e-3, Audio.cava.values[modelData])
|
||||||
// readonly property real value: Math.max(1e-3, Math.min(1, Audio.cava.values[modelData]))
|
|
||||||
//
|
capStyle: Appearance.rounding.scale === 0 ? ShapePath.SquareCap : ShapePath.RoundCap
|
||||||
// capStyle: Appearance.rounding.scale === 0 ? ShapePath.SquareCap : ShapePath.RoundCap
|
startX: (visualizer.barW / 2) + modelData * (visualizer.barW + visualizer.gap)
|
||||||
// startX: visualizer.centerX + (visualizer.innerX + strokeWidth / 2) * cos
|
startY: layout.y + layout.height
|
||||||
// strokeColor: DynamicColors.palette.m3primary
|
strokeColor: visualizer.color
|
||||||
// strokeWidth: 360 / Config.services.visualizerBars - Appearance.spacing.small / 4
|
strokeWidth: visualizer.barW
|
||||||
//
|
|
||||||
// startY: PathLine {
|
Behavior on strokeColor {
|
||||||
// x: visualizer.centerX + (visualizer.innerX + visualizerBar.strokeWidth / 2 + visualizerBar.magnitude) * visualizerBar.cos
|
CAnim {
|
||||||
// y: visualizer.centerY + (visualizer.innerY + visualizerBar.strokeWidth / 2 + visualizerBar.magnitude) * visualizerBar.sin
|
}
|
||||||
// }
|
}
|
||||||
// Behavior on strokeColor {
|
|
||||||
// CAnim {
|
PathLine {
|
||||||
// }
|
relativeX: 0
|
||||||
// }
|
relativeY: -visualizerBar.magnitude
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Shape {
|
Shape {
|
||||||
preferredRendererType: Shape.CurveRenderer
|
preferredRendererType: Shape.CurveRenderer
|
||||||
|
|||||||
@@ -32,28 +32,28 @@ void CavaProcessor::process() {
|
|||||||
cava_execute(m_in, count, m_out, m_plan);
|
cava_execute(m_in, count, m_out, m_plan);
|
||||||
|
|
||||||
// Apply monstercat filter
|
// Apply monstercat filter
|
||||||
QVector<double> values(m_bars);
|
// QVector<double> values(m_bars);
|
||||||
|
//
|
||||||
// Left to right pass
|
// // Left to right pass
|
||||||
const double inv = 1.0 / 1.5;
|
// const double inv = 1.0 / 1.5;
|
||||||
double carry = 0.0;
|
// double carry = 0.0;
|
||||||
for (int i = 0; i < m_bars; ++i) {
|
// for (int i = 0; i < m_bars; ++i) {
|
||||||
carry = std::max(m_out[i], carry * inv);
|
// carry = std::max(m_out[i], carry * inv);
|
||||||
values[i] = carry;
|
// values[i] = carry;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// Right to left pass and combine
|
// // Right to left pass and combine
|
||||||
carry = 0.0;
|
// carry = 0.0;
|
||||||
for (int i = m_bars - 1; i >= 0; --i) {
|
// for (int i = m_bars - 1; i >= 0; --i) {
|
||||||
carry = std::max(m_out[i], carry * inv);
|
// carry = std::max(m_out[i], carry * inv);
|
||||||
values[i] = std::max(values[i], carry);
|
// values[i] = std::max(values[i], carry);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// Update values
|
// // Update values
|
||||||
if (values != m_values) {
|
// if (values != m_values) {
|
||||||
m_values = std::move(values);
|
// m_values = std::move(values);
|
||||||
emit valuesChanged(m_values);
|
// emit valuesChanged(m_values);
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
void CavaProcessor::setBars(int bars) {
|
void CavaProcessor::setBars(int bars) {
|
||||||
|
|||||||
Reference in New Issue
Block a user