本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
以下示例使用适用于 Amazon Polly 的 Android 软件开发工具包,借助从列表中选择的语音读取指定文本。
此处显示的代码涵盖主要任务,但不处理错误。有关完整代码,请参阅AWS Mobile SDK for Android Amazon Polly 演示
初始化
// Cognito pool ID. Pool needs to be unauthenticated pool with
// Amazon Polly permissions.
String COGNITO_POOL_ID = "YourCognitoIdentityPoolId
";
// Region of Amazon Polly.
Regions MY_REGION = Regions.US_EAST_1;
// Initialize the Amazon Cognito credentials provider.
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
getApplicationContext(),
COGNITO_POOL_ID,
MY_REGION
);
// Create a client that supports generation of presigned URLs.
AmazonPollyPresigningClient client = new AmazonPollyPresigningClient(credentialsProvider);
获取可用语音的列表
// Create describe voices request.
DescribeVoicesRequest describeVoicesRequest = new DescribeVoicesRequest();
// Synchronously ask Amazon Polly to describe available TTS voices.
DescribeVoicesResult describeVoicesResult = client.describeVoices(describeVoicesRequest);
List<Voice> voices = describeVoicesResult.getVoices();
获取音频流的 URL
// Create speech synthesis request.
SynthesizeSpeechPresignRequest synthesizeSpeechPresignRequest =
new SynthesizeSpeechPresignRequest()
// Set the text to synthesize.
.withText("Hello world!")
// Select voice for synthesis.
.withVoiceId(voices.get(0).getId()) // "Joanna"
// Set format to MP3.
.withOutputFormat(OutputFormat.Mp3);
// Get the presigned URL for synthesized speech audio stream.
URL presignedSynthesizeSpeechUrl =
client.getPresignedSynthesizeSpeechUrl(synthesizeSpeechPresignRequest);
播放合成的语音
// Use MediaPlayer: https://developer.android.com/guide/topics/media/mediaplayer.html
// Create a media player to play the synthesized audio stream.
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
// Set media player's data source to previously obtained URL.
mediaPlayer.setDataSource(presignedSynthesizeSpeechUrl.toString());
} catch (IOException e) {
Log.e(TAG, "Unable to set data source for the media player! " + e.getMessage());
}
// Prepare the MediaPlayer asynchronously (since the data source is a network stream).
mediaPlayer.prepareAsync();
// Set the callback to start the MediaPlayer when it's prepared.
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
// Set the callback to release the MediaPlayer after playback is completed.
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});