Android語音播報、后台播報、語音識別


Android語音播報、后台播報、語音識別



本文介紹使用訊飛語音實現語音播報、語音識別功能。

訊飛開放平台:http://www.xfyun.cn/index.php/default/index


程序效果圖:


簡單的XML布局

<?

xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <EditText android:id="@+id/et" android:layout_width="fill_parent" android:layout_height="wrap_content" android:editable="true" /> <Button android:id="@+id/bt_recognize" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:text="識別" /> <Button android:id="@+id/bt_speek" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:text="Speek" /> <Button android:id="@+id/bt_speek_bg" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:text="后台Speek" /> <TextView android:textColor="@android:color/white" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="語音控制開關" /> <ToggleButton android:id="@+id/tb" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>



識別

case R.id.bt_recognize:
                    // 這是語言識別部分,最重要的實例化一個
                    // RecognizerDialog並把你在官方站點申請的appid填入進去,非法id不能進行識別
                    RecognizerDialog isrDialog = new RecognizerDialog(Voice1Activity.this, APPID);

                    /*
                     * 設置引擎眼下支持五種 ”sms”:普通文本轉寫 “poi”:地名搜索 ”vsearch”:熱詞搜索
                     * ”video”:視頻音樂搜索 ”asr”:命令詞識別
                     */
                    isrDialog.setEngine("sms", null, null);
                    isrDialog.setListener(recoListener);
                    isrDialog.show();
                    break;

// 語言識別監聽器,有兩個方法
    RecognizerDialogListener recoListener = new RecognizerDialogListener() {

        @Override
        public void onResults(ArrayList<RecognizerResult> results,
                boolean isLast) {
            // 新添加了一個ToggleButton tb。首先檢查tb是否被按下,假設被按下才進行語言控制,沒被按下就進行文字識別
            if (tb.isChecked()) {
                // doVoice方法就是進行識別
                doVoice(results);
            } else {
                // server識別完畢后會返回集合。我們這里就僅僅得到最匹配的那一項
                text += results.get(0).text;
                System.out.println(text);
            }

        }

        // 首先迭代結果,然后獲取每一個結果,並進行對照。假設包括有特定字符串,那么就運行對應Intent跳轉。
        // 注意 凡是Intent能辦到的(發郵件,跳到已安裝應用,撥號。發短信。發彩信,瀏覽網頁。播放多媒體),它就都能辦到。
        private void doVoice(ArrayList<RecognizerResult> results) {
            Intent i = new Intent();
            for (RecognizerResult result : results) {
                if (result.text.contains("天氣")) {
                    // 天氣界面的跳轉
                    i.setClass(Voice1Activity.this, Weather.class);
                    startActivity(i);
                } else if (result.text.contains("新聞")) {
                    // 新聞界面的跳轉
                    i.setClass(Voice1Activity.this, News.class);
                    startActivity(i);
                } else if (result.text.contains("短信")) {
                    // 短信界面的跳轉
                    i.setAction(Intent.ACTION_VIEW);
                    i.setType("vnd.android-dir/mms-sms");
                    startActivity(i);
                } else {
                    // 假設沒有對應指令就用Toast提示用戶
                    Toast.makeText(Voice1Activity.this, "無法識別",Toast.LENGTH_SHORT).show();
                }
            }

        }

        @Override
        public void onEnd(SpeechError error) {
            if (error == null) {
                // 完畢后就把結果顯示在EditText上
                et.setText(text);
            }
        }
    };


Speek

case R.id.bt_speek:
                    // 這是語言合成部分 相同須要實例化一個SynthesizerDialog 。並輸入appid
                    SynthesizerDialog syn = new SynthesizerDialog(Voice1Activity.this, APPID);
                    syn.setListener(new SynthesizerDialogListener() {

                        @Override
                        public void onEnd(SpeechError arg0) {

                        }
                    });
                    // 依據EditText里的內容實現語音合成
                    syn.setText(et.getText().toString(), null);
                    syn.show();
                    break;


后台Speek

 case R.id.bt_speek_bg:
                    //這是后台朗讀,實例化一個SynthesizerPlayer
                    SynthesizerPlayer player = SynthesizerPlayer.createSynthesizerPlayer(Voice1Activity.this, APPID);
                    //設置語音朗讀者。能夠依據須要設置男女朗讀,詳細請看api文檔和官方論壇
                    player.setVoiceName("vivixiaoyan");//在此設置語音播報的人選比如:vivixiaoyan、vivixiaomei、vivixiaoqi
                    player.playText(et.getText().toString(), "ent=vivi21,bft=5",null);

                    break;



源代碼下載:http://download.csdn.net/download/gao_chun/8775975


轉載請注明.


免責聲明!

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



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