やよいの日記

スプラトゥーンとプログラミング関連

Amazon Polly を使って読み上げdiscord botを作った話(3)

Amazon Polly を使って読み上げdiscord botを作った話(2) - やよいの日記
の続き。

いよいよ読み上げ部分の作成。
その前に、AWSサービスに登録して、IAMユーザーでAmazon Pollyのユーザーを作っとく。

    const AWS     = require('aws-sdk');
    const Stream  = require('stream');

    const Polly  = new AWS.Polly({
        signatureVersion: 'v4',
        region: 'us-east-2',
        accessKeyId: 'IAMユーザーのアクセスキー',
        secretAccessKey: 'IAMユーザーのシークレットキー'
    });



    if (voice_ch) {
	if (message.channel.name != text_ch.name) {
	    return;
	}

	if (message.content) {
	    let text = message.content;
	    let params = {
		'Text': text,
		'OutputFormat': 'mp3',
		'VoiceId': 'Mizuki'};

	    Polly.synthesizeSpeech(params, (err, data) => {
		if (err) {
		    console.log(err.code)
		} else if (data) {
		    if (data.AudioStream instanceof Buffer) {
			let buffer_stream = new Stream.PassThrough();
			buffer_stream.end(data.AudioStream);
			conn.play(buffer_stream);
		    }
		}
	    });
	}
    }

Polly.synthesizeSpeech の部分が音声を取得するところ。
取得した音声データはdata.AudioStreamに入っているけど、そのままじゃ使えないので
Stream.PassThrough をつかってリーダブルバッファーに変換してあげる。

これでとりあえず音声を流すことができました。パチパチ。

でも実際に流してみるとたぶん ffmpeg のエラーが出てうまく流せないと思う。
その辺はまた後日解説いたします。