精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

iOS基于Speech框架的語(yǔ)音識(shí)別波浪動(dòng)圖實(shí)現(xiàn)

移動(dòng)開(kāi)發(fā)
App開(kāi)發(fā)中經(jīng)常會(huì)遇到波浪式動(dòng)畫(huà)語(yǔ)音識(shí)別轉(zhuǎn)文字的需求,那么實(shí)際是如何實(shí)現(xiàn)這樣的功能的,本文將從技術(shù)框架和視覺(jué)實(shí)現(xiàn)層面進(jìn)行Speech框架方案的詳細(xì)介紹。

者 | 伍新爽,家庭運(yùn)營(yíng)中心

Labs 導(dǎo)讀

App開(kāi)發(fā)中經(jīng)常會(huì)遇到波浪式動(dòng)畫(huà)語(yǔ)音識(shí)別轉(zhuǎn)文字的需求,那么實(shí)際是如何實(shí)現(xiàn)這樣的功能的,本文將從技術(shù)框架和視覺(jué)實(shí)現(xiàn)層面進(jìn)行Speech框架方案的詳細(xì)介紹。

1Speech框架及使用流程

目前App中的語(yǔ)音識(shí)別功能主要分為本地識(shí)別及網(wǎng)絡(luò)在線識(shí)別兩種情況。網(wǎng)絡(luò)在線識(shí)別依賴于平臺(tái)對(duì)語(yǔ)音的數(shù)據(jù)處理能力,其識(shí)別準(zhǔn)確度較高,優(yōu)點(diǎn)明顯,缺點(diǎn)是識(shí)別的穩(wěn)定性及效率略低;而本地識(shí)別方案識(shí)別的穩(wěn)定性及效率較高,但識(shí)別的準(zhǔn)確度不及網(wǎng)絡(luò)在線識(shí)別方式。本文要介紹的Speech框架屬于語(yǔ)音本地識(shí)別的一種成熟框架,適用于對(duì)識(shí)別精度要求不高,但識(shí)別效率較高的場(chǎng)景。

為了便于功能維護(hù)和調(diào)用方便,工程中建議對(duì)該框架的識(shí)別能力進(jìn)行管理器模塊化封裝,如下可定義一個(gè)Speech框架識(shí)別能力的管理器:

@interface HYSpeechVoiceDetectManager : NSObject
-(void)isHasVoiceRecodingAuthority:(authorityReturnBlock)hasAuthorityBlock;
+(void)isHasSpeechRecognizerAuthority:(authorityReturnBlock)hasAuthorityBlock;
- (void)setupTimer;
-(void)startTransfer;
-(void)endTransfer;

從以上代碼可知封裝函數(shù)包含的是整個(gè)的語(yǔ)音識(shí)別流程:1.判定語(yǔ)音及Speech框架的使用權(quán)限(isHasVoiceRecodingAuthority和isHasSpeechRecognizerAuthority) 2.語(yǔ)音識(shí)別參數(shù)及相關(guān)類初始化(setupTimer) 3.開(kāi)啟語(yǔ)音識(shí)別并實(shí)時(shí)接受識(shí)別后的文字信息(setupTimer和startTransfer) 4.強(qiáng)制銷毀Speech框架數(shù)據(jù)及重置音頻配置數(shù)據(jù)(endTransfer),下文將按上述四步展開(kāi)講述。

1.1 判定語(yǔ)音及Speech框架的使用權(quán)限

因?yàn)樽R(shí)別能成功的首要條件就是已經(jīng)獲取到語(yǔ)音和Speech框架的使用權(quán)限,因此在初始化框架功能時(shí)候需要進(jìn)行權(quán)限的獲取操作,Speech框架的使用權(quán)限獲取代碼參考如下:

-(void)isHasSpeechRecognizerAuthority{
if (@available(iOS 10.0, *)) {
SFSpeechRecognizerAuthorizationStatus authorizationStatus = [SFSpeechRecognizer authorizationStatus];
if (authorizationStatus == SFSpeechRecognizerAuthorizationStatusNotDetermined) {
[SFSpeechRecognizer requestAuthorization:^(SFSpeechRecognizerAuthorizationStatus status) {
}];
}else if(authorizationStatus == SFSpeechRecognizerAuthorizationStatusDenied || authorizationStatus == SFSpeechRecognizerAuthorizationStatusRestricted) {
} else{
}
}else{
}
}

