echogarden
Version:
An easy-to-use speech toolset. Includes tools for synthesis, recognition, alignment, speech translation, language detection, source separation and more.
77 lines • 2.57 kB
JavaScript
import { request } from 'gaxios';
import { Logger } from '../utilities/Logger.js';
import { logToStderr } from '../utilities/Utilities.js';
import { decodeBase64 } from '../encodings/Base64.js';
import * as FFMpegTranscoder from '../codecs/FFMpegTranscoder.js';
const log = logToStderr;
export async function synthesize(text, apiKey, languageCode = 'en-US', voice = 'en-US-Wavenet-C', speakingRate = 1.0, pitchDeltaSemitones = 0.0, volumeGainDecibels = 0.0, ssml = false, audioEncoding = 'MP3', sampleRate = 24000) {
const logger = new Logger();
logger.start('Request synthesis from Google Cloud');
const requestBody = {
input: {
text: undefined,
ssml: undefined
},
voice: {
languageCode,
name: voice
},
audioConfig: {
audioEncoding,
speakingRate,
pitch: pitchDeltaSemitones,
volumeGainDb: volumeGainDecibels,
sampleRateHertz: sampleRate
},
enableTimePointing: ['SSML_MARK']
};
if (ssml) {
requestBody.input.ssml = text;
}
else {
requestBody.input.text = text;
}
const response = await request({
method: 'POST',
url: `https://texttospeech.googleapis.com/v1beta1/text:synthesize`,
params: {
'key': apiKey
},
headers: {
'User-Agent': ''
},
data: requestBody,
responseType: 'json'
});
logger.start('Parse result');
const result = parseResponseBody(response.data);
logger.start('Decode to raw audio');
const rawAudio = await FFMpegTranscoder.decodeToChannels(result.audioData);
const timepoints = result.timepoints;
logger.end();
return { rawAudio, timepoints };
}
function parseResponseBody(responseBody) {
const audioData = decodeBase64(responseBody.audioContent);
const timepoints = responseBody.timepoints;
return { audioData, timepoints };
}
// Voices with audio samples: https://cloud.google.com/text-to-speech/docs/voices
export async function getVoiceList(apiKey) {
const requestURL = `https://texttospeech.googleapis.com/v1beta1/voices`;
const response = await request({
method: 'GET',
url: requestURL,
params: {
'key': apiKey
},
headers: {
'User-Agent': ''
},
responseType: 'json'
});
const responseData = response.data;
const voices = responseData.voices;
return voices;
}
//# sourceMappingURL=GoogleCloudTTS.js.map