Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions co.meldstudio.streamdeck.sdPlugin/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,11 @@ And we're not done yet! We are continually working to bring you even more capabi

## What's New

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

## Helpful Links

Expand All @@ -34,6 +37,15 @@ hi@meldstudio.co
# Change History:
------------

## 2023-12-05 (v0.4.0)
### Changes:
-----------
- Added support for switching scenes using a dial to the StreamDeck+.
- Added support for switching volume between percent and dB on the Volume control for StreamDeck+.
- Added support for monitoring an audio track for all StreamDeck devices.
- Added support for setting a specific state to set for Mute, Monitor, Layer, and Effects keys.


## 2023-09-01 (v0.3.0)
### Changes:
-----------
Expand Down
48 changes: 24 additions & 24 deletions co.meldstudio.streamdeck.sdPlugin/actions/screenshot/inspector.html
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>co.meldstudio.streamdeck.screenshot Property Inspector</title>
<link rel="stylesheet" href="../../libs/css/sdpi.css">
</head>
<body>
<div class="sdpi-change-scene sdpi-wrapper">
</div>
</body>
<!-- libs -->
<script src="../../libs/js/utils.js"></script>
<script src="../../libs/js/constants.js"></script>
<script src="../../libs/js/events.js"></script>
<script src="../../libs/js/api.js"></script>
<script src="../../libs/js/property-inspector.js"></script>
<script src="../../libs/js/timers.js"></script>
<script src="../../libs/js/qwebchannel.js"></script>
<script src="../../libs/js/meldstudio.js"></script>
<script src="../../libs/js/inspector.js"></script>
<!DOCTYPE html>
<html>

<head>
<meta charset="utf-8" />
<title>co.meldstudio.streamdeck.screenshot Property Inspector</title>
<link rel="stylesheet" href="../../libs/css/sdpi.css">
</head>

<body>
<div class="sdpi-change-scene sdpi-wrapper">
</div>
</body>

<!-- libs -->
<script src="../../libs/js/utils.js"></script>
<script src="../../libs/js/constants.js"></script>
<script src="../../libs/js/events.js"></script>
<script src="../../libs/js/api.js"></script>
<script src="../../libs/js/property-inspector.js"></script>
<script src="../../libs/js/timers.js"></script>
<script src="../../libs/js/qwebchannel.js"></script>
<script src="../../libs/js/meldstudio.js"></script>
<script src="../../libs/js/inspector.js"></script>
</html>
24 changes: 12 additions & 12 deletions co.meldstudio.streamdeck.sdPlugin/actions/screenshot/plugin.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
class Screenshot extends MeldStudioPlugin {
constructor() {
super("co.meldstudio.streamdeck.screenshot");
this.action.onKeyUp(({ action, context, device, event, payload }) => {
if ($MS.meld?.sendEvent)
$MS.meld.sendEvent("co.meldstudio.events.screenshot");
});
}
}
const screenshot = new Screenshot();
class Screenshot extends MeldStudioPlugin {
constructor() {
super("co.meldstudio.streamdeck.screenshot");

this.action.onKeyUp(({ action, context, device, event, payload }) => {
if ($MS.meld?.sendEvent)
$MS.meld.sendEvent("co.meldstudio.events.screenshot");
});
}
}

const screenshot = new Screenshot();
78 changes: 39 additions & 39 deletions co.meldstudio.streamdeck.sdPlugin/actions/show-scene/inspector.html
Original file line number Diff line number Diff line change
@@ -1,40 +1,40 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>co.meldstudio.streamdeck.show-scene Property Inspector</title>
<link rel="stylesheet" href="../../libs/css/sdpi.css">
</head>
<body>
<div class="sdpi-change-scene sdpi-wrapper">
<div class="sdpi-item">
<div class="sdpi-item-label" data-localize="Scene">Scene</div>
<select class="sdpi-item-value select" id="scene" disabled></select>
</div>
<div class="sdpi-item" id="loading" style="display: none;">
<div class="sdpi-connecting" data-localize="Connecting">Connecting to Meld Studio...</div>
</div>
</div>
</body>
<!-- libs -->
<script src="../../libs/js/utils.js"></script>
<script src="../../libs/js/constants.js"></script>
<script src="../../libs/js/events.js"></script>
<script src="../../libs/js/api.js"></script>
<script src="../../libs/js/property-inspector.js"></script>
<script src="../../libs/js/timers.js"></script>
<script src="../../libs/js/qwebchannel.js"></script>
<script src="../../libs/js/meldstudio.js"></script>
<script src="../../libs/js/inspector.js"></script>
<script>
$PI.on('connected', () => {
$MSPI.watchConnections('loading');
$MSPI.initializeSelection("co.meldstudio.streamdeck.show-scene", ["scene"]);
});
</script>
<!DOCTYPE html>
<html>

