Skip to content

Commit 47554df

Browse files
committed
apply to vol slider & media recorder
1 parent c860449 commit 47554df

File tree

2 files changed

+28
-11
lines changed

2 files changed

+28
-11
lines changed

src/addons/addons/mediarecorder/userscript.js

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -323,12 +323,25 @@ export default async ({ addon, console, msg }) => {
323323
vm.runtime.audioEngine.inputNode.connect(mediaStreamDestination);
324324
const audioSource = ctx.createMediaStreamSource(mediaStreamDestination.stream);
325325
audioSource.connect(dest);
326-
// literally any other extension
327-
for (const audioData of vm.runtime._extensionAudioObjects.values()) {
328-
if (audioData.audioContext && audioData.gainNode) {
329-
const mediaStreamDestination = audioData.audioContext.createMediaStreamDestination();
330-
audioData.gainNode.connect(mediaStreamDestination);
326+
327+
// connecting extensions to the media stream
328+
for (const extensionInformation of this._extensionIntegrationObjects.values()) {
329+
if (extensionInformation.whitelistUsed && !extensionInformation.whitelist.includes("audioMediaStream")) continue;
330+
// map destination AudioNodes to their AudioContexts
331+
const contextMap = new Map();
332+
for (const audioNode of extensionInformation.audioNodes) {
333+
const nodeArray = contextMap.get(audioNode.context) || [];
334+
nodeArray.push(audioNode);
335+
contextMap.set(audioNode.context, nodeArray);
336+
}
337+
// make media stream destinations, connect destination nodes from each context to the stream
338+
for (const audioContext of extensionInformation.audioContexts) {
339+
const mediaStreamDestination = audioContext.createMediaStreamDestination();
331340
const audioSource = ctx.createMediaStreamSource(mediaStreamDestination.stream);
341+
const audioNodes = contextMap.get(audioContext);
342+
for (const audioNode of audioNodes) {
343+
audioNode.connect(mediaStreamDestination);
344+
}
332345
audioSource.connect(dest);
333346
}
334347
}

src/addons/addons/vol-slider/module.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@ const callbacks = [];
1111
export const setVolume = (newVolume) => {
1212
if (gainNode) {
1313
gainNode.value = newVolume;
14+
1415
// literally any other extension
15-
for (const audioData of globalVm.runtime._extensionAudioObjects.values()) {
16-
if (audioData.gainNode) {
17-
audioData.gainNode.gain.value = gainNode.value;
16+
for (const extensionInformation of this._extensionIntegrationObjects.values()) {
17+
if (extensionInformation.whitelistUsed && !extensionInformation.whitelist.includes("gainNodeSet")) continue;
18+
for (const extensionGainNode of extensionInformation.gainNodes) {
19+
extensionGainNode.gain.value = gainNode.value;
1820
}
1921
}
2022
} else {
@@ -58,10 +60,12 @@ const gotAudioEngine = (audioEngine) => {
5860
}
5961
gainNode = audioEngine.inputNode.gain;
6062
gainNode.value = volumeBeforeFinishSetup;
63+
6164
// literally any other extension
62-
for (const audioData of globalVm.runtime._extensionAudioObjects.values()) {
63-
if (audioData.gainNode) {
64-
audioData.gainNode.gain.value = gainNode.value;
65+
for (const extensionInformation of this._extensionIntegrationObjects.values()) {
66+
if (extensionInformation.whitelistUsed && !extensionInformation.whitelist.includes("gainNodeSet")) continue;
67+
for (const extensionGainNode of extensionInformation.gainNodes) {
68+
extensionGainNode.gain.value = gainNode.value;
6569
}
6670
}
6771
};

0 commit comments

Comments
 (0)