2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Google Cloud Text to Speechでテキストを音声に変換するTypeScriptプログラムを開発した

Posted at

概要

Google Cloud Text to Speech でテキストを音声に変換する TypeScript プログラムを開発しました。

Text-to-Speech client libraries  |  Cloud Text-to-Speech Documentation  |  Google Cloud にあるサンプルは JavaScript なので、一部修正が必要でした。

必要な準備

  1. Google Cloud Platformからプロジェクトを作成、あるいは既存のプロジェクトを選択します。

  2. Cloud Text-to-Speech API
    Text-to-Speech API を有効にします。

  3. サービスアカウントでサービスアカウントを作成します。作成したサービスアカウントのキーをダウンロードしてファイルを作成します。環境変数 GOOGLE_APPLICATION_CREDENTIALS で作成したファイルを指定します。

プログラムの作成

  1. node.js のプロジェクトを作成します。
$ yarn --init
  1. 必要なモジュールを追加します。
$ yarn add @google-cloud/text-to-speech
$ yarn add -D typescript @types/node
  1. TypeScipr 環境を初期化します。
$ npx tsc --init
  1. package.json の script セクションにコンパイルと実行コマンドを追加します。
"scripts": {
    "start": "node index",
    "prestart": "tsc"
}

5, Text-to-Speech クライアント ライブラリ  |  Cloud Text-to-Speech のドキュメント  |  Google Cloud にあるサンプルプログラムを TypeScript に修正します。

index.ts
import fs from "fs";

import { TextToSpeechClient } from "@google-cloud/text-to-speech";
import { google } from "@google-cloud/text-to-speech/build/protos/protos";

const client = new TextToSpeechClient();

const text = "This is sample speech.";

const request: google.cloud.texttospeech.v1.ISynthesizeSpeechRequest = {
  input: { text: text },
  voice: { languageCode: "en-US", ssmlGender: "NEUTRAL" },
  audioConfig: {
    audioEncoding: "MP3",
  },
};

client
  .synthesizeSpeech(request)
  .then(([response]) => {
    if (response.audioContent) {
      fs.writeFileSync("output.mp3", response.audioContent);
    }
  })
  .catch((error) => {
    console.error(error);
  });

修正したのは、synthesizeSpeech のパラメータである変数 request の型の指定を追加しました。その型を import も追加しています。

  1. 以下のコマンドを実行すると音声が保存された output.mp3 が作成されます。
$ yarn start

オプション

テキストを音声に変換する API である synthesizeSpeech でオプションを指定することが可能です。オプションの一部はISynthesizeSpeechRequest - Documentationで説明されていますが、説明されていないオプションもいくつかあります。

voice

name

一つは voice 属性の中の name 属性です。IVoiceSelectionParams - Documentationには string とだけ書かれていて、具体的にどのような値を設定すればいいのか書かれていません。ここで参考になるのがText-to-Speech: Lifelike Speech Synthesis  |  Google Cloudのデモです。Voice name で指定した値が name 属性に設定されます。Voice name のメニュー項目は、Language/locale と Voice type で決まります。たとえば、Language/locale が English (United States)で Voice type が WaveNet の場合、メニュー項目は en-US-Wavenet-A から J の 10 項目です。Voice type が Basic の場合、en-US-standard-A から J の 10 項目です。つまり name 属性で WaveNet 形式か standard 形式かを指定します。

AudioConfig

IAudioConfig - Documentationには、AudioConfig 属性の中の speakingRate, pitch, volumeGainDb, sampleRateHertz 属性は number, effectsProfileId 属性は string の配列とだけ書かれています。

Text-to-Speech の Rest API のドキュメント(Method: text.synthesize  |  Cloud Text-to-Speech Documentation)や RPC のドキュメント(Package google.cloud.texttospeech.v1  |  Cloud Text-to-Speech Documentation)には、クライアントライブラリのドキュメントでは説明されていない volumeGaibDb と sampleRateHertz の説明がありました。

effectsProfileId

effectsProfileId は以下のような値を設定するようです。

Audio device profile のメニュー項目 オプションとして設定する値
Default 設定なし
Smart watch or wearable wearable-class-device
Smartphone handset-class-device
Headphones or earbuds headphone-class-device
Small home speaker small-bluetooth-speaker-class-device
Smart home speaker medium-bluetooth-speaker-class-device
Home entertainment system or smart TV large-home-entertainment-class-device
Car speaker large-automotive-class-device
Interactive Voice Response (IVR) system telephony-class-application

speakingRate

デモでは speakingRate は 0.25 から 4 の間の値を設定します。変換される音声の速度を設定しています。

pitch

pitch は-20 から 20 の値を設定します。音声の高さを設定しています。

volumeGainDb

volumeGainDbは音量を設定します。有効な値の範囲は-96.0 から 16.0 の間で、-6.0 ごとに音量は半分に、+6.0 ごとに 2 倍になります。+10 を超える値を設定しないことを強く推奨しています。

sampleRateHertz

sampleRateHertz は音声のサンプリング周波数を指定します。具体的な例はありません。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?