以上代碼中獲取到SFSpeechRecognizerAuthorizationStatus后就能獲知Sepeech框架權(quán)限信息。語(yǔ)音的使用權(quán)限獲取操作,相關(guān)代碼參考如下:

-(void)isHasVoiceRecodingAuthority:(authorityReturnBlock)hasAuthorityBlock{
if ([[[UIDevice currentDevice]systemVersion]floatValue] >= 7.0) {
AVAuthorizationStatus videoAuthStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio];
if (videoAuthStatus == AVAuthorizationStatusNotDetermined) {
} else if(videoAuthStatus == AVAuthorizationStatusRestricted || videoAuthStatus == AVAuthorizationStatusDenied) {
} else{
}
}
}

通過(guò)如上代碼中的videoAuthStatus可以獲知語(yǔ)音權(quán)限信息,實(shí)際使用時(shí)候首先應(yīng)該獲取語(yǔ)音的權(quán)限然后在此基礎(chǔ)上再獲取Sepeech框架權(quán)限信息,只有用戶在擁有兩個(gè)權(quán)限的前提下才能進(jìn)入到下一個(gè)“語(yǔ)音識(shí)別參數(shù)及相關(guān)類初始化”環(huán)節(jié)。

1.2 語(yǔ)音識(shí)別參數(shù)及相關(guān)類初始化

Sepeech框架初始化前需要建立一個(gè)音頻流的輸入通道,AVAudioEngine為這個(gè)輸入通道不可或缺的節(jié)點(diǎn),通過(guò)AVAudioEngine可以生成和處理音頻信號(hào),執(zhí)行音頻信號(hào)的輸入操作,AVAudioInputNode 為音頻流的拼接通道,該通道可以實(shí)時(shí)拼接一段一段的語(yǔ)音,以此完成動(dòng)態(tài)化的音頻流數(shù)據(jù)。AVAudioEngine和AVAudioInputNode 配合使用完成音頻流數(shù)據(jù)獲取的準(zhǔn)備工作,AVAudioEngine執(zhí)行方法- (void)prepare后初始化工作才能生效,相關(guān)代碼如下所示:

AVAudioEngine *bufferEngine = [[AVAudioEngine alloc]init];
AVAudioInputNode *buffeInputNode = [bufferEngine inputNode];
SFSpeechAudioBufferRecognitionRequest *bufferRequest = [[SFSpeechAudioBufferRecognitionRequest alloc]init];
AVAudioFormat *format =[buffeInputNode outputFormatForBus:0];
[buffeInputNode installTapOnBus:0 bufferSize:1024 format:format block:^(AVAudioPCMBuffer * _Nonnull buffer, AVAudioTime * _Nonnull when) {
[bufferRequest appendAudioPCMBuffer:buffer];
}];
[bufferEngine prepare];

如上代碼中通過(guò)buffeInputNode回調(diào)接口可以獲取到SFSpeechAudioBufferRecognitionRequest完整實(shí)時(shí)音頻數(shù)據(jù)流信息。

Sepeech框架使用時(shí)需要一個(gè)關(guān)鍵類-錄音器(AVAudioRecorder),該類用來(lái)設(shè)定語(yǔ)音采集的格式,音頻通道,比特率,數(shù)據(jù)緩存路徑等重要信息并完成語(yǔ)音的采集等功能,只有調(diào)用AVAudioRecorder的- (BOOL)record方法,語(yǔ)音識(shí)別功能才能正常開(kāi)始,參考如下代碼:

[self endTransfer];
NSDictionary *recordSettings = [[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithFloat: 14400.0], AVSampleRateKey,
[NSNumber numberWithInt: kAudioFormatAppleIMA4], AVFormatIDKey,
[NSNumber numberWithInt: 2], AVNumberOfChannelsKey,
[NSNumber numberWithInt: AVAudioQualityMax], AVEncoderAudioQualityKey,
nil];
NSString *monitorPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"monitor.caf"];
NSURL *monitorURL = [NSURL fileURLWithPath:monitorPath];
AVAudioRecorder *monitor = [[AVAudioRecorder alloc] initWithURL:_monitorURL settings:recordSettings error:NULL];
monitor.meteringEnabled = YES;
[monitor record];

