Skip to content

Commit adddee0

Browse files
authored
Add dial transitions, actions, and multiple modes for audio dials. (#5)
1 parent 2168917 commit adddee0

169 files changed

Lines changed: 1844 additions & 1045 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

co.meldstudio.streamdeck.sdPlugin/README.md

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,11 @@ And we're not done yet! We are continually working to bring you even more capabi
1212

1313
## What's New
1414

15-
Version 0.3.0
16-
Now you can take screenshots for thumbnails at the touch of a button.
15+
Version 0.4.0
16+
Switch between staged scenes and transition with the press of a button -- all from the StreamDeck+.
17+
Switch between Percent and Decibel volume meters in the Adjust Volume dials.
18+
Added Monitor key to allow users to monitor tracks from the StreamDeck.
19+
Added mode selection for Mute, Monitor, Layer and Effects keys to switch between settings a specific state or toggling states.
1720

1821
## Helpful Links
1922

@@ -34,6 +37,15 @@ hi@meldstudio.co
3437
# Change History:
3538
------------
3639

40+
## 2023-12-05 (v0.4.0)
41+
### Changes:
42+
-----------
43+
- Added support for switching scenes using a dial to the StreamDeck+.
44+
- Added support for switching volume between percent and dB on the Volume control for StreamDeck+.
45+
- Added support for monitoring an audio track for all StreamDeck devices.
46+
- Added support for setting a specific state to set for Mute, Monitor, Layer, and Effects keys.
47+
48+
3749
## 2023-09-01 (v0.3.0)
3850
### Changes:
3951
-----------
Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
1-
<!DOCTYPE html>
2-
<html>
3-
4-
<head>
5-
<meta charset="utf-8" />
6-
<title>co.meldstudio.streamdeck.screenshot Property Inspector</title>
7-
<link rel="stylesheet" href="../../libs/css/sdpi.css">
8-
</head>
9-
10-
<body>
11-
<div class="sdpi-change-scene sdpi-wrapper">
12-
</div>
13-
</body>
14-
15-
<!-- libs -->
16-
<script src="../../libs/js/utils.js"></script>
17-
<script src="../../libs/js/constants.js"></script>
18-
<script src="../../libs/js/events.js"></script>
19-
<script src="../../libs/js/api.js"></script>
20-
<script src="../../libs/js/property-inspector.js"></script>
21-
<script src="../../libs/js/timers.js"></script>
22-
<script src="../../libs/js/qwebchannel.js"></script>
23-
<script src="../../libs/js/meldstudio.js"></script>
24-
<script src="../../libs/js/inspector.js"></script>
1+
<!DOCTYPE html>
2+
<html>
3+
4+
<head>
5+
<meta charset="utf-8" />
6+
<title>co.meldstudio.streamdeck.screenshot Property Inspector</title>
7+
<link rel="stylesheet" href="../../libs/css/sdpi.css">
8+
</head>
9+
10+
<body>
11+
<div class="sdpi-change-scene sdpi-wrapper">
12+
</div>
13+
</body>
14+
15+
<!-- libs -->
16+
<script src="../../libs/js/utils.js"></script>
17+
<script src="../../libs/js/constants.js"></script>
18+
<script src="../../libs/js/events.js"></script>
19+
<script src="../../libs/js/api.js"></script>
20+
<script src="../../libs/js/property-inspector.js"></script>
21+
<script src="../../libs/js/timers.js"></script>
22+
<script src="../../libs/js/qwebchannel.js"></script>
23+
<script src="../../libs/js/meldstudio.js"></script>
24+
<script src="../../libs/js/inspector.js"></script>
2525
</html>
Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
class Screenshot extends MeldStudioPlugin {
2-
constructor() {
3-
super("co.meldstudio.streamdeck.screenshot");
4-
5-
this.action.onKeyUp(({ action, context, device, event, payload }) => {
6-
if ($MS.meld?.sendEvent)
7-
$MS.meld.sendEvent("co.meldstudio.events.screenshot");
8-
});
9-
}
10-
}
11-
12-
const screenshot = new Screenshot();
1+
class Screenshot extends MeldStudioPlugin {
2+
constructor() {
3+
super("co.meldstudio.streamdeck.screenshot");
4+
5+
this.action.onKeyUp(({ action, context, device, event, payload }) => {
6+
if ($MS.meld?.sendEvent)
7+
$MS.meld.sendEvent("co.meldstudio.events.screenshot");
8+
});
9+
}
10+
}
11+
12+
const screenshot = new Screenshot();
Lines changed: 39 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,40 @@
1-
<!DOCTYPE html>
2-
<html>
3-
4-
<head>
5-
<meta charset="utf-8" />
6-
<title>co.meldstudio.streamdeck.show-scene Property Inspector</title>
7-
<link rel="stylesheet" href="../../libs/css/sdpi.css">
8-
</head>
9-
10-
<body>
11-
<div class="sdpi-change-scene sdpi-wrapper">
12-
<div class="sdpi-item">
13-
<div class="sdpi-item-label" data-localize="Scene">Scene</div>
14-
<select class="sdpi-item-value select" id="scene" disabled></select>
15-
</div>
16-
17-
<div class="sdpi-item" id="loading" style="display: none;">
18-
<div class="sdpi-connecting" data-localize="Connecting">Connecting to Meld Studio...</div>
19-
</div>
20-
</div>
21-
</body>
22-
23-
<!-- libs -->
24-
<script src="../../libs/js/utils.js"></script>
25-
<script src="../../libs/js/constants.js"></script>
26-
<script src="../../libs/js/events.js"></script>
27-
<script src="../../libs/js/api.js"></script>
28-
<script src="../../libs/js/property-inspector.js"></script>
29-
<script src="../../libs/js/timers.js"></script>
30-
<script src="../../libs/js/qwebchannel.js"></script>
31-
<script src="../../libs/js/meldstudio.js"></script>
32-
<script src="../../libs/js/inspector.js"></script>
33-
34-
<script>
35-
$PI.on('connected', () => {
36-
$MSPI.watchConnections('loading');
37-
$MSPI.initializeSelection("co.meldstudio.streamdeck.show-scene", ["scene"]);
38-
});
39-
</script>
1+
<!DOCTYPE html>
2+
<html>
3+
4+
<head>
5+
<meta charset="utf-8" />
6+
<title>co.meldstudio.streamdeck.show-scene Property Inspector</title>
7+
<link rel="stylesheet" href="../../libs/css/sdpi.css">
8+
</head>
9+
10+
<body>
11+
<div class="sdpi-change-scene sdpi-wrapper">
12+
<div class="sdpi-item">
13+
<div class="sdpi-item-label" data-localize="Scene">Scene</div>
14+
<select class="sdpi-item-value select" id="scene" disabled></select>
15+
</div>
16+
17+
<div class="sdpi-item" id="loading" style="display: none;">
18+
<div class="sdpi-connecting" data-localize="Connecting">Connecting to Meld Studio...</div>
19+
</div>
20+
</div>
21+
</body>
22+
23+
<!-- libs -->
24+
<script src="../../libs/js/utils.js"></script>
25+
<script src="../../libs/js/constants.js"></script>
26+
<script src="../../libs/js/events.js"></script>
27+
<script src="../../libs/js/api.js"></script>
28+
<script src="../../libs/js/property-inspector.js"></script>
29+
<script src="../../libs/js/timers.js"></script>
30+
<script src="../../libs/js/qwebchannel.js"></script>
31+
<script src="../../libs/js/meldstudio.js"></script>
32+
<script src="../../libs/js/inspector.js"></script>
33+
34+
<script>
35+
$PI.on('connected', () => {
36+
$MSPI.watchConnections('loading');
37+
$MSPI.initializeSelection("co.meldstudio.streamdeck.show-scene", ["scene"]);
38+
});
39+
</script>
4040
</html>
Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,45 @@
1-
class ShowScene extends MeldStudioPlugin {
2-
sceneRequested = null;
3-
4-
constructor() {
5-
super("co.meldstudio.streamdeck.show-scene");
6-
7-
this.action.onKeyUp(({ action, context, device, event, payload }) => {
8-
const { scene } = this.getSettings(context);
9-
if (!scene) return;
10-
11-
this.sceneRequested = scene;
12-
this.updateState(context);
13-
14-
if ($MS.meld?.showScene) $MS.meld.showScene(scene);
15-
});
16-
17-
$MS.on("sessionChanged", (session) => {
18-
this.sceneRequested = null;
19-
20-
this.forAllContexts((context, settings) => {
21-
this.updateState(context);
22-
});
23-
});
24-
}
25-
26-
updateState(context) {
27-
const { scene } = this.getSettings(context);
28-
const session = $MS?.meld?.session;
29-
30-
const state = (() => {
31-
if (!scene) return 0;
32-
if (!session || !session?.items) return 0;
33-
34-
const item = session.items[scene];
35-
36-
if (!item) return 0;
37-
if (scene == this.sceneRequested) return 1;
38-
return item.current ? 1 : 0;
39-
})();
40-
41-
$SD.setState(context, state);
42-
}
43-
}
44-
45-
const showScene = new ShowScene();
1+
class ShowScene extends MeldStudioPlugin {
2+
sceneRequested = null;
3+
4+
constructor() {
5+
super("co.meldstudio.streamdeck.show-scene");
6+
7+
this.action.onKeyUp(({ action, context, device, event, payload }) => {
8+
const { scene } = this.getSettings(context);
9+
if (!scene) return;
10+
11+
this.sceneRequested = scene;
12+
this.updateState(context);
13+
14+
if ($MS.meld?.showScene) $MS.meld.showScene(scene);
15+
});
16+
17+
$MS.on("sessionChanged", (session) => {
18+
this.sceneRequested = null;
19+
20+
this.forAllContexts((context, settings) => {
21+
this.updateState(context);
22+
});
23+
});
24+
}
25+
26+
updateState(context) {
27+
const { scene } = this.getSettings(context);
28+
const session = $MS?.meld?.session;
29+
30+
const state = (() => {
31+
if (!scene) return 0;
32+
if (!session || !session?.items) return 0;
33+
34+
const item = session.items[scene];
35+
36+
if (!item) return 0;
37+
if (scene == this.sceneRequested) return 1;
38+
return item.current ? 1 : 0;
39+
})();
40+
41+
$SD.setState(context, state);
42+
}
43+
}
44+
45+
const showScene = new ShowScene();
Lines changed: 65 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,65 @@
1-
<!DOCTYPE html>
2-
<html>
3-
<head>
4-
<meta charset="utf-8" />
5-
<title>co.meldstudio.streamdeck.toggle-effect Property Inspector</title>
6-
<link rel="stylesheet" href="../../libs/css/sdpi.css" />
7-
</head>
8-
9-
<body>
10-
<div class="sdpi-hide-layer sdpi-wrapper">
11-
<div class="sdpi-item">
12-
<div class="sdpi-item-label" data-localize="Scene">Scene</div>
13-
<select class="sdpi-item-value select" id="scene" disabled></select>
14-
</div>
15-
<div class="sdpi-item">
16-
<div class="sdpi-item-label" data-localize="Layer">Layer</div>
17-
<select class="sdpi-item-value select" id="layer" disabled></select>
18-
</div>
19-
<div class="sdpi-item">
20-
<div class="sdpi-item-label" data-localize="Effect">Effect</div>
21-
<select class="sdpi-item-value select" id="effect" disabled></select>
22-
</div>
23-
24-
<div class="sdpi-item" id="loading" style="display: none;">
25-
<div class="sdpi-connecting" data-localize="Connecting">Connecting to Meld Studio...</div>
26-
</div>
27-
</div>
28-
29-
<!-- libs -->
30-
<script src="../../libs/js/utils.js"></script>
31-
<script src="../../libs/js/constants.js"></script>
32-
<script src="../../libs/js/events.js"></script>
33-
<script src="../../libs/js/api.js"></script>
34-
<script src="../../libs/js/property-inspector.js"></script>
35-
<script src="../../libs/js/timers.js"></script>
36-
<script src="../../libs/js/qwebchannel.js"></script>
37-
<script src="../../libs/js/meldstudio.js"></script>
38-
<script src="../../libs/js/inspector.js"></script>
39-
40-
41-
<script>
42-
$MS.on('ready', () => {
43-
console.log($MS.meld.session.items)
44-
})
45-
$PI.on("connected", () => {
46-
$MSPI.watchConnections('loading');
47-
$MSPI.initializeSelection("co.meldstudio.streamdeck.toggle-effect", [
48-
"scene",
49-
"layer",
50-
"effect"
51-
]);
52-
});
53-
</script>
54-
</body>
55-
</html>
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8" />
5+
<title>co.meldstudio.streamdeck.toggle-effect Property Inspector</title>
6+
<link rel="stylesheet" href="../../libs/css/sdpi.css" />
7+
</head>
8+
9+
<body>
10+
<div class="sdpi-hide-layer sdpi-wrapper">
11+
<div class="sdpi-item">
12+
<div class="sdpi-item-label" data-localize="Scene">Scene</div>
13+
<select class="sdpi-item-value select" id="scene" disabled></select>
14+
</div>
15+
<div class="sdpi-item">
16+
<div class="sdpi-item-label" data-localize="Layer">Layer</div>
17+
<select class="sdpi-item-value select" id="layer" disabled></select>
18+
</div>
19+
<div class="sdpi-item">
20+
<div class="sdpi-item-label" data-localize="Effect">Effect</div>
21+
<select class="sdpi-item-value select" id="effect" disabled></select>
22+
</div>
23+
<div class="sdpi-item">
24+
<div class="sdpi-item-label" data-localize="Action">Action</div>
25+
<select class="sdpi-item-value select" id="action" value="toggle">
26+
<option value="toggle" data-localize="Toggle">Toggle</option>
27+
<option value="show" data-localize="Show">Show</option>
28+
<option value="hide" data-localize="Hide">Hide</option>
29+
</select>
30+
</div>
31+
32+
<div class="sdpi-item" id="loading" style="display: none;">
33+
<div class="sdpi-connecting" data-localize="Connecting">Connecting to Meld Studio...</div>
34+
</div>
35+
</div>
36+
37+
<!-- libs -->
38+
<script src="../../libs/js/utils.js"></script>
39+
<script src="../../libs/js/constants.js"></script>
40+
<script src="../../libs/js/events.js"></script>
41+
<script src="../../libs/js/api.js"></script>
42+
<script src="../../libs/js/property-inspector.js"></script>
43+
<script src="../../libs/js/timers.js"></script>
44+
<script src="../../libs/js/qwebchannel.js"></script>
45+
<script src="../../libs/js/meldstudio.js"></script>
46+
<script src="../../libs/js/inspector.js"></script>
47+
48+
49+
<script>
50+
$MS.on('ready', () => {
51+
// console.log($MS.meld.session.items)
52+
console.log("Session ready...");
53+
})
54+
$PI.on("connected", () => {
55+
$MSPI.watchConnections('loading');
56+
$MSPI.initializeSelection("co.meldstudio.streamdeck.toggle-effect", [
57+
"scene",
58+
"layer",
59+
"effect"
60+
]);
61+
$MSPI.initializeSelection("co.meldstudio.streamdeck.toggle-effect", ["action"], false);
62+
});
63+
</script>
64+
</body>
65+
</html>

0 commit comments

Comments
 (0)