日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

语音识别,语义理解一站式解决(android平台olami sdk)

發布時間:2025/3/15 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 语音识别,语义理解一站式解决(android平台olami sdk) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

語音記賬demo:http://blog.csdn.net/ls0609/article/details/72765789

olami sdk實現了把錄音或者文字轉化為用戶可以理解的json字符串從而實現語義理解,用戶可以定義自己的語義,是不是很強大?本文講述怎么自定義語義,以及如何解析自定義語義。 本文使用olami sdk做了一個在線聽書的demo,用戶只需類似“我想聽***”就能實現聽書的在線查找并播放。用的是喜馬拉雅的在線聽書sdk.基于eclipse開發環境,libs目錄下jar和so文件如下:olami-android-sdk.jar //olami sdk 的jar afinal_0.5.1_bin.jar litepal.jar gson-2.2.4.jar okhttp-2.4.0.jar okhttp-urlconnection-2.2.0.jar okio-1.4.0.jar opensdk.jar //上面這幾個都是喜馬拉雅需要的jar libspeex.so //olami sdk 需要用到speex壓縮功能 libxmediaplayer.so // 喜馬拉雅so libxmediaplayer_x.so // 喜馬拉雅so

概述:?
VoiceSdkService中定義了OlamiVoiceRecognizer語音識別引擎,通過點擊MusicActivity的開始button啟動錄音,錄音結果在VoiceSdkService中的onResult()回調中拿到識別的Json字符串,在processServiceMessage()函數中處理后找到要聽書的名稱,然后進入BookUtil進行搜索,搜索到結果后通知VoiceSdkService進行播放,并通知MusicActivity更新播放進度等信息。

1.AndroidManifest.xml配置

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.olami.musicdemo"android:versionCode="1"android:versionName="1.0" ><uses-sdk android:minSdkVersion="8"android:targetSdkVersion="21" /><uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><application android:name="com.olami.musicdemo.OlamiApplication"android:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><!--喜馬拉雅聽書測試賬號app_key--><meta-data android:name="app_key"android:value="b617866c20482d133d5de66fceb37da3" /><!--喜馬拉雅聽書測試賬號包名--><meta-data android:name="pack_id"android:value="com.app.test.android" /><activity android:name=".MusicActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><!--注冊olami sdk service--><service android:name=".VoiceSdkService"android:exported="true" ></service><!--注冊喜馬拉雅聽書service--><service android:name="com.ximalaya.ting.android.opensdk.player.service.XmPlayerService"/></application></manifest>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59

2.layout布局文件

layout_musicview.xml

TextView 有兩個,tv_name顯示聽書的名稱, tv_totoal_time顯示聽書的總時間。?
ProgressBar 實時刷新顯示聽書的進度

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="fill_parent"android:layout_height="wrap_content"android:background="@android:color/transparent"><TextView android:text="name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:layout_centerHorizontal="true"android:id="@+id/tv_name"/><ProgressBar style="?android:attr/progressBarStyleHorizontal"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_below="@+id/tv_name"android:layout_marginTop="10dp"android:layout_marginLeft="20dp"android:layout_marginRight="20dp"android:id="@+id/progressbar_music"/><TextView android:text="total_time"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/progressbar_music"android:layout_marginTop="10dp"android:layout_centerHorizontal="true"android:id="@+id/tv_total_time"/></RelativeLayout>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

activity_music.xml

<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"tools:context="com.olami.musicdemo.MusicActivity" ><TextViewandroid:id="@+id/tv_inputText"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:text="輸入:" /><TextViewandroid:id="@+id/tv_volume"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/tv_inputText"android:layout_below="@+id/tv_inputText"android:layout_marginTop="40dp"android:text="音量:" /><TextViewandroid:id="@+id/tv_result"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/tv_volume"android:layout_marginTop="20dp"android:maxLines="15"android:ellipsize="end"android:text="服務器返回sentence:"android:visibility="visible" /><com.olami.musicdemo.MusicViewandroid:id="@+id/music_view"android:layout_width="fill_parent"android:layout_height="80dp"android:layout_centerInParent="true"></com.olami.musicdemo.MusicView><EditTextandroid:id="@+id/et_content"android:layout_width="wrap_content"android:layout_height="40dp"android:layout_above="@+id/btn_stop"android:layout_alignLeft="@+id/tv_inputText"android:layout_marginBottom="10dp"android:layout_toLeftOf="@+id/btn_send"android:background="#E7E7E7"android:singleLine="true"android:text="上海的天氣" /> <Buttonandroid:id="@+id/btn_send"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/et_content"android:layout_alignBottom="@+id/et_content"android:layout_alignParentRight="true"android:text="提交" /><Buttonandroid:id="@+id/btn_start"android:layout_width="wrap_content"android:layout_height="wrap_content" android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:text="開始" /><Buttonandroid:id="@+id/btn_stop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/et_content"android:layout_alignParentBottom="true"android:text="停止" /><Buttonandroid:id="@+id/btn_cancel"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_toRightOf="@+id/et_content"android:text="取消" /></RelativeLayout>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89

自定義MusicView比較簡單,代碼如下:

public class MusicView extends RelativeLayout{private Context mContext;private Handler mHandler;private TextView mTextViewName;private TextView mTextViewTotalTime;private ProgressBar mProgressBar;public MusicView(Context context,AttributeSet attrs) {super(context,attrs);LayoutInflater inflater =(LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);RelativeLayout view = (RelativeLayout) inflater.inflate(R.layout.layout_musicview, this,true);mTextViewName = (TextView) view.findViewById(R.id.tv_name);mTextViewTotalTime = (TextView) view.findViewById(R.id.tv_total_time);mProgressBar = (ProgressBar)view.findViewById(R.id.progressbar_music);}public void initMusicView(Context context,Handler handler){mContext = context;mHandler = handler;}public void setMusicName(String name){//設置播放名稱mTextViewName.setText(name);}public void setProgress(int progress){//設置播放進度mProgressBar.setProgress(progress);}public void setTotalTime(String time){//設置播放總時間mTextViewTotalTime.setText(time);}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

布局效果圖如下:?

3.MusicActivity和VoiceSdkService通信

本文沒有用bind service的方式實現activity和service的消息通信。?
MusicAcitity 和 VoiceSdkService中分別實現了一個CommunicationAssist的接口

public interface CommunicationAssist {public void callBack(int what, int arg1, int arg2,Bundle data, Object obj); }
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

然后把他們分別實現CommunicationAssist接口的變量注冊到OlamiApplication,這樣通過OlamiApplication實現了MusicAcitity 和 VoiceSdkService橋接。

3.1OlamiApplication

1) 注冊MusicActivity到VoiceSdkService的回調

public void setActivityToServiceListener(CommunicationAssist listener) {ActivityToServiceListener = listener; }
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

這個是在VoiceSdkService中調用setActivityToServiceListener(),把VoiceSdkService中的VoiceSdkComAssist注冊到application中,MusicActivity中可以通過getActivityToServiceListener?
這個函數回調向VoiceSdkService發送消息。

2) 注冊 VoiceSdkService到MusicActivity回調

public void setServiceToActivityListener(CommunicationAssist listener) {mServiceToActivityListener = listener; }
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

這個是在MusicAcitivity中調用setServiceToActivityListener(),這樣在VoiceSdkService中就可以通過getServiceToActivityListener()獲得回調向MusciActivity發送消息。

3.2 MusicActivity

