スタッフブログ

STAFF BLOG

アプリ開発日誌

2018.02.07

Amazon Pollyを使って、ニュースのタイトルを読み上げてみた

サーバー開発担当の木下です。

Meltdown/Spectreが騒がれていますね。クラウドベンダーは早々に対策を打っていたようで木下的には一安心ですが、IntelのCEOによるインサイダーが疑われたり対策方法にツッコミが入ったりと、問題自体はまだまだ長引きそうです。

さて今回は、テキスト読み上げをしてくれるAmazon Pollyを使ってみました。

Amazon Pollyとは

Amazon Web Servicesで提供されているサービスの一つで、テキストを音声に変換してくれるものです。テキストと一緒に音声合成マークアップ言語もリクエストすることで、よりリアルな話し声に変換できるようです。
料金ですが、テキストのリクエストであれば100万文字ごとに4USDで使用できるので、国内ベンダーの音声合成サービスより安価に運用できると思います。

使ってみた

今回はJavaScriptを使って、NHK NEWS WEBRSSフィードを取得して新しい記事があったらそのタイトルを読み上げる、というものを作ってみました。

まずはPollyのリクエストに使う認証情報(IAMユーザー)の作成です。

1. AWSコンソールにログインします。

2. 「セキュリティ認証情報」ページの左ペインにある「ユーザー」を開きます。
Image 2018-02-06 11-45-36

3. 「ユーザーを追加」ボタンを押します。
Image 2018-02-06 11-46-08

4. 「ユーザー名」を入れます。適当なもので良いと思います。アクセスの種類は「プログラムによるアクセス」のみチェックを入れ、「次のステップ:アクセス権限」を押します。
Image 2018-02-06 11-47-41

5. 「既存のポリシーを直接アタッチ」をクリックします。下部の検索窓に「polly」とか入れると下のテーブルに「AmazonPollyFullAccess」が出てくると思うので、チェックをいれ、「次のステップ:確認」を押します。
Image 2018-02-06 11-48-24

6. 「ユーザーの作成」を押します。

7. アクセスキーIDとシークレットアクセスキーをどこかにコピーしておき、「閉じる」を押します。
Image 2018-02-06 11-49-10

これで、IAMユーザーの作成が完了しました。

次に、JavaScriptでスクリプトを書いてみました。AWS SDK for JavaScriptとjQueryを読み込んでいます。
NHKのRSSフィードを30000ms(=30秒)ごとに読み込んで先頭の記事の公開日時を参照し、前回の読み込み時刻(30秒前)より新しければその記事の件名をPollyにリクエストして、返ってきたmp3を読み上げるというロジックです。

<script src="https://sdk.amazonaws.com/js/aws-sdk-2.189.0.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
    var intervalMs = 30000;    // 何ミリ秒ごとに実行するか
    var awsPollyRegion = 'ap-northeast-1';    // Amazon Pollyを実行するリージョン
    var awsAccessKeyId = '〜IAMユーザーのアクセスキーID〜';    // IAMユーザーのアクセスキーID
    var awsSecretAccessKey = '〜IAMユーザーのシークレットアクセスキー〜';    // IAMユーザーのシークレットアクセスキー

    var lastParsedTime = 0;
    var pollyParams = {
        OutputFormat: "mp3",
        SampleRate: "8000",
        Text: '',
        TextType: "text",
        VoiceId: "Mizuki"
    };

    AWS.config.update({accessKeyId: awsAccessKeyId, secretAccessKey: awsSecretAccessKey, region: awsPollyRegion});
    var polly = new AWS.Polly({apiVersion: '2016-06-10'});

    $(function(){
        setInterval(function(){
            exec(); // intervalMsで定義したmsごとに実行
        }, intervalMs);
    });

    exec(); //初回実行

    function exec(){
        $.ajax({
            url: 'https://www3.nhk.or.jp/rss/news/cat0.xml',
            dataType: 'xml',
            success: function(res) {
                var item = $(res).find('item');
                var title = item.find('title')[0].innerHTML;
                var pubDate = item.find('pubDate')[0].innerHTML;
                var pubDateMs = new Date(pubDate).getTime();
                if (pubDateMs > lastParsedTime) {
                    // ここで読み上げ
                    pollyParams.Text = title;
                    polly.synthesizeSpeech(pollyParams, function(err, data){
                        if (err) console.log(err);
                        else     console.log(data);
                        var audioElement = document.createElement('audio');
                        audioElement.setAttribute('id', 'audioElement' + pubDateMs);
                        document.body.appendChild(audioElement);
                        var uInt8Array = new Uint8Array(data.AudioStream);
                        var blob = new Blob([uInt8Array.buffer]);
                        audioElement.src = URL.createObjectURL(blob);
                        audioElement.play();
                    });
                    console.log(title);
                }
                var lastParsedDate = new Date();
                lastParsedTime = lastParsedDate.getTime();
                console.log(lastParsedDate);
            }
        });
    }