如上代碼中語(yǔ)音識(shí)別初始化過(guò)程中的第一行代碼應(yīng)該首先執(zhí)行endTransfer,該接口主要功能是初始化音頻參數(shù)為默認(rèn)狀態(tài):強(qiáng)制銷毀音頻流輸入通道,清除語(yǔ)音錄音器,清除音頻識(shí)別任務(wù)。其中初始化音頻參數(shù)屬于較為重要的一個(gè)步驟,其目的是為了防止工程中其它功能模塊對(duì)音頻輸入?yún)?shù)等信息修改引起的語(yǔ)音識(shí)別異常,下文將會(huì)進(jìn)行相關(guān)細(xì)節(jié)講述。

1.3 開(kāi)啟語(yǔ)音識(shí)別并實(shí)時(shí)接受識(shí)別后的文字信息

識(shí)別轉(zhuǎn)化函數(shù)-(void)startTransfer會(huì)一直輸出語(yǔ)音識(shí)別轉(zhuǎn)換的文字信息,該能力主要依賴于SFSpeechRecognizer類,我們可以從回調(diào)接口返回的實(shí)時(shí)參數(shù)SFSpeechRecognitionResult  _Nullable result中獲取到識(shí)別轉(zhuǎn)化后的文字信息,需要注意的是只有回調(diào)無(wú)錯(cuò)時(shí)輸出的文字信息才是有效的,參考代碼如下所示:

SFSpeechAudioBufferRecognitionRequest *bufferRequest = [[SFSpeechAudioBufferRecognitionRequest alloc]init];
SFSpeechRecognizer *bufferRec = [[SFSpeechRecognizer alloc]initWithLocale:[NSLocale localeWithLocaleIdentifier:@"zh_CN"]];
[bufferRec recognitionTaskWithRequest:bufferRequest resultHandler:^(SFSpeechRecognitionResult * _Nullable result, NSError * _Nullable error) {
if (error == nil) {
NSString *voiceTextCache = result.bestTranscription.formattedString;
}else{
}
}];

如上代碼中的bufferRec為Sepeech框架中的語(yǔ)音識(shí)別器,通過(guò)該類即可完成對(duì)音頻數(shù)據(jù)進(jìn)行本地化文字信息轉(zhuǎn)化,其中voiceTextCache即為語(yǔ)音實(shí)時(shí)轉(zhuǎn)化后的信息。

1.4 強(qiáng)制銷毀Speech框架數(shù)據(jù)及重置音頻配置數(shù)據(jù)

當(dāng)識(shí)別結(jié)束的時(shí)候,需調(diào)用-(void)endTransfer方法完成強(qiáng)制關(guān)閉音頻流通道,刪除語(yǔ)音緩沖文件,停止語(yǔ)音監(jiān)聽(tīng)器等工作,其中還需要對(duì)音頻模式及參數(shù)進(jìn)行默認(rèn)重置處理,相關(guān)代碼參考如下:

-(void)endTransfer{
[bufferEngine stop];
[buffeInputNode removeTapOnBus:0];
bufferRequest = nil;
bufferTask = nil;
[monitor stop];
[monitor deleteRecording];
NSError *error = nil;
[[AVAudioSession sharedInstance] setActive:NO error:&error];
if (error != nil) {
return;
}
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
if (error != nil) {
return;
}
[[AVAudioSession sharedInstance] setMode:AVAudioSessionModeDefault error:&error];
if (error != nil) {
return;
}
[[AVAudioSession sharedInstance] setActive:YES error:&error];
if (error != nil) {
return;
}
}

2語(yǔ)音識(shí)別波浪效果實(shí)現(xiàn)原理

2.1語(yǔ)音識(shí)別動(dòng)畫(huà)效果

ios語(yǔ)音識(shí)別需求經(jīng)常會(huì)要求實(shí)時(shí)展示語(yǔ)音識(shí)別的動(dòng)畫(huà)過(guò)程,常見(jiàn)的動(dòng)畫(huà)效果是根據(jù)語(yǔ)音識(shí)別音量大小實(shí)時(shí)展示不同幅度的平移波浪效果,最終效果如下圖所示:

圖片

