Files
companion-module-voicemod/main.js
RavenX8 56d486e4cf ### Added
- preset for hold to beep (basically the 'censor beep')
2024-01-27 00:59:01 -05:00

187 lines
5.3 KiB
JavaScript

const { InstanceBase, runEntrypoint, InstanceStatus } = require('@companion-module/base')
const UpgradeScripts = require('./upgrades')
const UpdateActions = require('./actions')
const UpdateFeedbacks = require('./feedbacks')
const UpdateVariableDefinitions = require('./variables')
const UpdatePresets = require('./presets')
const { VoiceMod } = require('voicemod')
class ModuleInstance extends InstanceBase {
constructor(internal) {
super(internal)
this.loaded = false
this.failure = 0
this.config = {}
this.memes = []
this.backgroundEffectsEnabled = false
this.voiceChangerEnabled = false
this.hearMyVoiceEnabled = false
this.muteEnabled = false
this.muteMemesEnabled = false
this.currentVoiceName = ''
}
sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms))
}
async init(config) {
this.config = config
this.log('debug', 'init called')
do {
this.updateStatus(InstanceStatus.Connecting)
this.vm = new VoiceMod(this.config.host, 'controlapi-pty528000')
try {
await this.vm.init().then(
async () => {
this.vm.internal.on('backgroundEffectsEnabledEvent', (background) => {
this.backgroundEffectsEnabled = true
this.checkFeedbacks('BackgroundEffectState')
})
this.vm.internal.on('backgroundEffectsDisabledEvent', (background) => {
this.backgroundEffectsEnabled = false
this.checkFeedbacks('BackgroundEffectState')
})
this.vm.internal.on('voiceChangerEnabledEvent', (data) => {
this.voiceChangerEnabled = true
this.checkFeedbacks('VoiceChangerState')
this.updateVariableDefinitions()
})
this.vm.internal.on('voiceChangerDisabledEvent', (data) => {
this.voiceChangerEnabled = false
this.checkFeedbacks('VoiceChangerState')
this.updateVariableDefinitions()
})
this.vm.internal.on('hearMySelfEnabledEvent', (data) => {
this.hearMyVoiceEnabled = true
this.checkFeedbacks('HearMyVoiceState')
})
this.vm.internal.on('hearMySelfDisabledEvent', (data) => {
this.hearMyVoiceEnabled = false
this.checkFeedbacks('HearMyVoiceState')
})
this.vm.internal.on('muteMicrophoneEnabledEvent', (data) => {
this.muteEnabled = true
this.checkFeedbacks('MicMutedState')
this.updateVariableDefinitions()
})
this.vm.internal.on('muteMicrophoneDisabledEvent', (data) => {
this.muteEnabled = false
this.checkFeedbacks('MicMutedState')
this.updateVariableDefinitions()
})
this.vm.internal.on('muteMemeForMeEnabledEvent', (data) => {
this.muteMemesEnabled = true
this.checkFeedbacks('MemesMutedForMeState')
})
this.vm.internal.on('muteMemeForMeDisabledEvent', (data) => {
this.muteMemesEnabled = false
this.checkFeedbacks('MemesMutedForMeState')
})
this.vm.internal.on('getAllSoundboard', (data) => {
this.updateActions()
})
this.vm.internal.on('voiceLoadedEvent', (data) => {
this.currentVoiceName = data.voiceId
this.updateVariableDefinitions()
})
this.vm.internal.on('getCurrentVoice', (data) => {
this.currentVoiceName = data.voiceId
this.updateVariableDefinitions()
})
this.vm.internal.on('toggleVoiceChanger', (data) => {
this.voiceChangerEnabled = data.value
this.checkFeedbacks('VoiceChangerState')
this.updateVariableDefinitions()
})
this.vm.internal.on('toggleMuteMic', (data) => {
this.muteEnabled = data.value
this.checkFeedbacks('MicMutedState')
this.updateVariableDefinitions()
})
await this.vm.internal.getCurrentVoice()
this.vm.internal.getVoiceChangerStatus()
this.vm.internal.getMuteMicStatus()
this.loaded = true
this.updateStatus(InstanceStatus.Ok)
this.updatePresets()
this.updateActionsFeedbacksVariables()
this.log('debug', 'connected to VM and ready')
},
(reason) => {
this.log('debug', reason)
this.updateStatus(InstanceStatus.ConnectionFailure)
++this.failure
}
)
} catch (e) {
this.log('debug', e)
this.updateStatus(InstanceStatus.UnknownError)
++this.failure
}
} while (this.loaded === false && this.failure < 5)
}
// When module gets deleted
async destroy() {
this.log('debug', 'destroy')
}
async configUpdated(config) {
this.config = config
this.log('debug', 'config updated')
}
// Return config fields for web config
getConfigFields() {
return [
{
id: 'host',
type: 'textinput',
label: 'Host address',
tooltip: 'Enter the IP/Hostname for the voicemod instance',
default: '127.0.0.1',
},
]
}
updateActionsFeedbacksVariables() {
this.updateActions() // export actions
this.updateFeedbacks() // export feedbacks
this.updateVariableDefinitions() // export variable definitions
this.subscribeActions()
this.subscribeFeedbacks()
this.checkFeedbacks()
}
updateActions() {
UpdateActions(this)
}
updateFeedbacks() {
UpdateFeedbacks(this)
}
updateVariableDefinitions() {
UpdateVariableDefinitions(this)
this.setVariableValues({
microphoneMuted: this.muteEnabled,
voiceChangerStatus: this.voiceChangerEnabled,
voiceSelected: this.currentVoiceName,
})
}
updatePresets() {
UpdatePresets(this)
}
}
runEntrypoint(ModuleInstance, UpgradeScripts)