Android語音播報、後台播報、語音辨識

來源:互聯網
上載者:User

標籤:語音辨識   訊飛語音   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 {                // 伺服器識別完成後會返回集合,我們這裡就只得到最匹配的那一項                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


Android語音播報、後台播報、語音辨識

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.