<head>
<meta charset="utf-8" />
<title>co.meldstudio.streamdeck.show-scene Property Inspector</title>
<link rel="stylesheet" href="../../libs/css/sdpi.css">
</head>

<body>
<div class="sdpi-change-scene sdpi-wrapper">
<div class="sdpi-item">
<div class="sdpi-item-label" data-localize="Scene">Scene</div>
<select class="sdpi-item-value select" id="scene" disabled></select>
</div>

<div class="sdpi-item" id="loading" style="display: none;">
<div class="sdpi-connecting" data-localize="Connecting">Connecting to Meld Studio...</div>
</div>
</div>
</body>

<!-- libs -->
<script src="../../libs/js/utils.js"></script>
<script src="../../libs/js/constants.js"></script>
<script src="../../libs/js/events.js"></script>
<script src="../../libs/js/api.js"></script>
<script src="../../libs/js/property-inspector.js"></script>
<script src="../../libs/js/timers.js"></script>
<script src="../../libs/js/qwebchannel.js"></script>
<script src="../../libs/js/meldstudio.js"></script>
<script src="../../libs/js/inspector.js"></script>

<script>
$PI.on('connected', () => {
$MSPI.watchConnections('loading');
$MSPI.initializeSelection("co.meldstudio.streamdeck.show-scene", ["scene"]);
});
</script>
</html>
90 changes: 45 additions & 45 deletions co.meldstudio.streamdeck.sdPlugin/actions/show-scene/plugin.js
Original file line number Diff line number Diff line change
@@ -1,45 +1,45 @@
class ShowScene extends MeldStudioPlugin {
sceneRequested = null;
constructor() {
super("co.meldstudio.streamdeck.show-scene");
this.action.onKeyUp(({ action, context, device, event, payload }) => {
const { scene } = this.getSettings(context);
if (!scene) return;
this.sceneRequested = scene;
this.updateState(context);
if ($MS.meld?.showScene) $MS.meld.showScene(scene);
});
$MS.on("sessionChanged", (session) => {
this.sceneRequested = null;
this.forAllContexts((context, settings) => {
this.updateState(context);
});
});
}
updateState(context) {
const { scene } = this.getSettings(context);
const session = $MS?.meld?.session;
const state = (() => {
if (!scene) return 0;
if (!session || !session?.items) return 0;
const item = session.items[scene];
if (!item) return 0;
if (scene == this.sceneRequested) return 1;
return item.current ? 1 : 0;
})();
$SD.setState(context, state);
}
}
const showScene = new ShowScene();
class ShowScene extends MeldStudioPlugin {
sceneRequested = null;

constructor() {
super("co.meldstudio.streamdeck.show-scene");

this.action.onKeyUp(({ action, context, device, event, payload }) => {
const { scene } = this.getSettings(context);
if (!scene) return;

this.sceneRequested = scene;
this.updateState(context);

if ($MS.meld?.showScene) $MS.meld.showScene(scene);
});

$MS.on("sessionChanged", (session) => {
this.sceneRequested = null;

this.forAllContexts((context, settings) => {
this.updateState(context);
});
});
}

updateState(context) {
const { scene } = this.getSettings(context);
const session = $MS?.meld?.session;

const state = (() => {
if (!scene) return 0;
if (!session || !session?.items) return 0;

const item = session.items[scene];

if (!item) return 0;
if (scene == this.sceneRequested) return 1;
return item.current ? 1 : 0;
})();

$SD.setState(context, state);
}
}

