android学习笔记53——自动朗读TTS
自動朗讀TTS
android提供了自動朗讀功能——其指的是支持可以對指定文本內容進行朗讀,從而發出聲音;
同時android的自動朗讀支持還允許把文本對應的音頻錄制成音頻文件,方便后續播放。
這種自動朗讀支持的英文名稱為:TextToSpeech,檢測TTS.
TTS,可以在應用程序中動態地增加音頻輸出,從而提高用戶體驗。
Android的自動朗讀支持通過TextToSpeech完成,該類提供了如下一個構造函數:
==>TextToSpeeech(Content content,TextToSpeeck.OnInitListener listener),當創建TextToSpeech對象時,必須先提供一個OnInitListener監聽器——該監聽器負責監聽TextToSpeech的初始化效果。
程序獲取TextToSpeeech對象后,可調用TextToSpeeech的setLanguage(Locale loc)方法設置該TTS發聲引擎使用的語音、國家選項。
注意:
如果調用setLanguage(Locale loc)的返回值是:TextToSpeech.LANG_COUNTRY_AVALABLE,說明當前TTS系統可以支持所設置的語音、國家選項。
對TextToSpeech設置完成后,即可調用它的方法來朗讀文本了,具體方法可參考TextToSpeech的API文檔。
TextToSpeech類中最常用的兩個方法如下:
1.speak(String text,int queueMode,HashMap<String,String> params);
2.synthesizeToFile(String text,HashMap<String,String> params,String fileName);
以上兩個方法都是用于把text文字內容轉換為音頻,區別只是speak方法是播放轉換的音頻,而synthesizeToFile是把轉換得到的音頻保存成聲音文件。
以上兩個方法中的params都用于指定聲音轉換時的參數,speak()中的queueMode參數指定TTS的發音隊列模式,該模式支持如下兩個常量:
1.TextToSpeech.QUEUE_PLUSH:如果指定該模式,當TTS調用speak()時,它會中斷當前實例正在運行的任務(也可理解為清除當前語音任務,轉而執行新的語音任務)
2.TextToSpeech.QUEUE_ADD:如果指定該模式,當TTS調用speak()時,會把新的發音任務添加到當前發音任務列隊之后——也就是等任務隊列中的發音任務執行完成后再來執行speak()指定的發音任務。
注意:
當程序用完了TextToSpeech對象后,可以在Activity的OnDestory()中調用它的shutdown()來關閉TextToSpeech、釋放其所占用資源。
總結:TextToSpeech使用步驟如下:
1.創建TextToSpeech對象,創建時傳入OnInitListener監聽器監聽創建是否成功;
2.設置TextToSpeech所使用語言、國家選項,通過返回值判斷TTS是否支持該語言、國家選項;
3.調用speak()或synthesizeToFile();
4.關閉TTS,回收資源。
實例如下:
布局文件==》 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity" ><EditTextandroid:id="@+id/edit"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="this is a dog" /><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal" ><Buttonandroid:id="@+id/btnRecord"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="記錄聲音" /><Buttonandroid:id="@+id/btnRead"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="朗讀" /></LinearLayout></LinearLayout>代碼實現==> package com.example.mytts;import java.util.Locale;import android.os.Bundle; import android.app.Activity; import android.speech.tts.TextToSpeech; import android.speech.tts.TextToSpeech.OnInitListener; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast;public class MainActivity extends Activity {EditText edit;TextToSpeech tts;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);edit = (EditText) this.findViewById(R.id.edit);Button btnRecord = (Button) this.findViewById(R.id.btnRecord);Button btnRead = (Button) this.findViewById(R.id.btnRead);btnRecord.setOnClickListener(new MyButtonOnClick());btnRead.setOnClickListener(new MyButtonOnClick());tts = new TextToSpeech(this, new OnInitListener(){@Overridepublic void onInit(int status){// 如果裝載TTS引擎成功if (status == TextToSpeech.SUCCESS){// 設置使用美式英語朗讀int result = tts.setLanguage(Locale.US);// 如果不支持所設置的語言、國家if (result != TextToSpeech.LANG_COUNTRY_AVAILABLE&& result != TextToSpeech.LANG_AVAILABLE){Toast.makeText(MainActivity.this, "TTS不支持本次設置語言、國家的朗讀", 5000).show();}}}});}private class MyButtonOnClick implements OnClickListener{@Overridepublic void onClick(View v){switch (v.getId()){case R.id.btnRecord:// 將朗讀文本的音頻記錄到指定文件tts.synthesizeToFile(edit.getText().toString(), null, "/mnt/sdcard/sound.wav");Toast.makeText(MainActivity.this, "聲音記錄成功", 5000).show();break;case R.id.btnRead:tts.speak(edit.getText().toString(), TextToSpeech.QUEUE_ADD, null);break;}}}@Overrideprotected void onDestroy(){// super.onDestroy();if (tts != null)tts.shutdown();}@Overridepublic boolean onCreateOptionsMenu(Menu menu){// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}?
轉載于:https://www.cnblogs.com/YYkun/p/5977316.html
總結
以上是生活随笔為你收集整理的android学习笔记53——自动朗读TTS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【移动开发】安卓Lab2(01)
- 下一篇: 跟老杨学java系列(一)前传