public class MusicActivity extends Activity {private Handler mHandler;private Handler mInComingHandler;private ActivityComAssist mActivityComAssist;private Button mBtnStart;private Button mBtnStop;private Button mBtnCancel;private Button mBtnSend;private EditText mEditText;private TextView mTextView;private TextView mInputTextView;private TextView mTextViewVolume;private BookUtil mBookUtil = null;private MusicView mMusicView = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_music);initHandler();//初始化handler用于內部消息處理initInComingHandler();//用于處理來自VoiceSdkService的消息initCommunicationAssist();//向application注冊消息回調,VoiceSdkSerive可以//通過getServiceToActivityListener()獲得回調向MusicActivity發送消息initView();//初始化view控件Intent intent = new Intent();intent.setClass(MusicActivity.this, VoiceSdkService.class);startService(intent);//啟動后臺服務}private void initView(){mBtnStart = (Button) findViewById(R.id.btn_start);mBtnStop = (Button) findViewById(R.id.btn_stop);mBtnCancel = (Button) findViewById(R.id.btn_cancel);mBtnSend = (Button) findViewById(R.id.btn_send);mInputTextView = (TextView) findViewById(R.id.tv_inputText);mEditText = (EditText) findViewById(R.id.et_content);mTextView = (TextView) findViewById(R.id.tv_result);mTextViewVolume = (TextView) findViewById(R.id.tv_volume);mBtnStart.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {sendMessageToService(MessageConst.CLIENT_ACTION_START_RECORED,0,0,null,null);} });mBtnStop.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {sendMessageToService(MessageConst.CLIENT_ACTION_STOP_RECORED,0,0,null,null);mBtnStart.setText("開始");Log.i("led","MusicActivity mBtnStop onclick 開始");} });mBtnCancel.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {sendMessageToService(MessageConst.CLIENT_ACTION_CANCEL_RECORED,0,0,null,null);} });mBtnSend.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {sendMessageToService(MessageConst.CLIENT_ACTION_SENT_TEXT,0,0,null,mEditText.getText());mInputTextView.setText("文字: "+mEditText.getText());} });mMusicView = (MusicView) findViewById(R.id.music_view);//if(mMusicView != null)//mMusicView.initMusicView(MusicActivity.this,mHandler);}private void initHandler(){mHandler = new Handler(){@Overridepublic void handleMessage(Message msg){switch (msg.what){case MessageConst.CLIENT_ACTION_START_RECORED:break;default:break; }}};}//InComingHandler 收到來自VoiceSdkService的消息用于更新界面,//包括開始錄音,結束錄音,播放的書的名稱和進度,音量等信息。private void initInComingHandler(){mInComingHandler = new Handler(){@Overridepublic void handleMessage(Message msg){switch (msg.what){case MessageConst.CLIENT_ACTION_START_RECORED:mBtnStart.setText("錄音中");Log.i("led","MusicActivity 錄音中");break;case MessageConst.CLIENT_ACTION_STOP_RECORED:mBtnStart.setText("識別中");Log.i("led","MusicActivity 識別中");break;case MessageConst.CLIENT_ACTION_CANCEL_RECORED:mBtnStart.setText("開始");mTextView.setText("已取消");break;case MessageConst.CLIENT_ACTION_ON_ERROR:mTextView.setText("錯誤代碼:"+msg.arg1);mBtnStart.setText("開始");break;case MessageConst.CLIENT_ACTION_UPDATA_VOLUME:mTextViewVolume.setText("音量: "+msg.arg1);break;case MessageConst.SERVER_ACTION_RETURN_RESULT://mTextView.setText(msg.obj.toString());mBtnStart.setText("開始");break;case MessageConst.CLIENT_ACTION_PLAY_BOOK_AFTER_SEARCH:mBtnStart.setText("開始");mBookUtil = BookUtil.getInstance();mBookUtil.play(msg.arg1);break;case MessageConst.CLIENT_ACTION_UPDATA_PLAYING_BOOK_NAME:mMusicView.setMusicName(msg.obj.toString());break;case MessageConst.CLIENT_ACTION_UPDATE_BOOK_PROGRESS:int current = msg.arg1;int duration = msg.arg2;mMusicView.setProgress(current*100/duration);float time = duration/1000/60;mMusicView.setTotalTime("總時間:"+time);break;case MessageConst.CLIENT_ACTION_UPDATA_INPUT_TEXT:if(msg.obj != null)mInputTextView.setText("文字: "+msg.obj.toString());break;case MessageConst.CLIENT_ACTION_UPDATA_SERVER_MESSAGE:if(msg.obj != null)mTextView.setText("服務器返回sentence: "+msg.obj.toString());break;default:break;}}};}private void initCommunicationAssist(){//向Application注冊VoiceSdkService到MusicActivity的回調mActivityComAssist = new ActivityComAssist();OlamiApplication.getInstance().setServiceToActivityListener(mActivityComAssist);}private void sendMessageToService(int what, int arg1, int arg2, Bundle data, Object obj){//向VoiceSdkService發送消息if(OlamiApplication.getInstance().getActivityToServiceListener() != null)OlamiApplication.getInstance().getActivityToServiceListener().callBack(what, arg1, arg2, data, obj);}private class ActivityComAssist implements CommunicationAssist{//實現CommunicationAssist借口,用于回調VoiceSdkService發送過來的消息@Overridepublic void callBack(int what, int arg1, int arg2, Bundle data,Object obj) {Message msg = Message.obtain(null, what);msg.arg1 = arg1;msg.arg2 = arg2;if (data != null)msg.setData(data);if (obj != null)msg.obj = obj;mInComingHandler.sendMessage(msg);} }@Overridepublic void onDestroy() {//退出應用,停止VoiceSdkService,會進行資源的釋放super.onDestroy();Intent intent = new Intent();intent.setClass(MusicActivity.this, VoiceSdkService.class);stopService(intent);} }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198

3.3 VoiceSdkService

