• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    簡(jiǎn)析Android語(yǔ)音助手開發(fā)的一種實(shí)現(xiàn)方案

    2020-04-01 18:12:58馮揚(yáng)駱德漢
    現(xiàn)代計(jì)算機(jī) 2020年6期
    關(guān)鍵詞:指令方法

    馮揚(yáng),駱德漢

    (廣東工業(yè)大學(xué)信息工程學(xué)院,廣州510006)

    0 引言

    語(yǔ)音助手是人工智能應(yīng)用的重要形式。Siri(蘋果智能語(yǔ)音助手)帶動(dòng)了業(yè)內(nèi)人工智能語(yǔ)音的發(fā)展。從載體來看,目前語(yǔ)音助手主要分為三大類:以Siri為代表的手機(jī)輔助功能,以天貓精靈、小度音箱為代表的智能音箱以及以榮耀智慧屏為代表的大屏語(yǔ)音交互,其中手機(jī)是智能語(yǔ)音助手的主要戰(zhàn)場(chǎng)。

    首先,語(yǔ)音交互取消了屏幕的限制,除了作為家庭的控制中樞,語(yǔ)音交互在可穿戴設(shè)備以及輔助駕駛領(lǐng)域也有著十分可觀的應(yīng)用前景。就輔助駕駛來說,由于駕駛員需要注意力的高度集中,需要在不干擾視野的情況下僅通過聲音就可以滿足交互的需求,例如搜索詢問道路、編寫短信、撥打電話、尋找食譜或查看天氣等。

    1 關(guān)鍵技術(shù)

    本文旨在分析語(yǔ)音助手設(shè)計(jì)開發(fā)所用到的關(guān)鍵技術(shù),自設(shè)計(jì)一款安卓語(yǔ)音助手App,實(shí)現(xiàn)的基礎(chǔ)功能包括打電話、發(fā)短信、播放音樂/視頻、打開應(yīng)用等,還添加了個(gè)性化的互聯(lián)網(wǎng)服務(wù)功能包括中英翻譯、電影搜索等。在設(shè)計(jì)開發(fā)過程中,集成使用了科大訊飛SDK(語(yǔ)音聽寫和語(yǔ)音合成)、百度地圖定位SDK,以及主流網(wǎng)絡(luò)請(qǐng)求框架Retrofit和JSON數(shù)據(jù)解析等關(guān)鍵技術(shù)。整個(gè)使用流程如圖1所示。

    圖1 語(yǔ)音助手流程圖

    1.1 語(yǔ)音交互

    實(shí)現(xiàn)語(yǔ)音交互功能需要用到第三方工具庫(kù),該流程如下所示:

    (1)下載科大訊飛語(yǔ)音開發(fā)SDK(含語(yǔ)音聽寫和語(yǔ)音合成功能),分別將libmsc.so、Msc.jar和Sunflower.jar以及assets文件夾等導(dǎo)入到Android項(xiàng)目中,并在An?droidManifest.xml文件中申請(qǐng)相關(guān)權(quán)限。

    (2)使用注冊(cè)時(shí)申請(qǐng)的APPID初始化語(yǔ)音配置對(duì)象。代碼如下所示:

    SpeechUtility.createUtility(context,SpeechConstant.AP?PID+"=1234ABCD");

    (3)分別創(chuàng)建語(yǔ)音聽寫和語(yǔ)音合成的監(jiān)聽器對(duì)象。代碼如下所示:

    SpeechRecognizer mSRec=SpeechRecognizer.creat?eRecognizer(context,mInitListener);

    SpeechSynthesizer mTts=SpeechSynthesizer.create?Synthesizer(context,TtsInitListener);

    (4)監(jiān)聽“開始講話”按鈕是否按下,獲取音頻數(shù)據(jù)返回SDK進(jìn)行處理,進(jìn)行音頻轉(zhuǎn)文字過程(即語(yǔ)音聽寫)。代碼如下所示:

    @Override

    public void onClick(Viewview){

    if(null==mSRec||null==mTts){ //創(chuàng)建對(duì)象失敗后的操作

    return;

    }

    switch(view.getId()){

    case R.id.mSRec_start:{

    int ret=mSRec.startListening(mRecognizerListener);

    if(ret!=ErrorCode.SUCCESS){//聽寫失敗后進(jìn)行的操作 }

    else{ //聽寫成功后進(jìn)行的操作 }

    }break;

    }

    }

    首先判斷語(yǔ)音聽寫對(duì)象mSRec和語(yǔ)音合成對(duì)象mTts是否成功創(chuàng)建,然后通過調(diào)用mSRec.startListen?ing()方法,監(jiān)聽語(yǔ)音聽寫過程中的狀態(tài)返回碼來進(jìn)行判斷是否存在異常。

    (5)RecognizerListener接口實(shí)現(xiàn)了語(yǔ)音聽寫結(jié)果的數(shù)據(jù)解析及可視化,存儲(chǔ)到字符串keywords中。代碼如下所示:

    RecognizerListener mRecognizerListener=new RecognizerLis?tener(){

    @Override

    public void onBeginOfSpeech(){//語(yǔ)音開始后的操作}

    @Override public void onError(SpeechError error){//語(yǔ)音出錯(cuò)后的操作}

    @Override public void onEndOfSpeech(){//語(yǔ)音結(jié)束后的操作}

    @Override

    public void onResult(RecognizerResult results,boolean is?Last){

    //解析語(yǔ)音聽寫結(jié)果數(shù)據(jù)

    }

    }

    1.2 JSON數(shù)據(jù)解析

    JSON的全稱是JavaScript Object Notation,它是一種代碼輕量級(jí)的數(shù)據(jù)交互格式,方便人們閱讀和編寫以及機(jī)器進(jìn)行生成和解析。在實(shí)際應(yīng)用中,JSON主要有兩種表示結(jié)構(gòu):對(duì)象和數(shù)組[1]。這里以JSON對(duì)象為例,結(jié)合音頻數(shù)據(jù)處理結(jié)果數(shù)據(jù)JSON格式的解析代碼,分析JSON數(shù)據(jù)解析方法。代碼如下所示:

    HashMap<String,String>map=new LinkedHashMap<>();

    String text=JsonParser.parseIatResult(results.getResultString

    ());

    JSONObject resultJson=new JSONObject(results.getResult?

    String());

    Stringsn=resultJson.optString("sn");

    map.put(sn,text);

    StringBuffer resultBuffer=new StringBuffer();

    for(Stringkey:map.keySet()){

    resultBuffer.append(map.get(key));

    }

    Stringkeywords=resultBuffer.toString();

    mSRecResults.setText(keywords);

    其中第三行代碼通過new JSONObject(Stringjson)創(chuàng)建一個(gè)JSONObject對(duì)象,第四行使用optString(String key)方法獲取該對(duì)象鍵值對(duì)“key:value”中的String類型value值。同理可得,獲取其他基本數(shù)據(jù)類型鍵值對(duì)的方法也與之相似,如optInt(Stringkey)、opt?Long(String key)分別返回long型和int型的值[1]。

    1.3 語(yǔ)音合成

    結(jié)合科大訊飛SDK實(shí)現(xiàn)語(yǔ)音合成功能,按1.1小節(jié)中的步驟配置好資源文件后,使用setParam()方法設(shè)定默認(rèn)發(fā)音人、音量、語(yǔ)調(diào)、語(yǔ)速等參數(shù),然后使用mTts.startSpeaking(strings,mTtsListener)就 可 以 將strings源字符串以音頻形式輸出,同時(shí)返回code狀態(tài)碼判斷是否存在異常。

    代碼如下所示:

    public static void setParam(){

    mTts.setParameter(SpeechConstant.SPEED,mSharedPrefer?ences.getString("speed_preference","50"));

    }int code=mTts.startSpeaking("歡迎使用車載語(yǔ)音助手",mTtsListener);

    1.4 地圖定位

    實(shí)現(xiàn)定位導(dǎo)航功能需要用到第三方工具庫(kù),該流程如下所示:

    (1)下載百度地圖Android SDK(含基礎(chǔ)定位和導(dǎo)航功能),分別將libs文件夾、assets文件夾和Baid?uLBS_Android.jar導(dǎo)入到項(xiàng)目中,申請(qǐng)定位相關(guān)權(quán)限。

    (2)獲取系統(tǒng)定位服務(wù),注冊(cè)監(jiān)聽并開啟定位服務(wù)。代碼如下所示:

    LocationService locService=getApplication().locationService;

    locService.registerListener(mListener);

    locService.start();

    (3)其中,服務(wù)監(jiān)聽器mListener的定義代碼如下所示:

    BDAbstractLocationListener mListener=new BDAbstractLoca?tionListener(){

    @Override

    public void onReceiveLocation(BDLocation location){

    if(null!=location&&location.getLocType()!=Location.

    TypeServerError){//獲取相關(guān)地理信息

    }}};

    抽象監(jiān)聽接口BDAbstractLocationListener主要用于定位,通過各種getXX()方法來獲取地理位置信息。這里首先判斷BDLocation對(duì)象及LocationService服務(wù)是否正常,然后分別使用location.getAddrStr()、getLati?tude()等方法獲取地址信息、經(jīng)緯度信息等。

    2 實(shí)例

    在結(jié)合語(yǔ)音SDK和地圖SDK的基礎(chǔ)上,嵌入使用Retrofit框架和JSON解析等方法,來設(shè)計(jì)實(shí)現(xiàn)一款語(yǔ)音助手軟件,剖析其開發(fā)的過程。使用過程中主要是根據(jù)語(yǔ)音聽寫結(jié)果中的命令關(guān)鍵詞進(jìn)行判斷,實(shí)現(xiàn)不同事件的跳轉(zhuǎn)處理,以及使用語(yǔ)音合成來完成人機(jī)之間的語(yǔ)音交互功能。

    2.1 指令判斷:打開應(yīng)用

    先檢查讀取手機(jī)應(yīng)用信息的權(quán)限,使用queryIn?tentActivities()方法遍歷已安裝的所有應(yīng)用,同時(shí)分別通過ResolveInfo.activityInfo.packageName獲取應(yīng)用包名稱、ResolveInfo.activityInfo.loadLabel(getPackageMan?ager())獲取應(yīng)用名稱。結(jié)合startActivity(package?Name)方法就可以實(shí)現(xiàn)打開應(yīng)用的操作。代碼如下所示:

    (1)讀取所有應(yīng)用信息,用List列表存儲(chǔ)

    List<ResolveInfo>applist=getPackageManager()

    .queryIntentActivities(queryIntent,0);

    (2)判斷聽寫結(jié)果中如有“打開XX應(yīng)用”指令,則打開該應(yīng)用

    if(keywords.contains(appName)&&keywords.contains(“打開應(yīng)用”))

    startActivity(packageManager.getLaunchIntentForPackage(packageName));

    2.2 指令判斷:打電話

    先檢查讀取聯(lián)系人、打電話的權(quán)限,分別使用兩組ArrayList來存儲(chǔ)聯(lián)系人名稱和聯(lián)系人號(hào)碼。根據(jù)語(yǔ)音聽寫結(jié)果的指令判斷,撥打特定聯(lián)系人的號(hào)碼。其中設(shè)定android.intent.action.CALL進(jìn)行撥打電話的Activi?ty模式,呼叫指定號(hào)碼的數(shù)據(jù)格式為:tel:+phone num?ber。代碼如下所示:

    (1)讀取聯(lián)系人信息

    List<String>namelist=new ArrayList<>();

    List<String>numList=new ArrayList<>();

    Cursor cursor=getContentResolver().query(ContactsContract

    .CommonDataKinds.Phone.CONTENT_URI,null,null,null,

    null);

    if(cursor!=null){

    while(cursor.moveToNext()){//分別讀取名字和號(hào)碼存儲(chǔ)到對(duì)應(yīng)的List}cursor.close();}

    (2)根據(jù)語(yǔ)音指令,給特定聯(lián)系人撥打電話

    for(int j=0;j<namelist.size();j++){

    String s=namelist.get(j);if(keywords.contains(s)&&keywords.contains("打電話")){

    Intent intent=new Intent(Intent.ACTION_CALL);

    Uridata=Uri.parse("tel:"+numList.get(j));

    intent.setData(data);

    startActivity(intent);

    }

    2.3 指令判斷:發(fā)短信

    先檢查發(fā)送短信的權(quán)限,而獲取聯(lián)系人信息的過程與2.2小節(jié)的第(1)點(diǎn)相同。根據(jù)語(yǔ)音聽寫結(jié)果的指令判斷,給特定聯(lián)系人發(fā)送短信,并指定輸入框的語(yǔ)音短信內(nèi)容。代碼如下所示:

    for(int j=0;j<namelist.size();j++){

    String s=namelist.get(j);

    if(keywords.contains(s)&&keywords.contains("發(fā) 短 信

    ")){

    Intent sendIntent=new Intent(Intent.ACTION_SENDTO);

    sendIntent.setData(Uri.parse("smsto:"+numList.get(j)));

    sendIntent.putExtra("sms_body","【語(yǔ)音短信】:"+key?

    words);

    startActivity(sendIntent);

    }

    }

    2.4 指令判斷:中英翻譯

    這里使用網(wǎng)絡(luò)請(qǐng)求框架Retrofit,將語(yǔ)音聽寫結(jié)果中需要翻譯的部分內(nèi)容上傳到有道翻譯服務(wù)器進(jìn)行翻譯以后,根據(jù)有道翻譯API的返回?cái)?shù)據(jù)格式,輸出翻譯結(jié)果。具體流程如下所示:

    (1)創(chuàng)建一個(gè)Retrofit對(duì)象,并實(shí)例化。核心代碼:

    Retrofit retrofit=new Retrofit.Builder().baseUrl("https://fanyi.youdao.com/")

    .addConverterFactory(GsonConverterFactory.create()).build();

    (2)定義接口trans_Interface,使用post請(qǐng)求方式,定義url尾址,完整地址就是baseUrl+尾址。核心代碼:

    public interface trans_Interface{

    @POST("translate?doctype=json&jsonversion=&type=&key?from=&model=&mid=&imei=&vendor=&screen=&ssid=&net ?work=&abtest=")

    @FormUrlEncoded

    Call<Translation1>getCall(@Field("i")String targetSen?tence);

    }

    (3)用retrofit創(chuàng)建接口實(shí)例trans_Interface,并調(diào)用接口方法進(jìn)行網(wǎng)絡(luò)請(qǐng)求。核心代碼:

    trans_Interface request=retrofit.create(trans_Interface.clas);

    Call<Translation1>call= request.getCall(keywords);

    call.enqueue(new Callback<Translation1>(){

    @Override

    public void onResponse(Call<Translation1>call,Response

    <Translation1>response){//打印翻譯結(jié)果

    Log.d(response.body().getTranslateResult().get(0).get(0) .getTgt());}

    @Override

    public void onFailure(Call<Translation1>call,Throwable throwable){

    //翻譯出錯(cuò)后的處理

    }

    });

    2.5 指令判斷:搜索電影

    依然使用網(wǎng)絡(luò)請(qǐng)求框架Retrofit,判斷電影搜索的語(yǔ)音命令,訪問豆瓣電影服務(wù)器,根據(jù)豆瓣電影API返回Top30的電影數(shù)據(jù),然后解析JSON格式數(shù)據(jù)進(jìn)行顯示得以實(shí)現(xiàn)。具體流程如下所示:

    (1)創(chuàng)建Retrofit對(duì)象,并實(shí)例化。核心代碼:

    Retrofit mRetrofit=new Retrofit.Builder()

    .addConverterFactory(GsonConverterFactory.create())

    .baseUrl("https://api.douban.com/v2/movie/").build();

    (2)定義接口MovieService,使用get請(qǐng)求方式,定義url尾址。核心代碼:

    public interface MovieService{

    @GET

    ("top30?apikey=0b2bdeda43b5688921839c8ecb20399b")

    Observable<MovieSubject>getTop30(

    @Query("start")int start,

    @Query("count")int count);

    }

    (3)用mRetrofit創(chuàng)建接口實(shí)例MovieService,并調(diào)用接口方法進(jìn)行網(wǎng)絡(luò)請(qǐng)求。核心代碼:

    MovieService movieService=mRetrofit.create(MovieService.

    class);

    Call<MovieSubject>call=movieService.getTop30(0,30);

    call.enqueue(new Callback<MovieSubject>(){

    @Override

    public void onResponse(Call<MovieSubject>call,Response<MovieSubject>response){

    //獲取response響應(yīng)對(duì)象中的top30電影數(shù)據(jù)(中英文名稱

    、主演、導(dǎo)演、年份等)并顯示

    }

    @Override

    public void onFailure(Call<MovieSubject>call,Throwable t){

    //電影數(shù)據(jù)獲取失敗后的操作

    }});

    2.6 指令判斷:媒體播放

    (1)視頻播放

    Android在播放音頻和視頻方面做了不錯(cuò)的支持,它提供了一套較為完整的API,使得開發(fā)者可以輕松編寫出一個(gè)簡(jiǎn)易的音頻或視頻播放器[2]。這里額外加入了語(yǔ)音識(shí)別控制功能,通過語(yǔ)音輸入來實(shí)現(xiàn)本地媒體(音樂和視頻)的播放、暫停、停止、切換以及音量大小調(diào)節(jié)等操作。這里以本地存儲(chǔ)5首音頻和2個(gè)視頻為例,初始化VideoPlayer(),核心代碼:

    ①播放視頻文件主要通過VideoView類來實(shí)現(xiàn),這個(gè)類集視頻的顯示和控制于一身[2]。調(diào)用initVideo?Player()來設(shè)置視頻文件在SD卡中的存儲(chǔ)路徑。進(jìn)一步在setVideoURI(Uri.parse(path))解析為通用資源標(biāo)志符Uri并獲取數(shù)據(jù)。其實(shí)際背后是使用MediaPlayer工具類來對(duì)視頻文件進(jìn)行操作的。

    private void initVideoPlayer(){

    if(videoNum>2) videoNum=0;

    VideoView videoView= findViewById (R.id.vid?eoView);

    File file=new File(Environment.getExternalStorageDirec?tory(),

    videos[videoNum++]);

    videoView.setVideoPath(file.getPath());

    videoView.setMediaController(new android.widget.Media?Controller(this));}

    (2)然后根據(jù)語(yǔ)音聽寫命令來進(jìn)行視頻文件的播放、暫停、切換等操作。核心代碼:

    if(keywords.contains("視頻")){

    videoView.setVisibility(View.VISIBLE);

    if(keywords.contains("播放")){

    if(!videoView.isPlaying())

    videoView.start();

    }else if(keywords.contains("暫停")){

    if(videoView.isPlaying())

    videoView.pause();

    }else if(keywords.contains("重播")){

    if(videoView.isPlaying()) videoView.resume();

    }else if(keywords.contains("下一個(gè)")){

    if(videoView.isPlaying())

    videoView.stopPlayback();

    initVideoPlayer();

    videoView.start();

    }

    }

    (2)音樂播放

    同理,創(chuàng)建一個(gè)MediaPlayer對(duì)象,調(diào)用setData?Source()方法來設(shè)置音頻文件的路徑,再調(diào)用prepare()方法進(jìn)入到準(zhǔn)備狀態(tài)[2]。最后通過語(yǔ)音輸入指令,調(diào)用start()方法就可以進(jìn)行播放等操作。核心代碼如下:

    (1)通過獲取path轉(zhuǎn)換Uri并獲取數(shù)據(jù)。

    privatevoid initMediaPlayer(){

    if(musicNum>5) musicNum=0;

    File file=new File(Environment.getExternalStorageDirectory(),musics[musicNum++]);

    mediaPlayer.setDataSource(file.getPath());

    mediaPlayer.prepare();

    }

    (2)根據(jù)語(yǔ)音聽寫命令來進(jìn)行音樂文件的播放、暫停等操作。核心代碼:

    if(keywords.contains("音樂")){

    if(keywords.contains("播放")){

    if(!mediaPlayer.isPlaying())

    mediaPlayer.start();

    }elseif(keywords.contains("暫停")){

    if(mediaPlayer.isPlaying())

    mediaPlayer.pause();

    }elseif(keywords.contains("停止")){

    if(mediaPlayer.isPlaying()){

    mediaPlayer.reset();

    mediaPlayer.release();

    }

    }else if(keywords.contains("下一首")){

    if(videoView.isPlaying()){

    mediaPlayer.reset();

    mediaPlayer.release();

    }initMediaPlayer();

    mediaPlayer.start();

    }

    }

    (3)音量調(diào)節(jié)

    通過AudioManager類來控制手機(jī)音頻調(diào)節(jié),首先獲取當(dāng)前媒體音量大小,然后根據(jù)語(yǔ)音指令進(jìn)行音量增減調(diào)節(jié)的操作。具體代碼如下所示:

    AudioManager audioManager=getApplicationContext()

    .getSystemService(Context.AUDIO_SERVICE);

    int currentVolume =audioManager.getStreamVolume(Audio?

    Manager.STREAM_MUSIC);

    int maxVolume=audioManager.getStreamMaxVolume(Audio?

    Manager.STREAM_MUSIC);

    int minVolume=audioManager.getStreamMinVolume(Audio?

    Manager.STREAM_MUSIC);

    if(keywords.contains("調(diào)大音量")){

    if(currentVolume<maxVolume)

    audioManager.setStreamVolume(

    AudioManager.STREAM_MUSIC,currentVolume++,Au?

    dioManager.FLAG_PLAY_SOUND);

    }else showTip("音量已經(jīng)調(diào)到最大");

    if(keywords.contains("調(diào)小音量")){

    if(currentVolume>minVolume)

    audioManager.setStreamVolume(

    AudioManager.STREAM_MUSIC,currentVolume--,Au?

    dioManager.FLAG_PLAY_SOUND);

    }else showTip("已經(jīng)調(diào)到靜音");

    2.7 結(jié)果顯示

    整個(gè)程序的運(yùn)行結(jié)果如圖2所示。

    圖2 程序運(yùn)行結(jié)果

    3 結(jié)語(yǔ)

    經(jīng)過測(cè)試和程序運(yùn)行結(jié)果可以看出,整個(gè)實(shí)現(xiàn)方案是完全可行的。上述的這種語(yǔ)音助手實(shí)現(xiàn)方案,不僅能夠應(yīng)用在可穿戴設(shè)備方面,還能拓展到輔助駕駛領(lǐng)域。其中Retrofit框架作為當(dāng)前Android網(wǎng)絡(luò)請(qǐng)求非常流行的方式,結(jié)合JSON數(shù)據(jù)解析能夠進(jìn)一步實(shí)現(xiàn)查詢天氣、搜索附近景點(diǎn)/美食等操作,具有很快速實(shí)現(xiàn)、簡(jiǎn)化代碼的優(yōu)點(diǎn)??偟膩碚f,這種語(yǔ)音助手實(shí)現(xiàn)方案還是具有卓越的可擴(kuò)展性的。

    猜你喜歡
    指令方法
    聽我指令:大催眠術(shù)
    學(xué)習(xí)方法
    ARINC661顯控指令快速驗(yàn)證方法
    LED照明產(chǎn)品歐盟ErP指令要求解讀
    可能是方法不對(duì)
    殺毒軟件中指令虛擬機(jī)的脆弱性分析
    用對(duì)方法才能瘦
    Coco薇(2016年2期)2016-03-22 02:42:52
    四大方法 教你不再“坐以待病”!
    Coco薇(2015年1期)2015-08-13 02:47:34
    賺錢方法
    捕魚
    亚洲成av人片在线播放无| 黑人欧美特级aaaaaa片| 亚洲av不卡在线观看| 性欧美人与动物交配| 狂野欧美白嫩少妇大欣赏| 黄片大片在线免费观看| 俺也久久电影网| 日本 欧美在线| 亚洲av熟女| 色播亚洲综合网| 18美女黄网站色大片免费观看| 国产精品久久视频播放| 中亚洲国语对白在线视频| 嫩草影院入口| 国产精品久久久久久人妻精品电影| 国产一区二区三区在线臀色熟女| 天堂动漫精品| 长腿黑丝高跟| 老汉色av国产亚洲站长工具| 国产精品一及| 久久久久久久久久黄片| 天堂√8在线中文| 亚洲内射少妇av| 国产三级黄色录像| 色综合站精品国产| 国产黄a三级三级三级人| 久久精品综合一区二区三区| 久久久精品欧美日韩精品| 我要搜黄色片| 亚洲国产精品成人综合色| 69av精品久久久久久| 亚洲精品影视一区二区三区av| 久久精品91无色码中文字幕| 99riav亚洲国产免费| 午夜精品在线福利| 亚洲成人久久爱视频| 亚洲欧美激情综合另类| 99久国产av精品| 高清在线国产一区| 两个人看的免费小视频| 国产av麻豆久久久久久久| 欧美日本视频| 欧美日韩瑟瑟在线播放| 国产精品1区2区在线观看.| 亚洲专区国产一区二区| 日韩中文字幕欧美一区二区| 在线天堂最新版资源| 一区二区三区高清视频在线| 男人舔奶头视频| 国产极品精品免费视频能看的| 中国美女看黄片| 欧美日韩乱码在线| 国产精品女同一区二区软件 | 在线观看免费午夜福利视频| 看片在线看免费视频| 久久亚洲真实| 欧美成人a在线观看| 久久久久国内视频| 亚洲五月婷婷丁香| 最近在线观看免费完整版| 亚洲一区高清亚洲精品| 国产高清视频在线播放一区| 又粗又爽又猛毛片免费看| 日本 av在线| 亚洲欧美激情综合另类| 内射极品少妇av片p| 久久久久国内视频| 最新在线观看一区二区三区| 亚洲男人的天堂狠狠| 国产精品久久久久久久久免 | 搡老岳熟女国产| 色吧在线观看| 丰满乱子伦码专区| 99国产综合亚洲精品| 欧美成人a在线观看| 在线观看日韩欧美| 两个人看的免费小视频| 国产成人av激情在线播放| 搡老熟女国产l中国老女人| 欧美不卡视频在线免费观看| 国产视频一区二区在线看| 久久久久久人人人人人| 一个人看的www免费观看视频| 国产精品乱码一区二三区的特点| 国产乱人伦免费视频| 老汉色∧v一级毛片| 2021天堂中文幕一二区在线观| 3wmmmm亚洲av在线观看| 99热只有精品国产| 少妇裸体淫交视频免费看高清| 一本久久中文字幕| 亚洲人成伊人成综合网2020| 精品久久久久久成人av| 国产色婷婷99| 无限看片的www在线观看| 成人特级黄色片久久久久久久| 91字幕亚洲| 国产蜜桃级精品一区二区三区| 欧美黄色片欧美黄色片| 国产精品,欧美在线| 国产三级中文精品| 欧美bdsm另类| 99精品欧美一区二区三区四区| 黄色视频,在线免费观看| 精品久久久久久久末码| 操出白浆在线播放| 国产成人啪精品午夜网站| 精品国内亚洲2022精品成人| 日本熟妇午夜| 久久精品91蜜桃| 人人妻,人人澡人人爽秒播| 国产91精品成人一区二区三区| 亚洲五月婷婷丁香| 91在线观看av| 国产主播在线观看一区二区| 午夜福利视频1000在线观看| 亚洲国产欧美网| 国产男靠女视频免费网站| 亚洲精品粉嫩美女一区| 午夜免费激情av| 免费在线观看成人毛片| 久久伊人香网站| 成人一区二区视频在线观看| 一级毛片高清免费大全| 欧美不卡视频在线免费观看| 国内少妇人妻偷人精品xxx网站| 欧美在线黄色| 欧美bdsm另类| 舔av片在线| 99riav亚洲国产免费| 久久久久性生活片| 国产av一区在线观看免费| 人人妻人人看人人澡| 国产一级毛片七仙女欲春2| 国产一区在线观看成人免费| 欧美性感艳星| 在线观看免费午夜福利视频| 国产又黄又爽又无遮挡在线| 757午夜福利合集在线观看| 国产三级在线视频| 88av欧美| 狠狠狠狠99中文字幕| 国产欧美日韩一区二区精品| 最新在线观看一区二区三区| 日韩大尺度精品在线看网址| 一个人看的www免费观看视频| 日本五十路高清| 日韩欧美三级三区| 18禁美女被吸乳视频| 午夜精品久久久久久毛片777| 亚洲人成网站在线播| 内射极品少妇av片p| 成人国产综合亚洲| 国产三级中文精品| 国产成年人精品一区二区| 国产高清有码在线观看视频| 男人和女人高潮做爰伦理| 亚洲人成网站在线播| 午夜精品一区二区三区免费看| 99久久九九国产精品国产免费| 91久久精品电影网| 高清日韩中文字幕在线| 我要搜黄色片| bbb黄色大片| 国产成人a区在线观看| 国产精品99久久99久久久不卡| 亚洲精品在线观看二区| 深夜精品福利| 亚洲七黄色美女视频| 99热6这里只有精品| 精品久久久久久久久久久久久| 亚洲va日本ⅴa欧美va伊人久久| 国产精品综合久久久久久久免费| 五月玫瑰六月丁香| 欧美一区二区亚洲| 日韩有码中文字幕| 久久久久久久亚洲中文字幕 | 亚洲av二区三区四区| 亚洲自拍偷在线| 久久久久久大精品| 欧美乱妇无乱码| 欧美国产日韩亚洲一区| 又黄又粗又硬又大视频| 欧美+亚洲+日韩+国产| 欧美黑人欧美精品刺激| 夜夜爽天天搞| 亚洲一区高清亚洲精品| 午夜免费男女啪啪视频观看 | 九九久久精品国产亚洲av麻豆| 99国产综合亚洲精品| www国产在线视频色| 日本三级黄在线观看| 成人永久免费在线观看视频| 精品电影一区二区在线| 中文字幕人妻丝袜一区二区| 性色av乱码一区二区三区2| 亚洲欧美激情综合另类| 亚洲在线观看片| 国产视频一区二区在线看| 国产主播在线观看一区二区| 国产伦人伦偷精品视频| 操出白浆在线播放| 国产伦精品一区二区三区四那| 身体一侧抽搐| 亚洲美女黄片视频| 国产精品一及| 免费看十八禁软件| 欧美另类亚洲清纯唯美| 婷婷亚洲欧美| 国产不卡一卡二| 国产精品久久久久久久久免 | 91在线精品国自产拍蜜月 | 亚洲精品亚洲一区二区| 国产欧美日韩精品亚洲av| 免费一级毛片在线播放高清视频| 国产精品98久久久久久宅男小说| 成人三级黄色视频| 深爱激情五月婷婷| 国产中年淑女户外野战色| 亚洲av中文字字幕乱码综合| 国产高清视频在线播放一区| 老汉色av国产亚洲站长工具| 成年人黄色毛片网站| 最近最新中文字幕大全电影3| 小说图片视频综合网站| 国产精品久久久人人做人人爽| 欧美区成人在线视频| 国产激情欧美一区二区| 亚洲电影在线观看av| 国产欧美日韩一区二区三| 欧美在线一区亚洲| 99久久综合精品五月天人人| 日本熟妇午夜| av欧美777| 狠狠狠狠99中文字幕| 少妇的丰满在线观看| 好看av亚洲va欧美ⅴa在| 婷婷精品国产亚洲av在线| 久久香蕉国产精品| 久99久视频精品免费| 国产精品野战在线观看| 日本免费一区二区三区高清不卡| АⅤ资源中文在线天堂| 亚洲av免费高清在线观看| 午夜精品一区二区三区免费看| 亚洲中文字幕日韩| 亚洲激情在线av| 精品久久久久久久末码| 99久久成人亚洲精品观看| 亚洲av二区三区四区| www.色视频.com| 一区二区三区免费毛片| 老师上课跳d突然被开到最大视频 久久午夜综合久久蜜桃 | 女人被狂操c到高潮| 好看av亚洲va欧美ⅴa在| 91av网一区二区| 偷拍熟女少妇极品色| 首页视频小说图片口味搜索| 欧美乱色亚洲激情| 精华霜和精华液先用哪个| 69人妻影院| 亚洲人成网站在线播| 婷婷精品国产亚洲av| 久久婷婷人人爽人人干人人爱| 午夜老司机福利剧场| xxx96com| 悠悠久久av| 国产精品爽爽va在线观看网站| 国内精品久久久久久久电影| 免费av观看视频| 亚洲自拍偷在线| 亚洲欧美日韩卡通动漫| 人妻久久中文字幕网| 黄色日韩在线| 一进一出好大好爽视频| 十八禁人妻一区二区| 真实男女啪啪啪动态图| 麻豆久久精品国产亚洲av| 国产国拍精品亚洲av在线观看 | 免费av观看视频| 欧美av亚洲av综合av国产av| 91在线精品国自产拍蜜月 | 在线观看一区二区三区| 国产精品久久久久久人妻精品电影| 日本三级黄在线观看| 成年女人看的毛片在线观看| 九色成人免费人妻av| 免费在线观看成人毛片| 一个人看视频在线观看www免费 | 精品99又大又爽又粗少妇毛片 | 欧美一级毛片孕妇| 亚洲av五月六月丁香网| 中文资源天堂在线| 又粗又爽又猛毛片免费看| 亚洲乱码一区二区免费版| 久久久久九九精品影院| 亚洲国产欧美人成| 亚洲精品久久国产高清桃花| 精品久久久久久久久久久久久| 国产亚洲精品久久久久久毛片| 国产91精品成人一区二区三区| tocl精华| svipshipincom国产片| 成人永久免费在线观看视频| 亚洲自拍偷在线| 亚洲aⅴ乱码一区二区在线播放| 国产单亲对白刺激| 99久久精品一区二区三区| 久久精品国产亚洲av涩爱 | 亚洲第一欧美日韩一区二区三区| 可以在线观看的亚洲视频| 成人亚洲精品av一区二区| 久久精品亚洲精品国产色婷小说| 国产精品1区2区在线观看.| 国产精品影院久久| 丰满人妻一区二区三区视频av | 亚洲黑人精品在线| 美女 人体艺术 gogo| 人人妻人人看人人澡| 国内精品久久久久精免费| 又黄又粗又硬又大视频| 欧美日本亚洲视频在线播放| 母亲3免费完整高清在线观看| 啦啦啦观看免费观看视频高清| 在线a可以看的网站| 国产黄a三级三级三级人| 嫩草影院入口| 真人做人爱边吃奶动态| 欧美又色又爽又黄视频| 成人无遮挡网站| 法律面前人人平等表现在哪些方面| 麻豆一二三区av精品| 成人三级黄色视频| 香蕉丝袜av| 欧美色欧美亚洲另类二区| 亚洲 欧美 日韩 在线 免费| 国内揄拍国产精品人妻在线| 日本与韩国留学比较| 国产成人福利小说| 久久久色成人| 最新在线观看一区二区三区| 18+在线观看网站| 欧美日本亚洲视频在线播放| 乱人视频在线观看| 免费在线观看成人毛片| 久久精品亚洲精品国产色婷小说| 国产爱豆传媒在线观看| 午夜免费观看网址| 免费观看的影片在线观看| 亚洲久久久久久中文字幕| 午夜免费男女啪啪视频观看 | a在线观看视频网站| 午夜激情福利司机影院| 欧美国产日韩亚洲一区| 国产激情偷乱视频一区二区| 精品福利观看| 97碰自拍视频| 精品乱码久久久久久99久播| 欧美黄色片欧美黄色片| 美女高潮的动态| 9191精品国产免费久久| 悠悠久久av| 亚洲激情在线av| av视频在线观看入口| 久久久久性生活片| 成人18禁在线播放| 伊人久久大香线蕉亚洲五| 九色成人免费人妻av| 51国产日韩欧美| 一个人看的www免费观看视频| 国产一区二区在线av高清观看| 老司机午夜福利在线观看视频| h日本视频在线播放| 天天添夜夜摸| 日韩欧美国产在线观看| 他把我摸到了高潮在线观看| 在线免费观看不下载黄p国产 | 精品一区二区三区视频在线 | 国产欧美日韩一区二区三| 日韩欧美在线二视频| 欧美+亚洲+日韩+国产| bbb黄色大片| 在线观看免费视频日本深夜| 免费看十八禁软件| 国产伦在线观看视频一区| 免费观看人在逋| 淫妇啪啪啪对白视频| 国产成年人精品一区二区| 精品日产1卡2卡| 国产一区在线观看成人免费| 老司机午夜十八禁免费视频| av中文乱码字幕在线| 国产亚洲精品久久久com| 亚洲精品在线美女| 一夜夜www| 欧美激情久久久久久爽电影| 成人特级av手机在线观看| 在线播放无遮挡| 97超视频在线观看视频| 中文字幕久久专区| 亚洲片人在线观看| 欧洲精品卡2卡3卡4卡5卡区| 精品久久久久久,| 免费看日本二区| 99久久久亚洲精品蜜臀av| 一级作爱视频免费观看| 成年版毛片免费区| 99久久无色码亚洲精品果冻| 搡老熟女国产l中国老女人| 免费大片18禁| 亚洲中文日韩欧美视频| 嫩草影院精品99| 日韩大尺度精品在线看网址| 亚洲狠狠婷婷综合久久图片| 国内精品久久久久精免费| 亚洲国产欧美人成| 国产高清三级在线| 变态另类丝袜制服| 成熟少妇高潮喷水视频| 国内揄拍国产精品人妻在线| 亚洲av不卡在线观看| 99久久精品热视频| 午夜激情福利司机影院| 2021天堂中文幕一二区在线观| 青草久久国产| 国产高潮美女av| 免费人成视频x8x8入口观看| 亚洲人成网站在线播放欧美日韩| 国产三级黄色录像| 9191精品国产免费久久| 欧美日韩乱码在线| 看黄色毛片网站| 国产精品自产拍在线观看55亚洲| 免费在线观看日本一区| 欧美性猛交黑人性爽| 国产精品 欧美亚洲| 久久精品夜夜夜夜夜久久蜜豆| 99热6这里只有精品| 国产成人系列免费观看| 精品熟女少妇八av免费久了| 午夜福利18| 毛片女人毛片| 国内精品美女久久久久久| 亚洲国产精品成人综合色| 网址你懂的国产日韩在线| 最近视频中文字幕2019在线8| 成人永久免费在线观看视频| 亚洲精品国产精品久久久不卡| 久久精品国产综合久久久| 欧美bdsm另类| 尤物成人国产欧美一区二区三区| 国产精品免费一区二区三区在线| 99热这里只有精品一区| 88av欧美| 国产色爽女视频免费观看| 国产av不卡久久| 制服人妻中文乱码| 国产亚洲欧美在线一区二区| 国产视频内射| 12—13女人毛片做爰片一| 国产成人影院久久av| 亚洲人成伊人成综合网2020| 亚洲最大成人中文| 老师上课跳d突然被开到最大视频 久久午夜综合久久蜜桃 | 国产高清视频在线播放一区| www.999成人在线观看| 国产亚洲精品一区二区www| 全区人妻精品视频| 99热这里只有是精品50| 精品一区二区三区视频在线观看免费| 男女床上黄色一级片免费看| 国产真实乱freesex| 国产综合懂色| 少妇丰满av| 午夜福利视频1000在线观看| 亚洲人成网站高清观看| 国产免费av片在线观看野外av| 久久久色成人| 九九在线视频观看精品| 国产精品日韩av在线免费观看| 桃色一区二区三区在线观看| 日韩欧美 国产精品| 免费看美女性在线毛片视频| 麻豆一二三区av精品| 国产精品自产拍在线观看55亚洲| 国产乱人伦免费视频| 久久6这里有精品| 韩国av一区二区三区四区| 亚洲精品色激情综合| 午夜视频国产福利| 天美传媒精品一区二区| 国产免费男女视频| 99riav亚洲国产免费| 伊人久久精品亚洲午夜| 免费看十八禁软件| 变态另类成人亚洲欧美熟女| 亚洲人与动物交配视频| 午夜福利在线观看免费完整高清在 | 亚洲国产精品合色在线| 91在线精品国自产拍蜜月 | 国产一区二区亚洲精品在线观看| 国产熟女xx| 国产三级黄色录像| 亚洲色图av天堂| 久久久久久久精品吃奶| 身体一侧抽搐| 免费看十八禁软件| 欧美一区二区精品小视频在线| 亚洲一区高清亚洲精品| 亚洲欧美日韩无卡精品| 精品久久久久久久久久免费视频| 18禁国产床啪视频网站| 人人妻人人看人人澡| 女生性感内裤真人,穿戴方法视频| 在线十欧美十亚洲十日本专区| 俺也久久电影网| 精品不卡国产一区二区三区| 国内精品久久久久久久电影| 女人高潮潮喷娇喘18禁视频| 中文在线观看免费www的网站| 99国产极品粉嫩在线观看| www.熟女人妻精品国产| 综合色av麻豆| 午夜日韩欧美国产| 欧美黑人巨大hd| 国产精品1区2区在线观看.| 国产精品美女特级片免费视频播放器| 精品一区二区三区视频在线观看免费| 少妇的丰满在线观看| 中文字幕av成人在线电影| x7x7x7水蜜桃| 国产免费av片在线观看野外av| 可以在线观看的亚洲视频| av欧美777| 美女高潮的动态| 日韩欧美精品v在线| 精品久久久久久久久久免费视频| 亚洲熟妇中文字幕五十中出| 91在线观看av| 久久久久久久午夜电影| 亚洲专区国产一区二区| 狂野欧美白嫩少妇大欣赏| av中文乱码字幕在线| 国产又黄又爽又无遮挡在线| 男女床上黄色一级片免费看| 亚洲欧美日韩东京热| 丝袜美腿在线中文| 身体一侧抽搐| 精品久久久久久成人av| 男女做爰动态图高潮gif福利片| 国产欧美日韩精品一区二区| 国产精品日韩av在线免费观看| 亚洲va日本ⅴa欧美va伊人久久| 1024手机看黄色片| 精品一区二区三区视频在线观看免费| 无人区码免费观看不卡| 国产高清激情床上av| 久久久久精品国产欧美久久久| 午夜福利免费观看在线| 色综合婷婷激情| a在线观看视频网站| 亚洲自拍偷在线| 99久久综合精品五月天人人| 麻豆国产97在线/欧美| 蜜桃久久精品国产亚洲av| 综合色av麻豆| 日韩中文字幕欧美一区二区| 桃红色精品国产亚洲av| 色在线成人网| 51国产日韩欧美| 国产av在哪里看| 欧美成人免费av一区二区三区| 久久人人精品亚洲av| 怎么达到女性高潮| 欧美zozozo另类| 亚洲精品一卡2卡三卡4卡5卡| 久久久久性生活片| 男女床上黄色一级片免费看| 国产av麻豆久久久久久久| 欧美黑人巨大hd| 亚洲精品一卡2卡三卡4卡5卡| 精品无人区乱码1区二区| 99热只有精品国产| 日韩大尺度精品在线看网址| 国产高清有码在线观看视频| 香蕉久久夜色| 国产精品 国内视频| 久久精品人妻少妇| 老司机午夜十八禁免费视频| 美女黄网站色视频| 国产精品电影一区二区三区| 免费大片18禁| ponron亚洲| 操出白浆在线播放| 国产精品一及| 久久精品亚洲精品国产色婷小说| 欧美成人a在线观看| 国产精品影院久久| 国产成人av教育| av欧美777| 91九色精品人成在线观看| 俄罗斯特黄特色一大片| 亚洲中文字幕一区二区三区有码在线看| 欧美另类亚洲清纯唯美| 国产主播在线观看一区二区| 91在线观看av| 欧美性猛交╳xxx乱大交人| www日本在线高清视频| 18禁黄网站禁片午夜丰满| 国产精品av视频在线免费观看| 日本一本二区三区精品| 亚洲黑人精品在线| 亚洲色图av天堂| 欧美3d第一页| 亚洲内射少妇av|