Node.js での Text-to-Speech API の使用

1. 概要

Google Cloud Text-to-Speech API を使用すると、デベロッパーは自然に聞こえる人間の音声を合成し、再生可能な音声としてアプリケーションに組み込むことができます。Text-to-Speech API は、テキストまたは音声合成マークアップ言語(SSML)の入力を、MP3 や LINEAR16(WAV ファイルで使用されるエンコーディング)などの音声データに変換します。

この Codelab では、Node.js で Text-to-Speech API を使用することに焦点を当てます。利用可能な音声の一覧表示と、テキストから音声への合成の方法について学習します。

学習内容

  • Cloud Shell を使用する方法
  • Text-to-Speech API を有効にする方法
  • API リクエストを認証する方法
  • Node.js 用 Google Cloud クライアント ライブラリをインストールする方法
  • 利用可能な音声を一覧表示する方法
  • テキストから音声を合成する方法

必要なもの

  • Google Cloud Platform プロジェクト
  • ChromeFirefox などのブラウザ
  • Node.js の使用経験

アンケート

このチュートリアルをどのように使用されますか?

通読するのみ 通読し、演習を行う

Node.js のご利用経験はどの程度ありますか?

初心者 中級者 上級者

Google Cloud Platform サービスのご利用経験についてどのように評価されますか?

初心者 中級者 上級者

2. 設定と要件

セルフペース型の環境設定

  1. Cloud Console にログインし、新しいプロジェクトを作成するか、既存のプロジェクトを再利用します(Gmail アカウントまたは G Suite アカウントをお持ちでない場合は、アカウントを作成する必要があります)。

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

プロジェクト ID を忘れないようにしてください。プロジェクト ID はすべての Google Cloud プロジェクトを通じて一意の名前にする必要があります(上記の名前はすでに使用されているので使用できません)。以降、このコードラボでは PROJECT_ID と呼びます。

  1. 次に、Google Cloud リソースを使用するために、Cloud Console で課金を有効にする必要があります。

このコードラボを実行しても、費用はほとんどかからないはずです。このチュートリアル以外で請求が発生しないように、リソースのシャットダウン方法を説明する「クリーンアップ」セクションの手順に従うようにしてください。Google Cloud の新規ユーザーは $300 の無料トライアル プログラムをご利用いただけます。

Cloud Shell の起動

Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。

Cloud Shell をアクティブにする

  1. Cloud Console で、[Cloud Shell をアクティブにする] H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ をクリックします。

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

Cloud Shell を起動したことがない場合、その内容を説明する中間画面が(スクロールしなければ見えない範囲に)が表示されます。その場合は、[続行] をクリックします(以後表示されなくなります)。このワンタイム スクリーンは次のようになります。

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

Cloud Shell のプロビジョニングと接続に少し時間がかかる程度です。

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

この仮想マシンには、必要な開発ツールがすべて準備されています。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働するため、ネットワーク パフォーマンスが充実しており認証もスムーズです。このコードラボでの作業のほとんどは、ブラウザまたは Chromebook から実行できます。

Cloud Shell に接続すると、すでに認証は完了しており、プロジェクトに各自のプロジェクト ID が設定されていることがわかります。

  1. Cloud Shell で次のコマンドを実行して、認証されたことを確認します。
gcloud auth list

コマンド出力

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

コマンド出力

[core]
project = <PROJECT_ID>

上記のようになっていない場合は、次のコマンドで設定できます。

gcloud config set project <PROJECT_ID>

コマンド出力

Updated property [core/project].

3. Text-to-Speech API を有効にする

Text-to-Speech API の使用を開始する前に、API を有効にする必要があります。Cloud Shell で次のコマンドを使用して、API を有効にできます。

gcloud services enable texttospeech.googleapis.com

4. API リクエストを認証する

Text-to-Speech API にリクエストを送信するには、サービス アカウントを使用する必要があります。プロジェクトのサービス アカウントを Google クライアント Node.js ライブラリで使用して、Text-to-Speech API リクエストを送信します。ほかのユーザー アカウントと同じように、サービス アカウントはメールアドレスで表されます。このセクションでは、Cloud SDK を使用してサービス アカウントを作成し、サービス アカウントの認証で必要になる認証情報を作成します。

まず、この Codelab で使用する GOOGLE_CLOUD_PROJECT で環境変数を設定します。

export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)

次に、Text-to-Speech API にアクセスする新しいサービス アカウントを作成します。

gcloud iam service-accounts create my-text-to-speech-sa \
  --display-name "my text-to-speech codelab service account"

次に、作成した新しいサービス アカウントとしてログインするために Node.js コードで使用する認証情報を作成します。次のコマンドを使用して認証情報を作成し、JSON ファイル「~/key.json」に保存します。

gcloud iam service-accounts keys create ~/key.json \
  --iam-account  my-text-to-speech-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com

最後に、次のステップで説明する Text-to-Speech API Node.js ライブラリが認証情報の検索に使用する GOOGLE_APPLICATION_CREDENTIALS 環境変数を設定します。先ほど作成した、認証情報を含む JSON ファイルのフルパスを設定する必要があります。

export GOOGLE_APPLICATION_CREDENTIALS="/home/${USER}/key.json"

5. Node.js 用 Google Cloud Text-to-Speech API クライアント ライブラリをインストールする

まず、この Text-to-Speech API ラボの実行に使用するプロジェクトを作成し、任意のフォルダに新しい Node.js パッケージを初期化します。

npm init

NPM がプロジェクト構成に関するいくつかの質問(名前やバージョンなど)を行います。各質問に対して、ENTER を押してデフォルト値を受け入れます。デフォルトのエントリ ポイントは、index.js という名前のファイルです。

次に、Google Cloud Speech ライブラリをプロジェクトにインストールします。

npm install --save @google-cloud/text-to-speech

Google Cloud 用の Node.js 開発環境を設定する手順については、設定ガイドをご覧ください。

これで、Text-to-Speech API を使用する準備が整いました。

6. 利用可能な音声の一覧表示

このセクションでは、まず音声合成に使用できる英語の音声をすべて一覧表示します。

内の index.js ファイルに移動し、コードを次のコードに置き換えます。

'use strict';

/**
 * Lists available voices for the specified language.
 *
 * @param {string} languageCode - The language code.
 */
async function listVoices(languageCode) {
  const textToSpeech = require('@google-cloud/text-to-speech');

  const client = new textToSpeech.TextToSpeechClient();

  const [result] = await client.listVoices({languageCode});
  const voices = result.voices;

  voices.forEach((voice) => {
    console.log(`${voice.name} (${voice.ssmlGender}): ${voice.languageCodes}`);
  });
}

listVoices('en');

1 ~ 2 分ほど時間を取ってコードを確認します。アプリを実行します。

node . 

次の出力が表示されます。

en-US-Standard-A (MALE): en-US
en-US-Standard-B (MALE): en-US
en-US-Standard-C (FEMALE): en-US
en-US-Standard-D (MALE): en-US
en-US-Standard-E (FEMALE): en-US
en-US-Standard-F (FEMALE): en-US
...

7. テキストから音声を合成する

Text-to-Speech API を使用して、文字列を音声データに変換できます。音声合成の出力はさまざまな方法で構成できます。たとえば、ユニークな音声を選択することや、ピッチの出力、音量、発話速度、サンプルレートを調節することが可能です。

index.js ファイルに移動し、次のコードを追加します。

/**
 * Sythesizes sample text into an .mp3 file.
 */
async function synthesize() {
  const textToSpeech = require('@google-cloud/text-to-speech');
  const fs = require('fs');
  const util = require('util');

  const client = new textToSpeech.TextToSpeechClient();

  const text = 'This is a demonstration of the Google Cloud Text-to-Speech API';

  const request = {
    input: {text: text},
    voice: {languageCode: 'en-US', ssmlGender: 'NEUTRAL'},
    audioConfig: {audioEncoding: 'MP3'},
  };

  const [response] = await client.synthesizeSpeech(request);
  // Write the binary audio content to a local file
  const writeFile = util.promisify(fs.writeFile);
  await writeFile('output.mp3', response.audioContent, 'binary');
  console.log('Audio content written to file: output.mp3');
}

synthesize();

コードを 1 ~ 2 分ほどかけて確認し、テキストからオーディオ ファイルを作成するためにコードがどのように使用されているかを確認します。

node .

次の出力が表示されます。

Audio content written to file "output.mp3"

8. 完了

このラボでは、Node.js を使用して Text-to-Speech API を使用し、音声ファイルに対してさまざまな種類の文字起こしを行う方法を学びました。

クリーンアップ

このクイックスタートで使用するリソースに対して Google Cloud Platform アカウントに課金されないようにするには:

  • Cloud Platform Console に移動します。
  • シャットダウンするプロジェクトを選択し、上部の [削除] をクリックします。これにより、プロジェクトの削除がスケジュールされます。

詳細

ライセンス

この作業はクリエイティブ・コモンズの表示 2.0 汎用ライセンスにより使用許諾されています。