@@ -0,0 +1,34 @@
|
||||
// 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;
|
||||
}
|
||||
Reference in New Issue
Block a user