Amazon Polly for Android

    はじめまして!
    12/1より中途で入社しました花島君俊と申します。
    よろしくお願いします。

    初ブログはAndroidでAmazon Pollyを使ってみようです。

    音声出しちゃいます!!。音声でも自己紹介しています。

    さて、Amazon Pollyの導入方法です。(公式サイトベースです。)

    全部で5ステップです。あっというまに音声出ちゃいます。

    1.AWSコンソールのCognitoのフェデレーテッドアイデンティティの管理でプールIDとロールを作成。

    https://ap-northeast-1.console.aws.amazon.com/cognito/create/

    ※認証されていない ID に対してアクセスを有効にするをチェックし作成。他はデフォルトでOK

     

    2.AWSコンソールのIMAのロールで作成したロールAmazonPollyFullAccessをアタッチする。

    https://console.aws.amazon.com/iam/home?region=ap-northeast-1#/roles

    ここからAndroidのソースです。

     

    3.HTTP通信するのでAndroidManifest.xmlにInternetアクセスを許可

    <uses-permission android:name="android.permission.INTERNET" />

     

    4.Amazon pollyのライブラリをmoduleのbuild.gradleに追加

    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'com.android.support:appcompat-v7:26.1.0'
        implementation 'com.android.support.constraint:constraint-layout:1.0.2'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.1'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
        compile'com.amazonaws:aws-android-sdk-polly:2.3.4'
    }

     

    5.アクテビティで別スレッドで作成

    必要な所のみ抜粋。

    new Thread(new Runnable() {
        @Override
        public void run() {
    
            //フェデレーテッドアイデンティティのIDを設定
            String COGNITO_POOL_ID = "ap-northeast-1:xxxxxxx-xxxx-xxxx-xxxx-xxxxx";
            // リージョンを東京に設定
            Regions MY_REGION = Regions.AP_NORTHEAST_1;
            //Amazon Cognito credentials provider生成
            CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
                    getApplicationContext(),
                    COGNITO_POOL_ID,
                    MY_REGION
            );
    
            //AmazonPollyクライアントオブジェクト生成
            AmazonPollyPresigningClient client = new AmazonPollyPresigningClient(credentialsProvider);
            //スピーチテキスト
            String speechText = "初めまして12月1日に中途で入社した花島です。よろしくお願いいたします。";
            //日本語で男性モード
            String jpMaleVoiceId = "Takumi";
    
            //音声生成リクエスト
            SynthesizeSpeechPresignRequest synthesizeSpeechPresignRequest =
                    new SynthesizeSpeechPresignRequest()
                            // Set the text to synthesize.
                            .withText(speechText)
                            // Select voice for synthesis.
                            .withVoiceId(jpMaleVoiceId)
                            // Set format to MP3.
                            .withOutputFormat(OutputFormat.Mp3);
    
            URL presignedSynthesizeSpeechUrl = client.getPresignedSynthesizeSpeechUrl(synthesizeSpeechPresignRequest);
    
    
            // メディアプレイヤー設定
            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("mediaError", "Unable to set data source for the media player! " + e.getMessage());
            }
    
            //再生
            mediaPlayer.prepareAsync();
    
            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp.start();
                }
            });
    
            mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    mp.release();
                }
            });
        }
    }).start();

     

    公式サイト

    http://docs.aws.amazon.com/ja_jp/polly/latest/dg/examples-android.html

    https://github.com/awslabs/aws-sdk-android-samples/tree/master/PollyDemo


    関連記事