如上最終效果圖中一共有32個(gè)波浪圓點(diǎn),其中前6個(gè)和后6個(gè)屬于固定靜止的圓點(diǎn),只有中間20個(gè)圓點(diǎn)屬于隨音量大小類似波浪上下浮動(dòng)的長(zhǎng)柱圖。

2.2 語(yǔ)音識(shí)別動(dòng)畫(huà)實(shí)現(xiàn)原理

對(duì)于上節(jié)圖中的動(dòng)態(tài)效果實(shí)際實(shí)現(xiàn)方式存在兩種:一、ios系統(tǒng)傳統(tǒng)CoreAnimation框架, 二、動(dòng)態(tài)更新圓點(diǎn)frame。如果采用傳統(tǒng)CoreAnimation框架那么對(duì)于每一個(gè)圓點(diǎn)都要做一個(gè)浮動(dòng)效果的動(dòng)畫(huà),在實(shí)現(xiàn)流程和系統(tǒng)開(kāi)銷兩方面顯得得不償失,而如果采用簡(jiǎn)單的動(dòng)態(tài)更新圓點(diǎn)frame的方式則事半功倍,本文內(nèi)容也將基于動(dòng)態(tài)更新圓點(diǎn)frame的方式進(jìn)行講述。

對(duì)于上圖中的動(dòng)畫(huà)效果很容易就會(huì)聯(lián)想到數(shù)學(xué)中的正弦函數(shù)圖,因此可以把波浪圖的橫向定義為正弦X軸(實(shí)際上ios的坐標(biāo)也是基于此概念),縱向即為正弦Y軸(高度為音量對(duì)坐標(biāo)的映射值)。首先對(duì)于32個(gè)浮動(dòng)圓點(diǎn)本地初始化對(duì)應(yīng)出32個(gè)X軸映射坐標(biāo)x,坐標(biāo)間隙等值設(shè)定,當(dāng)實(shí)時(shí)語(yǔ)音音量voluem數(shù)據(jù)傳輸過(guò)來(lái)后通過(guò)正弦函數(shù)y=F*sin(pi*x-pi*t)可以算出映射的振幅y,其中語(yǔ)音音量限定了最大的音量數(shù)據(jù),該數(shù)據(jù)和正弦函數(shù)振幅數(shù)據(jù)F強(qiáng)相關(guān),相關(guān)實(shí)現(xiàn)原理圖參考如下:

圖片

那么實(shí)時(shí)語(yǔ)音音量voluem數(shù)據(jù)是如何獲取的?實(shí)際上前文中的監(jiān)聽(tīng)器(AVAudioRecorder)就提供了語(yǔ)音音量數(shù)據(jù)的封裝接口- (float)peakPowerForChannel:(NSUInteger)channelNumber,channelNumber為音頻輸入/輸出的通道號(hào),該函數(shù)返回的數(shù)據(jù)即為分貝數(shù)值,取值的范圍是 -160~0 ,聲音峰值越大,越接近0。當(dāng)獲取到實(shí)時(shí)語(yǔ)音音量voluem數(shù)據(jù)后進(jìn)行相應(yīng)的量化處理就能得到振幅y的映射值。相關(guān)代碼可參考如下:

AVAudioRecorder *monitor
[monitor updateMeters];
float power = [monitor peakPowerForChannel:0];

2.3 動(dòng)態(tài)更新圓點(diǎn)的frame代碼層面的實(shí)現(xiàn)

首先生成32個(gè)的圓點(diǎn)view,同時(shí)添加到當(dāng)前圖層,相關(guān)代碼如下所示:

self.sinXViews = [NSMutableArray new];
for (NSUInteger i = 0; i < sinaXNum+12; i++) {
UIView *sinView = [[UIView alloc]initWithFrame:CGRectMake(offsetX, offsetY, 3, 3)];
sinView.layer.cornerRadius = 1.5f;
sinView.layer.masksToBounds = YES;
[self.sinXViews addObject:sinView];
[self addSubview:sinView];
}

其中代碼中的sinXViews是緩存32個(gè)圓點(diǎn)view的數(shù)組,該數(shù)組是為了方便重置圓點(diǎn)的frame而設(shè)定,offsetX為圓點(diǎn)在圖層中的具體坐標(biāo),需要根據(jù)需求進(jìn)行詳細(xì)計(jì)算獲得。

