这是我的脚本:
<script src="https://sdk.amazonaws.com/js/aws-sdk-2.7.13.min.js"></script>
<script>
AWS.config.region = 'eu-west-1';
AWS.config.accessKeyId = 'FOO';
AWS.config.secretAccessKey = 'BAR';
var polly = new AWS.Polly({apiVersion: '2016-06-10'});
var params = {
OutputFormat: 'mp3', /* required */
Text: 'Hello world', /* required */
VoiceId: 'Joanna', /* required */
SampleRate: '22050',
TextType: 'text'
};
polly.synthesizeSpeech(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
</script>
Run Code Online (Sandbox Code Playgroud)
请求成功,我得到了这样的回复:
我该如何使用这种回复?我知道响应是反序列化的音频,但我如何实际播放它,比如说,在HTML5音频元素中?
此外,这个答案解释了为什么这种类型的阵列适合音频数据:https://stackoverflow.com/a/26320913/1325575
我正在使用AWS的JAVA SDK来创建Polly客户端.像这样:
BasicAWSCredentials awsCreds = new BasicAWSCredentials("<IAM access Key>", "IAM secret key>");
AmazonPollyClient apClient = (AmazonPollyClient) AmazonPollyClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(awsCreds))
.build();
SynthesizeSpeechRequest tssRequest = new SynthesizeSpeechRequest();
tssRequest.setText(<text>);
tssRequest.setVoiceId(<voiceid>);
tssRequest.setOutputFormat(OutputFormat.Mp3);
SynthesizeSpeechResult tssResult = apClient.synthesizeSpeech(tssRequest);
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,我收到以下错误消息:
线程"main"中的异常com.amazonaws.SdkClientException:无法从com.amazonaws.regions.AwsRegionProviderChain.getRegion(AwsRegionProviderChain.java:56)链中的任何提供者加载com.amazonaws.client.builder.AwsClientBuilder的区域信息.setRegion(AwsClientBuilder.java:319)com.amazonaws.client.builder.AwsClientBuilder.configureMutableProperties(AwsClientBuilder.java:295)at com.amazonaws.client.builder.AwsSyncClientBuilder.build(AwsSyncClientBuilder.java:38)at com. eoffice.aws.speech.Polly.main(Polly.java:42)
我使用IAM策略模拟器检查了凭据.这工作正常,权限还可以.
在ClientBuilder中设置Region的方法对于AmazonPollyClientBuilder是不可见的,因此我没有(Java SDK)方式来指定区域.
更新: 当我问defaultAwsREgionProviderChain时,我收到相同的错误消息
DefaultAwsRegionProviderChain defaultAwsRegionProviderChain = new DefaultAwsRegionProviderChain();
System.out.println(defaultAwsRegionProviderChain.getRegion());
Run Code Online (Sandbox Code Playgroud)
更新2: 当我在de .aws文件夹中创建一个包含以下内容的配置文件时:
[默认] region = eu-west-1
它有效,但我需要一种方法来设置它而不依赖于文件系统.
我正在考虑使用亚马逊波利的文字转语音(TTS),但想用任意的例子(不是由亚马逊营销人员精心策划的那些)来评估它听起来多么自然.
我发现的只是一个非常有限的YouTube视频(每种语言只需几秒钟)
我正在尝试使用 Python 创建一个AWS Lambda函数,该函数应从某些 API 接收文本并返回包含AudioStream对象的 JSON。为此,我使用AWS Polly。目前我可以AudioStream在我的机器上从AWS获取它并且工作正常。
为了使用 AWS Polly,我创建了一个特殊用户并授予他AmazonPollyReadOnlyAccess访问AmazonPollyFullAccess权限。
import boto3,json
polly= boto3.client('polly')
text='<speak>hey there wassup </speak>'
spoken_text=polly.synthesize_speech(Text=text,OutputFormat='mp3',VoiceId='Aditi',TextType='ssml')
newdata=json.dumps(spoken_text)
# return newdata
print(type(spoken_text))
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用此代码片段以 JSON 格式返回响应时,我收到错误。
/usr/bin/python3.5 /talker/aditi.py
Traceback (most recent call last):
File "/talker/aditi.py", line 9, in <module>
newdata=json.dumps(spoken_text)
File "/usr/lib/python3.5/json/__init__.py", line 230, in dumps
return _default_encoder.encode(obj)
File "/usr/lib/python3.5/json/encoder.py", line 198, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python3.5/json/encoder.py", line 256, in iterencode
return _iterencode(o, …Run Code Online (Sandbox Code Playgroud) 我的想法是用来AWS Polly大声朗读RSS提要中的一些新闻。根据此链接,我了解 Polly 在要转换的字符方面非常灵活,因为示例之一是"Adventures of Huckelberry Finn" by Mark Twain ~600k characters
问题是,当我尝试将我的文章转换为语音时,我收到以下错误:
An error occurred (TextLengthExceededException) when calling the SynthesizeSpeech operation: Maximum text length has been exceeded
Run Code Online (Sandbox Code Playgroud)
我尝试转换的文本大约有 5000 个字符。
有没有什么方法(无论有没有 API)可以用 Polly 转换长文本字符串,而不必将它们切成数百万个不同的片段?
任何正确方向的提示将不胜感激,
谢谢
由于我没有成功将boto3集成到Google App Engine,我正在尝试直接使用文档使用API:因为Polly(文本到语音API)使用签名版本4进程,我指的是:
http://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html
这是给定的脚本:
#http://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html
# AWS Version 4 signing example
# EC2 API (DescribeRegions)
# See: http://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html
# This version makes a GET request and passes the signature
# in the Authorization header.
import sys, os, base64, datetime, hashlib, hmac
sys.path.append('../')
import requests # pip install requests
# Read AWS access key from env. variables or configuration file. Best practice is NOT
# to embed credentials in code.
access_key = os.environ.get('AWS_ACCESS_KEY_ID')
secret_key = os.environ.get('AWS_SECRET_ACCESS_KEY')
if access_key is None …Run Code Online (Sandbox Code Playgroud) 是否有可能在Alexa技能中使用亚马逊Polly在翻译或其他多语言环境中提供例如2种语言的回应?如果是,谁有从lambda函数使用此服务的经验?
我已经实现了这个Java程序来与Polly一起做TTS:http://docs.aws.amazon.com/polly/latest/dg/examples-java.html
我正在使用荷兰男声,这是好的和自然的,但我发现它有点太快了.我在Polly文档中看到语音速度可以使用SSML中的类似控件进行控制,如本页所示:http: //docs.aws.amazon.com/polly/latest/dg/ssml-synthesize-speech-cli html的
aws polly synthesize-speech \
--text-type ssml \
--text '<speak><prosody rate="x-slow">Hello world</prosody></speak>' \
--output-format mp3 \
--voice-id Joanna \
speech.mp3
Run Code Online (Sandbox Code Playgroud)
但是如何将它合并到我的Java中呢?我试过这个(用于Windows的格式调整):
text = "\<speak><prosody rate='x-slow'>" + text + "</prosody></speak> ^";
PollyDemo helloWorld = new PollyDemo(Region.getRegion(Regions.US_EAST_1));
InputStream speechStream = helloWorld.synthesize(text, OutputFormat.Mp3);
Run Code Online (Sandbox Code Playgroud)
但我在黑暗中摸索.有人可以帮忙吗?谢谢.
我正在尝试使用 Amazon Polly REST API。
有人可以帮我做到这一点吗?
我正在使用 Java 和 OkHttp3 并尝试了以下方法:
String url = "https://polly.us-west-2.amazonaws.com/v1/speech";
String postBody = "{\"OutputFormat\":\"mp3\",\"Text\":\"Some text to listen\",\"TextType\":\"text\",\"VoiceId\":\"Joanna\"}";
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();
Request request = new Request.Builder()
.url(url)
.addHeader("Authorization", "AWS <accessKey>:<secretKey>")
.post(RequestBody.create(mediaType, postBody))
.build();
Response response = client.newCall(request).execute();
Run Code Online (Sandbox Code Playgroud)
并收到“403禁止”的答复。然后我尝试在此服务上在线执行此 POST 请求并收到以下消息:
我究竟做错了什么?我应该解决什么问题?谢谢!
亚马逊文档:链接
请不要建议我使用 SDK!
method=POST …我正在将Javascript(节点)中的AWS Polly代码从v2转换为v3。
使用AWS Polly v3 synthesizeSpeech()时,如何将返回的值转换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 …Run Code Online (Sandbox Code Playgroud) amazon-polly ×10
java ×3
alexa ×1
amazon-iam ×1
audio ×1
aws-lambda ×1
boto3 ×1
html5 ×1
javascript ×1
json ×1
node.js ×1
okhttp ×1
python ×1
python-3.5 ×1