Google TTS服务
Google提供多种TTS服务选择:Cloud Text-to-Speech API支持120+种语言,每月500万字符免费额度;Gemini TTS 2.5预览版支持自然语言指令控制语音风格;Vertex AI的Chirp3模型可快速创建专属语音;Android内置TTS引擎适合基础朗读功能。选择建议:稳定商用选Cloud API,创新探索用Gemini,品牌定制选Vertex AI,基础功能用
📊 Google TTS服务一览
| 服务名称 | 产品定位 | 核心特点 | 免费额度 (每月) | 适用场景 |
|---|---|---|---|---|
| Google Cloud Text-to-Speech API | 企业级、标准化的云端API服务 | 支持120+种语言,提供220多种声音,包含高保真WaveNet语音,支持SSML精细控制。 | 500万字符 | 商业应用开发、智能客服、有声内容生成、无障碍辅助等。 |
| Gemini TTS 2.5 预览版 | 前沿、实验性的AI语音模型 | 可用自然语言指令描述口音和风格(如“中文腔调的英语”),支持上下文自适应节奏和情绪表达。 | 可免费测试(预览阶段) | 探索创意语音合成、个性化语音助手、教育内容创作。 |
| Vertex AI (Chirp 3 模型) | 企业级AI平台内的多功能模型 | 特色是Instant Custom Voice功能,仅需10秒音频即可创建专属语音角色。 | 按用量计费 | 创建品牌专属声音、定制化语音内容。 |
| Android系统内置TTS | 移动设备本地语音引擎 | 免费,无需网络,依赖设备预装引擎,语音质量和可选语言有限。 | 完全免费 | Android应用基础朗读、无障碍功能。 |
🤔 如何选择适合的服务?
-
如果你是开发者或企业用户,寻求稳定、高质量的语音合成
首选 Google Cloud Text-to-Speech API。这是最成熟、功能最全面的服务,拥有巨大的免费试用额度(每月500万字符),适合从原型开发到规模化应用。你可以通过简单的API调用,获得接近真人音质的声音。 -
如果你追求最新的AI语音能力,想尝试用指令生成不同风格的语音
可以关注 Gemini TTS 2.5 预览版。它目前处于免费测试阶段,适合研究或探索前沿应用。请注意它尚未正式商用,功能可能变动。 -
如果你想为你的品牌或应用创建一个独一无二的声音
Vertex AI 中的 Chirp 3 模型的“Instant Custom Voice”功能非常合适。它能用极短的音频样本快速克隆出专属语音,适合打造有辨识度的品牌语音助手或客服。 -
如果你只需要在Android应用里实现基本的文本朗读功能
直接利用 Android系统内置的TTS引擎即可。这无需付费,也无需处理云端API调用,是最简单快捷的方案。
测试代码:
工程名:SimpleVoiceAssistant
功能:点击按钮说话 -> 应用识别并显示文字 -> 应用将文字用语音读出来。1. 配置与权限 (
app/src/main/AndroidManifest.xml)在
<application>标签外添加以下权限:xml
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- RECORD_AUDIO 是语音识别的关键权限 -->
2. 界面布局 (
app/src/main/res/layout/activity_main.xml)创建一个包含按钮、状态文本和识别结果显示的简单界面:
xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="20dp" android:gravity="center"> <TextView android:id="@+id/tvStatus" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="点击下方按钮开始说话" android:textSize="16sp" android:layout_marginBottom="20dp"/> <Button android:id="@+id/btnSpeak" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="🎤 按住说话" android:textSize="18sp"/> <TextView android:id="@+id/tvResult" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="30dp" android:text="识别结果将显示在这里..." android:textSize="18sp" android:gravity="center" android:textStyle="bold"/> </LinearLayout>3. 核心逻辑代码 (
app/src/main/java/com/example/simplevoiceassistant/MainActivity.java)这是工程的核心,整合了语音识别和TTS:
java
package com.example.simplevoiceassistant; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; import android.speech.RecognizerIntent; import android.speech.tts.TextToSpeech; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; import java.util.Locale; public class MainActivity extends AppCompatActivity { private static final String TAG = "VoiceAssistant"; private static final int REQUEST_RECORD_AUDIO_PERMISSION = 100; private static final int REQUEST_SPEECH_RECOGNITION = 200; // 核心组件 private TextToSpeech ttsEngine; private Button btnSpeak; private TextView tvStatus, tvResult; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 1. 初始化UI组件 btnSpeak = findViewById(R.id.btnSpeak); tvStatus = findViewById(R.id.tvStatus); tvResult = findViewById(R.id.tvResult); // 2. 初始化TTS引擎(说) initTTS(); // 3. 检查并请求录音权限 if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.RECORD_AUDIO}, REQUEST_RECORD_AUDIO_PERMISSION); } // 4. 设置按钮的触摸监听器:按住说话,松开识别 btnSpeak.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: // 按下时开始录音 startSpeechRecognition(); tvStatus.setText("正在聆听..."); break; case MotionEvent.ACTION_UP: // 松开时停止 tvStatus.setText("识别中..."); break; } return true; } }); } /** * 初始化TTS引擎 */ private void initTTS() { ttsEngine = new TextToSpeech(this, new TextToSpeech.OnInitListener() { @Override public void onInit(int status) { if (status == TextToSpeech.SUCCESS) { // 设置语言(这里用中文) int result = ttsEngine.setLanguage(Locale.CHINESE); if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) { Log.e(TAG, "中文语言包不支持,将尝试使用英语"); ttsEngine.setLanguage(Locale.US); } Log.d(TAG, "TTS初始化成功"); } else { Log.e(TAG, "TTS初始化失败"); } } }); // 设置语速和音调(可选) ttsEngine.setSpeechRate(1.0f); ttsEngine.setPitch(1.0f); } /** * 启动系统语音识别Activity */ private void startSpeechRecognition() { // 检查设备是否支持语音识别 if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_MICROPHONE)) { Toast.makeText(this, "该设备不支持麦克风!", Toast.LENGTH_SHORT).show(); return; } // 创建语音识别Intent Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.CHINESE.toString()); intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "请开始说话..."); // 启动系统语音识别Activity try { startActivityForResult(intent, REQUEST_SPEECH_RECOGNITION); } catch (Exception e) { Toast.makeText(this, "语音识别服务出错: " + e.getMessage(), Toast.LENGTH_SHORT).show(); } } /** * 接收语音识别结果 */ @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_SPEECH_RECOGNITION) { if (resultCode == RESULT_OK && data != null) { // 获取识别结果列表(可能有多个候选) ArrayList<String> results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); if (results != null && !results.isEmpty()) { String spokenText = results.get(0); // 取置信度最高的结果 tvResult.setText(spokenText); tvStatus.setText("识别成功!"); // 调用TTS将识别出的文字读出来 speakOut(spokenText); } } else { tvStatus.setText("识别取消或失败"); } } } /** * 使用TTS朗读文本 */ private void speakOut(String text) { if (ttsEngine != null) { // 清空当前语音队列并播放新内容 ttsEngine.speak(text, TextToSpeech.QUEUE_FLUSH, null, "utteranceId"); } } /** * 释放TTS资源,防止内存泄漏 */ @Override protected void onDestroy() { if (ttsEngine != null) { ttsEngine.stop(); ttsEngine.shutdown(); } super.onDestroy(); } }
更多推荐



所有评论(0)