> Discover all available pages from the documentation index: https://mastra.zisheng.pro/ko/llms.txt # Google Mastra의 Google Voice 구현은 Google Cloud 서비스를 사용하여 텍스트 음성 변환(TTS) 및 음성 텍스트 변환(STT) 기능을 모두 제공합니다. 여러 음성, 언어, 고급 오디오 구성 옵션을 지원하고 표준 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`): Configuration for text-to-speech functionality (Default: `{ apiKey: process.env.GOOGLE_API_KEY }`) **speechModel.apiKey** (`string`): Google Cloud API key. Falls back to GOOGLE\_API\_KEY environment variable. Not used when vertexAI is true. **speechModel.keyFilename** (`string`): Path to service account JSON key file. Falls back to GOOGLE\_APPLICATION\_CREDENTIALS environment variable. **speechModel.credentials** (`object`): In-memory service account credentials object with client\_email and private\_key properties. **listeningModel** (`GoogleModelConfig`): Configuration for speech-to-text functionality (Default: `{ apiKey: process.env.GOOGLE_API_KEY }`) **listeningModel.apiKey** (`string`): Google Cloud API key. Falls back to GOOGLE\_API\_KEY environment variable. Not used when vertexAI is true. **listeningModel.keyFilename** (`string`): Path to service account JSON key file. Falls back to GOOGLE\_APPLICATION\_CREDENTIALS environment variable. **listeningModel.credentials** (`object`): In-memory service account credentials object with client\_email and private\_key properties. **speaker** (`string`): Default voice ID to use for text-to-speech (Default: `'en-US-Casual-K'`) **vertexAI** (`boolean`): Enable Vertex AI mode for enterprise deployments. Uses project-based authentication instead of API keys. Requires 'project' to be set. (Default: `false`) **project** (`string`): Google Cloud project ID (required when vertexAI is true). Falls back to GOOGLE\_CLOUD\_PROJECT environment variable. **location** (`string`): Google Cloud region for Vertex AI. Falls back to GOOGLE\_CLOUD\_LOCATION environment variable. (Default: `'us-central1'`) ## 행동 양식 ### `speak()` Google Cloud Text-to-Speech 서비스를 사용하여 텍스트를 음성으로 변환합니다. **input** (`string | NodeJS.ReadableStream`): Text to convert to speech. If a stream is provided, it will be converted to text first. **options** (`object`): Speech synthesis options **options.speaker** (`string`): Voice ID to use for this request. **options.languageCode** (`string`): Language code for the voice (e.g., 'en-US'). Defaults to the language code derived from the speaker ID, or 'en-US'. **options.input** (`ISynthesizeSpeechRequest['input']`): Rich input object passed through to the Google Cloud TTS API. Supports ssml, markup, prompt (Gemini-TTS style steering), customPronunciations, and multiSpeakerMarkup. When provided without text, ssml, markup, or multiSpeakerMarkup, the positional input argument is used as the text field automatically. **options.voice** (`ISynthesizeSpeechRequest['voice']`): Voice configuration merged on top of defaults (name and languageCode). Supports modelName (e.g., 'gemini-2.5-flash-preview-tts') and multiSpeakerVoiceConfig. **options.audioConfig** (`ISynthesizeSpeechRequest['audioConfig']`): Audio configuration options from 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`): Audio stream to transcribe **options** (`GoogleListenOptionsV1`): v1 recognition options **options.config** (`IRecognitionConfig`): v1 recognition configuration from Google Cloud Speech-to-Text API #### v2 통과하다`v2: true` 를 사용하여 AAC-in-MP4(iOS Safari)와 같은 추가 오디오 형식을 지원하는 Cloud Speech-to-Text v2 API를 사용합니다. v2`recognize` 호출은 IAM 인증을 사용하며 API 키만을 사용한 인증은 허용하지 않습니다. 다음에서 서비스 계정 자격 증명을 구성하세요: `listeningModel` (or set `GOOGLE_APPLICATION_CREDENTIALS`) and set `GOOGLE_CLOUD_PROJECT` 를 설정한 경우에도 인식기 경로를 확인할 수 있도록 `vertexAI` is not enabled. ```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: {}, }, }) ``` :::note`listen({ v2: true })` fails with `PERMISSION_DENIED` on `speech.recognizers.recognize` when only `GOOGLE_API_KEY` 가 설정되어 있습니다. API 키 요청에는 OAuth ID가 포함되지 않으므로 `roles/speech.client` 를 사용자 계정에 부여해도 도움이 되지 않습니다. 요청에 제시된 서비스 계정에 역할을 부여해야 합니다. 이는 `vertexAI` setting; `speak()`그리고 v1`listen()`여전히 API 키만으로 작업합니다. ::: **audioStream** (`NodeJS.ReadableStream`): Audio stream to transcribe **options** (`GoogleListenOptionsV2`): v2 recognition options **options.v2** (`true`): Enables the v2 API path **options.config** (`v2.IRecognitionConfig`): v2 recognition configuration. Defaults to auto-decoding with languageCodes: \['en-US'] and model: 'long'. Set autoDecodingConfig: {} to auto-detect the audio format, or use explicitDecodingConfig to specify an encoding like MP4\_AAC, M4A\_AAC, or MOV\_AAC. **options.recognizer** (`string`): v2 recognizer resource path. Defaults to projects/{project}/locations/global/recognizers/\_ where {project} is resolved from the constructor project option, GOOGLE\_CLOUD\_PROJECT, or the client's default project. 보고:`Promise` ### `getSpeakers()` 각 노드에 다음이 포함된 사용 가능한 음성 옵션의 배열을 반환합니다. **voiceId** (`string`): Unique identifier for the voice **languageCodes** (`string[]`): List of language codes supported by this voice ### `isUsingVertexAI()` Vertex AI 모드가 사용 설정되었는지 확인합니다. 보고:`boolean` - `true` if using Vertex AI, `false` otherwise ### `getProject()` 구성된 Google Cloud 프로젝트 ID를 가져옵니다. 보고:`string | undefined` - The project ID or `undefined` if not set ### `getLocation()` 구성된 Google Cloud 위치/지역을 가져옵니다. 보고:`string` - The location (default: `'us-central1'`) ## 입증 Google Voice Provider는 두 가지 인증 방법을 지원합니다. ### 표준 모드(API 키) 인증을 위해 Google Cloud API 키를 사용합니다. 커버`speak()` and v1 `listen()`. It does not cover `listen({ v2: true })`이며, IAM 인증을 사용하고 서비스 계정 자격 증명이 필요합니다(참조: [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 역할 텍스트 음성 변환의 경우: - `roles/texttospeech.admin`- 텍스트 음성 변환 관리자(전체 액세스) - `roles/texttospeech.editor`- 텍스트 음성 변환 편집기(생성 및 관리) - `roles/texttospeech.viewer`- 텍스트 음성 변환 뷰어(읽기 전용) 음성-텍스트의 경우: - `roles/speech.client`- 음성-텍스트 클라이언트 승인하다`roles/speech.client` 를 요청에서 자격 증명을 제시하는 서비스 계정에 부여합니다( `keyFilename`, `credentials`, or `GOOGLE_APPLICATION_CREDENTIALS`). This role is required for `listen({ v2: true })` 에 명시적으로 부여해야 하며, Vertex AI 모드에만 부여해서는 안 됩니다. 사용자 계정에 부여해도 API 키만 사용하는 요청에는 아무런 효과가 없습니다. 이러한 요청에는 인증에 사용할 ID가 포함되지 않기 때문입니다. #### OAuth 범위 동기식 텍스트 음성 변환 합성의 경우: - `https://www.googleapis.com/auth/cloud-platform`- Google Cloud Platform 서비스에 대한 전체 액세스 권한 긴 오디오 텍스트 음성 변환 작업의 경우: - `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. 기본 음성은 다음과 같이 설정되어 있습니다.`'en-US-Casual-K'`. 4. 텍스트 음성 변환 및 음성 텍스트 변환 서비스는 모두 LINEAR16을 기본 오디오 인코딩으로 사용합니다. 5. 그만큼`speak()` 메서드는 Google Cloud Text-to-Speech API를 통해 고급 오디오 구성을 지원합니다. 6. 그만큼`listen()` 메서드는 Google Cloud Speech-to-Text API를 통해 다양한 인식 구성을 지원합니다. 7. `listen({ v2: true })`서비스 계정 사용자 인증 정보가 필요하며`GOOGLE_CLOUD_PROJECT`; it fails with `PERMISSION_DENIED` when only `GOOGLE_API_KEY` is set. `speak()` and v1 `listen()` work with an API key alone. 8. 사용 가능한 음성은 다음을 사용하여 언어 코드별로 필터링할 수 있습니다.`getSpeakers()` method. 9. Vertex AI 모드는 IAM 제어, 감사 로그, 프로젝트 수준 청구를 포함한 엔터프라이즈 기능을 제공합니다.