UNPKG

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
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