</script>

gistでも公開しています

音声認識・合成はぜひイーディーエーへ!

イーディーエーでは、音声認識や音楽を活用したアプリの開発実績があります。
お気軽にお問い合わせください!

BACK

お問合せ

イーディーエーに興味をお持ちいただいて
ありがとうございます!
スマホアプリに関するご相談、
お見積りや弊社へのご質問など、
お気軽にお問い合わせください。
担当者より折り返しご連絡させていただきます。

    お名前必須
    会社名
    メールアドレス必須
    電話番号必須
    お問合わせ種別必須
    お問合わせ内容必須

    アンケートにご協力ください。
    弊社サイトへはどのようにしてアクセスされましたか?

    個人情報のお取扱いに関する同意事項

    1.事業者の氏名又は名称

    株式会社イーディーエー

    2.個人情報保護管理者の氏名又は職名、所属及び連絡先

    個人情報保護管理者 小宮 保人
    Mail:[email protected]

    3.取得した個人情報の利用目的

    当フォームで取得した個人情報は、お問い合わせに関する回答のために利用し、目的外利用はいたしません。

    4.弊社が取得した個人情報の第三者への委託、提供について

    弊社は、ご本人に関する情報をご本人の同意なしに第三者に委託または提供することはありません。

    5.個人情報保護のための安全管理

    弊社は、ご本人の個人情報を保護するための規程類を定め、従業者全員に周知・徹底と啓発・教育を図るとともに、その遵守状況の監査を定期的に実施いたします。
    また、ご本人の個人情報を保護するために必要な安全管理措置の維持・向上に努めてまいります。

    6.個人情報の開示・訂正・利用停止等の手続

    ご本人が、弊社が保有するご自身の個人情報の、利用目的の通知、開示、内容の訂正、追加又は削除、利用の停止、消去及び第三者への提供の停止を求める場合には、下記に連絡を頂くことで、対応致します。

    株式会社イーディーエー 個人情報お問合せ窓口
    〒106-0032 東京都港区六本木7丁目14番23 ラウンドクロス六本木4F
    TEL:03-5422-7524 FAX:03-5422-7534
    Mail:[email protected]

    7.ご提供いただく情報の任意性

    個人情報のご提供は任意ですが、同意を頂けない場合には、第3項にあります利用目的が達成できない事をご了承いただくこととなります。

    8.弊社Webサイトの運営について

    弊社サイトでは、ご本人が弊社Webサイトを再度訪問されたときなどに、より便利に閲覧して頂けるよう「クッキー(Cookie)」という技術を使用することがあります。これは、ご本人のコンピュータが弊社Webサイトのどのページに訪れたかを記録しますが、ご本人が弊社Webサイトにおいてご自身の個人情報を入力されない限りご本人ご自身を特定、識別することはできません。
    クッキーの使用を希望されない場合は、ご本人のブラウザの設定を変更することにより、クッキーの使用を拒否することができます。その場合、一部または全部のサービスがご利用できなくなることがあります。