> Discover all available pages from the documentation index: https://mastra.zisheng.pro/ja/llms.txt # Google Mastra の Google Voice 実装は、Google Cloud サービスを使用した Text-to-Speech(TTS)および Speech-to-Text(STT)機能を提供します。複数の Voice と言語、高度な音声設定オプションに加え、標準の API キー認証とエンタープライズ環境向けの Vertex AI モードをサポートします。 ## 使用例 ```typescript import { GoogleVoice } from '@mastra/voice-google' // Initialize with default configuration (uses GOOGLE_API_KEY environment variable) const voice = new GoogleVoice() // Text-to-Speech (plain text) const audioStream = await voice.speak('Hello, world!', { languageCode: 'en-US', audioConfig: { audioEncoding: 'LINEAR16', }, }) // Text-to-Speech with SSML const ssmlStream = await voice.speak('ignored', { input: { ssml: 'Take 5 mg daily.', }, }) // Text-to-Speech with Gemini-TTS model const geminiStream = await voice.speak('Hello from Gemini TTS!', { voice: { name: 'Kore', modelName: 'gemini-2.5-flash-preview-tts' }, input: { prompt: 'Warm, calm tone.' }, }) // Speech-to-Text const transcript = await voice.listen(audioStream, { config: { encoding: 'LINEAR16', languageCode: 'en-US', }, }) // Get available voices for a specific language const voices = await voice.getSpeakers({ languageCode: 'en-US' }) ``` ## コンストラクターパラメーター **speechModel** (`GoogleModelConfig`): Text-to-Speech 機能の設定 (Default: `{ apiKey: process.env.GOOGLE_API_KEY }`) **speechModel.apiKey** (`string`): Google Cloud API キー。未指定の場合は GOOGLE\_API\_KEY 環境変数を使用します。vertexAI が true の場合は使用しません。 **speechModel.keyFilename** (`string`): サービスアカウントの JSON キーファイルへのパス。未指定の場合は GOOGLE\_APPLICATION\_CREDENTIALS 環境変数を使用します。 **speechModel.credentials** (`object`): client\_email と private\_key プロパティを持つインメモリのサービスアカウント認証情報オブジェクト。 **listeningModel** (`GoogleModelConfig`): Speech-to-Text 機能の設定 (Default: `{ apiKey: process.env.GOOGLE_API_KEY }`) **listeningModel.apiKey** (`string`): Google Cloud API キー。未指定の場合は GOOGLE\_API\_KEY 環境変数を使用します。vertexAI が true の場合は使用しません。 **listeningModel.keyFilename** (`string`): サービスアカウントの JSON キーファイルへのパス。未指定の場合は GOOGLE\_APPLICATION\_CREDENTIALS 環境変数を使用します。 **listeningModel.credentials** (`object`): client\_email と private\_key プロパティを持つインメモリのサービスアカウント認証情報オブジェクト。 **speaker** (`string`): Text-to-Speech に使用するデフォルトの Voice ID (Default: `'en-US-Casual-K'`) **vertexAI** (`boolean`): エンタープライズ環境向けの Vertex AI モードを有効にします。API キーの代わりにプロジェクトベースの認証を使用します。'project' の設定が必要です。 (Default: `false`) **project** (`string`): Google Cloud プロジェクト ID(vertexAI が true の場合は必須)。未指定の場合は GOOGLE\_CLOUD\_PROJECT 環境変数を使用します。 **location** (`string`): Vertex AI の Google Cloud リージョン。未指定の場合は GOOGLE\_CLOUD\_LOCATION 環境変数を使用します。 (Default: `'us-central1'`) ## メソッド ### `speak()` Google Cloud Text-to-Speech サービスを使用してテキストを音声に変換します。 **input** (`string | NodeJS.ReadableStream`): 音声に変換するテキスト。ストリームを指定した場合は、先にテキストへ変換されます。 **options** (`object`): 音声合成オプション **options.speaker** (`string`): このリクエストに使用する Voice ID。 **options.languageCode** (`string`): Voice の言語コード(例:'en-US')。デフォルトは Speaker ID から取得した言語コード、取得できない場合は 'en-US' です。 **options.input** (`ISynthesizeSpeechRequest['input']`): Google Cloud TTS API にそのまま渡すリッチ入力オブジェクト。ssml、markup、prompt(Gemini-TTS 形式の制御)、customPronunciations、multiSpeakerMarkup をサポートします。text、ssml、markup、multiSpeakerMarkup なしで指定すると、位置引数の input が自動的に text フィールドとして使用されます。 **options.voice** (`ISynthesizeSpeechRequest['voice']`): デフォルト(name と languageCode)に統合される Voice 設定。modelName(例:'gemini-2.5-flash-preview-tts')と multiSpeakerVoiceConfig をサポートします。 **options.audioConfig** (`ISynthesizeSpeechRequest['audioConfig']`): Google Cloud Text-to-Speech API の音声設定オプション。 戻り値:`Promise` ### `listen()` Google Cloud Speech-to-Text サービスを使用して音声をテキストに変換します。v1(デフォルト)と v2 の両 API をサポートします。v2 API では、自動デコードによって AAC-in-MP4 音声(iOS Safari)もサポートします。 #### v1(デフォルト) **audioStream** (`NodeJS.ReadableStream`): 文字起こしする音声ストリーム **options** (`GoogleListenOptionsV1`): v1 認識オプション **options.config** (`IRecognitionConfig`): Google Cloud Speech-to-Text API の v1 認識設定 #### v2 AAC-in-MP4(iOS Safari)などの追加音声形式をサポートする Cloud Speech-to-Text v2 API を使用するには、`v2: true` を渡します。 v2 の `recognize` 呼び出しは IAM で認可され、API キーだけの認証は受け付けません。`vertexAI` を有効にしていない場合でも、`listeningModel` にサービスアカウント認証情報を設定(または `GOOGLE_APPLICATION_CREDENTIALS` を設定)し、Recognizer のパスを解決できるように `GOOGLE_CLOUD_PROJECT` を設定してください。 ```typescript import { GoogleVoice } from '@mastra/voice-google' // v2 listen() requires service account credentials, not just GOOGLE_API_KEY. // Set GOOGLE_CLOUD_PROJECT so the recognizer path can be resolved. const voice = new GoogleVoice({ listeningModel: { keyFilename: process.env.GOOGLE_APPLICATION_CREDENTIALS }, }) const transcript = await voice.listen(iosSafariAacStream, { v2: true, config: { autoDecodingConfig: {}, }, }) ``` > **注記:** `GOOGLE_API_KEY` だけを設定した場合、`listen({ v2: true })` は `speech.recognizers.recognize` で `PERMISSION_DENIED` になります。API キーによるリクエストには OAuth ID がないため、ユーザーアカウントに `roles/speech.client` を付与しても解決しません。このロールはリクエストで提示するサービスアカウントに付与する必要があります。これは `vertexAI` の設定に関係なく適用されます。`speak()` と v1 の `listen()` は API キーだけでも動作します。 **audioStream** (`NodeJS.ReadableStream`): 文字起こしする音声ストリーム **options** (`GoogleListenOptionsV2`): v2 認識オプション **options.v2** (`true`): v2 API パスを有効にします **options.config** (`v2.IRecognitionConfig`): v2 認識設定。デフォルトは languageCodes: \['en-US'] と model: 'long' を使用する自動デコードです。音声形式を自動検出するには autoDecodingConfig: {} を設定します。MP4\_AAC、M4A\_AAC、MOV\_AAC などのエンコーディングを指定するには explicitDecodingConfig を使用します。 **options.recognizer** (`string`): v2 Recognizer のリソースパス。デフォルトは projects/{project}/locations/global/recognizers/\_ です。{project} はコンストラクターの project オプション、GOOGLE\_CLOUD\_PROJECT、またはクライアントのデフォルトプロジェクトから解決されます。 戻り値:`Promise` ### `getSpeakers()` 使用可能な Voice オプションの配列を返します。各要素には次の値が含まれます。 **voiceId** (`string`): Voice の一意な識別子 **languageCodes** (`string[]`): この Voice がサポートする言語コードの一覧 ### `isUsingVertexAI()` Vertex AI モードが有効かどうかを確認します。 戻り値:`boolean` - Vertex AI を使用している場合は `true`、それ以外は `false` ### `getProject()` 設定された Google Cloud プロジェクト ID を取得します。 戻り値:`string | undefined` - プロジェクト ID。未設定の場合は `undefined` ### `getLocation()` 設定された Google Cloud のロケーション/リージョンを取得します。 戻り値:`string` - ロケーション(デフォルト:`'us-central1'`) ## 認証 Google Voice Provider は2つの認証方法をサポートします。 ### 標準モード(API キー) 認証に Google Cloud API キーを使用します。`speak()` と v1 の `listen()` に対応します。IAM で認可され、サービスアカウント認証情報が必要な `listen({ v2: true })` には対応しません([v2](#v2) を参照)。 ```typescript // Using environment variable (GOOGLE_API_KEY) const voice = new GoogleVoice() // Using explicit API key const voice = new GoogleVoice({ speechModel: { apiKey: 'your-api-key' }, listeningModel: { apiKey: 'your-api-key' }, speaker: 'en-US-Casual-K', }) ``` ### Vertex AI モード(サービスアカウント) サービスアカウントによる Google Cloud プロジェクトベースの認証を使用します。本番環境とエンタープライズ環境に推奨します。 **利点:** - セキュリティの向上(コードに API キーを含めません) - IAM ベースのアクセス制御 - プロジェクト単位の請求とクォータ - 監査ログ - エンタープライズ機能 **設定オプション:** ```typescript // Using Application Default Credentials (ADC) // Set GOOGLE_APPLICATION_CREDENTIALS and GOOGLE_CLOUD_PROJECT env vars const voice = new GoogleVoice({ vertexAI: true, project: 'your-gcp-project', location: 'us-central1', // Optional, defaults to 'us-central1' }) // Using service account key file const voice = new GoogleVoice({ vertexAI: true, project: 'your-gcp-project', speechModel: { keyFilename: '/path/to/service-account.json', }, listeningModel: { keyFilename: '/path/to/service-account.json', }, }) // Using in-memory credentials const voice = new GoogleVoice({ vertexAI: true, project: 'your-gcp-project', speechModel: { credentials: { client_email: 'service-account@project.iam.gserviceaccount.com', private_key: '-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----', }, }, }) ``` #### 必要な権限 #### IAM ロール Text-to-Speech の場合: - `roles/texttospeech.admin` - Text-to-Speech 管理者(フルアクセス) - `roles/texttospeech.editor` - Text-to-Speech 編集者(作成と管理) - `roles/texttospeech.viewer` - Text-to-Speech 閲覧者(読み取り専用) Speech-to-Text の場合: - `roles/speech.client` - Speech-to-Text クライアント リクエストで認証情報を提示するサービスアカウント(`keyFilename`、`credentials`、`GOOGLE_APPLICATION_CREDENTIALS` のいずれかを使用)に `roles/speech.client` を付与します。このロールは Vertex AI モードだけでなく、特に `listen({ v2: true })` に必要です。API キーだけのリクエストには認可対象の ID がないため、ユーザーアカウントに付与しても効果はありません。 #### OAuth スコープ 同期 Text-to-Speech 合成の場合: - `https://www.googleapis.com/auth/cloud-platform` - Google Cloud Platform サービスへのフルアクセス 長時間音声の Text-to-Speech 操作の場合: - `locations.longAudioSynthesize` - 長時間音声合成操作を作成します - `operations.get` - 操作の状態を取得します - `operations.list` - 操作の一覧を取得します ## 重要な注意事項 1. **認証**:Google Cloud API キー(標準モード)またはサービスアカウント認証情報(Vertex AI モード)が必要です。 2. **環境変数**: - `GOOGLE_API_KEY` - 標準モードの API キー - `GOOGLE_CLOUD_PROJECT` - Vertex AI モードのプロジェクト ID - `GOOGLE_CLOUD_LOCATION` - Vertex AI モードのロケーション(デフォルト:'us-central1') - `GOOGLE_APPLICATION_CREDENTIALS` - サービスアカウントキーファイルへのパス 3. デフォルトの Voice は `'en-US-Casual-K'` です。 4. Text-to-Speech と Speech-to-Text の両サービスは、デフォルトの音声エンコーディングとして LINEAR16 を使用します。 5. `speak()` メソッドは、Google Cloud Text-to-Speech API による高度な音声設定をサポートします。 6. `listen()` メソッドは、Google Cloud Speech-to-Text API によるさまざまな認識設定をサポートします。 7. `listen({ v2: true })` にはサービスアカウント認証情報と `GOOGLE_CLOUD_PROJECT` が必要です。`GOOGLE_API_KEY` だけを設定した場合は `PERMISSION_DENIED` になります。`speak()` と v1 の `listen()` は API キーだけで動作します。 8. 使用可能な Voice は、`getSpeakers()` メソッドで言語コードにより絞り込めます。 9. Vertex AI モードは、IAM 制御、監査ログ、プロジェクト単位の請求などのエンタープライズ機能を提供します。