const ttsGoogle = require('@google-cloud/text-to-speech'); const sttGoogle = require('@google-cloud/speech').v1p1beta1; const Polly = require('aws-sdk/clients/polly'); const AWS = require('aws-sdk'); const bent = require('bent'); const fs = require('fs'); const testGoogleTts = async(logger, credentials) => { const client = new ttsGoogle.TextToSpeechClient({credentials}); await client.listVoices(); }; const testGoogleStt = async(logger, credentials) => { const client = new sttGoogle.SpeechClient({credentials}); const config = { sampleRateHertz: 8000, languageCode: 'en-US', model: 'default', }; const audio = { content: fs.readFileSync(`${__dirname}/../../data/test_audio.wav`).toString('base64'), }; const request = { config: config, audio: audio, }; // Detects speech in the audio file const [response] = await client.recognize(request); if (!Array.isArray(response.results) || 0 === response.results.length) { throw new Error('failed to transcribe speech'); } }; const testAwsTts = (logger, credentials) => { const polly = new Polly(credentials); return new Promise((resolve, reject) => { polly.describeVoices({LanguageCode: 'en-US'}, (err, data) => { if (err) return reject(err); resolve(); }); }); }; const testAwsStt = (logger, credentials) => { const transcribeservice = new AWS.TranscribeService(credentials); return new Promise((resolve, reject) => { transcribeservice.listVocabularies((err, data) => { if (err) return reject(err); logger.info({data}, 'retrieved language models'); resolve(); }); }); }; const testMicrosoftTts = async(logger, credentials) => { const {api_key, region} = credentials; if (!api_key) throw new Error('testMicrosoftTts: credentials are missing api_key'); if (!region) throw new Error('testMicrosoftTts: credentials are missing region'); try { const getJSON = bent('json', { 'Ocp-Apim-Subscription-Key': api_key }); const response = await getJSON(`https://${region}.tts.speech.microsoft.com/cognitiveservices/voices/list`); return response; } catch (err) { logger.info({err}, `testMicrosoftTts - failed to list voices for region ${region}`); throw err; } }; const testMicrosoftStt = async(logger, credentials) => { //TODO return true; }; const testWellSaidTts = async(logger, credentials) => { const {api_key} = credentials; try { const post = bent('https://api.wellsaidlabs.com', 'POST', 'buffer', { 'X-Api-Key': api_key, 'Accept': 'audio/mpeg', 'Content-Type': 'application/json' }); const mp3 = await post('/v1/tts/stream', { text: 'Hello, world', speaker_id: '3' }); return mp3; } catch (err) { logger.info({err}, 'testWellSaidTts returned error'); throw err; } }; const testWellSaidStt = async(logger, credentials) => { //TODO return true; }; module.exports = { testGoogleTts, testGoogleStt, testAwsTts, testWellSaidTts, testAwsStt, testMicrosoftTts, testMicrosoftStt, testWellSaidStt, };