Skip to content

Commit 14359fd

Browse files
committed
Duck
1 parent b488865 commit 14359fd

File tree

3 files changed

+67
-1
lines changed

3 files changed

+67
-1
lines changed

addons/addons.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,5 +188,6 @@
188188
"remove-curved-stage-border",
189189
"columns",
190190
"editor-compact",
191-
"editor-theme3"
191+
"editor-theme3",
192+
"duck"
192193
]

addons/duck/addon.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"name": "Duck project sounds",
3+
"description": "Mutes or lowers the volume of project when audio is being played elsewhere.",
4+
"tags": ["editor", "codeEditor", "beta"],
5+
"versionAdded": "1.43.0",
6+
"userscripts": [
7+
{
8+
"url": "userscript.js",
9+
"matches": ["projects"]
10+
}
11+
],
12+
"credits": [{ "name": "Jazza", "link": "http://github.com/Jazza-231" }],
13+
"relatedAddons": ["vol-slider", "mute-project"],
14+
"settings": [{ "name": "Duck volume", "id": "volume", "type": "integer", "min": 0, "max": 100, "default": 10 }]
15+
}

addons/duck/userscript.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import { setup, setVolume, getVolume } from "../vol-slider/module.js";
2+
3+
export default async ({ addon }) => {
4+
while (true) {
5+
const soundEditorContainer = await addon.tab.waitForElement('[class*="sound-editor_editor-container_"]', {
6+
markAsSeen: true,
7+
});
8+
9+
const vm = addon.tab.traps.vm;
10+
11+
console.log(vm);
12+
13+
setup(vm);
14+
15+
let currentVolume = getVolume();
16+
let ducking = false;
17+
18+
let fiber = soundEditorContainer[addon.tab.traps.getInternalKey(soundEditorContainer)];
19+
while (fiber && !(fiber.stateNode && (fiber.stateNode.handlePlay || fiber.stateNode.handleEffect))) {
20+
fiber = fiber.return;
21+
}
22+
if (!fiber || !fiber.stateNode) continue;
23+
24+
const instance = fiber.stateNode;
25+
26+
console.log(instance);
27+
28+
const oldHandlePlay = instance.handlePlay;
29+
instance.handlePlay = function () {
30+
const result = oldHandlePlay.apply(this);
31+
32+
if (!ducking) currentVolume = getVolume();
33+
setVolume(addon.settings.get("volume") / 100);
34+
35+
ducking = true;
36+
37+
return result;
38+
};
39+
40+
const oldHandleStoppedPlaying = instance.handleStoppedPlaying;
41+
instance.handleStoppedPlaying = function () {
42+
const result = oldHandleStoppedPlaying.apply(this);
43+
44+
setVolume(currentVolume);
45+
ducking = false;
46+
47+
return result;
48+
};
49+
}
50+
};

0 commit comments

Comments
 (0)