この記事は何
AWSにはAmazon Pollyという、テキストから読み上げデータを生成する(いわゆるText to Speech)ためのサービスが存在します。
Amazon PollyにもJavaScript SDKは存在するのですが、ExampleにはS3に生成したデータをアップロードする方法しかなく、ローカルにファイルとして保存する方法がわかりづらかったので、記事としてまとめました。
前準備
まずは@aws-sdk/client-polly
をインストールします。
$ npm i @aws-sdk/client-polly
認証についても以下の記事などを参考にセットアップを行なってください。
今回の例はTypeScriptで実装するので、実行環境として今回はts-node
を利用しようと思います。
$ npm i ts-node
コード
以下のようなコードでローカルにファイルとして保存することが可能です。
script.ts
import fs from "fs";
import path from "path";
import {
PollyClient,
SynthesizeSpeechCommand,
SynthesizeSpeechInput,
} from "@aws-sdk/client-polly";
const main = async () => {
const client = new PollyClient({ region: "ap-northeast-1" });
const speechFile = path.resolve(`path/to/file/output.mp3`,);
const params: SynthesizeSpeechInput = {
OutputFormat: "mp3",
Text: 'こんにちは、私の名前はともこです。',
VoiceId: "Tomoko",
SampleRate: "22050",
TextType: "text",
LanguageCode: "ja-JP",
Engine: "neural",
};
const command = new SynthesizeSpeechCommand(params);
const response = await client.send(command);
if (response.AudioStream) {
const buffer = Buffer.from(
await response.AudioStream.transformToByteArray(),
);
fs.writeFileSync(speechFile, buffer);
}
console.log(speechFile);
};
main();
以下のように実行することで音声データをローカルに保存することができます。
$ npx ts-node --compiler-options '{"module":"CommonJS"}' script.ts