Files
gnome-jarvis/daemon/tts-config.js
T
snxraven a4073b9020
Rolling release / release (push) Successful in 6m36s
Check Point
2026-09-12 09:07:09 -04:00

35 lines
1.9 KiB
JavaScript

// Model configuration fields are checked against the installed QVAC 0.19 SDK.
export const TTS_PRESETS = Object.freeze({
'supertonic-en': { model: 'TTS_EN_SUPERTONIC_Q8_0', engine: 'supertonic', sampleRate: 44100 },
supertonic3: { model: 'TTS_MULTILINGUAL_SUPERTONIC3_Q8_0', engine: 'supertonic', sampleRate: 44100 },
chatterbox: { model: 'TTS_T3_TURBO_EN_CHATTERBOX_Q8_0', engine: 'chatterbox', sampleRate: 24000 },
parler: { model: 'TTS_MINI_V1_EN_PARLER_TTS_Q8_0', engine: 'parler', sampleRate: 44100 },
});
export function ttsConfiguration(settings) {
const preset = TTS_PRESETS[settings.ttsPreset];
if (!preset) throw new Error('Unknown speech model preset');
const config = { ttsEngine: preset.engine, useGPU: settings.ttsUseGpu };
if (preset.engine === 'supertonic') {
Object.assign(config, { language: settings.ttsPreset === 'supertonic3' ? settings.ttsLanguage : 'en', voice: settings.voiceId, ttsSpeed: settings.ttsSpeed, ttsNumInferenceSteps: settings.ttsSteps });
} else {
Object.assign(config, { threads: settings.ttsThreads, seed: settings.ttsSeed });
if (preset.engine === 'chatterbox') {
Object.assign(config, { language: 'en', s3genModelSrc: 'TTS_S3GEN_EN_CHATTERBOX', cfmSteps: settings.ttsCfmSteps });
if (settings.ttsReferenceAudio) config.referenceAudioSrc = settings.ttsReferenceAudio;
} else {
if (!settings.ttsDescription) throw new Error('Describe the Parler voice before applying settings');
Object.assign(config, { description: settings.ttsDescription, temperature: settings.ttsTemperature });
}
}
return { model: settings.ttsModel || preset.model, sampleRate: preset.sampleRate, config };
}
export function scaleSpeech(samples, volume = 100) {
if (volume === 100) return samples;
const output = new Int16Array(samples.length);
const gain = Math.max(0, Math.min(100, volume)) / 100;
for (let i = 0; i < samples.length; i++) output[i] = Math.round(samples[i] * gain);
return output;
}