Android文字轉語音


雖然視覺上的反饋通常是給用戶提供信息最快的方式,但這要求用戶把注意力設備上。當用戶不能查看設備時,則需要一些其他通信的方法。Android提供了強大的文字轉語音Text-to-Speech,TTS API。使開發者能夠在應用中添加語音通知和其他語音反饋功能,而不要求用戶看着屏幕。


下面的代碼展示了如何使用TTS API:

public class TextToSpeechDemo implements TextToSpeech.OnInitListener {
    private final TextToSpeech mTextToSpeech;//TTS對象
    private final ConcurrentLinkedQueue<String> mBufferedMessages;//消息隊列
    private Context mContext;
    private boolean mIsReady;//標識符


    public TextToSpeechDemo(Context context){
        this.mContext=context;//獲取上下文
        this.mBufferedMessages=new ConcurrentLinkedQueue<String>();//實例化隊列
        this.mTextToSpeech=new TextToSpeech(this.mContext,this);//實例化TTS
    }

//初始化TTS引擎
    @Override
    public void onInit(int status) {
        Log.i("TextToSpeechDemo",String.valueOf(status));
        if(status==TextToSpeech.SUCCESS){
            int result = this.mTextToSpeech.setLanguage(Locale.CHINA);//設置識別語音為中文
            synchronized (this){
                this.mIsReady=true;//設置標識符為true
                for(String bufferedMessage : this.mBufferedMessages){
                    speakText(bufferedMessage);//讀語音
                }
                this.mBufferedMessages.clear();//讀完后清空隊列
            }
        }
    }
//釋放資源
    public void release(){
        synchronized (this){
            this.mTextToSpeech.shutdown();
            this.mIsReady=false;
        }
    }

//更新消息隊列,或者讀語音
    public void notifyNewMessage(String lanaugh){
        String message=lanaugh;
        synchronized (this){
            if(this.mIsReady){
                speakText(message);
            }else{
                this.mBufferedMessages.add(message);
            }
        }
    }

//讀語音處理
    private void speakText(String message){
        Log.i("liyuanjinglyj",message);
        HashMap<String,String> params=new HashMap<String,String >();
        params.put(TextToSpeech.Engine.KEY_PARAM_STREAM,"STREAM_NOTIFICATION");//設置播放類型(音頻流類型)
        this.mTextToSpeech.speak(message, TextToSpeech.QUEUE_ADD, params);//將這個發音任務添加當前任務之后
        this.mTextToSpeech.playSilence(100,TextToSpeech.QUEUE_ADD,params);//間隔多長時間
    }
}

   當然一般手機是不支持中文的可以百度下載訊飛TTS引擎后在測試。見最后附圖。


由於TTS引擎的初始化是異步的,所以在執行實際的文字轉語音之前需要把消息放到隊列中。


可以給TTS引擎發送多個參數。前面展示了如何決定口語消息使用的音頻流。在這種情況下,通知聲音也使用相同的音頻流。


最后,如果處理連續多個消息,最好在每個消息結束后暫停一會在播放下一個消息。這樣做會清楚的告訴用戶消息的結束和開始。

版權聲明:本文為博主原創文章,未經博主允許不得轉載。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM