テキスト音声変換のリファレンス アーキテクチャ

テキスト音声変換を使用してテキスト メッセージを音声に変換することで、あらゆるユーザーが会話に参加できるようにすることができます。

この記事では、GitHub のこのサンプルで使用されているアーキテクチャについて説明します。 このリファレンス アーキテクチャのコードはガイダンスの例にすぎず、運用環境で使用するにはコードの最適化が必要な場合があることに注意してください。

アーキテクチャの図

Tテキスト音声変換のリファレンス アーキテクチャ

アーキテクチャのサービス

  • Azure Event Hubs - 受信したメッセージの順序を維持できるので選択されました。
  • Azure Functions - クラウド上で、コードをオンデマンドで実行するための最も簡単な方法です。
  • Azure Content Moderator - 不適切発言やその他の望ましくない表現を検出するために追加されました。
  • Azure Text Analytics - このサービスでは、プレイヤーによって使用された言語が検出されます。これは、Azure Speech サービスに必要です。 別の方法として、Azure Content Moderator で言語を検出することもできます。
  • Azure Speech - テキスト音声変換機能を提供するサービスです。
  • Azure Premium Blob Storage - 待機時間の要件を理由に選択されました。音声ファイルの読み取りがゲーム プレイ中にオンデマンドで実行される場合、標準の Azure Blob Storage では制限が生じる場合があります。

アーキテクチャの考慮事項

作成する必要がある Azure Event Hub 名前空間は 1 つだけです。この名前空間に、メッセージの送信用と受信用の 2 つの Event Hub が含められます。

送信される各イベントには、245,760 バイトのメッセージ制限があります。 テキスト音声変換サービスの結果は、シリアル化された場合、このバッファーに対してサイズが大きくなりすぎます。 代わりに、結果を永続的ストレージに格納し、格納された項目へのポインターを返信メッセージの一部として渡すことが、実現可能なアプローチとなります。

ゲームでこの機能を有効にする場合は、次の変数に留意してください。

  • サポートされる音声と言語 - 音声の完全な一覧については、言語サポートに関するトピックを参照してください。
  • サポートされる地域 - 利用可能な地域について詳しくは、地域に関するトピックを参照してください。
  • オーディオ出力 - サポートされているオーディオ形式の一覧があります。 形式ごとに、ビットレートとエンコードの種類が組み込まれています。 Speech Service では、24 KHz と 16 KHz のオーディオ出力がサポートされています。 詳細については、オーディオ出力に関するトピックを参照してください。

デプロイ テンプレート

プロジェクトを Azure サブスクリプションにデプロイするには、次のボタンをクリックします。

この操作を実行すると、Azure サブスクリプションに対する azuredeploy.json ARM テンプレート ファイルのテンプレート デプロイがトリガーされ、必要な Azure リソースが作成されます。 これにより、Azure アカウントの料金が発生する場合があります。

Azure サービスの名前付け規則と制限事項をまとめたセクションが含まれる一般的なガイドライン ドキュメントを参照してください。

注意

ARM テンプレートの動作に興味がある場合は、このリファレンス アーキテクチャで利用されている各サービスの Azure Resource Manager テンプレートのドキュメントを参照してください。

Azure Cognitive Services には 2 種類のサブスクリプションがあります。 1 つ目は、単一サービスのサブスクリプションです (Computer Vision や Speech Servicesなど)。 単一サービスのサブスクリプションは、そのサービスのみに限定されます。 2 つ目の種類は、マルチサービス サブスクリプションです。 これは、1 つのサブスクリプションで複数の Azure Cognitive Services を利用できるようにするものです。 このオプションでは、課金も統合されます。 このリファレンス アーキテクチャでは、機能を可能な限りモジュール化するため、コグニティブ サービスがそれぞれ 1 つのサービスとしてセットアップされます。

最後に、次の Function アプリケーション設定を追加して、サンプル プロジェクトが Azure サービスに接続できるようにします。

  • EVENTHUB_CONNECTION_STRING - 作成された Azure Event Hub 名前空間への接続文字列
  • TEXTANALYTICS_KEY - 作成された Azure Text Analytics コグニティブ サービス用のアクセス キー
  • SPEECH_KEY - 作成された Azure Speech Cognitive Service 用のアクセス キー

ヒント

Azure Functions をローカル環境で実行するには、local.settings.json ファイルをこれらの同じアプリ設定で更新します。

