提升用戶體驗,讓應用說話——Android TTS

隨着科技的不斷進步,人們對於可視化的需求越來越高。而對於導盲軟件、語音播報、語音輸入等應用,用戶對於聲音的需求甚至比對於圖像的需求還要重要。但是,如何讓應用說話,成為了很多開發者面臨的難題。Android TTS(即Android Text-To-Speech,中文意為文本轉語音)是Google Android團隊針對Android平台所提供的一種自然語言合成系統,它能夠將自然語言文本轉變成能夠被人類聽懂的語音信息。

一、TTS的基本原理

Android TTS是基於系統默認的TTS Engine。使用TTS Engine需要以下步驟:

1. 引入TTS Engine:需要在配置文件AndroidManifest.xml中添加以下配置信息

2. 創建TTS Engine對象:創建TTS Engine對象需要主要構造函數.

private TextToSpeech textToSpeech;

textToSpeech = new TextToSpeech(this, this);

3. 設置回調函數:為了實現TTS Engine的狀態監聽,需要設置回調函數.

@Override
public void onInit(int status) {
if(status == TextToSpeech.SUCCESS) {
textToSpeech.setOnUtteranceProgressListener(new TTSUtteranceProgressListener());
}
}

4. 文本轉語音:在完成TTS Engine的初始化工作後,就可以將文本轉變成語音信息了.

@Override
public void speak(String text) {
if(textToSpeech == null) {
return;
}
String utteranceId = hashCode() + “”;
HashMap params = new HashMap();
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, utteranceId);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null, utteranceId);
} else {
textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, params);
}
}

二、TTS的使用場景

Android TTS應用場景非常之廣泛。其中的一個典型應用場景便是語音導航。通過將行進路線的信息和提醒內容轉換成語音,可以使司機在駕車時不用看路,直接聽取語音提示,使駕車更加安全。還有一種應用場景便是TTS播報內容。例如,當應用有新消息時,通過TTS播報內容,可以在用戶無視覺的情況下提醒用戶。

三、TTS的開發注意事項

1. 不同TTS Engine的API、回調函數都存在差異。需要注意調用對應的API。

2. 在初始化TTS Engine的時候,如果網絡不可用或者資源下載失敗等情況下,使用TTS Engine會出現空指針異常。因此在實現TTS Engine並使用前,應該對Android手機當前的網絡狀態以及下載耗時進行檢測,確保能夠正常使用TTS Engine。

3. 在使用TTS Engine時,會有一定的延遲,需要注意使用場景,避免出現較大的延遲。

四、TTS的完整代碼示例

public class TTSService extends Service implements TextToSpeech.OnInitListener {

    /**
     * TTS Engine對象
     */
    private TextToSpeech mTts;

    @Override
    public void onCreate() {
        super.onCreate();
        mTts = new TextToSpeech(this, this);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return START_STICKY_COMPATIBILITY;
    }

    @Override
    public void onDestroy() {
        if (mTts != null) {
            mTts.stop();
            mTts.shutdown();
        }
        super.onDestroy();
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    /**
     * 播放語音
     * @param text 文本
     * @param utteranceId 語音ID
     */
    public void playTalkText(String text, String utteranceId) {
        if (mTts == null) {
            return;
        }
        if (text.length() == 0) {
            return;
        }
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            mTts.speak(text, TextToSpeech.QUEUE_FLUSH, null, utteranceId);
        } else {
            mTts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
        }
    }

    /**
     * TTS Engine初始化完成回調函數
     * @param status 初始化狀態,成功時為TextToSpeech.SUCCESS
     */
    @Override
    public void onInit(int status) {
        if (status == TextToSpeech.SUCCESS) {
            mTts.setLanguage(Locale.CHINA);
            mTts.setSpeechRate(0.8f);
        }
    }

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/155057.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-17 02:38
下一篇 2024-11-17 02:38

相關推薦

  • Python中接收用戶的輸入

    Python中接收用戶的輸入是一個常見的任務,可以通過多種方式來實現。本文將從以下幾個方面對Python中接收用戶的輸入做詳細闡述。 一、使用input函數接收用戶輸入 Pytho…

    編程 2025-04-29
  • Python彈框讓用戶輸入

    本文將從多個方面對Python彈框讓用戶輸入進行闡述,並給出相應的代碼示例。 一、Tkinter彈窗 Tkinter是Python自帶的圖形用戶界面(GUI)庫,通過它可以創建各種…

    編程 2025-04-28
  • Zookeeper ACL 用戶 anyone 全面解析

    本文將從以下幾個方面對Zookeeper ACL中的用戶anyone進行全面的解析,並為讀者提供相關的示例代碼。 一、anyone 的作用是什麼? 在Zookeeper中,anyo…

    編程 2025-04-28
  • Android ViewPager和ScrollView滑動衝突問題

    Android開發中,ViewPager和ScrollView是兩個常用的控件。但是當它們同時使用時,可能會發生滑動衝突的問題。本文將從多個方面介紹解決Android ViewPa…

    編程 2025-04-28
  • Android如何點擊其他區域收起軟鍵盤

    在Android應用中,當輸入框獲取焦點彈出軟鍵盤後,我們希望能夠點擊其他區域使軟鍵盤消失,以提升用戶體驗。本篇文章將說明如何實現這一功能。 一、獲取焦點並顯示軟鍵盤 在Andro…

    編程 2025-04-28
  • Python中獲取用戶輸入命令的方法解析

    本文將從多個角度,分別介紹Python中獲取用戶輸入命令的方法,希望能夠對初學者有所幫助。 一、使用input()函數獲取用戶輸入命令 input()是Python中用於獲取用戶輸…

    編程 2025-04-27
  • Python接收用戶鍵盤輸入用法介紹

    本文將從多個方面對Python接收用戶鍵盤輸入進行詳細闡述,給出相關的代碼示例,讓大家更好的了解和應用Python的輸入功能。 一、輸入函數 在Python中,我們可以使用兩種函數…

    編程 2025-04-27
  • 如何在Linux中添加用戶並修改配置文件

    本文將從多個方面詳細介紹在Linux系統下如何添加新用戶並修改配置文件 一、添加新用戶 在Linux系統下創建新用戶非常簡單,只需使用adduser命令即可。使用以下命令添加新用戶…

    編程 2025-04-27
  • Android Studio HUD 實現指南

    本文將會以實例來詳細闡述如何在 Android Studio 中使用 HUD 功能實現菊花等待指示器的效果。 一、引入依賴庫 首先,我們需要在 build.gradle 文件中引入…

    編程 2025-04-27
  • Android和Vue3混合開發方案

    本文將介紹如何將Android和Vue3結合起來進行混合開發,以及其中的優勢和注意事項。 一、環境搭建 在進行混合開發之前,需要搭建好相應的開發環境。首先需要安裝 Android …

    編程 2025-04-27

發表回復

登錄後才能評論