Compare commits

...

4 Commits

Author SHA1 Message Date
8c7dfefb7b upd desc 2025-07-11 18:43:34 +01:00
310e96aa0f 0.6.0 2025-07-11 18:41:27 +01:00
b6e734513a add gain to Audio section 2025-07-11 18:41:18 +01:00
aa125d2f46 add audio gain command 2025-07-11 18:41:03 +01:00
5 changed files with 62 additions and 5 deletions

View File

@ -104,6 +104,13 @@ meld-cli audio toggle "Mic"
meld-cli audio status "Mic"
```
- gain: Adjust the audio gain
- args: audioName gainValue
```console
meld-cli audio gain "System" -12.8
```
#### Stream
- start: Start streaming

View File

@ -13,7 +13,7 @@ import WebSocket from 'ws'
import cli from '../src/cli.js'
import style from '../src/style.js'
import { sceneHelp, sceneList, sceneSwitch, sceneCurrent } from '../src/scene.js'
import { audioHelp, audioList, audioMute, audioUnmute, audioToggle, audioStatus } from '../src/audio.js'
import { audioHelp, audioList, audioMute, audioUnmute, audioToggle, audioStatus, audioGain } from '../src/audio.js'
import { streamHelp, streamStart, streamStop, streamToggle, streamStatus } from '../src/stream.js'
import { recordHelp, recordStart, recordStop, recordToggle, recordStatus } from '../src/record.js'
import { clipHelp, clipSave } from '../src/clip.js'
@ -138,6 +138,12 @@ socket.onopen = function () {
}
withChannel(socket, (channel) => audioStatus(channel, audioArguments[0]))
break
case 'gain':
if (!audioArguments[0] || isNaN(audioArguments[1])) {
printError('Error: Audio name and gain value are required for the gain command.')
}
withChannel(socket, (channel) => audioGain(channel, audioArguments[0], parseFloat(audioArguments[1])))
break
default:
printHelp(audioHelp)
}

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{
"name": "@onyx-and-iris/meld-cli",
"version": "0.5.3",
"version": "0.6.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@onyx-and-iris/meld-cli",
"version": "0.5.3",
"version": "0.6.0",
"license": "MIT",
"dependencies": {
"cli-color": "^2.0.4",

View File

@ -1,6 +1,6 @@
{
"name": "@onyx-and-iris/meld-cli",
"version": "0.5.3",
"version": "0.6.0",
"description": "A command line interface for Meld Studio WebChannel API",
"keywords": [
"meld",

View File

@ -27,6 +27,9 @@ const commands = {
},
status: {
desc: 'Show current audio status'
},
gain: {
desc: 'Adjust the audio gain'
}
}
@ -238,11 +241,52 @@ function audioStatus (channel, audioName) {
})
}
/**
* Adjust the gain of a specific audio track by name.
* @param {Object} channel - The channel object containing Meld session data.
* @param {string} audioName - The name of the audio track to adjust.
* @param {number} gainValue - The gain value to set (-60.0 to 0.0).
* @returns {Promise<string>} Resolves with a success message or rejects with an error.
*/
function audioGain (channel, audioName, gainValue) {
if (!channel.objects || !channel.objects.meld) {
return Promise.reject(new Error('Meld object not found in channel.'))
}
const meld = channel.objects.meld
let itemId
for (const [key, value] of Object.entries(meld.session.items)) {
if (value.type === 'track' && value.name === audioName) {
itemId = key
break
}
}
if (!itemId) {
return Promise.reject(new Error(`No audio device with name ${style.errHighlight(audioName)} found.`))
}
if (typeof gainValue !== 'number' || gainValue < -60.0 || gainValue > 0.0) {
return Promise.reject(new Error('Gain value must be between -60.0 and 0.0.'))
}
// Convert dB (-60.0 to 0.0) to linear gain (0 to 1)
const dbDisplay = Math.pow(10, gainValue / 20)
return new Promise((resolve, reject) => {
meld.setGain(itemId, dbDisplay)
.then(() => {
resolve(`Audio track ${style.highlight(audioName)} gain set to ${gainValue}.`)
})
.catch((err) => {
reject(new Error(`Error setting audio gain: ${err.message}`))
})
})
}
export {
audioHelp,
audioList,
audioMute,
audioUnmute,
audioToggle,
audioStatus
audioStatus,
audioGain
}