Android TTS文本转语音TextToSpeech

打印 上一主题 下一主题

主题 866|帖子 866|积分 2598

Android 提供了 TextToSpeech(TTS)API,允许开发者将文本转换为语音。以下是对 Android TTS 文本转语音功能的详细先容,包罗基本用法、配置、事件处置惩罚和一些高级功能。
基本用法


  • 添加权限: 在 AndroidManifest.xml 文件中添加网络权限(假如需要在线合成服务):
    1. <uses-permission android:name="android.permission.INTERNET"/>
    复制代码
  • 初始化 TextToSpeech: 创建一个 TextToSpeech 对象并在 OnInitListener 中处置惩罚初始化结果。
    1. import android.content.Context;
    2. import android.os.Bundle;
    3. import android.speech.tts.TextToSpeech;
    4. import android.util.Log;
    5. public class TtsUtil implements TextToSpeech.OnInitListener {
    6.     private static final String TAG = "TtsUtil";
    7.     private TextToSpeech tts;
    8.     private boolean initialized = false;
    9.     public void init(Context context) {
    10.         tts = new TextToSpeech(context, this);
    11.     }
    12.     @Override
    13.     public void onInit(int status) {
    14.         if (status == TextToSpeech.SUCCESS) {
    15.             int result = tts.setLanguage(Locale.US);
    16.             if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
    17.                 Log.e(TAG, "This Language is not supported");
    18.             } else {
    19.                 initialized = true;
    20.                 Log.i(TAG, "Initialization successful");
    21.             }
    22.         } else {
    23.             Log.e(TAG, "Initialization Failed!");
    24.         }
    25.     }
    26.     public void shutdown() {
    27.         if (tts != null) {
    28.             tts.stop();
    29.             tts.shutdown();
    30.             tts = null;
    31.             initialized = false;
    32.             Log.i(TAG, "TTS shut down successfully");
    33.         }
    34.     }
    35.     public void speak(String text) {
    36.         if (initialized && tts != null) {
    37.             tts.speak(text, TextToSpeech.QUEUE_FLUSH, null, null);
    38.         } else {
    39.             Log.w(TAG, "TTS is not initialized yet.");
    40.         }
    41.     }
    42. }
    复制代码
  • 使用 TtsUtil 类: 在 Activity 中使用 TtsUtil 类举行文本转语音。
    1. package com.hellom.trp;
    2. import androidx.appcompat.app.AppCompatActivity;
    3. import android.os.Bundle;
    4. import android.view.View;
    5. import android.widget.Button;
    6. import com.hellom.trp.utils.TtsUtil;
    7. public class MainActivity extends AppCompatActivity {
    8.     private TtsUtil ttsUtil;
    9.     @Override
    10.     protected void onCreate(Bundle savedInstanceState) {
    11.         super.onCreate(savedInstanceState);
    12.         setContentView(R.layout.activity_main);
    13.         ttsUtil = new TtsUtil();
    14.         ttsUtil.init(this);
    15.         Button playButton = findViewById(R.id.playButton);
    16.         playButton.setOnClickListener(new View.OnClickListener() {
    17.             @Override
    18.             public void onClick(View v) {
    19.                 ttsUtil.speak("Hello, World!");
    20.             }
    21.         });
    22.     }
    23.     @Override
    24.     protected void onDestroy() {
    25.         super.onDestroy();
    26.         ttsUtil.shutdown();
    27.     }
    28. }
    复制代码
配置


  • 设置语言:
    1. int result = tts.setLanguage(Locale.US);
    2. if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
    3.     Log.e(TAG, "This Language is not supported");
    4. } else {
    5.     initialized = true;
    6.     Log.i(TAG, "Initialization successful");
    7. }
    复制代码
  • 设置音调和速率:
    1. tts.setPitch(1.0f); // Default pitch is 1.0
    2. tts.setSpeechRate(1.0f); // Default speech rate is 1.0
    复制代码
事件处置惩罚


  • 播放完成回调: 实现 OnUtteranceCompletedListener 接口来处置惩罚播放完成事件。


留意:
初始化失败-1
权限题目

在Android 11中,TTS功能需要使用ACCESSIBILITY_SERVICE权限。这是因为TTS可以读取屏幕上的文本,因此需要确保它不会滥用用户数据。假如没有这个权限,TTS的初始化过程可能会失败。为了解决这个题目,可以在AndroidManifest.xml文件中添加以下代码:
  1. <uses-permission android:name="android.permission.ACCESSIBILITY_SERVICE"/>
复制代码
软件包可见性题目

在Android 11中,由于软件包可见性限制,可能会导致TTS初始化失败。解决这个题目标方法是在AndroidManifest.xml文件中增长<queries>标签,指定TTS服务的action:
  1. <queries>
  2.     <intent>
  3.         <action android:name="android.intent.action.TTS_SERVICE"/>
  4.     </intent>
  5. </queries>
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农妇山泉一亩田

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表