echogarden
Version:
An easy-to-use speech toolset. Includes tools for synthesis, recognition, alignment, speech translation, language detection, source separation and more.
156 lines • 3.27 kB
JavaScript
import { ensureRawAudio } from '../audio/AudioUtilities.js';
import { Logger } from '../utilities/Logger.js';
import { extendDeep } from '../utilities/ObjectUtilities.js';
export async function synthesize(text, voice, speed, options) {
const logger = new Logger();
logger.start('Request synthesis from OpenAI Cloud API');
options = extendDeep(defaultOpenAICloudTTSOptions, options);
if (!options.apiKey) {
throw new Error(`No API key given`);
}
const { default: OpenAI } = await import('openai');
const openai = new OpenAI(options);
const result = await openai.audio.speech.create({
input: text,
model: options.model,
voice: voice,
instructions: options.instructions,
response_format: 'opus',
speed,
}, {
maxRetries: 10
});
const resultBuffer = await result.buffer();
logger.start('Decode returned audio');
const resultRawAudio = ensureRawAudio(resultBuffer);
logger.end();
return resultRawAudio;
}
export const defaultOpenAICloudTTSOptions = {
apiKey: undefined,
organization: undefined,
baseURL: undefined,
model: 'tts-1',
instructions: undefined,
timeout: undefined,
maxRetries: 10,
};
// Reference: https://platform.openai.com/docs/guides/text-to-speech#supported-languages
export const supportedLanguages = [
'en',
'af',
'ar',
'hy',
'az',
'be',
'bs',
'bg',
'ca',
'zh',
'hr',
'cs',
'da',
'nl',
'en',
'et',
'fi',
'fr',
'gl',
'de',
'el',
'he',
'hi',
'hu',
'is',
'id',
'it',
'ja',
'kn',
'kk',
'ko',
'lv',
'lt',
'mk',
'ms',
'mr',
'mi',
'ne',
'no',
'fa',
'pl',
'pt',
'ro',
'ru',
'sr',
'sk',
'sl',
'es',
'sw',
'sv',
'tl',
'ta',
'th',
'tr',
'uk',
'ur',
'vi',
'cy',
];
export const voiceList = [
{
name: 'alloy',
languages: ['en-US', ...supportedLanguages],
gender: 'male',
},
{
name: 'ash',
languages: ['en-US', ...supportedLanguages],
gender: 'male',
},
{
name: 'ballad',
languages: ['en-GB', ...supportedLanguages],
gender: 'male',
},
{
name: 'coral',
languages: ['en-US', ...supportedLanguages],
gender: 'female',
},
{
name: 'echo',
languages: ['en-US', ...supportedLanguages],
gender: 'male',
},
{
name: 'fable',
languages: ['en-GB', ...supportedLanguages],
gender: 'male',
},
{
name: 'onyx',
languages: ['en-US', ...supportedLanguages],
gender: 'male',
},
{
name: 'nova',
languages: ['en-US', ...supportedLanguages],
gender: 'female',
},
{
name: 'sage',
languages: ['en-US', ...supportedLanguages],
gender: 'female',
},
{
name: 'shimmer',
languages: ['en-US', ...supportedLanguages],
gender: 'female',
},
{
name: 'verse',
languages: ['en-US', ...supportedLanguages],
gender: 'male',
},
];
//# sourceMappingURL=OpenAICloudTTS.js.map