ステップ バイ ステップの手順

  1. プレイヤーのデバイスで、Azure Traffic Manager により決定された特定の地域のチャット サーバーに対し、暗号化された永続的な接続が開かれます。 チャット サーバーでは、プレイヤーとの接続を維持するためのプロセスと、いくつかの基本的なメタデータが作成されます。
  2. 以前に作成されたセキュアな接続を介して、プレイヤーのクライアントからチャット サーバーにチャット メッセージが送信されます。 チャット サーバーにあるプレイヤーのプロセスによって、メッセージが受信され、復号化されて解析されます。
  3. 標準的な検証が実行され、メッセージの順序を維持したまま、チャット サーバーによって Azure Event Hubs サービスが呼び出されます。
  4. Azure Event Hub は、Azure Function の入力トリガーとして機能します。
  5. 必要に応じて、Azure Function から Azure Content Moderator Cognitive Service を呼び出してコンテンツをレビューします (これがベスト プラクティスです)。
  6. その後、Azure Function から Azure Text Analytics サービスを呼び出して、プレイヤーが使用した言語を検出します。
  7. その後、Azure Function でその情報を使用して、オーディオへの変換を開始する要求を送信します。 Azure Speech サービスの応答本文はオーディオ ファイルです。
  8. Azure Function で、オーディオ ファイルを永続的ストレージ (Azure Premium Blob Storage) に格納し、格納先の場所を取得します。
  9. もう 1 つの Azure Event HubAzure Function の出力として設定され、これにより、オーディオ ファイルを含んだ永続的ストレージへのポインターが受信されます。
  10. チャット サーバーで、Azure Event Hub からの結果が受信されます。
  11. チャット サーバーが、受信されたポインターを使用して、永続的ストレージから音声ファイルを読み取ります。
  12. チャット メッセージとオーディオ ファイルが、チャット サーバーの受信側プレイヤーのプロセスに送信されます。 これらのプロセスは、テキスト メッセージに対してさらなる検証を実行し、テキストとオーディオの両方をシリアル化したうえで、セキュアな接続を介して受信側プレイヤーのデバイスにそれらを送信します。 最後に、チャット画面にテキストが表示され、オーディオ ファイルが再生されます。

BLOB ストレージのクリーンアップ

永続的ストレージに保存されているオーディオ ファイルのクリーンアップは、入念に行ってください。 詳細については、BLOB ストレージ ライフサイクルの管理に関するドキュメントを参照してください。

Azure Text to Speech Service

Text to Speech Cognitive Service のサンプルを探している場合は、Microsoft Speech Service API の Text-to-Speech サンプルに関する記事を参照してください。

Azure Text Analytics

このサービスは、プレイヤーによって送信されたチャット文字列の言語を検出するために必要です。 現在のところ、このサービスで返すことができるのは、ISO 639-1 の名前 ("en"、"fr" など) のみです。つまり、特定の言語や方言をサポートするために Text to Speech の言語コードがより詳細になってくると、変換テーブルが必要になります。 完全な一覧については、Speech Service API での言語と地域のサポートに関する記事を参照してください。

別の方法として、変換テーブルの代わりに、プレイヤーが希望のローカル言語と音声をゲーム設定の一部として選択できるようにすることもできます (たとえば、アルゼンチンのスペイン語ではなく、メキシコのスペイン語を選択するなど)。

代替手段

Azure Content Moderator では、モデレートのために送信された文字列の言語を検出することもできます。つまり、この目的のために、Azure Content Moderator を Azure Text Analytics の代わりに使用することもできます。その場合、文字列をモデレートするという利点も追加されます。

セキュリティに関する考慮事項

Event Hub や Cognitive Services の接続文字列を Function のソースにハードコードすることはしないでください。 代わりに、少なくとも、関数アプリの設定を利用するか、より強力なセキュリティのためには、代わりに Key Vault を使用します。 キー コンテナーを作成する方法、関数でマネージド サービス ID を使用する方法、および最後に関数から Key Vault に格納されているシークレットを読み取る方法について説明されているチュートリアルがあります。

Event Hub の認証とセキュリティ モデルの概要に関する記事を確認し、その内容を実践して、チャット サーバーが Event Hub と通信できるようにしてください。

その他のリソースとサンプル

Azure Event Hubs SDK for Unity: これはサンドボックス プロジェクトです。 この記事の内容はサポートされていないため、古いか、動作しない可能性があります。

価格設定

Azure サブスクリプションをお持ちでない場合は、無料アカウント を作成して 12 か月間の無料サービスの利用を開始できます。 それらのサービスの制限を超えない限り、Azure 無料アカウントで無償で提供されているサービスに対して料金が発生することはありません。 Azure Portal または使用状況ファイルを通じて使用状況を確認する方法について説明します。

これらのリファレンス アーキテクチャの実行中に使用される Azure サービスのコストはユーザーが負担します。 その合計は使用状況によって異なります。 リファレンス アーキテクチャで使用されていた各サービスの価格は、Web ページで確認ください。

また、Azure の料金計算ツールを使用して、使用する予定の Azure サービスのコストを構成および見積もることもできます。