const showScene = new ShowScene();
120 changes: 65 additions & 55 deletions co.meldstudio.streamdeck.sdPlugin/actions/toggle-effect/inspector.html
Original file line number Diff line number Diff line change
@@ -1,55 +1,65 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>co.meldstudio.streamdeck.toggle-effect Property Inspector</title>
<link rel="stylesheet" href="../../libs/css/sdpi.css" />
</head>

<body>
<div class="sdpi-hide-layer sdpi-wrapper">
<div class="sdpi-item">
<div class="sdpi-item-label" data-localize="Scene">Scene</div>
<select class="sdpi-item-value select" id="scene" disabled></select>
</div>
<div class="sdpi-item">
<div class="sdpi-item-label" data-localize="Layer">Layer</div>
<select class="sdpi-item-value select" id="layer" disabled></select>
</div>
<div class="sdpi-item">
<div class="sdpi-item-label" data-localize="Effect">Effect</div>
<select class="sdpi-item-value select" id="effect" disabled></select>
</div>

<div class="sdpi-item" id="loading" style="display: none;">
<div class="sdpi-connecting" data-localize="Connecting">Connecting to Meld Studio...</div>
</div>
</div>

<!-- libs -->
<script src="../../libs/js/utils.js"></script>
<script src="../../libs/js/constants.js"></script>
<script src="../../libs/js/events.js"></script>
<script src="../../libs/js/api.js"></script>
<script src="../../libs/js/property-inspector.js"></script>
<script src="../../libs/js/timers.js"></script>
<script src="../../libs/js/qwebchannel.js"></script>
<script src="../../libs/js/meldstudio.js"></script>
<script src="../../libs/js/inspector.js"></script>


<script>
$MS.on('ready', () => {
console.log($MS.meld.session.items)
})
$PI.on("connected", () => {
$MSPI.watchConnections('loading');
$MSPI.initializeSelection("co.meldstudio.streamdeck.toggle-effect", [
"scene",
"layer",
"effect"
]);
});
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>co.meldstudio.streamdeck.toggle-effect Property Inspector</title>
<link rel="stylesheet" href="../../libs/css/sdpi.css" />
</head>

<body>
<div class="sdpi-hide-layer sdpi-wrapper">
<div class="sdpi-item">
<div class="sdpi-item-label" data-localize="Scene">Scene</div>
<select class="sdpi-item-value select" id="scene" disabled></select>
</div>
<div class="sdpi-item">
<div class="sdpi-item-label" data-localize="Layer">Layer</div>
<select class="sdpi-item-value select" id="layer" disabled></select>
</div>
<div class="sdpi-item">
<div class="sdpi-item-label" data-localize="Effect">Effect</div>
<select class="sdpi-item-value select" id="effect" disabled></select>
</div>
<div class="sdpi-item">
<div class="sdpi-item-label" data-localize="Action">Action</div>
<select class="sdpi-item-value select" id="action" value="toggle">
<option value="toggle" data-localize="Toggle">Toggle</option>
<option value="show" data-localize="Show">Show</option>
<option value="hide" data-localize="Hide">Hide</option>
</select>
</div>

<div class="sdpi-item" id="loading" style="display: none;">
<div class="sdpi-connecting" data-localize="Connecting">Connecting to Meld Studio...</div>
</div>
</div>

<!-- libs -->
<script src="../../libs/js/utils.js"></script>
<script src="../../libs/js/constants.js"></script>
<script src="../../libs/js/events.js"></script>
<script src="../../libs/js/api.js"></script>
<script src="../../libs/js/property-inspector.js"></script>
<script src="../../libs/js/timers.js"></script>
<script src="../../libs/js/qwebchannel.js"></script>
<script src="../../libs/js/meldstudio.js"></script>
<script src="../../libs/js/inspector.js"></script>


<script>
$MS.on('ready', () => {
// console.log($MS.meld.session.items)
console.log("Session ready...");
})
$PI.on("connected", () => {
$MSPI.watchConnections('loading');
$MSPI.initializeSelection("co.meldstudio.streamdeck.toggle-effect", [
"scene",
"layer",
"effect"
]);
$MSPI.initializeSelection("co.meldstudio.streamdeck.toggle-effect", ["action"], false);
});
</script>
</body>
</html>
Loading