我正在将AWS Polly代码从v2转换为v3。
在使用AWS Polly v3synthesizeSpeech()
时,如何将返回的data.AudioStream
转换为Buffer
的示例?
以下JavaScript代码使用v2运行,返回的audio.AudioStream
是Buffer
的一个示例:
const { Polly } = require('aws-sdk');
// Create an Polly client
const polly = new Polly({
signatureVersion: 'v4',
region: process.env.AWS_DEFAULT_REGION
});
const params = {
OutputFormat: 'mp3',
VoiceId: voiceId,
TextType: 'ssml',
Text: '<speak><prosody rate="85%">Hello World</prosody></speak>'
};
//***
return await polly
.synthesizeSpeech(params)
.promise()
.then(data => {
if (data.AudioStream instanceof Buffer) {
return data.AudioStream
} else {
console.error('AudioStream not instanceof Buffer');
return null;
}
})
以下使用v3的JavaScript代码,其来自synthesizeSpeech()
的响应包含audio.AudioStream
不是Buffer
的示例,而是以IncomingMessage
开头:
const {
Polly
} = require("@aws-sdk/client-polly");
// Create an Polly client
const polly = new Polly({
signatureVersion: 'v4',
region: process.env.AWS_DEFAULT_REGION
});
//***
const params = {
OutputFormat: 'mp3',
VoiceId: voiceId,
TextType: 'ssml',
Text: '<speak><prosody rate="85%">Hello World</prosody></speak>'
};
return await polly
.synthesizeSpeech(params)
.then(data => {
if (data.AudioStream instanceof Buffer) {
return data.AudioStream
} else {
console.error('AudioStream not instanceof Buffer');
return null;
}
})
我使用PollyClient
和SynthesizeSpeechCommand
都尝试了以下v3,结果相同
const {
PollyClient,
SynthesizeSpeechCommand
} = require("@aws-sdk/client-polly");
const client = new PollyClient({
region: process.env.AWS_DEFAULT_REGION
});
//***
const command = new SynthesizeSpeechCommand({
OutputFormat: 'mp3',
Text:'hello world, this is alex',
VoiceId: 'Kimberly',
TextType: 'text'
});
return client
.send(command)
.then((data) => {
if (data.AudioStream instanceof Buffer) {
return data.AudioStream
} else {
console.error('AudioStream not instanceof Buffer');
console.log('data.AudioStream:', data.AudioStream);
return null;
}
})
.catch((error) => {
console.error(error);
});
v3data.AudioStream
的内容如下:
IncomingMessage {
_readableState:
ReadableState {
objectMode: false,
highWaterMark: 16384,
buffer: BufferList { head: null, tail: null, length: 0 },
length: 0,
pipes: null,
***
感谢您的阅读,感谢您的反馈。
2条答案
按热度按时间j9per5c41#
现在是一个ReadableStream对象。
您可以在此处找到有关这一变化的详细信息:https://github.com/aws/aws-sdk-js-v3/issues/1096#issuecomment-620900466
xytpbqjk2#
就我个人而言,我发现使用异步/等待而不是流回调要容易得多。
注意:我使用的是node14,因此可以在顶部使用
import
,但您也可以轻松地使用require
。