下面是我的代码,我隐藏了我的accesskey和id。音频以blob url的形式返回,上传到音频文件时无法播放。音频文件如何存储在aws s3 中
AWS.config.region = 'us-west-2'
var polly = new AWS.Polly()
var params = {
OutputFormat: 'mp3',
Text: 'Hello David, How are you?',
TextType: 'text',
VoiceId: 'Joanna',
SampleRate: '22050'
}
polly.synthesizeSpeech(params, function (err, data) {
// if (err) {
// console.log(err, err.stack)
// }else {
// var uInt8Array = new Uint8Array(data.AudioStream);
// var arrayBuffer = uInt8Array.buffer
// var blob = new Blob([arrayBuffer])
// var audio = document.querySelector('audio')
// var url = URL.createObjectURL(blob)
// audio[0].src = url
// audio[0].play()
// }
// (err) ? console.log(err, err.stack) : console.log(data)
if (err) {
console.log(err, err.stack)
}else {
console.log(data)
var uInt8Array = new Uint8Array(data.AudioStream)
var arrayBuffer = uInt8Array.buffer
var blob = new Blob([arrayBuffer])
var url = URL.createObjectURL(blob)
var audioElement = document.querySelector('source')
console.log(audioElement)
audioElement.setAttribute('src', url)
}
})
创建一个AWS.Polly.Presigner对象,然后创建可以检索合成语音音频的预签名URL。一旦返回,只需将其作为源代码添加到HTML中即可。
然后,使用能够创建异步合成任务的startSpeechSynthesisTask
方法。该操作需要语音合成所需的所有标准信息,加上输出S3桶的名称。有关更多信息,请参阅AWS文档。;以及这里的博客。
var polly = new AWS.Polly({region:"eu-west-1"});
var signer = new AWS.Polly.Presigner(urlParams, polly);
var s3 = new AWS.S3({region:"eu-west-1"})
var urlParams = {
OutputFormat: 'mp3',
Text: 'Hello David, How are you?',
TextType: 'text',
VoiceId: 'Joanna',
SampleRate: '22050'
};
var s3Params = {
OutputFormat: 'mp3',
OutputS3BucketName: "BUCKET_NAME",
Text: 'Hello David, How are you?',
TextType: 'text',
VoiceId: 'Joanna',
SampleRate: '22050'
};
signer.getSynthesizeSpeechUrl(urlParams, function (err, data) {
if (err) {
console.log(err, err.stack)
}else {
console.log("Success, presigned url created", data);
}
})
polly.startSpeechSynthesisTask(s3Params, function (err, data) {
if (err) {
console.log(err, err.stack)
}else {
console.log("Success, audio file uploaded", data);
}
})