Skip to content

Instantly share code, notes, and snippets.

@dabit3
Last active December 29, 2021 06:38
Show Gist options
  • Save dabit3/7f31075638a4a32e0bdcb8176f946efe to your computer and use it in GitHub Desktop.
Save dabit3/7f31075638a4a32e0bdcb8176f946efe to your computer and use it in GitHub Desktop.
Lambda function to interact with Amazon Polly & Amazon Translate
var AWS = require('aws-sdk')
AWS.config.update({region: 'us-east-1'})
const uuidV4 = require('uuid/v4')
var translate = new AWS.Translate();
var polly = new AWS.Polly();
var s3 = new AWS.S3({
params: {
Bucket: 'YOURBUCKETNAME',
}
})
exports.handler = (event, context, callback) => {
// Step 1: translate the text
let message = ''
var translateParams = {
SourceLanguageCode: 'en',
TargetLanguageCode: event.code,
Text: event.sentence
}
translate.translateText(translateParams, function (err, data) {
if (err) callback(err)
message = data.TranslatedText
const voices = {
'es': 'Penelope',
'pt': 'Vitoria',
'de': 'Vicki',
'en': 'Joanna',
'fr': 'Celine'
}
const voice = voices[event.code]
var pollyParams = {
OutputFormat: "mp3",
SampleRate: "8000",
Text: message,
TextType: "text",
VoiceId: voice
};
// step 2: synthesize the translation into speech
polly.synthesizeSpeech(pollyParams, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else {
let key = uuidV4()
var params2 = {
Key: key,
ContentType: 'audio/mpeg',
Body: data.AudioStream,
ACL: 'public-read'
};
s3.putObject(params2, function(err, data) {
if (err) {
callback('error putting item: ', err)
} else {
callback(null, { sentence: key })
}
});
}
});
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment