mirror of
https://github.com/onyx-and-iris/meld-cli.git
synced 2026-04-09 02:43:35 +00:00
implement audio commands
This commit is contained in:
150
utils/audio.js
Normal file
150
utils/audio.js
Normal file
@@ -0,0 +1,150 @@
|
||||
import meowHelp from "cli-meow-help";
|
||||
|
||||
const commands = {
|
||||
mute: {
|
||||
desc: "Mute the audio",
|
||||
},
|
||||
unmute: {
|
||||
desc: "Unmute the audio",
|
||||
},
|
||||
toggle: {
|
||||
desc: "Toggle audio mute state",
|
||||
},
|
||||
status: {
|
||||
desc: "Show current audio status",
|
||||
},
|
||||
}
|
||||
|
||||
const flags = {
|
||||
help: {
|
||||
type: "boolean",
|
||||
shortFlag: "h",
|
||||
desc: "Display help information"
|
||||
},
|
||||
};
|
||||
|
||||
const audioHelp = meowHelp({
|
||||
name: "meld-cli audio",
|
||||
flags,
|
||||
commands,
|
||||
description: "Manage audio settings in Meld",
|
||||
defaults: false,
|
||||
});
|
||||
|
||||
function audioMute(channel, audioName) {
|
||||
if (!channel.objects || !channel.objects.meld) {
|
||||
return Promise.reject(new Error("Meld object not found in channel."));
|
||||
}
|
||||
const meld = channel.objects.meld;
|
||||
let itemId;
|
||||
let isMuted;
|
||||
for (const [key, value] of Object.entries(meld.session.items)) {
|
||||
if (value.type === "track" && value.name === audioName) {
|
||||
itemId = key;
|
||||
isMuted = value.muted;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!itemId) {
|
||||
return Promise.reject(new Error(`No audio device with name ${audioName} found.`));
|
||||
}
|
||||
if (isMuted) {
|
||||
return Promise.resolve(`Audio track ${audioName} is already muted.`);
|
||||
}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
meld.toggleMute(itemId)
|
||||
.then(() => {
|
||||
resolve(`Audio track ${audioName} has been muted.`);
|
||||
})
|
||||
.catch((err) => {
|
||||
reject(new Error(`Error muting audio track: ${err}`));
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
function audioUnmute(channel, audioName) {
|
||||
if (!channel.objects || !channel.objects.meld) {
|
||||
return Promise.reject(new Error("Meld object not found in channel."));
|
||||
}
|
||||
const meld = channel.objects.meld;
|
||||
let itemId;
|
||||
let isMuted;
|
||||
for (const [key, value] of Object.entries(meld.session.items)) {
|
||||
if (value.type === "track" && value.name === audioName) {
|
||||
itemId = key;
|
||||
isMuted = value.muted;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!itemId) {
|
||||
return Promise.reject(new Error("No audio track found."));
|
||||
}
|
||||
if (!isMuted) {
|
||||
return Promise.resolve(`Audio track ${audioName} is already unmuted.`);
|
||||
}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
meld.toggleMute(itemId)
|
||||
.then(() => {
|
||||
resolve(`Audio track ${audioName} has been unmuted.`);
|
||||
})
|
||||
.catch((err) => {
|
||||
reject(new Error(`Error unmuting audio track: ${err}`));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function audioToggle(channel, audioName) {
|
||||
if (!channel.objects || !channel.objects.meld) {
|
||||
return Promise.reject(new Error("Meld object not found in channel."));
|
||||
}
|
||||
const meld = channel.objects.meld;
|
||||
let itemId;
|
||||
let isMuted;
|
||||
for (const [key, value] of Object.entries(meld.session.items)) {
|
||||
if (value.type === "track" && value.name === audioName) {
|
||||
itemId = key;
|
||||
isMuted = value.muted;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!itemId) {
|
||||
return Promise.reject(new Error(`No audio device with name ${audioName} found.`));
|
||||
}
|
||||
return new Promise((resolve, reject) => {
|
||||
meld.toggleMute(itemId)
|
||||
.then(() => {
|
||||
const status = isMuted ? "unmuted" : "muted";
|
||||
resolve(`Audio track ${audioName} has been ${status}.`);
|
||||
})
|
||||
.catch((err) => {
|
||||
reject(new Error(`Error toggling audio track: ${err}`));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function audioStatus(channel, audioName) {
|
||||
if (!channel.objects || !channel.objects.meld) {
|
||||
return Promise.reject(new Error("Meld object not found in channel."));
|
||||
}
|
||||
const meld = channel.objects.meld;
|
||||
let itemId;
|
||||
let isMuted;
|
||||
for (const [key, value] of Object.entries(meld.session.items)) {
|
||||
if (value.type === "track" && value.name === audioName) {
|
||||
itemId = key;
|
||||
isMuted = value.muted;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!itemId) {
|
||||
return Promise.reject(new Error(`No audio device with name ${audioName} found.`));
|
||||
}
|
||||
return new Promise((resolve, reject) => {
|
||||
resolve(isMuted);
|
||||
});
|
||||
}
|
||||
|
||||
export { audioHelp, audioMute, audioUnmute, audioToggle, audioStatus }
|
||||
@@ -5,6 +5,9 @@ const commands = {
|
||||
scene: {
|
||||
desc: "Manage scenes",
|
||||
},
|
||||
audio: {
|
||||
desc: "Manage audio settings",
|
||||
},
|
||||
};
|
||||
|
||||
const flags = {
|
||||
|
||||
Reference in New Issue
Block a user