將32個(gè)圓點(diǎn)添加到對(duì)應(yīng)圖層后核心需要解決的問(wèn)題就是如何獲取圓點(diǎn)振幅了,因?yàn)樾枨髮?shí)現(xiàn)的最終效不僅是圓點(diǎn)正弦波浪效果,還需要同時(shí)對(duì)整個(gè)波浪進(jìn)行右邊平移,因此正弦函數(shù)y=F*sin(pi*x-pi*t)輸入數(shù)據(jù)應(yīng)該包含圓點(diǎn)坐標(biāo)x和格式化的時(shí)間戳數(shù)據(jù)t,具體實(shí)現(xiàn)代碼參考如下:

-(double)fSinValueWithOriginX:(CGFloat)originX timeS:(NSTimeInterval)timeStamp voluem:(CGFloat)voluem{
CGFloat sinF ;
double sinX ;
double fSin = sinF *(4/(pow(sinX,4)+4))*sin(3.14*sinX-3.14*timeStamp);
return fabs(fSin);
}

其中代碼中的sinF是根據(jù)視覺(jué)映射出的圓點(diǎn)y軸振幅,sinX是根據(jù)入?yún)riginX及圓點(diǎn)x軸坐標(biāo)間隔值計(jì)算得出,timeStamp為音量實(shí)時(shí)采集時(shí)間戳格式化數(shù)據(jù)。

經(jīng)過(guò)以上步驟實(shí)現(xiàn)就只剩更新圓點(diǎn)frame這一步了,這一步相對(duì)簡(jiǎn)單,代碼實(shí)現(xiàn)參考如下:

for (NSUInteger i = 0; i < self.sinXViews.count; i++) {
if (i > 5 && i < self.sinaXNum+6) {
UIView *sinView = (UIView *)self.sinXViews[i];
CGRect frame = sinView.frame;
double _viewHeight = [self fSinValueWithOriginX:frame.origin.x timeS:timeStamp voluem:Voluem];
double viewHeight ;
frame.size.height = viewHeight;
if (viewHeight == 0) {
return;
}
frame.origin.y = (self.frame.size.height-viewHeight)/2;
[sinView setFrame:frame];
}
}

從以上代碼可知遍歷self.sinXViews獲取到當(dāng)前圓點(diǎn)view后先取出frame數(shù)據(jù),然后通過(guò)計(jì)算得到當(dāng)前時(shí)刻圓點(diǎn)的振幅viewHeight,最后用viewHeight去更新當(dāng)前時(shí)刻圓點(diǎn)的frame,此時(shí)即完成了某個(gè)時(shí)刻20個(gè)圓點(diǎn)的正弦振動(dòng)動(dòng)態(tài)效果圖。

以上為本人工程中的技術(shù)實(shí)現(xiàn)經(jīng)驗(yàn),現(xiàn)做一個(gè)簡(jiǎn)單的總結(jié)歸納,如有錯(cuò)誤之處請(qǐng)不吝賜教,謝謝閱讀!

參考資料

[1] Speech框架資料:https://developer.apple.com/documentation/speech

[2] ios錄音功能資料:https://developer.apple.com/documentation/avfaudio

責(zé)任編輯:未麗燕 來(lái)源: 移動(dòng)Labs
相關(guān)推薦

2023-07-16 18:46:30

2011-05-31 16:38:47

Android 實(shí)現(xiàn)語(yǔ)音

2025-08-12 02:11:00

2020-09-21 07:00:00

語(yǔ)音識(shí)別AI人工智能

2021-12-08 14:06:19

Python語(yǔ)音識(shí)別開(kāi)發(fā)

2021-04-27 15:47:12

人工智能語(yǔ)音識(shí)別Transformer

2012-07-25 13:23:32

ibmdw

2012-07-10 13:29:30

Java

2015-12-07 14:39:18

微軟Windows 95語(yǔ)音識(shí)別

2011-01-18 11:52:25

Linux語(yǔ)音識(shí)別

2020-09-23 09:24:01

堆棧開(kāi)發(fā)實(shí)現(xiàn)

2025-06-27 05:00:00

AI語(yǔ)音詐騙AI語(yǔ)音識(shí)別人工智能

2018-01-31 13:09:35

Pythonface_recogn人臉識(shí)別

2021-11-17 10:37:39

語(yǔ)音識(shí)別技術(shù)人工智能

