如何为应用集成Google TTS更多葡萄牙语(pt-PT)语音?
嘿,我来帮你搞定这个问题!你遇到的情况其实挺常见的——原生的TTS API往往只能拿到有限的基础语音,而Google那些丰富的pt-PT语音(包括4种标准和4种WaveNet)需要通过专门的云服务才能获取到。下面分情况给你拆解解决方案:
先搞清楚:你当前用的是哪种TTS方式?
你提到调用tts.getVoices(),大概率是用了原生Web Speech API(比如浏览器内置的SpeechSynthesis接口)。这个接口的语音列表受限于浏览器/系统的内置支持,Chrome虽然基于Google的TTS技术,但出于性能和兼容性考虑,只开放了最基础的语音变体,所以你只能拿到那一种标准女声。
要获取完整的8种pt-PT语音,你需要切换到Google Cloud Text-to-Speech服务——这是官方提供完整语音库的唯一入口。
集成Google Cloud Text-to-Speech的步骤
1. 准备Google Cloud项目和权限
首先去Google Cloud控制台创建一个项目,然后启用「Text-to-Speech API」,接着生成一个服务账号密钥(JSON格式)——这个密钥是你调用API的凭证,要妥善保管,别暴露在前端代码里。
2. 调用API获取所有pt-PT语音
不管你是用后端(Node.js、Python等)还是通过中间层调用,都可以用官方的客户端库或者直接发HTTP请求。这里给你举个Node.js的例子:
首先安装客户端库:
npm install @google-cloud/text-to-speech
然后写代码列出所有pt-PT语音:
const textToSpeech = require('@google-cloud/text-to-speech'); const client = new textToSpeech.TextToSpeechClient({ keyFilename: './你的服务账号密钥.json' }); async function listAllPtVoices() { const [result] = await client.listVoices({ languageCode: 'pt-PT' }); const voices = result.voices; console.log('所有可用的葡萄牙语(pt-PT)语音:'); voices.forEach(voice => { const voiceType = voice.name.includes('Wavenet') ? 'WaveNet 语音' : '标准语音'; console.log(`- 名称:${voice.name} | 性别:${voice.ssmlGender} | 类型:${voiceType}`); }); } listAllPtVoices();
运行这段代码,你就能看到完整的8种语音了——包括4个标准(比如pt-PT-Standard-A)和4个WaveNet(比如pt-PT-Wavenet-A),每个都有不同的性别和音色。
3. 生成你想要的语音音频
选好目标语音后,调用synthesizeSpeech方法生成音频文件或者音频流:
async function generatePtSpeech() { const request = { input: { text: 'Olá! Esta é uma voz WaveNet em português do Portugal.' }, // 替换成你选的语音名称 voice: { languageCode: 'pt-PT', name: 'pt-PT-Wavenet-B' }, audioConfig: { audioEncoding: 'MP3' }, }; const [response] = await client.synthesizeSpeech(request); // 保存音频到本地文件 require('fs').writeFileSync('output.mp3', response.audioContent, 'binary'); console.log('语音音频已生成!'); } generatePtSpeech();
关于移动端的补充
如果你是在Android/iOS应用中开发,同样需要配置使用Google Cloud TTS引擎,而不是系统默认的TTS服务,才能获取到这些丰富的语音变体。Android上可以通过Google Cloud的REST API或者客户端库来调用,iOS同理。
总结
原生Web Speech API受限于浏览器/系统,拿不到完整的Google语音库;要获取那8种pt-PT语音,必须使用Google Cloud Text-to-Speech服务,通过官方API来调用。
内容的提问来源于stack exchange,提问作者Tiago Santos

