echogarden
Version:
An easy-to-use speech toolset. Includes tools for synthesis, recognition, alignment, speech translation, language detection, source separation and more.
127 lines • 3.44 kB
JavaScript
import { request } from 'gaxios';
import * as FFMpegTranscoder from '../codecs/FFMpegTranscoder.js';
import { Logger } from '../utilities/Logger.js';
import { logToStderr } from '../utilities/Utilities.js';
import { extendDeep } from '../utilities/ObjectUtilities.js';
const log = logToStderr;
export async function synthesize(text, modelId, options) {
const logger = new Logger();
logger.start('Request synthesis from Deepgram');
options = extendDeep(defaultDeepgramTTSOptions, options);
let response;
try {
response = await request({
url: `https://api.deepgram.com/v1/speak`,
params: {
model: modelId,
encoding: 'mp3',
bit_rate: 48000,
},
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Token ${options.apiKey}`,
},
data: {
text,
},
responseType: 'arraybuffer'
});
}
catch (e) {
const response = e.response;
if (response) {
logger.log(`Request failed with status code ${response.status}`);
if (response.data) {
logger.log(`Server responded with:`);
logger.log(response.data);
}
}
throw e;
}
logger.start('Decode synthesized audio');
const rawAudio = await FFMpegTranscoder.decodeToChannels(new Uint8Array(response.data));
logger.end();
return { rawAudio };
}
export async function getVoiceList() {
return voiceList;
}
export const defaultDeepgramTTSOptions = {
apiKey: undefined,
};
export const voiceList = [
{
name: 'Asteria',
deepgramModelId: 'aura-asteria-en',
languages: ['en-US', 'en'],
gender: 'female',
},
{
name: 'Luna',
deepgramModelId: 'aura-luna-en',
languages: ['en-US', 'en'],
gender: 'female',
},
{
name: 'Stella',
deepgramModelId: 'aura-stella-en',
languages: ['en-US', 'en'],
gender: 'female',
},
{
name: 'Athena',
deepgramModelId: 'aura-athena-en',
languages: ['en-GB', 'en'],
gender: 'female',
},
{
name: 'Hera',
deepgramModelId: 'aura-hera-en',
languages: ['en-US', 'en'],
gender: 'female',
},
{
name: 'Orion',
deepgramModelId: 'aura-orion-en',
languages: ['en-US', 'en'],
gender: 'male',
},
{
name: 'Arcas',
deepgramModelId: 'aura-arcas-en',
languages: ['en-US', 'en'],
gender: 'male',
},
{
name: 'Perseus',
deepgramModelId: 'aura-perseus-en',
languages: ['en-US', 'en'],
gender: 'male',
},
{
name: 'Angus',
deepgramModelId: 'aura-angus-en',
languages: ['en-US', 'en'],
gender: 'male',
},
{
name: 'Orpheus',
deepgramModelId: 'aura-orpheus-en',
languages: ['en-US', 'en'],
gender: 'male',
},
{
name: 'Helios',
deepgramModelId: 'aura-helios-en',
languages: ['en-US', 'en'],
gender: 'male',
},
{
name: 'Zeus',
deepgramModelId: 'aura-zeus-en',
languages: ['en-US', 'en'],
gender: 'male',
},
];
//# sourceMappingURL=DeepgramTTS.js.map