2017-10-27 16:19:23

語(yǔ)音識(shí)別CNN

2013-06-13 16:06:57

iOSWWDCin the Car

2016-02-17 10:39:18

語(yǔ)音識(shí)別語(yǔ)音合成語(yǔ)音交互

2009-06-03 15:38:37

Struts框架RBAC

2019-06-24 09:30:00

開(kāi)源技術(shù) 趨勢(shì)

2023-06-05 09:28:32

CSS漸變
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

性一交一乱一区二区洋洋av| 中文字幕国产免费| 日韩精品一区二区三区高清免费| 免费黄网站在线观看| 久久99成人| 久久久www免费人成精品| 欧美日韩福利在线观看| 日韩亚洲视频在线| 日本中文字幕在线免费观看| 欧美午夜在线播放| 成人av在线观| 欧美成人免费va影院高清| 国产免费一区二区三区视频| 国产成人手机在线| 一区二区三区午夜视频| 91豆麻精品91久久久久久| 国产伦精品一区二区三区高清版| 波多野结衣久久久久| 日韩国产网站| 26uuu国产在线精品一区二区| 欧美精品一区在线播放| 中文字幕无码人妻少妇免费| 视频在线这里都是精品| 国产在线精品一区二区不卡了| 中文字幕成人精品久久不卡| 能在线观看的av网站| 日本成人动漫在线观看| 欧美日韩三级电影在线| 这里只有精品视频在线观看| 在线视频精品一区| 一区二区国产欧美| 日韩精品诱惑一区?区三区| 日本福利一区二区| 精品人妻人人做人人爽| 丰满大乳国产精品| 日本不卡一区二区三区高清视频| 亚洲性无码av在线| 午夜免费福利在线| 伊人在线视频| 国产精品白丝av| 欧美国产中文字幕| 给我看免费高清在线观看| 欧美gv在线观看| 久久蜜桃一区二区| 国产精品久久久久av| 妖精视频在线观看免费 | 亚洲精品aa| 国产精品第13页| 91精品视频在线| 顶臀精品视频www| 91久久精品无嫩草影院| 国产精品国产三级国产普通话99 | 一本一道久久a久久| 欧美日韩一区二区欧美激情| 性高潮久久久久久久久| 国产剧情久久久| 一区三区视频| 亚洲色图第三页| 国产成人美女视频| 看女生喷水的网站在线观看| 成人夜色视频网站在线观看| 热久久免费视频精品| 开心激情五月网| 精品国产精品| 精品国产亚洲一区二区三区在线观看| 91丨porny丨探花| 国产在线视频网站| 国产精品白丝av| 91九色对白| 精品国产乱子伦| 欧美日本一区二区视频在线观看| 最近中文字幕日韩精品| 久久久久亚洲av成人网人人软件| 日韩成人影音| 欧美色区777第一页| 天美星空大象mv在线观看视频| 18+视频在线观看| 久久美女高清视频| 欧美日韩一区在线播放| 99产精品成人啪免费网站| 性色一区二区三区| 国产成人av网| 国产无套在线观看| 97视频精品| 亚洲精品一区中文| 99久久综合网| 欧美性aaa| 91精品国产综合久久福利| 黄色国产精品视频| 国内高清免费在线视频| 中文字幕日本不卡| 欧美精品免费观看二区| 久草视频在线看| 国产人久久人人人人爽| 久久99影院| 丰满人妻一区二区三区无码av| www.亚洲精品| 97netav| 欧美一区,二区| 久久久精品日韩欧美| 正在播放一区| 黄视频免费在线看| 亚州成人在线电影| 日本天堂免费a| 日本三级在线视频| 亚洲综合激情另类小说区| 一区二区三区在线视频看| 在线播放蜜桃麻豆| 色呦呦网站一区| 午夜精品久久久久久久无码| segui88久久综合| 亚洲自拍偷拍综合| 91国产高清在线| 色综合久久中文字幕综合网小说| 网站永久看片免费| 欧美午夜精彩| 亚洲色图美腿丝袜| 青青青在线免费观看| 亚洲专区欧美专区| 亚洲va欧美va在线观看| 国产乱子伦精品无码码专区| thepron国产精品| 一区二区三区不卡在线| 在线免费看av| 亚洲欧洲精品天堂一级| 成人一对一视频| 国产高清精品二区| 日韩精品在线一区| www.四虎精品| 日韩一区二区中文| 欧美亚洲视频一区二区| 日韩 欧美 中文| 一本色道久久综合亚洲精品不| 97福利一区二区| 日本高清不卡码| 日韩一区精品字幕| 成人免费激情视频| 亚洲精品喷潮一区二区三区| 波多野洁衣一区| 人人妻人人澡人人爽精品欧美一区| 国产丝袜在线| 欧美亚洲国产怡红院影院| 污色网站在线观看| 久久爱www成人| 色多多国产成人永久免费网站 | 亚洲av电影一区| 2021中文字幕一区亚洲| 国产原创中文在线观看| 日韩精品成人在线观看| 久久久久久一级片| 国外视频精品毛片| 影音先锋亚洲天堂| 国产福利一区二区三区在线视频| 国产精品中出一区二区三区| av片在线观看网站| 3d动漫精品啪啪1区2区免费| 中国美女黄色一级片| 男女男精品视频| 97在线资源站| 在线h片观看| 精品少妇一区二区三区视频免付费| 又黄又爽的网站| 亚洲高清av| 国产精品视频在线免费观看| 国产蜜臀一区二区打屁股调教| 日韩欧美国产成人一区二区| 加勒比av在线播放| 久久精品在线| 91精品国产高清久久久久久91裸体| 日本电影全部在线观看网站视频| 亚洲国产精品久久久久婷婷884 | 瑟瑟视频在线观看| 综合视频在线| 国产成人精品日本亚洲11| 国产精品一区二区三区四区色| 一区二区三区中文字幕电影| 欧美a v在线播放| 欧美一区二区三区久久| 久久久国产精品免费| 欧美亚韩一区二区三区| 97精品电影院| 伊人久久在线观看| 欧洲亚洲精品| 久久艳片www.17c.com| 亚洲成人av影片| 国产日产精品1区| 久无码久无码av无码| 欧美aaaaaaaa| 亚洲人线精品午夜| 一级特黄特色的免费大片视频| 亚洲人精品午夜| 182午夜在线观看| 91精品在线观看国产| 国产精品1234| 日本www在线观看视频| 精品国产伦理网| 国产情侣小视频| 成人动漫视频在线| 丰满少妇在线观看| 欧美精品一卡| 欧美亚洲爱爱另类综合| 亚洲图片小说区| 日韩一区二区三区在线播放| 亚洲成人av网址| 亚洲免费看黄网站| 手机精品视频在线| 香蕉综合视频| 久久精品国产精品国产精品污| 国产一区一一区高清不卡| 亚洲欧美999| 久久精品视频5| 亚洲欧美日韩国产一区二区三区| 呦呦视频在线观看| 精品一区二区三区免费视频| 日韩一区不卡| 超碰cao国产精品一区二区| 日韩暖暖在线视频| 日韩二区三区| 午夜精品久久久久久久蜜桃app| 亚洲精品午夜视频| 久久成人亚洲| 一二三四中文字幕| 日韩精品dvd| 免费久久久一本精品久久区| 漫画在线观看av| 久久天天躁狠狠躁夜夜爽蜜月| 美国成人毛片| 亚洲第一视频网站| 亚洲不卡视频在线观看| 亚洲最新视频在线播放| 精品少妇一区二区三区密爱| 91在线观看免费视频| 欧美熟妇精品一区二区| 宅男噜噜噜66国产日韩在线观看| mm131午夜| heyzo欧美激情| 成人免费网站在线观看| 五月激情久久| 日韩美女福利视频| 在线天堂资源| 色婷婷**av毛片一区| 精品999视频| 精品无码久久久久久国产| 日韩一级免费视频| 欧美精品一区二区在线观看| www.97av| 色综合天天综合| 亚洲男人第一av| 精品国产鲁一鲁一区二区张丽| 国产综合精品久久久久成人av| 国产精品一区二区三区网站| 在线视频观看91| 极品少妇一区二区| 免费观看美女裸体网站| 黄色工厂这里只有精品| 欧美午夜精品久久久久免费视| 日韩动漫一区| 成人在线中文字幕| 亚洲精品第一| 国产在线视频欧美| 麻豆理论在线观看| 国产91精品久久久久久| 亚洲啊v在线| 国产激情久久久| 成人免费毛片嘿嘿连载视频…| 国产精品一区二区三区久久| 俺来也官网欧美久久精品| 久久99热精品这里久久精品| 麻豆av在线播放| 日韩中文字幕免费看| 美女隐私在线观看| 九九视频这里只有精品| 丁香花在线影院| 7m精品福利视频导航| 成人自拍av| 91精品国产91久久久久久吃药| 91九色在线看| 国产成人97精品免费看片| 亚洲成人高清| 成人免费在线看片| 天堂日韩电影| 亚州欧美一区三区三区在线 | 亚洲欧美激情精品一区二区| 福利片在线观看| 久久精品视频免费播放| freexxx性亚洲精品| 国产成人一区二区三区| 性欧美video另类hd尤物| 国产麻豆日韩| 精品色999| 青青草视频在线视频| 久久高清免费观看| 色黄视频免费看| 首页综合国产亚洲丝袜| 极品美女扒开粉嫩小泬| 欧美aⅴ一区二区三区视频| 色哟哟免费视频| www亚洲一区| 精品无码久久久久成人漫画| 国产精品国产三级国产普通话99| 久久久久久久福利| 亚洲欧美精品午睡沙发| 亚洲免费在线观看av| 欧美日韩性生活| 少妇喷水在线观看| 亚洲福利在线看| 国产高清在线看| 欧美精品videossex88| 天堂成人av| 国产成人jvid在线播放| 久久久久久爱| 欧美综合77777色婷婷| 国产一区二区三区天码| 欧美国产二区| 欧美久久一级| 激情视频免费网站| av午夜精品一区二区三区| 91狠狠综合久久久| 色综合一区二区| 亚洲国产日韩在线观看| 日韩在线观看免费全集电视剧网站| 美女露胸视频在线观看| 成人动漫视频在线观看免费| 成人h动漫免费观看网站| 亚洲精品在线视频观看| 国产精品x453.com| 好吊色视频988gao在线观看| 日日噜噜夜夜狠狠视频欧美人| 韩国三级hd两男一女| 91香蕉视频污在线| 久久精品99国产精| 欧美一级爆毛片| 天天干,天天操,天天射| 欧美成人久久久| 粉嫩av国产一区二区三区| 日韩欧美在线电影| 久久午夜精品| 成人h动漫精品一区| 偷偷要91色婷婷| 懂色av一区二区三区四区| 欧美日韩福利在线观看| 亚洲日本va午夜在线电影| 中文字幕av久久| 极品少妇xxxx偷拍精品少妇| 国产第一页精品| 精品婷婷伊人一区三区三| 阿v免费在线观看| 欧美国产第二页| 亚洲三区欧美一区国产二区| 9191国产视频| 国产成人高清在线| 欧美激情aaa| 色综合婷婷久久| 免费资源在线观看| 国产精品吊钟奶在线| 国产精品密蕾丝视频下载| 国产性生交xxxxx免费| 国产拍欧美日韩视频二区| 中日韩在线观看视频| 精品久久久久香蕉网| 青春草在线免费视频| 成人在线观看91| 亚洲三级视频| 亚洲综合激情视频| 亚洲色大成网站www久久九九| 国产免费不卡视频| 久久99国产精品久久久久久久久| xxxx日韩| 久在线观看视频| 久久看人人爽人人| 91成人在线免费| 欧美日韩国产第一页| 欧美a一欧美| 搡女人真爽免费午夜网站| 亚洲视频一二区| 欧美一级淫片aaaaaa| 欧美中在线观看| 日韩一区二区在线免费| 女同性αv亚洲女同志| 精品久久久久久久久久国产| 国产福利片在线| 亚洲自拍高清视频网站| 99热在线精品观看| 人人妻人人澡人人爽| 天天色综合天天| 精华区一区二区三区| 91欧美视频网站| 亚洲一区二区免费看| 亚洲av午夜精品一区二区三区| 亚洲成av人片一区二区| 电影在线高清| av噜噜色噜噜久久| 视频一区二区欧美| 国产极品国产极品| 精品欧美一区二区久久| 精品无人乱码一区二区三区| 色哺乳xxxxhd奶水米仓惠香| 久久一二三国产| 国产手机精品视频| 热99精品里视频精品|