В настоящее время я использую amazon polly для создания звуковых файлов из данных, однако, когда я запускаю свой скрипт, я получаю сообщение об ошибке:
ThrottlingException: скорость превышена.
Что у меня сейчас
Вот функция, которую я использую
function createAudioFiles(data, outputDir) {
console.log('in createAudioFiles with data: ' , data);
return new Promise((resolve, reject) => {
let successessfullyCompletedAmount = 0;
for ({ audioText, filename } of data) {
createAudio(audioText, filename, outputDir)
.then(({ status, message }) => {
if (status == "success") {
successessfullyCompletedAmount++;
console.log(message);
}
// if all audio files have been created
if (successessfullyCompletedAmount == data.length) {
resolve({
status: 'success',
message: "successfully created audioFiles"
})
}
})
}
});
}
Функция createAudio в этой функции:
function createAudio(text, filename, outputDir) {
let params = {
'Text': text,
'OutputFormat': 'mp3',
'VoiceId': 'Amy'
};
return new Promise((resolve, reject) => {
Polly.synthesizeSpeech(params, (err, data) => {
if (err) {
console.log("errors found");
console.log(err);
} else if (data) {
if (data.AudioStream instanceof Buffer) {
fs.writeFile(`${outputDir}/${filename}`, data.AudioStream, function (err) {
if (err) {
return reject({
status: "error",
message: err
})
}
resolve({
status: "success",
message: filename + " saved"
});
})
}
}
});
})
}.
Что я пытался.
Я попытался добавить оболочку setTimeout()
в цикл for
следующим образом:
setTimeout(function() {
for ({ audioText, filename } of data) {
createAudio(audioText, filename, outputDir)
.then(({ status, message }) => {
if (status == "success") {
successessfullyCompletedAmount++;
console.log(message);
}
// if all audio files have been created
if (successessfullyCompletedAmount == data.length) {
resolve({
status: 'success',
message: "successfully created audioFiles"
})
}
})
}
}, 2000);
но это, похоже, ничего не меняет. Я думаю, что происходит, когда все данные собираются и отправляются одновременно.
Что я хочу, чтобы произошло.
Я бы хотел добавить небольшую задержку между каждым 'get' от amazon, чтобы замедлить скорость.