@Override public void onCreate() {initHandler();//用于內部消息處理initInComingHandler();//用于處理來自MusicActivity的消息initCommunicationAssist();//向application注冊消息回調,這樣MusicActivity可//以通過getActivityToServiceListener()回調向VoiceSdkService發送消息initViaVoiceRecognizerListener();//初始化錄音識別回調listenerinit();//olami錄音識別引擎初始化initXmly();//喜馬拉雅初始化}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
public void init() {initHandler();mOlamiVoiceRecognizer = new OlamiVoiceRecognizer(VoiceSdkService.this);TelephonyManager telephonyManager=(TelephonyManager) this.getSystemService((this.getBaseContext().TELEPHONY_SERVICE);String imei=telephonyManager.getDeviceId();mOlamiVoiceRecognizer.init(imei);//設置身份標識,可以填nullmOlamiVoiceRecognizer.setListener(mOlamiVoiceRecognizerListener);//設置識別結果回調listenermOlamiVoiceRecognizer.setLocalization(OlamiVoiceRecognizer.LANGUAGE_SIMPLIFIED_CHINESE);//設置支持的語音類型,優先選擇中文簡體mOlamiVoiceRecognizer.setAuthorization("51a4bb56ba954655a4fc834bfdc46af1","asr","68bff251789b426896e70e888f919a6d","nli"); //注冊Appkey,在olami官網注冊應用后生成的appkey//注冊api,請直接填寫“asr”,標識語音識別類型//注冊secret,在olami官網注冊應用后生成的secret//注冊seq ,請填寫“nli”mOlamiVoiceRecognizer.setVADTailTimeout(2000);//錄音時尾音結束時間,建議填//2000ms//設置經緯度信息,不愿上傳位置信息,可以填0 mOlamiVoiceRecognizer.setLatitudeAndLongitude(31.155364678184498,121.34882432933009); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

定義OlamiVoiceRecognizerListener

onError(int errCode)//出錯回調,可以對比官方文檔錯誤碼看是什么錯誤?
onEndOfSpeech()//錄音結束?
onBeginningOfSpeech()//錄音開始?
onResult(String result, int type)//result是識別結果JSON字符串?
onCancel()//取消識別,不會再返回識別結果?
onUpdateVolume(int volume)//錄音時的音量,1-12個級別大小音量

下面是VoiceSdkService完整代碼:

public class VoiceSdkService extends Service{private Handler mHandler;private Handler mInComingHandler;private VoiceSdkComAssist mVoiceSdkComAssist;private OlamiVoiceRecognizer mOlamiVoiceRecognizer;private OlamiVoiceRecognizerListener mOlamiVoiceRecognizerListener;private BookUtil mBookUtil = null;private boolean mIsRecordPause = false;@Overridepublic void onCreate() {initHandler();initInComingHandler();initCommunicationAssist();initViaVoiceRecognizerListener();init();initXmly();}@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}public void init(){initHandler();mOlamiVoiceRecognizer = new OlamiVoiceRecognizer(VoiceSdkService.this);TelephonyManager telephonyManager=(TelephonyManager) this.getSystemService(this.getBaseContext().TELEPHONY_SERVICE);String imei=telephonyManager.getDeviceId();mOlamiVoiceRecognizer.init(imei);//set null if you do not want to notify olami server.mOlamiVoiceRecognizer.setListener(mOlamiVoiceRecognizerListener);mOlamiVoiceRecognizer.setLocalization(OlamiVoiceRecognizer.LANGUAGE_SIMPLIFIED_CHINESE);mOlamiVoiceRecognizer.setAuthorization("51a4bb56ba954655a4fc834bfdc46af1","asr","68bff251789b426896e70e888f919a6d","nli"); mOlamiVoiceRecognizer.setVADTailTimeout(2000);mOlamiVoiceRecognizer.setLatitudeAndLongitude(31.155364678184498,121.34882432933009); }private void initHandler(){mHandler = new Handler(){@Overridepublic void handleMessage(Message msg){switch (msg.what){case MessageConst.CLIENT_ACTION_START_RECORED:sendMessageToActivity(MessageConst.CLIENT_ACTION_START_RECORED,0,0,null,null);break;case MessageConst.CLIENT_ACTION_STOP_RECORED:sendMessageToActivity(MessageConst.CLIENT_ACTION_STOP_RECORED,0,0,null,null);break;case MessageConst.CLIENT_ACTION_ON_ERROR:sendMessageToActivity(MessageConst.CLIENT_ACTION_ON_ERROR,msg.arg1,0,null,null);break;case MessageConst.CLIENT_ACTION_PLAY_BOOK_AFTER_SEARCH:sendMessageToActivity(MessageConst.CLIENT_ACTION_PLAY_BOOK_AFTER_SEARCH, msg.arg1, 0, null, msg.obj);break;case MessageConst.CLIENT_ACTION_UPDATA_PLAYING_BOOK_NAME:sendMessageToActivity(MessageConst.CLIENT_ACTION_UPDATA_PLAYING_BOOK_NAME, msg.arg1, 0, null, msg.obj);break;case MessageConst.CLIENT_ACTION_UPDATE_BOOK_PROGRESS:sendMessageToActivity(MessageConst.CLIENT_ACTION_UPDATE_BOOK_PROGRESS, msg.arg1, msg.arg2, null, null);break;case MessageConst.CLIENT_ACTION_CANCEL_RECORED:sendMessageToActivity(MessageConst.CLIENT_ACTION_CANCEL_RECORED, msg.arg1, msg.arg2, null, null);break;default:break;}}};}private void initInComingHandler(){mInComingHandler = new Handler(){@Overridepublic void handleMessage(Message msg){switch (msg.what){case MessageConst.CLIENT_ACTION_START_RECORED:if(mOlamiVoiceRecognizer != null)mOlamiVoiceRecognizer.start(); break;case MessageConst.CLIENT_ACTION_STOP_RECORED:if(mOlamiVoiceRecognizer != null)mOlamiVoiceRecognizer.stop(); break;case MessageConst.CLIENT_ACTION_CANCEL_RECORED:if(mOlamiVoiceRecognizer != null)mOlamiVoiceRecognizer.cancel(); break;case MessageConst.CLIENT_ACTION_SENT_TEXT:if(mOlamiVoiceRecognizer != null)mOlamiVoiceRecognizer.sendText(msg.obj.toString()); break;}}};}private void initViaVoiceRecognizerListener(){mOlamiVoiceRecognizerListener = new OlamiVoiceRecognizerListener();}private class OlamiVoiceRecognizerListener implements IOlamiVoiceRecognizerListener{@Overridepublic void onError(int errCode) {mHandler.sendMessage(mHandler.obtainMessage(MessageConst.CLIENT_ACTION_ON_ERROR,errCode,0));}@Overridepublic void onEndOfSpeech() {mHandler.sendEmptyMessage(MessageConst.CLIENT_ACTION_STOP_RECORED);if(mIsRecordPause){mIsRecordPause = false;mBookUtil.resumePlay();}}@Overridepublic void onBeginningOfSpeech() {if(mBookUtil.isPlaying()){mBookUtil.pause();mIsRecordPause = true;}mHandler.sendEmptyMessage(MessageConst.CLIENT_ACTION_START_RECORED);}@Overridepublic void onResult(String result, int type) { sendMessageToActivity(MessageConst.SERVER_ACTION_RETURN_RESULT,type,0,null,result);processServiceMessage(result);}@Overridepublic void onCancel() {mHandler.sendEmptyMessage(MessageConst.CLIENT_ACTION_CANCEL_RECORED);}@Overridepublic void onUpdateVolume(int volume) {sendMessageToActivity(MessageConst.CLIENT_ACTION_UPDATA_VOLUME,volume,0,null,null);}}private void initCommunicationAssist(){mVoiceSdkComAssist = new VoiceSdkComAssist();OlamiApplication.getInstance().setActivityToServiceListener(mVoiceSdkComAssist);}private void initXmly(){if(mBookUtil == null){mBookUtil = BookUtil.getInstance();mBookUtil.init(VoiceSdkService.this);mBookUtil.setHandler(mHandler);}}private void processServiceMessage(String message){String input = null;String serverMessage = null;try{JSONObject jsonObject = new JSONObject(message);JSONArray jArrayNli = jsonObject.optJSONObject("data").optJSONArray("nli");JSONObject jObj = jArrayNli.optJSONObject(0);JSONArray jArraySemantic = null;if(message.contains("semantic"))jArraySemantic = jObj.getJSONArray("semantic");else{input = jsonObject.optJSONObject("data").optJSONObject("asr").optString("result");sendMessageToActivity(MessageConst.CLIENT_ACTION_UPDATA_INPUT_TEXT, 0, 0, null, input);serverMessage = jObj.optJSONObject("desc_obj").opt("result").toString();sendMessageToActivity(MessageConst.CLIENT_ACTION_UPDATA_SERVER_MESSAGE, 0, 0, null, serverMessage);return;}JSONObject jObjSemantic;JSONArray jArraySlots;JSONArray jArrayModifier;String type = null;String songName = null;String singer = null;if(jObj != null) {type = jObj.optString("type");if("musiccontrol".equals(type)){jObjSemantic = jArraySemantic.optJSONObject(0);input = jObjSemantic.optString("input");jArraySlots = jObjSemantic.optJSONArray("slots");jArrayModifier = jObjSemantic.optJSONArray("modifier");String modifier = (String)jArrayModifier.opt(0);if((jArrayModifier != null) && ("play".equals(modifier))){if(jArraySlots != null)for(int i=0,k=jArraySlots.length(); i<k; i++){JSONObject obj = jArraySlots.getJSONObject(i);String name = obj.optString("name");if("singer".equals(name))singer = obj.optString("value");else if("songname".equals(name))songName = obj.optString("value");}}else if((modifier != null) && ("stop".equals(modifier))){if(mBookUtil != null)if(mBookUtil.isPlaying())mBookUtil.stop();}else if((modifier != null) && ("pause".equals(modifier))){if(mBookUtil != null)if(mBookUtil.isPlaying())mBookUtil.pause();}else if((modifier != null) && ("resume_play".equals(modifier))){if(mBookUtil != null)mBookUtil.resumePlay();}else if((modifier != null) && ("add_volume".equals(modifier))){if(mBookUtil != null)mBookUtil.addVolume();}else if((modifier != null) && ("del_volume".equals(modifier))){if(mBookUtil != null)mBookUtil.delVolume();}else if((modifier != null) && ("next".equals(modifier))){if(mBookUtil != null)mBookUtil.next();}else if((modifier != null) && ("previous".equals(modifier))){if(mBookUtil != null)mBookUtil.prev();}else if((modifier != null) && ("play_index".equals(modifier))){int position = 0;if(jArraySlots != null)for(int i=0,k=jArraySlots.length(); i<k; i++){JSONObject obj = jArraySlots.getJSONObject(i);JSONObject jNumDetial = obj.getJSONObject("num_detail");String index = jNumDetial.optString("recommend_value");position = Integer.parseInt(index) - 1;}if(mBookUtil != null)mBookUtil.skipTo(position);}}}if(songName != null){if(singer != null){}else{mBookUtil.searchBookAndPlay(songName,0,0);}}else if(singer != null){mBookUtil.searchBookAndPlay(songName,0,0);}serverMessage = jObj.optJSONObject("desc_obj").opt("result").toString();}catch (Exception e){e.printStackTrace();}//發送消息更新語音識別的文字sendMessageToActivity(MessageConst.CLIENT_ACTION_UPDATA_INPUT_TEXT, 0, 0, null, input);//發送消息更新服務器返回的結果字符串sendMessageToActivity(MessageConst.CLIENT_ACTION_UPDATA_SERVER_MESSAGE, 0, 0, null, serverMessage);}private void sendMessageToActivity(int what, int arg1, int arg2, Bundle data, Object obj){if(OlamiApplication.getInstance().getServiceToActivityListener() != null)OlamiApplication.getInstance().getServiceToActivityListener().callBack(what, arg1, arg2, data, obj);}private class VoiceSdkComAssist implements CommunicationAssist{@Overridepublic void callBack(int what, int arg1, int arg2, Bundle data,Object obj) {Message msg = Message.obtain(null, what);msg.arg1 = arg1;msg.arg2 = arg2;if (data != null)msg.setData(data);if (obj != null)msg.obj = obj;mInComingHandler.sendMessage(msg);} }@Overridepublic void onDestroy(){super.onDestroy();if(mOlamiVoiceRecognizer != null)mOlamiVoiceRecognizer.destroy();if(mBookUtil != null){mBookUtil.destroy();}}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332
  • 333
  • 334
  • 335
  • 336
  • 337
  • 338
  • 339
  • 340
  • 341
  • 342
  • 343
  • 344
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332
  • 333
  • 334
  • 335
  • 336
  • 337
  • 338
  • 339
  • 340
  • 341
  • 342
  • 343
  • 344

3.4 VoiceSdkService中onResult的回調處理

在VoiceSdkService.java中processServiceMessage(String message)用于處理onResult的回調數據。例如“我要聽三國演義”返回如下數據: {"data": {"asr": {"result": "我要聽三國演義","speech_status": 0,"final": true,"status": 0},"nli": [{"desc_obj": {"result": "正在努力搜索中,請稍等","status": 0},"semantic": [{"app": "musiccontrol","input": "我要聽三國演義","slots": [{"name": "songname","value": "三國演義" }],"modifier": ["play"],"customer": "58df512384ae11f0bb7b487e"}],"type": "musiccontrol"}]},"status": "ok" }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

1)解析出nli中type類型是musiccontrol,這是語法返回app的類型,而這個在線聽書的demo只關心musiccontrol這 個app類型,其他的忽略。

2)用戶說的話轉成文字是在asr中的result中獲取?
3)在nli中的semantic中,input值是用戶說的話,同asr中的result。?
modifier代表返回的行為動作,此處可以看到是play就是要求播放,slots中的數據表示歌曲名稱是三國演義。?
那么動作是play,內容是歌曲名稱是三國演義,在這個demo中調用?
mBookUtil.searchBookAndPlay(songName,0,0);會先查詢,查詢到結果會再發播放消息要求播放,我要聽三國演義這個流程就走完了。

4.BookUtil

說一下搜索聽書的實現過程 public void searchBookInfo(String bookName,final int index,final boolean isNeedPlay) {mBookName = bookName;Map<String, String> param = new HashMap<String, String>();param.put(DTransferConstants.SEARCH_KEY, bookName);param.put(DTransferConstants.CATEGORY_ID, "" + 3);//此處3代表搜索的是聽書//param.put(DTransferConstants.PAGE, "" + mPageId);param.put(DTransferConstants.SORT, "asc");//返回列表的排序是正序還是逆序param.put(DTransferConstants.PAGE_SIZE, "" + PAGE_SIZE);//每頁能返回多少個查詢結果mPage = (index/PAGE_SIZE)+1;//當前在第幾頁mPlayerManager = XmPlayerManager.getInstance(mContext);//喜馬拉雅初始化部分mPlayerManager.init(mNotificationId, null);mPlayerManager.addPlayerStatusListener(mPlayerStatusListener);mPlayerManager.addAdsStatusListener(mAdsListener);CommonRequest.getSearchedAlbums(param, new IDataCallBack<SearchAlbumList>(){@Overridepublic void onSuccess(SearchAlbumList object) { if (object != null && object.getAlbums() != null&& object.getAlbums().size() != 0){if (mSearchAlbumList == null){mSearchAlbumList = object;}else{mSearchAlbumList.getAlbums().addAll(object.getAlbums());}//mTrackAdapter.notifyDataSetChanged();Map<String, String> map = new HashMap<String, String>();map.put(DTransferConstants.ALBUM_ID, ""+object.getAlbums().get(0).getId());map.put(DTransferConstants.SORT, "asc");map.put(DTransferConstants.PAGE, "" + mPage);map.put(DTransferConstants.PAGE_SIZE, "" + PAGE_SIZE);CommonRequest.getTracks(map, new IDataCallBack<TrackList>(){@Overridepublic void onSuccess(TrackList object){mTrackList = object;mTotalCount = mTrackList.getTotalCount();if(mTrackList.getTracks().size() <= 0)return;String str = "專輯:"+mTrackList.getAlbumTitle()+get(0).getTrackTitle().toString();if(isNeedPlay){mPosition = index % PAGE_SIZE;mHandler.sendMessage(mHandler.obtainMessage(MessageConst.CLIENT_ACTION_PLAY_BOOK_AFTER_SEARCH, index % PAGE_SIZE,0));//此處mTrackList中已經查詢出結果//向VoiceSdkService發送消息進行播放}elsesendBookInfoToServer(); }@Overridepublic void onError(int code, String message){Log.i("ppp","error: "+message);sendBookInfoToServer();}});}}@Overridepublic void onError(int code, String message){Log.i("ppp","error: "+message);sendBookInfoToServer();}}); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86

5.demo中支持的說法

我想聽西游記?
我要聽西游記?
播放西游記?
聽西游記?
我想聽西游記這本書?
上一首?
上一回?
下一首?
下一回?
暫停/暫停播放?
繼續/繼續播放?
聲音大一點?
聲音小一點?
關閉/關閉播放

用的是喜馬拉雅測試賬號,只支持聽書的功能,查找歌曲的結果返回為空。

6.源碼下載鏈接

用olamisdk語音識別引擎做在線聽書demo

7.相關鏈接

語音記賬demo:http://blog.csdn.net/ls0609/article/details/72765789

olami開放平臺語法編寫簡介:http://blog.csdn.net/ls0609/article/details/71624340

olami開放平臺語法官方介紹:https://cn.olami.ai/wiki/?mp=nli&content=nli2.html

轉載請注明CSDN博文地址:http://blog.csdn.net/ls0609/article/details/71519203


總結

以上是生活随笔為你收集整理的语音识别,语义理解一站式解决(android平台olami sdk)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久久www免费人成看片高清 | 91在线免费视频 | 中文字幕av在线免费 | 精品国产电影一区 | 国产精品成人国产乱一区 | 爱干视频| 婷婷久操 | 黄色软件视频大全免费下载 | 久久久精品高清 | 色网站在线免费观看 | 一区二区三区免费播放 | 亚洲精品国偷自产在线99热 | 一级a毛片高清视频 | 波多野结衣在线视频免费观看 | 成人在线观看av | 精品中文字幕在线观看 | 欧美日韩国产精品一区二区三区 | 美女网站在线播放 | 中文字幕在线观看av | 国产剧情一区二区 | 久久电影国产免费久久电影 | 久久久香蕉视频 | 欧美在线观看视频一区二区 | 麻豆94tv免费版 | 中文字幕中文字幕在线一区 | 玖玖在线免费视频 | 亚洲一区免费在线 | 久久综合精品国产一区二区三区 | 国产成人三级一区二区在线观看一 | 久久久久久久av麻豆果冻 | 国精产品满18岁在线 | 久久无码av一区二区三区电影网 | 日韩中文字幕在线观看 | 在线一区av | 成人免费看电影 | 久久免费在线观看 | 午夜精品久久一牛影视 | 区一区二区三区中文字幕 | 久久久免费观看视频 | 国内久久精品 | 91av官网| 欧美三级高清 | 91麻豆看国产在线紧急地址 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 国产色婷婷精品综合在线手机播放 | 精品一区 精品二区 | 国产一级在线观看 | 久久视频网址 | 中文字幕一区二区三区在线观看 | 99亚洲精品视频 | a级国产乱理论片在线观看 伊人宗合网 | 久久电影网站中文字幕 | 国产精品欧美一区二区三区不卡 | 91麻豆免费视频 | 91成人免费看 | 亚洲精品动漫成人3d无尽在线 | 国产黄色av影视 | 国产成人免费网站 | 99在线热播精品免费99热 | 天天爱天天舔 | 亚洲va欧洲va国产va不卡 | 久久免费国产视频 | 国产日韩欧美在线免费观看 | 爱爱av网 | 综合久久网站 | 在线视频日韩精品 | 亚洲伦理电影在线 | 亚洲伊人天堂 | 亚洲 在线 | 久久高视频 | 麻豆国产精品视频 | 精品综合久久 | 69国产成人综合久久精品欧美 | 中文字幕在线视频国产 | 草久在线视频 | 国产一区二区三区网站 | 亚洲精品国产精品国自 | 亚洲播放一区 | 伊人天天| 久久一区91 | 国产又粗又猛又色又黄网站 | 2024国产精品视频 | av中文资源在线 | 欧美男女爱爱视频 | 999视频网 | 国产黄色片久久 | 欧美日韩一区二区免费在线观看 | 日本久久久久久久久久 | 在线国产精品视频 | 日韩天天操 | 1区2区3区在线观看 三级动图 | 天天射天天射 | 国产精品久久久久永久免费观看 | 精品中文字幕在线 | 国产不卡av在线 | 国产精品久久久久久久久岛 | 久久99精品国产麻豆婷婷 | 亚洲永久国产精品 | 久久蜜臀一区二区三区av | 97超碰在线免费观看 | 超碰97公开| a视频在线观看免费 | www.夜夜草| 久久天堂网站 | 日本中文字幕在线一区 | 96亚洲精品久久久蜜桃 | 四虎在线影视 | 国产无遮挡又黄又爽在线观看 | 色先锋av资源中文字幕 | 久久久久久久久久久久影院 | 久久精品免费看 | 99九九99九九九视频精品 | 91精品国产乱码久久桃 | 久热免费在线观看 | 久久精品1区| 亚洲欧美视频网站 | 五月婷婷丁香激情 | 日韩小视频 | 亚洲国产无 | 夜色成人av | 国产一区久久 | 香蕉久草 | 久久精品女人毛片国产 | 天天干天天做天天操 | 一本到在线 | 91一区啪爱嗯打偷拍欧美 | 欧美日韩精品区 | 色婷婷激情 | 亚洲国产欧洲综合997久久, | 久久午夜免费视频 | 精品亚洲免a | 久久婷婷网 | 五月婷社区 | 国产永久免费观看 | 日韩av中文| 日本激情视频中文字幕 | 96久久精品 | 亚洲一区二区三区四区在线视频 | 91社区国产高清 | 亚洲伊人网在线观看 | 91.精品高清在线观看 | 国产精品99久久免费黑人 | 国产精久久久久久久 | 在线观看视频一区二区三区 | 亚洲免费一级 | 精品91在线 | 国产精品日韩久久久久 | 不卡的一区二区三区 | 波多野结衣视频一区 | 黄色视屏在线免费观看 | 六月久久婷婷 | 美女视频黄在线观看 | 国产一线二线三线性视频 | 激情婷婷av | av三级在线看 | 日日麻批40分钟视频免费观看 | 色综合中文字幕 | 99超碰在线观看 | 久久怡红院| 欧美国产精品久久久久久免费 | 激情综合站 | 亚洲1区 在线| 免费黄色小网站 | 久久精品视频在线免费观看 | 色综合久久久久综合99 | 99久久一区| 久久草在线精品 | 99在线视频精品 | 久久黄色片 | 在线亚洲成人 | 久久久久麻豆v国产 | 久久国产系列 | 丁香六月五月婷婷 | 欧美黄色软件 | 久久一区二区三区超碰国产精品 | 在线观看av免费 | 国产精品视频在线观看 | 欧美成人在线网站 | 91福利免费 | 亚洲91中文字幕无线码三区 | 久久久精品久久 | a级国产乱理论片在线观看 特级毛片在线观看 | a级一a一级在线观看 | 免费色视频在线 | 国产精品久久久视频 | 99精品在线免费观看 | 国产精品久久亚洲 | 日日夜夜草 | 成人av资源站 | 一区在线观看视频 | 久久艹免费 | 国产成人精品av在线 | 四虎www com| 免费看三级网站 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 91成人免费在线 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 99爱精品在线 | 亚洲dvd| 久久蜜桃av| 91av在线视频免费观看 | 91久久精品一区二区三区 | 久久网站最新地址 | 国产在线观看不卡 | 国产精品观看在线亚洲人成网 | 日韩一区精品 | 在线观看91精品视频 | 青青河边草手机免费 | 免费成人黄色av | 亚洲另类交 | 日韩中文字幕视频在线 | 狂野欧美激情性xxxx欧美 | 久久黄色成人 | 日躁夜躁狠狠躁2001 | 久久精品日产第一区二区三区乱码 | 99在线观看免费视频精品观看 | 九七人人干 | 免费成人在线观看 | 在线视频观看亚洲 | 亚洲午夜久久久久久久久 | 亚洲色图美腿丝袜 | 在线黄网站 | 97色婷婷| 麻豆视频在线免费观看 | 国产精品视频你懂的 | 在线免费黄色毛片 | 狠狠操.com| 久久中文精品视频 | 欧美精品一区二区性色 | 久久av一区二区三区亚洲 | 91av资源在线 | 色婷婷免费 | 99久久精品午夜一区二区小说 | 超碰97在线资源 | 黄污网| 国产成人在线免费观看 | 国产正在播放 | 中文字幕在线观看第三页 | 手机av资源| 日韩中文在线字幕 | 国产精品免费在线观看视频 | 色999精品 | av三区在线 | 97视频在线观看成人 | 99九九视频 | 欧美成人一二区 | 欧美日一级片 | 久久99精品久久久久久秒播蜜臀 | 五月婷婷六月丁香 | 国产成人综合精品 | 在线播放 亚洲 | 高清国产午夜精品久久久久久 | 在线观看色网 | 999ZYZ玖玖资源站永久 | 日本黄色免费在线观看 | 亚洲天天| 五月天综合激情 | 国产无区一区二区三麻豆 | av成人在线电影 | 国产91精品一区二区麻豆网站 | 天天插夜夜操 | 91豆花在线观看 | 亚洲最大av在线播放 | 久草在线久草在线2 | 久久国产精品久久w女人spa | 久久成人免费电影 | 色综合久久五月 | 奇米网444| 麻豆精品视频在线观看免费 | 在线免费观看羞羞视频 | 中文字幕在线播放日韩 | 亚洲日本韩国一区二区 | 激情久久小说 | 日本在线视频一区二区三区 | 在线免费国产视频 | 国产精品一区免费在线观看 | 婷婷网站天天婷婷网站 | 亚洲男模gay裸体gay | 中文乱码视频在线观看 | 91一区二区三区久久久久国产乱 | 国产a免费 | 久久午夜精品 | av电影在线免费观看 | 欧美9999| 999久久久免费精品国产 | 欧美在线视频免费 | 91视频中文字幕 | 国内小视频在线观看 | 色婷婷六月天 | 亚洲精品国产综合99久久夜夜嗨 | 中文日韩在线 | 亚洲黄色免费网站 | 免费精品人在线二线三线 | 国产一区二区三区午夜 | 麻豆精品视频在线观看免费 | 国产精品12 | 亚洲va在线va天堂va偷拍 | 欧美日韩国产综合一区二区 | 日韩欧美综合在线视频 | 中文理论片 | 国产麻豆果冻传媒在线观看 | 午夜久久久久久久久久久 | av中文字幕在线播放 | 日韩精品一区二区三区免费观看 | 91视频电影 | 亚洲五月综合 | 又爽又黄又刺激的视频 | 久久99这里只有精品 | 久久久久久综合 | 视频国产精品 | 欧美激情视频三区 | 五月婷婷伊人网 | 国产精品久久久久久久久久久久久 | 亚洲视频网站在线观看 | 欧美激情精品久久久久久免费 | 91一区二区在线 | 久久久久国产成人精品亚洲午夜 | 国产婷婷久久 | 久久国产午夜精品理论片最新版本 | av看片在线观看 | 九色精品免费永久在线 | 在线免费av播放 | 亚洲少妇激情 | 在线观看网站av | 九九免费视频 | 天天色天天搞 | 国产精品毛片久久久久久久久久99999999 | 中文字幕一区二区三区精华液 | 国产一区二区手机在线观看 | 久久久国产毛片 | 久久久精品日本 | 中文字幕乱码亚洲精品一区 | 国产大尺度视频 | 911精品视频 | 激情综合亚洲精品 | 91毛片在线观看 | 97韩国电影 | 日韩理论片在线观看 | 国模精品在线 | 国产精品手机播放 | 国际精品久久久 | 狠狠干干 | 中文字幕免费播放 | 国产成人av| 最新av网站在线观看 | 激情在线网址 | 免费国产在线观看 | 国产精品色婷婷 | 久久免费视频7 | 免费观看成人av | 精品1区2区3区 | 欧美在线free| 久久a久久 | 国产精品高潮呻吟久久av无 | 国产精品扒开做爽爽的视频 | 在线小视频你懂得 | 中文字幕在线观看视频一区 | 成人毛片100免费观看 | 日韩久久午夜一级啪啪 | 国产专区视频在线 | 96视频免费在线观看 | 一区av在线播放 | 日韩中文字幕视频在线观看 | 成人av免费在线观看 | 精品久久久久久久久久久久久久久久久久 | 欧美性脚交 | 波多野结衣在线播放一区 | 亚洲精品高清视频在线观看 | .国产精品成人自产拍在线观看6 | av久久久久久 | 狠狠色丁香 | 日韩欧美在线高清 | 国产在线最新 | 免费观看久久久 | 亚洲欧洲美洲av | 特级西西人体444是什么意思 | 热久久国产精品 | 国产精品毛片一区二区在线看 | 中文字幕丝袜美腿 | 欧美一区三区四区 | 亚洲欧美国产精品 | 麻豆久久久久 | 人人澡人人爱 | 麻豆一区二区 | 免费观看全黄做爰大片国产 | 久久久久久久久电影 | 国产精品久久久久一区二区 | 一区 二区 精品 | 精品五月天 | 国产精品综合久久久久久 | 九九热视频在线免费观看 | 精品成人久久 | www.超碰97.com | 国产老太婆免费交性大片 | 在线免费观看国产 | 欧美怡红院 | 国内精品久久久久影院日本资源 | 亚洲国产一二三 | 夜夜躁日日躁狠狠久久av | 91精品秘密在线观看 | 欧美xxxx性xxxxx高清 | 欧洲精品码一区二区三区免费看 | 成人av在线网址 | 天天干天天干天天色 | 久久黄视频| 久久精品成人热国产成 | 亚洲成人精品 | 不卡电影一区二区三区 | 亚洲国产剧情av | 久久国精品 | 免费色视频| 成人午夜影院在线观看 | 婷婷色狠狠 | 久久综合色一综合色88 | 人人爱在线视频 | aaa日本高清在线播放免费观看 | 中国一级片在线播放 | 久久久久久久久影视 | 成人免费网视频 | 91在线影视 | 中文字幕一区二区三区视频 | 亚洲在线网址 | www国产亚洲精品久久麻豆 | 亚洲欧美日韩一区二区三区在线观看 | 成年人免费看 | 99福利影院 | 亚洲a色| 午夜性生活片 | 黄色亚洲精品 | 91网页版在线观看 | 中文字幕在线免费观看视频 | 高潮久久久久久 | 2021国产在线| 一区二区中文字幕在线观看 | 欧美 高跟鞋交 xxxxhd | 欧洲精品码一区二区三区免费看 | 国产一级性生活 | 五月天丁香综合 | 麻豆视传媒官网免费观看 | 欧美va日韩va| 国内精品视频一区二区三区八戒 | 国产永久免费高清在线观看视频 | 日韩在线视频播放 | 蜜臀精品久久久久久蜜臀 | 亚洲最新精品 | 免费黄色特级片 | 久久只精品99品免费久23小说 | 麻豆一区二区 | 国产高清第一页 | 美女网站在线观看 | 777xxx欧美 | www国产精品com | 国产成人精品免高潮在线观看 | 色妞色视频一区二区三区四区 | 狠狠色狠狠色综合日日小说 | 九七视频在线 | 亚洲国产精品久久久久久 | 狠狠色婷婷丁香六月 | 久一在线 | 国产最新福利 | 国产不卡视频 | 波多野结衣电影一区二区 | 欧美日韩高清免费 | 超碰在97 | 久久精品成人欧美大片古装 | 欧美日韩在线观看一区二区三区 | 可以免费观看的av片 | 五月天婷婷丁香花 | 日韩精品aaa | 精品在线观看一区二区 | 亚洲人成在| 国产一级特黄毛片在线毛片 | 免费91在线观看 | 国产黄a三级 | 在线观看视频一区二区三区 | 国产乱码精品一区二区三区介绍 | 99久久精品免费一区 | 九九视频免费在线观看 | 久草网站在线 | 精品国产综合区久久久久久 | 久久久国产一区 | 国产黄色片在线 | 久久久综合 | 91在线免费公开视频 | 亚洲欧美在线视频免费 | 亚洲午夜精品久久久久久久久久久久 | 亚洲视频综合在线 | 日本性动态图 | 亚洲国产成人久久 | 亚洲精品免费在线 | 欧美看片 | 欧美日韩aaaa | 色婷婷免费| 欧美亚洲精品在线观看 | 久久精精品| 国产婷婷 | 婷婷免费在线视频 | 天天干天天做 | 丁香六月av | 深爱激情综合网 | 在线观看日本韩国电影 | 天天综合色 | 欧美精品黑人性xxxx | 天天爱天天操 | 黄色中文字幕在线 | 69夜色精品国产69乱 | 国产理论一区二区三区 | 99久久精品免费 | 在线观看蜜桃视频 | 992tv在线观看网站 | 欧美福利片在线观看 | 一区二区三区在线观看中文字幕 | 韩日三级av| 亚洲一区二区三区91 | 国产精品99久久免费观看 | 91av中文| 亚洲永久在线 | 黄色aaaaa | 爱色av.com| 亚洲精品网站 | 免费91麻豆精品国产自产在线观看 | 国产小视频你懂的在线 | 久久精品视频在线播放 | 国产精彩视频一区二区 | 成人av电影免费 | 日本最新高清不卡中文字幕 | 国产视频在线播放 | 91麻豆精品国产91久久久久 | 激情图片qvod | 日本不卡一区二区 | 午夜av网站 | 国产美女搞久久 | 国产青草视频在线观看 | 九九久久国产精品 | 国产区久久 | 视频成人免费 | 91中文在线| 精品无人国产偷自产在线 | 天天干天天摸 | 久久精品日本啪啪涩涩 | 欧美日韩在线观看不卡 | 国产午夜在线观看 | 久久99精品国产麻豆婷婷 | 午夜精品一区二区三区四区 | 激情开心站 | 成人久久久久久久久久 | 天天综合天天做 | 日韩黄色免费看 | 2021国产精品视频 | 91久久偷偷做嫩草影院 | 亚洲午夜久久久影院 | 亚洲激情免费 | 亚洲高清免费在线 | 黄色片视频在线观看 | 91porny九色91啦中文 | 国产三级视频在线 | 久久99视频精品 | 人人狠狠综合久久亚洲 | 97麻豆视频| 九九热免费在线视频 | 国产99久久久久 | 黄色片网站免费 | 亚洲 综合 激情 | 中文字幕第一 | 国产精品一区免费看8c0m | 麻豆久久久久 | 综合激情av | 99爱这里只有精品 | 亚洲精品国产自产拍在线观看 | 久久9精品 | av+在线播放在线播放 | 91精品国产自产在线观看永久 | 免费日韩电影 | 久久高清视频免费 | 亚洲综合在线一区二区三区 | 91免费高清观看 | 手机成人av在线 | 日韩免费精品 | 成人日批视频 | 国产精品久久久久久一区二区 | 午夜 免费 | 久久热首页 | 午夜视频黄 | 久久96国产精品久久99漫画 | 九九精品久久 | 色小说在线 | 五月天久久久久久 | 最近最新mv字幕免费观看 | 国产视频高清 | 高清中文字幕av | 欧美视频www | 国产精品一区二区av日韩在线 | 永久黄网站色视频免费观看w | 婷婷亚洲最大 | 成人影音av | 国内精品久久久久影院日本资源 | 成人a毛片| 久要激情网 | 欧美成人精品三级在线观看播放 | 欧美日韩视频精品 | 7777精品伊人久久久大香线蕉 | 欧美va在线观看 | 成年人视频在线免费 | 国产精品1024| 成年人在线免费看视频 | 91精品国产99久久久久久久 | 99视频国产精品免费观看 | 国产在线a不卡 | 国产日韩视频在线 | 99视频导航| 日韩精品亚洲专区在线观看 | 黄色成人影视 | 国产美女精彩久久 | 国产精品自产拍在线观看中文 | 欧美日韩国产在线观看 | 国产精品igao视频网网址 | 在线观看欧美成人 | 久久人人爽人人爽人人片av免费 | 久久精品国产精品 | 亚洲在线网址 | 激情视频网页 | 日韩精品视频免费专区在线播放 | 91在线视频导航 | 国内精品久久久久久久久久久久 | 午夜视频二区 | 人人爽人人做 | 国产成人黄色片 | 色福利网 | 奇米影视在线99精品 | 欧美成人播放 | 免费看av片网站 | 激情婷婷综合 | 亚洲欧美日韩国产 | 婷婷播播网 | 久久久久成人精品亚洲国产 | 亚洲综合色网站 | 久久久久久久久久免费视频 | 日日天天干 | 亚洲精品1234区 | 永久免费精品视频网站 | 久久国产精品区 | 在线观看日本高清mv视频 | 在线播放国产一区二区三区 | 国产精品99久久久久久武松影视 | 久久精品一区二 | 在线观看视频国产 | 国产字幕av | 久久伊人综合 | 久久久久久久久久久免费av | 欧美99精品 | 69国产盗摄一区二区三区五区 | 国产福利a | av大片免费在线观看 | 午夜免费在线观看 | 国产亚洲精品久久 | 91香蕉久久 | 国产亚洲婷婷免费 | 免费视频网 | 最近中文字幕完整视频高清1 | 久久综合狠狠综合 | 色悠悠久久综合 | 亚洲精品成人免费 | wwxxx日本| 久久免费av | 欧美一级片免费在线观看 | www.97色.com| 最近日本mv字幕免费观看 | 国产精品久久久久久久久软件 | 色狠狠久久av五月综合 | 91久久精品一区二区二区 | 国产玖玖视频 | 一区二区伦理电影 | 777视频在线观看 | www.伊人色.com| 在线观看www. | 夜夜夜草| 欧美一区二区精美视频 | 嫩嫩影院理论片 | 久久蜜桃av| 久久久久综合视频 | 激情婷婷六月 | 婷婷av资源 | 久草在线资源观看 | 久久久免费观看 | 免费观看mv大片高清 | 中文字幕在线影视资源 | 天天干,天天操 | 国产精品久久久久久久久岛 | 日本精品视频在线观看 | 色欧美日韩 | 婷婷四房综合激情五月 | 欧美一级视频免费看 | 在线观看成人av | 日本精品久久久久久 | www.福利 | 人人澡超碰碰97碰碰碰软件 | 99久久免费看 | 在线观看中文字幕网站 | 国产亚洲精品久久久久久大师 | 天天操天天操天天操 | 国产xxxxx在线观看 | 精品一区二区三区久久久 | 久久国产成人午夜av影院宅 | 国产精品久久久久久久久久久免费 | 正在播放国产91 | 2020天天干夜夜爽 | 国产麻豆剧果冻传媒视频播放量 | 一区 在线 影院 | 久久精品一区二区三区中文字幕 | 一区二区三区在线免费观看视频 | 99久久久成人国产精品 | 日韩三级久久 | 亚洲国产片色 | 国产xvideos免费视频播放 | 国产剧情在线一区 | 国产 精品 资源 | 国产原创av片 | 国产一区二区成人 | 久久国内精品99久久6app | 中文字幕人成一区 | av中文字幕第一页 | 日韩一区在线免费观看 | 99操视频| 91精品国产入口 | 91传媒免费在线观看 | 国产视频一区在线播放 | 丁香 久久 综合 | 人人爽人人爽人人爽 | 亚洲视频2 | 久久久精品午夜 | 久久久久亚洲国产精品 | 国产不卡一二三区 | 色综合久久88色综合天天 | 日本精品中文字幕 | 99色在线播放| 91福利在线观看 | 亚州精品国产 | 97免费在线观看视频 | 欧美性免费 | 日韩一级片观看 | 久久精品国产99国产 | 久久婷五月 | 三级免费黄 | 婷婷综合激情 | 久久草草热国产精品直播 | 久久久久中文字幕 | 最新国产精品拍自在线播放 | 91视频大全 | 国产精品久久久久久久久久久久久久 | 欧美日韩不卡在线 | 成人av资源 | 99久久久国产精品美女 | 国产精品区二区三区日本 | 在线免费观看羞羞视频 | 亚洲欧美日韩精品久久久 | 日韩高清av | 黄色亚洲在线 | 日韩欧美区| 天天爽天天摸 | 黄色免费观看网址 | 亚洲精品天天 | 91超级碰碰| 久久婷婷丁香 | 人人爱爱 | 在线a视频免费观看 | 人人插人人插 | 美女国内精品自产拍在线播放 | av免费在线网站 | 国外av在线| 中文字幕亚洲高清 | 欧美一区二区三区免费看 | а天堂中文最新一区二区三区 | 91福利视频久久久久 | 97精品免费视频 | www.色就是色| 99久久99久久精品国产片果冰 | 亚洲第一香蕉视频 | 日本精品中文字幕 | 9999激情| 欧美精品久久久久久 | 国产精品黄 | av不卡网站 | 国产高清在线不卡 | 国产成人精品一二三区 | 日韩aⅴ视频 | 成人黄色短片 | 国产又粗又猛又爽又黄的视频免费 | 亚洲女在线 | 欧美日韩久久久 | 精品国产1区2区3区 国产欧美精品在线观看 | 特级西西444www大胆高清无视频 | 天堂在线视频中文网 | 五月婷婷视频在线观看 | 国产一区二区在线免费播放 | 国产又粗又硬又长又爽的视频 | 日本不卡123区 | 久久久久久久18 | 色姑娘综合天天 | 特级西西人体444是什么意思 | 91人网站| 欧美日韩大片在线观看 | 成人久久久精品国产乱码一区二区 | 亚洲精品乱码久久久久 | 日韩欧美视频在线观看免费 | 日日日视频 | 日韩中文字幕免费视频 | 99久久精品久久亚洲精品 | 欧美成人精品欧美一级乱 | 人人澡人人干 | 亚洲成av人影片在线观看 | 波多野结衣在线播放一区 | 婷婷成人在线 | 久久国产精品一区二区三区 | 99视频偷窥在线精品国自产拍 | 亚洲精品视 | 欧美色插 | 久久er99热精品一区二区三区 | 人人揉人人揉人人揉人人揉97 | 成人免费在线播放 | 丁香六月国产 | 国产在线传媒 | 久久久久久蜜av免费网站 | 一区二区 不卡 | 99视频免费观看 | 色婷婷成人网 | 亚洲综合色播 | 国产在线观看你懂得 | 亚洲欧洲精品在线 | 久久激情婷婷 | 久久8| 在线黄色国产电影 | 美女网站视频久久 | 日韩欧美国产视频 | 日本精品视频在线观看 | 一区中文字幕 | 国产麻豆果冻传媒在线观看 | 99久久精品国产毛片 | 久久精品女人毛片国产 | 日韩在线激情 | 色婷婷综合成人av | 日本丶国产丶欧美色综合 | 欧美成人在线免费观看 | 亚洲视频一区二区三区在线观看 | 免费在线播放黄色 | 亚洲乱码在线观看 | 国产亚洲精品久久久久久久久久久久 | 亚洲欧美日韩国产一区二区 | 五月婷婷中文字幕 | 日韩欧美在线不卡 | 色天天久久 | 一级片免费观看 | 91欧美精品 | 久久免费观看视频 | 亚洲一级电影在线观看 | 狠狠色噜噜狠狠 | 麻豆一二 | 久久天堂影院 | 中文字幕第 | 一级黄色在线免费观看 | 激情五月***国产精品 | 国产91探花| 91精品在线免费视频 | 夜夜操夜夜干 | 欧美一级性生活视频 | 午夜久久久久久久久久影院 | 久久人91精品久久久久久不卡 | 麻花天美星空视频 | 欧美日韩在线精品 | 亚洲人成人天堂h久久 | 国产精品久久久久久久av电影 | 久久国产精彩视频 | 国产精品一区二区久久精品 | 久久亚洲电影 | 综合av在线 | 国产精品69久久久久 | 二区三区在线观看 | 美女视频久久久 | 精品国产诱惑 | 久久手机精品视频 | 色精品视频 | 欧美一级电影片 | 日韩午夜在线观看 | 亚洲一级免费观看 | 六月丁香激情综合 | 精品a在线 | 99免费精品视频 | 成人免费观看视频大全 | 久久国产欧美日韩精品 | 久久精品视频中文字幕 | 国产美女精品视频 | 99爱爱| 狠狠色噜噜狠狠狠狠2021天天 | 亚洲天堂激情 | 亚洲伦理精品 | 日韩亚洲在线 | 色婷婷狠狠五月综合天色拍 | 97超碰资源站 | 久久久影院官网 | 国产 日韩 在线 亚洲 字幕 中文 | 日韩毛片在线播放 | 久久久久成人精品 | 久久久99精品免费观看app | 日韩av五月天| 天堂va欧美va亚洲va老司机 | av黄色在线播放 | 中文字幕在线日亚洲9 | 最新av网址大全 | 亚洲福利精品 | 国产91在 | 看片的网址 | 久久久午夜视频 | 热九九精品 | 日韩免| 久久这里只有精品久久 | 少妇资源站 | 97视频网站 | 日本久久久影视 | 国产高清中文字幕 | 亚洲精品高清一区二区三区四区 | 人人爽人人av | www.久久视频| v片在线看 | 久久国产一区 | 免费高清在线视频一区· | 久久短视频 | 精品久久久久亚洲 | 自拍超碰在线 | 黄色毛片视频免费 | 免费欧美高清视频 | 国产永久免费观看 | 日韩视频一 | 国产小视频在线免费观看视频 | 天天干.com| 日韩在线观看视频中文字幕 | 国产高清99 | av在线8 | 国产精品成人一区二区三区 | 91福利社在线观看 | 懂色av懂色av粉嫩av分享吧 | 中文字幕在线观看你懂的 | 日日夜夜精品免费视频 | 亚洲欧美成人网 | 亚洲精品在线观看中文字幕 | 麻豆国产在线播放 | 少妇高潮冒白浆 | 黄色免费视频在线观看 | 国产精品12345 | 成人丝袜 | 成人黄色在线观看视频 | 狠狠的干狠狠的操 | 中文字幕免费一区 | 日韩一区在线免费观看 | 少妇资源站 | 综合网色 | 激情欧美在线观看 | 不卡的av在线 | avove黑丝 | 色天天久久| 91桃花视频 | 国产精品久久一 | 91刺激视频 | 热久精品 | 色偷偷av男人天堂 | 日韩免费看的电影 | 天堂麻豆 | 黄色一级在线视频 | 国产精品激情偷乱一区二区∴ | 99re国产视频| 91毛片在线观看 | 狠狠色狠狠色终合网 | 日韩最新中文字幕 | 狠狠操精品| 久久精品网址 | 国产视频一区在线 | 久久精品这里热有精品 | 香蕉国产91 | av一级久久| 国产欧美综合在线观看 | 激情五月婷婷激情 | 天天爽网站 | 狠狠操天天射 | 欧美 日韩 国产 成人 在线 | 国产亚洲高清视频 | 97国产精品| 中文字幕精品一区二区三区电影 | 久久久精华网 | 国产精品99免费看 | 日韩精品中文字幕在线不卡尤物 | 日本资源中文字幕在线 | 国产一区二区三区四区在线 | 99在线精品视频 | 中文字幕在线观看免费 | 久久乐九色婷婷综合色狠狠182 | 日韩亚洲国产中文字幕 | 91av久久| 视频高清 | 国产一区 在线播放 | 青青久视频|