本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
下列範例使用適用於 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();
}
});