免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

Windows下Python調(diào)用訊飛語音喚醒SDK實戰(zhàn)與避坑指南

Windows下Python調(diào)用訊飛語音喚醒SDK實戰(zhàn)與避坑指南 做了幾年語音交互相關(guān)的項目我一直有個感受喚醒詞能穩(wěn)定觸發(fā)的那一刻整個設(shè)備才算是真正“活”了。這次在Windows環(huán)境下用Python調(diào)用科大訊飛語音喚醒SDK說實話一開始我有點輕視它以為把SDK文檔里的接口照著調(diào)一遍就行了結(jié)果前前后后踩了十幾個坑光是解決“DLL加載就報錯”和“回調(diào)遲遲不來”這兩個問題就花掉大半天。這篇文章就是一次完整的實操記錄把Windows下用Python通過ctypes調(diào)訊飛喚醒SDK的整個鏈路講清楚包含完整可跑的代碼重點說明哪些地方容易翻車、為什么翻車、怎么避開。適合正在做語音喚醒、語音助手的開發(fā)者尤其是想用Python快速驗證產(chǎn)品原型的人參考。1. 方案選型為什么用Python調(diào)訊飛喚醒SDK以及整體思路1.1 Python與C SDK之間的“橋接”方案先回答一個最常見的問題訊飛官方SDK是C/C接口為什么我還要用Python去調(diào)原因很現(xiàn)實。做項目原型、做算法驗證、做自動化測試的時候Python的開發(fā)效率是C沒法比的。我有一次臨時要驗證某個喚醒詞在真實麥克風(fēng)下的觸發(fā)率如果用C重新寫一套采集流程光搭工程就要大半天用Python加上pyaudio采集音頻再通過ctypes直接加載訊飛SDK的動態(tài)庫一小時以內(nèi)就能跑起來。另外團隊的算法工程師、測試同學(xué)普遍更熟悉Python把SDK封裝成Python接口后大家都能直接上手調(diào)參、看日志不需要每個人都去研究C編譯環(huán)境。目前常見的方案有三條路方案A用ctypes直接加載訊飛SDK的動態(tài)庫DLL在Python側(cè)定義接口簽名。這是本文采用的方式優(yōu)點是鏈路短、無重編譯、修改靈活適合快速調(diào)試驗證。方案B用pybind11或cffi寫一層C擴展包裝SDK再在Python中導(dǎo)入。優(yōu)點是類型更清晰、性能更好但每次改SDK版本都要重新編譯搭建環(huán)境成本高。方案C完全脫離本地SDK走訊飛開放平臺的HTTP接口做“云端喚醒”。這個方案其實不算真正的喚醒——因為云端識別意味著音頻要持續(xù)上傳網(wǎng)絡(luò)延遲、流量消耗和隱私問題都比較明顯而且斷網(wǎng)時整個喚醒功能就廢了所以不適合本地語音交互場景。我做下來最終選了方案A。ctypes是Python標(biāo)準(zhǔn)庫自帶的不需要安裝額外依賴它可以直接調(diào)用DLL里導(dǎo)出的C函數(shù)。關(guān)鍵是把每個函數(shù)的參數(shù)類型、返回值類型、回調(diào)函數(shù)簽名在Python側(cè)聲明準(zhǔn)確只要這一步做對了后面的調(diào)用體驗基本上跟調(diào)本地函數(shù)差不多。1.2 喚醒鏈路整體設(shè)計喚醒功能的整體數(shù)據(jù)流是這樣的麥克風(fēng)采集音頻 → 音頻數(shù)據(jù)寫入SDK → SDK內(nèi)部做VAD檢測和喚醒詞特征匹配 → 命中后觸發(fā)回調(diào) → 應(yīng)用層執(zhí)行后續(xù)業(yè)務(wù)動作這里有一點必須先搞清楚喚醒SDK內(nèi)部是有完整的聲音處理鏈路的它接收的是原始PCM音頻流不是音頻文件路徑。所以我們要做的第一步是拿到真實麥克風(fēng)的原始音頻數(shù)據(jù)然后把字節(jié)流持續(xù)、實時地喂給SDK。音頻參數(shù)必須嚴(yán)格匹配SDK要求一般是16kHz采樣率、16位量化、單聲道也就是PCM_S16LE格式。這個參數(shù)直接決定了喚醒的準(zhǔn)確率和觸發(fā)穩(wěn)定性后面我會專門展開講。除了數(shù)據(jù)流Windows下的喚醒還要處理幾個容易忽略的問題麥克風(fēng)設(shè)備權(quán)限、設(shè)備占用沖突、DLL依賴庫缺失、Python解釋器和DLL的位數(shù)匹配32位還是64位以及回調(diào)線程和Python主線程的交互。這些細節(jié)如果不提前規(guī)劃好連“Hello” 都跑不通。2. 初始化到喚醒監(jiān)聽核心代碼與關(guān)鍵參數(shù)說明2.1 環(huán)境準(zhǔn)備與SDK文件清單先說環(huán)境我用的是Python 3.1064位版本。為什么強調(diào)位數(shù)因為Windows下DLL也有32位和64位之分Python解釋器的位數(shù)必須和SDK DLL的位數(shù)一致。我一開始圖省事用了Anaconda默認的64位Python結(jié)果拷過來一個32位版本的訊飛喚醒SDK第一次調(diào)用就報OSError: [WinError 193] %1 不是有效的 Win32 應(yīng)用。這個錯誤的意思就是DLL位數(shù)不匹配排查方法很簡單打開任務(wù)管理器看Python進程是32位還是64位或者直接看DLL文件屬性。一個訊飛語音喚醒SDK包解壓后你通常會看到這些東西msc_x64.dll或msc.dll核心動態(tài)庫喚醒能力封裝在里面。lib或bin目錄下的若干依賴DLL比如日志、網(wǎng)絡(luò)通信相關(guān)的庫這些也要放在能被找到的路徑下。resource/目錄或喚醒詞資源文件一般是.irres、.bin或.jet文件里面是喚醒詞的聲學(xué)模型和資源初始化時要指定路徑。頭文件ivw.h或qivw.h之類的Windows下用ctypes調(diào)用時最關(guān)鍵的是從這里面確認函數(shù)名、參數(shù)類型和回調(diào)函數(shù)簽名。注意不同版本SDK解壓后的目錄結(jié)構(gòu)會有差異但大原則是所有DLL放在同一個目錄下并且讓Python啟動時的當(dāng)前工作目錄或PATH環(huán)境變量包含這個目錄。否則即使主DLL加載成功它依賴的其他DLL找不到后面調(diào)用某個具體函數(shù)時會莫名其妙崩潰。2.2 加載DLL并定義接口簽名首先做三件事加載DLL、聲明函數(shù)原型、定義回調(diào)類型。這一步是ctypes調(diào)用的地基寫錯一個參數(shù)類型輕則回調(diào)不觸發(fā)重則直接導(dǎo)致Python進程閃退。訊飛喚醒SDK的導(dǎo)出接口風(fēng)格是典型的C接口函數(shù)名類似QIVWRegisterCallback、QIVWSessionBegin、QIVWAudioWrite、QIVWSessionEnd。不同SDK版本函數(shù)名可能有差異務(wù)必以你下載版本的頭文件為準(zhǔn)。以我用的版本為例核心代碼如下import ctypes import os # 1) 加載DLL思路是把SDK目錄臨時加到PATH里 sdk_dir rD:\workspace\iflytek_wakeup\bin os.environ[PATH] sdk_dir ; os.environ[PATH] sdk ctypes.CDLL(os.path.join(sdk_dir, msc_x64.dll))這里我直接用ctypes.CDLL加載。如果你的SDK頭文件里聲明了__stdcallWindows API常見要用ctypes.WinDLL加載如果是普通C函數(shù)__cdecl用CDLL。拿不準(zhǔn)的時候打開頭文件看一眼函數(shù)聲明前有CALLBACK、WINAPI字樣就是stdcall否則是cdecl。接著聲明函數(shù)的參數(shù)和返回值類型。這一步容易被忽略但它恰恰是ctypes調(diào)用C庫的核心# 2) 聲明函數(shù)簽名 # typedef void (*wakeup_handler)(const char *text, int len, void *user_data); WAKEUP_CB ctypes.CFUNCTYPE(None, ctypes.c_char_p, ctypes.c_int, ctypes.c_void_p) sdk.QIVWRegisterCallback.argtypes [WAKEUP_CB] sdk.QIVWRegisterCallback.restype ctypes.c_int sdk.QIVWSessionBegin.argtypes [ctypes.c_char_p, ctypes.c_char_p] sdk.QIVWSessionBegin.restype ctypes.c_void_p sdk.QIVWAudioWrite.argtypes [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_uint, ctypes.c_int] sdk.QIVWAudioWrite.restype ctypes.c_int sdk.QIVWSessionEnd.argtypes [ctypes.c_void_p, ctypes.c_char_p] sdk.QIVWSessionEnd.restype ctypes.c_int為什么要把argtypes和restype顯式寫清楚因為ctypes默認情況下會把參數(shù)當(dāng)成c_int處理如果你傳入一個字符串或一個指針內(nèi)存布局就對不上。特別是64位系統(tǒng)下指針長度是8字節(jié)如果不聲明restype c_void_p返回值會被截斷成32位整數(shù)后面回調(diào)、會話操作全都會錯亂。這一行聲明往往就是調(diào)通和調(diào)不通的分水嶺。2.3 初始化、設(shè)置回調(diào)與啟動喚醒初始化喚醒會話的流程通常是注冊回調(diào) → 設(shè)置喚醒詞資源 → 開始會話 → 寫入音頻 → 持續(xù)監(jiān)聽 → 命中后回調(diào)循環(huán)往復(fù)。下面是我把流程簡化后的初始化代碼# 3) 回調(diào)函數(shù)喚醒成功后SDK在內(nèi)部線程里調(diào)用它 WAKEUP_CB def on_wakeup(text_bytes, length, user_data): if text_bytes: word text_bytes.decode(utf-8, errorsignore) print(f[喚醒成功] {word}) # 這里可以做后續(xù)動作亮屏、錄音、播放提示音等 # 4) 注冊回調(diào) ret sdk.QIVWRegisterCallback(on_wakeup) if ret ! 0: raise RuntimeError(f注冊回調(diào)失敗: {ret}) # 5) 開始喚醒會話sdk_params里要配置喚醒詞資源路徑和門限 params bappid12345678,work_dirD:\\workspace\\iflytek_wakeup\\resource,sstwakeup,ivw_threshold0:1450 session_id sdk.QIVWSessionBegin(None, params) if not session_id: raise RuntimeError(會話開啟失敗)這里有兩個容易踩的坑。第一QIVWSessionBegin的參數(shù)是char*字節(jié)串所以在Python里必須用b...不能直接用普通字符串否則編碼不對DLL讀的是亂碼。第二work_dir指向的資源目錄里必須有對應(yīng)的喚醒詞資源文件而且喚醒詞編號和門限要匹配。ivw_threshold0:1450的含義是第0個喚醒詞的觸發(fā)門限是1450門限越低越容易被觸發(fā)但誤喚醒也會增加建議先用官方默認門限跑通流程再根據(jù)實測調(diào)高或調(diào)低。如果你的SDK版本沒有QIVWSessionBegin這個函數(shù)名而是用AIUI方式初始化也不用慌核心邏輯是一樣的注冊回調(diào)、傳參配置資源、開啟會話。2.4 音頻數(shù)據(jù)如何“喂”給SDK啟動喚醒后要做的事情就是把麥克風(fēng)采集到的音頻寫入SDK。我在項目里用的是pyaudio庫音頻參數(shù)固定為import pyaudio FORMAT pyaudio.paInt16 # 16位量化 CHANNELS 1 # 單聲道 RATE 16000 # 16kHz采樣率 CHUNK 960 # 30ms一塊CHUNK的選取是有講究的。一塊音頻對應(yīng)的時間太短比如5ms那么CPU會頻繁在Python層和SDK層之間切換調(diào)用開銷變大一塊音頻對應(yīng)時間太長比如500msSDK內(nèi)部做成幀處理時的喚醒延遲就會變高。實測下來16kHz采樣率下每塊音頻取960個采樣點即30ms是最舒服的平衡點喚醒延遲大概在200~400ms人耳幾乎感覺不到。把音頻數(shù)據(jù)寫入SDK的循環(huán)p pyaudio.PyAudio() stream p.open(formatFORMAT, channelsCHANNELS, rateRATE, inputTrue, frames_per_bufferCHUNK) try: while running: audio_data stream.read(CHUNK, exception_on_overflowFalse) ret sdk.QIVWAudioWrite(session_id, audio_data, len(audio_data), 0) if ret ! 0: print(f音頻寫入錯誤: {ret}) except KeyboardInterrupt: pass finally: stream.stop_stream() stream.close() p.terminate() sdk.QIVWSessionEnd(session_id, b)注意exception_on_overflowFalse這個參數(shù)。Windows下麥克風(fēng)驅(qū)動偶爾會緩沖區(qū)溢出如果這個參數(shù)不設(shè)置成Falsestream.read會直接拋異常導(dǎo)致喚醒循環(huán)中斷。設(shè)成False之后read會返回None或歷史殘留數(shù)據(jù)雖然理論上會有輕微噪聲但能保證循環(huán)不崩。更穩(wěn)的做法是判斷audio_data是否為空為空就跳過寫入。3. 避坑實錄Windows環(huán)境下最容易翻車的6個問題3.1 位數(shù)不匹配32位DLL vs 64位Python這個問題我在前面提過但它太典型了值得單獨拿出來重點說。報錯OSError: [WinError 193]時第一時間檢查Python和DLL的位數(shù)。我見過不少同學(xué)折騰了半天最后發(fā)現(xiàn)是Anaconda裝的是32位版本而SDK給的是64位DLL或者反過來。判斷方法有幾種打開cmd輸入python -c import platform; print(platform.architecture())輸出中的64bit或32bit就是解釋器位數(shù)。在文件資源管理器里右鍵DLL文件 → 屬性Windows不會直接顯示位數(shù)更可靠的方式是用dumpbin /headers msc_x64.dll或者用Python讀PE頭。還有一個容易混淆的點進程位數(shù)和系統(tǒng)位數(shù)無關(guān)64位Windows完全可以運行32位Python進程。所以不要以為“我電腦是64位的就萬事大吉”要看的是解釋器本身。3.2 工作目錄與中文路徑的坑訊飛這套SDK對路徑非常敏感尤其是老版本。我踩過一次很無語的坑SDK放在D:\項目\喚醒SDK\bin下路徑里帶中文“項目”兩個字初始化時QIVWSessionBegin一直返回失敗日志文件里提示找不到資源。后來把整個SDK目錄挪到純英文路徑D:\workspace\wakeup_sdk\下問題立刻消失。原因不復(fù)雜很多C庫在Windows下把路徑字符串按**本地代碼頁GBK**處理而Python傳入的bytes字節(jié)串是UTF-8編碼路徑里一旦有非ASCII字符兩邊編碼不一致就會出錯。所以最省心的做法是SDK工作目錄全部使用純英文路徑不要有空格、中文、特殊符號。在工程內(nèi)部統(tǒng)一用UTF-8編寫代碼但傳給SDK的路徑參數(shù)顯示轉(zhuǎn)換成GBK編碼path.encode(gbk)。如果你的SDK版本比較新可能對中文路徑已經(jīng)做了兼容但項目上線前我仍然建議做一次路徑測試別在這上面賭運氣。3.3 麥克風(fēng)權(quán)限與獨占沖突Windows 10/11有一個“麥克風(fēng)隱私設(shè)置”默認情況下有些應(yīng)用是無法訪問麥克風(fēng)的。這個坑藏得比較深因為程序不會像Android那樣彈權(quán)限對話框它只會“安靜地”讀到一段全零數(shù)據(jù)或者直接打開設(shè)備失敗。表現(xiàn)就是程序在跑日志正常但喚醒永遠不觸發(fā)。排查方法打開Windows設(shè)置 → 隱私 → 麥克風(fēng)確認“允許應(yīng)用訪問麥克風(fēng)”打開。同時確認自己這個Python進程對應(yīng)的宿主程序比如python.exe、pycharm64.exe也在允許列表中。有時候PyCharm里運行的Python進程和直接運行的Python進程不在同一個白名單條目里。用系統(tǒng)自帶的錄音機程序測試一下麥克風(fēng)是否正常工作。如果系統(tǒng)錄音正常但Python讀不到音頻大概率是權(quán)限或設(shè)備獨占問題。此外Windows音頻設(shè)備同一時間通常只允許一個進程獨占訪問。如果你開著微信語音、騰訊會議或者直播軟件它們可能已經(jīng)把麥克風(fēng)設(shè)備占了。這時候pyaudio打開設(shè)備可能會成功但讀出來的數(shù)據(jù)是靜音或者SDK報寫入異常。所以我習(xí)慣在跑喚醒程序前先關(guān)掉所有可能占用麥克風(fēng)的軟件再用一個簡單的電平檢測腳本確認能讀到非零數(shù)據(jù)。3.4 無喚醒反應(yīng)先查音頻格式如果麥克風(fēng)數(shù)據(jù)正常、代碼跑得順但喚醒就是沒反應(yīng)十有八九音頻格式出了問題。訊飛喚醒SDK要求的是16kHz采樣率、16位量化、單聲道PCM這是硬性要求。下面這幾種情況我都遇過麥克風(fēng)默認采樣率是48kHz某些USB麥克風(fēng)或筆記本麥克風(fēng)陣列默認設(shè)備采樣率是48kHz。如果用pyaudio打開設(shè)備時傳RATE16000很多驅(qū)動會自動重采樣這個重采樣質(zhì)量參差不齊會導(dǎo)致喚醒率嚴(yán)重下降。更好的做法是單獨查一下設(shè)備支持的采樣率如果設(shè)備只支持48kHz那就先通過系統(tǒng)設(shè)置把默認格式改成16kHz或者用librosa、soundfile等庫在Python層顯式重采樣。聲道數(shù)填錯有些麥克風(fēng)陣列是2聲道或4聲道。如果CHANNELS1但設(shè)備實際輸出多聲道數(shù)據(jù)讀回來的字節(jié)流就不是標(biāo)準(zhǔn)單聲道PCMSDK解析全亂??梢酝ㄟ^pyaudio打印設(shè)備信息確認。數(shù)據(jù)格式不是int16個別采集庫默認返回float32數(shù)組。如果直接把float32的二進制內(nèi)容交給SDKSDK當(dāng)成int16解析出來的聲音完全是噪聲。我習(xí)慣在啟動喚醒前先跑一個“音頻格式自檢”腳本打印當(dāng)前設(shè)備實際采樣率、聲道數(shù)、緩沖長度并計算音頻數(shù)據(jù)的RMS能量。如果RMS接近0說明沒采到真實聲音如果RMS正常但喚醒不觸發(fā)再重點查格式轉(zhuǎn)換。3.5 DLL加載失敗的隱藏依賴ctypes.CDLL(msc_x64.dll)這行代碼有時候會直接報OSError: [WinError 126] 找不到指定的模塊。這個“找不到模塊”不一定是指msc_x64.dll本身找不到更可能是它依賴的其他DLL找不到。Windows加載DLL時搜索順序大致是應(yīng)用程序所在目錄 → 系統(tǒng)目錄 → 環(huán)境變量PATH路徑。訊飛SDK的bin目錄里一堆DLL是互相依賴的如果直接把msc_x64.dll拷到桌面其他依賴DLL不在旁邊加載就會失敗。解決思路有三個盡量把SDK所有DLL保持一個目錄然后把該目錄加到PATH環(huán)境變量中。如果還是報126用Dependencies開源工具可替代老舊的Depends打開DLL看一下缺哪個依賴庫常見的是msvcp140.dll、vcruntime140.dll等VC運行庫去微軟官網(wǎng)裝最新的“Visual C Redistributable”就行。再一個隱藏點DLL文件被殺毒軟件隔離。Windows Defender有時候會對SDK里某些加殼的庫誤殺導(dǎo)致文件還在但內(nèi)容被清空。查殺毒軟件的隔離區(qū)必要時把SDK目錄加入白名單。我在項目里遇到過QIVWSessionBegin返回空指針但沒報錯的情況后來發(fā)現(xiàn)是SDK的日志DLL版本不兼容把依賴庫更新后問題解決。所以遇到詭異問題先開SDK日志訊飛SDK通常支持通過參數(shù)log_level和log_path輸出詳細日志日志里一般會寫清楚卡在哪一步。3.6 回調(diào)線程與GIL的剪不斷理還亂這是Python調(diào)C庫時一個非常微妙的問題。訊飛SDK的回調(diào)函數(shù)是在SDK內(nèi)部線程里觸發(fā)的也就是說當(dāng)喚醒詞命中時on_wakeup并不是跑在你的主線程里而是跑在DLL創(chuàng)建的工作線程里。這意味著兩件事不要在主線程與回調(diào)線程之間直接操作共享的非線程安全對象。比如在回調(diào)里直接print是可以的但如果要在回調(diào)里操作tkinter界面控件就會引發(fā)各種詭異問題——因為tkinter不是線程安全的更穩(wěn)妥的方式是回調(diào)里只記錄事件把真正的UI操作通過隊列丟回主線程執(zhí)行。Python GIL會限制回調(diào)線程和主線程的同時執(zhí)行。如果你的主線程一直忙于處理其他重計算喚醒回調(diào)可能被延遲。所以喚醒監(jiān)聽線程最好是一個獨立、輕量的循環(huán)不要在同一個線程里又做喚醒采集又做大量的業(yè)務(wù)邏輯。我比較推薦的做法是使用queue.Queue做一個事件隊列import queue wakeup_event_queue queue.Queue() WAKEUP_CB def on_wakeup(text_bytes, length, user_data): try: word text_bytes.decode(utf-8, errorsignore) except Exception: word wakeup_event_queue.put(word) # 主線程或其他線程 while True: word wakeup_event_queue.get() print(主線程處理喚醒詞:, word) # 做燈光、播放提示音、啟動語音識別等這樣就把SDK內(nèi)部線程和業(yè)務(wù)邏輯解耦了回調(diào)只負責(zé)“入隊”主線程負責(zé)“處理”。無論后面接什么動作都不會因為線程安全問題莫名其妙崩潰。4. 完整示例代碼與擴展思路4.1 可直接運行的完整實例把前面所有部分串起來一個完整的、可運行的Python版本語音喚醒demo如下。為了減小篇幅我把錯誤處理壓縮了一下但核心鏈路是完整的拿過去改一下SDK路徑就能用。 Windows Python 訊飛語音喚醒SDK 最小可用實例 依賴: pyaudio 注意: 請根據(jù)你的SDK版本頭文件調(diào)整函數(shù)名和參數(shù)類型 import ctypes import os import queue import platform import sys import time import pyaudio # ---------- 配置區(qū) ---------- SDK_DIR rD:\workspace\wakeup_sdk\bin RESOURCE_DIR rD:\workspace\wakeup_sdk\resource APPID b12345678 # 換成你的appid WAKEUP_CB_NAMES [QIVWRegisterCallback, IVWRegisterCallback] SESSION_BEGIN_NAMES [QIVWSessionBegin, IVWSessionBegin] AUDIO_WRITE_NAMES [QIVWAudioWrite, IVWAudioWrite] SESSION_END_NAMES [QIVWSessionEnd, IVWSessionEnd] RATE 16000 CHANNELS 1 FORMAT pyaudio.paInt16 CHUNK 960 # 30ms 16kHz running True wakeup_event_queue queue.Queue() # ----------------------------- def load_sdk(dll_namemsc_x64.dll): os.environ[PATH] SDK_DIR ; os.environ[PATH] dll_path os.path.join(SDK_DIR, dll_name) if not os.path.exists(dll_path): raise FileNotFoundError(fSDK動態(tài)庫不存在: {dll_path}) print(f[INFO] 加載動態(tài)庫: {dll_path}) return ctypes.CDLL(dll_path) def get_func(sdk, names, func_type): for name in names: if hasattr(sdk, name): func getattr(sdk, name) func_type(func) # 這里只是為了觸發(fā)ctypes的函數(shù)包裝檢查 return func, name raise AttributeError(fSDK中不存在可用函數(shù): {names}) def build_callback_type(): # 回調(diào): void handler(const char *text, int len, void *user_data) CB_TYPE ctypes.CFUNCTYPE(None, ctypes.c_char_p, ctypes.c_int, ctypes.c_void_p) return CB_TYPE def main(): if platform.architecture()[0] ! 64bit: print([WARN] 當(dāng)前Python不是64位如果SDK是64位會出現(xiàn)WinError 193) sdk load_sdk() # 通過工具函數(shù)查找SDK函數(shù) CB_TYPE build_callback_type() cb_func, cb_name get_func(sdk, WAKEUP_CB_NAMES, CB_TYPE) session_begin, begin_name get_func(sdk, SESSION_BEGIN_NAMES, ctypes.c_void_p) audio_write, write_name get_func(sdk, AUDIO_WRITE_NAMES, ctypes.c_int) session_end, end_name get_func(sdk, SESSION_END_NAMES, ctypes.c_int) # 聲明簽名 cb_func.argtypes [CB_TYPE] cb_func.restype ctypes.c_int session_begin.argtypes [ctypes.c_char_p, ctypes.c_char_p] session_begin.restype ctypes.c_void_p audio_write.argtypes [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_uint, ctypes.c_int] audio_write.restype ctypes.c_int session_end.argtypes [ctypes.c_void_p, ctypes.c_char_p] session_end.restype ctypes.c_int CB_TYPE def on_wakeup(text_bytes, length, user_data): try: word text_bytes.decode(utf-8, errorsignore) except Exception: word text_bytes wakeup_event_queue.put(word) ret cb_func(on_wakeup) if ret ! 0: raise RuntimeError(f注冊回調(diào)失敗, 錯誤碼: {ret}) params ( fappid{APPID.decode()}, fwork_dir{RESOURCE_DIR}, sstwakeup, ivw_threshold0:1450 ).encode(utf-8) session_id session_begin(None, params) if not session_id: raise RuntimeError(會話開啟失敗請檢查appid、資源路徑是否有效) print([INFO] 喚醒會話已開啟正在監(jiān)聽...) print([INFO] 按下 CtrlC 退出) p pyaudio.PyAudio() stream None try: stream p.open(formatFORMAT, channelsCHANNELS, rateRATE, inputTrue, frames_per_bufferCHUNK) except Exception as e: print(f[ERROR] 打開麥克風(fēng)失敗: {e}) session_end(session_id, b) return global running try: while running: audio_data stream.read(CHUNK, exception_on_overflowFalse) if not audio_data: time.sleep(0.01) continue ret audio_write(session_id, audio_data, len(audio_data), 0) if ret ! 0: print(f[WARN] 音頻寫入錯誤碼: {ret}) # 非阻塞處理喚醒事件 try: while True: word wakeup_event_queue.get_nowait() print(f[喚醒成功] {word}) # TODO: 在這里接后續(xù)業(yè)務(wù)動作 except queue.Empty: pass except KeyboardInterrupt: print(\n[INFO] 手動退出) finally: running False if stream is not None: stream.stop_stream() stream.close() p.terminate() session_end(session_id, b) print([INFO] 資源已釋放) if __name__ __main__: main()這個demo跑通之后你再往里加功能就很輕松了。比如喚醒成功后自動錄音5秒并調(diào)用識別接口或者喚醒成功后在終端播放一段歡迎音。只要記住喚醒回調(diào)里只做最快的事真正的業(yè)務(wù)放到主線程。4.2 后續(xù)擴展建議接語音識別、控制智能家居等喚醒只是語音交互鏈路的“第一公里”。真正實用起來你大概率要把它接入后續(xù)的識別、理解、執(zhí)行能力。我做過的幾種擴展方式供參考本地喚醒 云端識別喚醒成功后在設(shè)備端錄制一段音頻通過訊飛WebSocket或HTTP接口做一句話識別。這種模式比全時云端識別省電、省流量而且用戶體驗很自然——只有喊出喚醒詞后才會啟動“聆聽”狀態(tài)。喚醒詞多詞表訊飛喚醒SDK通常支持配置多條喚醒詞比如“你好小飛”“小飛小飛”兩個詞條對應(yīng)不同編號。在初始化參數(shù)里配置多個喚醒詞時回調(diào)返回的text會告訴你命中了哪一條可以針對不同喚醒詞做不同動作比如“小飛小飛”調(diào)起助手“關(guān)閉屏幕”直接進入休眠。和其他傳感器聯(lián)動如果把喚醒SDK放在樹莓派、Windows盒子這類設(shè)備上喚醒成功后的回調(diào)里還可以發(fā)MQTT消息給其他智能家居設(shè)備實現(xiàn)“語音控制整個房間”的效果。最后分享兩個我實際積累的小技巧第一個技巧是務(wù)必給SDK回調(diào)加上超時自愈。我在長時間運行喚醒程序時發(fā)現(xiàn)某些USB麥克風(fēng)偶爾會“卡死”導(dǎo)致音頻流不產(chǎn)生數(shù)據(jù)程序看起來還在跑實際上已經(jīng)完全聾了。后來我在音頻讀取循環(huán)里加了一個靜態(tài)計數(shù)如果連續(xù)3秒讀不出非空數(shù)據(jù)就自動重啟音頻流同時重新初始化一遍喚醒會話。這個自愈機制在最開始的聯(lián)調(diào)階段幫了我大忙否則半夜測試喚醒穩(wěn)定性時根本不敢跑整宿。第二個技巧是先跑音頻電平檢測再跑喚醒。每次換電腦、換麥克風(fēng)、重裝驅(qū)動之后不要直接上來就測喚醒率先用一個20行的小腳本讀一下麥克風(fēng)數(shù)據(jù)計算RMS能量并打印波形幅值。如果能量值一直為零或者異常偏低說明設(shè)備權(quán)限、驅(qū)動格式有問題的概率遠大于SDK調(diào)用的問題。把這一步當(dāng)成習(xí)慣之后幾乎不會再被“為什么喚醒不觸發(fā)”這種問題浪費大量時間了。語音喚醒這個東西理論上不復(fù)雜但Windows環(huán)境下的坑確實很雜——從DLL位數(shù)、編碼方式、系統(tǒng)權(quán)限到線程模型任何一個環(huán)節(jié)出錯都會讓整個鏈路靜默失敗。希望這篇記錄能幫你少走幾步彎路早點聽到那句自己設(shè)備的喚醒詞回應(yīng)。后面有時間我再寫一寫如何把這套喚醒能力封裝成Windows服務(wù)讓程序能在后臺常駐運行歡迎關(guān)注。注意由于項目開發(fā)環(huán)境和SDK版本差異某些接口名稱可能與你本地的版本不同如果發(fā)現(xiàn)函數(shù)名不一致請以官方頭文件或示例代碼為準(zhǔn)并把本文的代碼當(dāng)作一種結(jié)構(gòu)參考來使用。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
麻豆AV一区二区三区| 97人妻碰碰碰久久久久-最近国语高清| www.久久婷婷| 噜噜噜狠狠色综合| 天天日天天草| 色婷婷五月天堂资源| 久热伊人9| 免费看欧美成人A片无码| 激情综合色婷婷啪啪六月天| 五月婷婷在线视频免费观看| 久久总和99| 免费做A爰片77777| 五月天啪啪| 99惹精品视频| 六月丁香婷婷色综合| 999九九九久久久99HD| 婷婷伊人久久| 天天情色五月天| 色色激情| 欧州色色| 婷婷激情六月天视频| 色婷婷综合久久久久| 桃色五月婷婷| 九九99免费视频| 五月天成人手机在线视频| 九热视频在线精品15| 国产精品色情AAAAA片软件| 丁香五月人妻| 五月天天爱| 精品无码av丁香五月激情| 国产人人操| 爱射综合| 成人日韩欧美| 色综合久久久久| 五月天婷婷在线视频| 五月丁香直播| 青草久久五月婷伊人| 五月丁香六月婷婷啪啪| 欧美超级视频97| 久久婷综| 天天肏在线视频| 97干欧美| 色久女| 亚洲日比视频| 激情五月综合亚洲另类| 五月丁香六月婷| 久久久久婷| 亚洲综合狠狠艹| site:picc-up.com| 天天做天天爰天天爽天天无遮挡| ww亚洲ww在线观看| 怡红院99| 狠狠狠狠狠狠草| 天天做天天爱天天摸| 免费看成人747474九号视频在线观看| 久久久久久久久久久44| 在线五月婷| 九九热免费视频| 99久久久免费| 大香蕉综合在线| 激情丁香九九五月综合网| 五月丁香婷婷六月| 色一情一乱一乱一区91| 99免费热视频在线| 色综合99| 色一情一乱一伦一区二区三区| 91操网| 丁香综合婷婷五月天| 亚洲另类噜噜| 久久精品99久久久久久| 五月婷婷激情综合网| 97色永久免费视频| 综合激情五月天| 亭亭玉月丁香| 91狼友视频网页更新| 国产精女同一区二区三区久| 91人人超碰在线| 成人版视频在线观看| 日韩 中文 欧美| 97精品自拍| 九九综合精品| 天天色天天噜| 亚洲丁香婷婷丁香五月天激情| 日本丁香五月| 久久久婷婷婷| 色97啪啪| 天天天天天天天干| 亚洲bt丁香五月天婷婷激情小说| 激情 婷婷| 强伦轩人妻一区二区电影| 狠狠摸狠狠摸| 亚洲乱码精品久久久久..| 国产精品涩涩涩视频网站| 99精品在线| 精品夜夜澡人妻无码AV| 亚洲成人AV在线| 99久久97久久欧美综合网| 五月天色色网站| 婷婷狠狠操| 91操人| 亚洲va欧美va天堂v国产综合| 人人干av| 久草婷婷网| 五夜丁香| 大地资源色婷婷视频在线| 一本色道久久综合狠狠躁小说| 91超碰九色| 中文中文在线| 久久综合激情| 丁香久久综合| 99热在线只有精品| 曰本久久女| 欧美久久婷婷| 4438激情网| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 99色在线观看免费| 丁香五月在线播放| 激情5月婷婷| 9精品在线| 久久婷婷欧美| 亚洲无AV在线中文字幕| 久热99| 综合久久人妻| 色一色综合| 在线看片av| 五月天激情无码| 五月丁香婷婷啪啪| 婷婷五月天最新综合你懂的 | www.99视频| 色色色五月天激情资源| 五月综合六月婷婷| 婷婷色影音天| 五月天中文字幕在线婷婷| 热九九精品| 欧美婷婷综合网| 夜夜天天久久婷婷| 丁香五月影院| 久久综合热17c| 天天噜日日噜综合无码| 色婷婷免费视频| 有哪些A片网站| 日本欧美成人片AAAA| 婷婷五月色影视先锋| 丁香5月婷婷| 天天操综合网| 五月开心六月婷婷在线播放网站| 狠狠精品干练久久久无码中文字幕| 99九九99九九九视频精彩| 天天插天天插天天插天天插| 91视频久久久| 五月天天天天天天天天天天天婷婷婷| 九九99在线| 激情五月开心五月丁香五月| 日本人妻操| 色婷婷色婷婷五月| 五月天婷婷色色网| 色99在线| 99色热综合| 成人无码髙潮喷水A片| 天天拍夜夜撸 | 色婷婷影| 性爱综合网| 久久五月丁香| 亚洲电影在线观看| 天天干天天干天天干天天干天天干| 草草色情综合网| 色五月激情基地| 丁香五月成人| 91色情播放| 99啪视频在线观看| 天天久久狠狠色综合| 91色色色18| 久久六月天| 99九九99九九九视频精彩| 亚洲AV日韩无码| 婷婷精品在线| 影音先锋男人女人| 97色在线观看视频| 青青热久精品视频在线观看| 伊人色欲五月天| 少妇搡BBBB搡BBB搡毛茸茸| 深爱网深爱综合网| 黄色精品五月婷婷| 国产肥白大熟妇BBBB视频| www.操逼comm| 性欧美日本| 久久精彩视频| 久久99性爱视频| 色欲AVV| 九九人妻福利| 黄色国久久| 亚洲婷婷婷| 香蕉久操| 97碰人人操| 亚洲成人高清在线| 疯狂做受XXXX高潮A片| 性爱电影科技贸易有限公司| 久久一伦| 国产性爱亚洲是图| www,五月天激情| 婷婷五月激情综合啪啪| 久久婷婷五月综合| 色婷婷在线视频综合| 色婷小说| 成人在线精品| 六月丁香五月激情婷婷| 在线中文亚洲| 99热热热99精品婷婷| 婷婷丁香五月,狠狠综合| 97超级碰碰碰久久久| 五月天婷婷视频小说| 亚洲第一成人无码A片| 日本丁香五月| 久久成人人妻| 婷婷开心深爱五月天| 日产精品一线二线三线芒果 | 成人婷99最新| 91聚色综合网| 欧美人妻一区二区| 五月天激情社区| 99碰视频| 人妻久久久久久久久久| 成人av中文字幕| 99精品网| 婷婷情色五月天| 欧美激情五月天婷婷| 色婷婷播放| 91碰在线| 五月天色婷婷伊人网| 中文精品在| 97碰碰碰免费公开在线视频| 五月丁香婷婷基地| 九九热精品6| 久久综合五月天| 日韩在线观看网址| 欧美25p| WWW.桔色成人.COM| 久久综合99| 欧美一级a | 国产免费AV网站| 国产看真人毛片爱做A片| 99免费热视频| 襙比视频| 美妞av| 亚洲AV无码成人精品区电影网| 色婷婷在线视频| 国产午夜一区二区三区| 色噜噜五月丁香婷婷| 激情小说婷婷| 五月婷婷久久大香蕉| 五月伊人视频在线看| 啪啪东京热| 国产毛片欧美毛片久久久| 色五月丁香婷婷久草| 激情综合网婷婷久久| 超碰猛烈的性猛交| 激情婷婷五月综合| 7777国产盗摄农村女人| 人妻体体内射精一区二区| 99热e| 久久久精品色色色| 五月之婷婷| site:jszngf.com| 欧美日本国产欧美日本韩国99| www.婷婷久久五月天| 另类专区在线观看| 激情第四色| 99热天堂| 曰曰久久| 影音先锋一区| 婷婷五月丁香综合激情| 六月婷婷视频| 日本女人久久| 日韩成人精品中文字幕| 婷综合| 丁香狠狠操| 久久激丁香| 亚洲人妻AV| 超碰在线人人| 超碰人妻在线| 婷婷丁香成人| 五月天激情小说| www.婷婷.com| 婷婷五月激情丁香| 丁香五月天堂网| 婷婷五月六月| 五月丁香婷婷色| 天天综合网在线| 91婷婷| 九九九九国产| 色五月在线播放| 丁香婷婷九月| 久久综合婷婷| 五月天丁香| 1024日韩| 亚洲精品白浆高清久久久久久| 婷婷另类小说| 亚洲精品又粗又大又爽A片| 99色在线视频| 狠狠狠夜夜夜| 综合激情视频| 久久婷.com| 超碰91在线| 欧美人妻一区二区| 少妇真实被内射视频三四区| 9视频在线成人网站| 婷婷婷婷婷婷婷婷婷婷丁香| 天天操天天国产三级片处女学生妹| 江苏少妇性BBB搡BBB爽爽爽| 日韩中文字幕| 五月婷婷精品视频| 久久婷中文字幕| 99热超碰天堂网| 九九中文字幕九| 97超碰9久热婷婷热| 婷婷久久爱| 青吴乐视频| 狠狠五月天| 五月天激情小说网| 激情五月成年| WWW、日本色丁香、co m| 超碰在线资源| 91婷婷色五月| 激情丁香五月婷| 热99精品视频观看| 丁香五月婷婷香| 婷婷成人五月天| 、激情六月天| 亚洲久久婷婷| 色五月婷婷基地| 丁香五月手机在线| 亚洲超碰在线| 沈娜娜av| 另类A片| 99re99热| 丁香五月中文字幕久色| 六月婷婷久久| 99热都是精品| 五月色情精品| 99热综合在线| 99亚洲色色| 九九热在线视频| 91操碰| 久久久天堂国产精品女人| 天天色五月婷婷91久久久久久久| 99久久www| 国产免费一区二区在线A片视频| 色婷婷久久综合久色| 国产色五月婷婷| nvrentiantang av| 午夜性做爰电影| 亚洲精级| 丁香五月成人| 综合色五月| 国产色色网站网址| 激情欧美丁香五月| 综合色99| 99久操视频| 婷婷爱爱蜜臀天天操| 天天舔夜夜操www com| 亚洲中文乱字字幕线在永久| 翔田千里 50岁 无码| 精品国产乱码久久久久久免费| 亚洲久艹| 成人色情五月天婷婷丁香| 天天摸天天做天天爱天天爽| 六月天婷婷| 色色九区| 天天射天天射一道本日本社区 | 日欧一片内射VA在线影院| 婷婷99丁香| 都市激情蜜桃婷婷五月天| 色综合综合网| 日日干夜夜干| 91精品国产99久久久久久天美| 日韩六十路91性交电影| 97在线精品| 97成人丁香| 久久精彩免费视频精彩免费视频| 99久久五月婷婷| 五月婷婷在线网站| 99热啪啪| 激情亭亭五月| 播四月婷婷六月丁香| 香蕉AV福利精品导航| 97黑人精品区| 五月丁香六月婷婷操操操| 久久久中文| 97碰超级人人看| 99热这里只有在线| 蜜臀久久99精品久久久久久酒店| 久久只有精| 五月丁香六月婷婷色日| 一级七香蕉| 丁香五月成人论坛| 婷婷丁香人妻天天爽| 五月婷婷丁香大香蕉| 99在线爽| 激情婷婷五月| 激情婷婷五月亚洲| 91九色超碰| 五月婷婷亚洲| 99热最新| 夜夜爱网站| 丁香六月成人| 五月婷婷丁香色吧网| 成人无码髙潮喷水A片| 97久久人人| 狠狠爱婷婷丁香| 99性爱视频| 99九九中文字幕视频| 精品久热69| 大地资源色婷婷视频在线| 丁香五月天堂| 九九99精品| 天堂爱啪啪| 色五月激情网| 丁香玖玖| 日韩在线视频网站| 性爱网五月天| 日本丁香五月| 日本在线视频手机播放五月婷| 五月婷婷婷| 91久久99久久91熟女精品| 91精品无码| 伊人网碰碰| 综合99久久天天综合| 在线成人av播放| 丁香成人视频| 色九亚洲| 五月丁香av在线| 日本一毛片| 五月天婷婷丁香社区| 啪啪五月婷婷| 亚洲精品无人区| 婷婷色情小说| 婷婷激情综合无月| 五月总合激情网| 丁香激情五月| 色色色国产| 九九色色| 噜噜噜噜噜久| 色日本五月天| 婷婷玉月丁香五月在线视频| 婷婷丁香色女人| 色婷婷小说网| 色综合久久888| 亚洲色五月婷婷| 伊人久久大香蕉网| 狠狠色婷婷六月激情网| 五月色婷婷影视在线电影| A网在线欧洲| 亚洲日韩久久婷婷伊人| 久久久人妻门| 五夜丁香| 久久久com| 亚洲精| 精品一二三区久久AAA片| 色婷婷先锋| 青青草原爱爱网| 九九综合色综合| 91Chinese在线| 在线观看免费观看在线9久| www.ppypp| 五月色亚洲| 丁香六月啪| 婷婷五月天日逼| 婷婷亚洲在线| 熟女色专区| 免费亚洲婷婷| 日日夜夜狠狠| 91精品国产91久久久久青草| 91色呦哟| 久久久亚洲成人无码A片| 婷婷综合久久| 色五月欧美| 五月丁香六月婷婷网| 中文av网| 成人国产欧美大片一区| 亚洲精品V天堂中文字幕| 五月丁香婷婷色| 99热1| 人妻丰满精品一区二区A片| 天天橾夜夜爽| 伊人丁香六月婷婷| 欧美五月婷婷| 色综久久久| 丁香六月婷婷综合| 99ri国产在线| 丁香六月色婷婷| 五月天色色色| 天堂综合久久| 热日韩欧美| 99热精品无码| 婷婷久久综合| 战争与艾拉电影免费观看| 伊人干综合| 伊人天堂婷婷| 少妇大叫太大太粗太爽了A片 | 日本欧美成人片AAAA| 九九热这里只有精品6| 日韩欧美一区二区三区四区| 人人操 色| 亚洲中文字幕AV在线| 久久婷婷影院| 国产精品国产| 五月婷婷开心丁香| 五月永久激情| 99热精品中文字幕| 殴美综合激情五月天免费视频| 操逼福利视频| 欧美天堂久久| 精品导航在线x不卡| 天搞天天天天天| 天天久久人人| 久久五月天色| 九九在线视频| 开心五月婷婷综合在线精品素人| 丁香婷婷人妻| 六月婷伊人| 另类图片五月天| AA片在线观看视频在线播放| 色丁香五月| 婷婷丁香五月亚洲综合网在线视频观看| 91狠狠综合久久| 丁香五月欧美色综合| 丁香五月婷综合| 久9热在线免费观看| 成人久久天天x资源站| 五月天激情美女久久| 激情五月开心五月丁香五月| 操逼巨乳91| 综合五月婷婷| 九九热在线视频| 色约约视频一区二区三区四区五区 | 国产精品久久久久9999小说 | 五月丁香六月成人| 大香蕉久操| 色一情一乱一乱91Av| 婷婷六月丁香在线| 影音先锋四区| 丁香五月色色婷| 五月天激情在线视频| 久久五月婷天天干| 国产 码在线成人网站| 99九九在线视频| www.com操| 伊人婷婷五月天| 老师把我爽高潮了免费A片| 2025最新亚洲激情在线| 婷婷伊人网| 国产精品日日躁夜夜躁| 久久国产色| 国产AV一区二区三区日韩| 色色色欧美| 99久久精品国产色欲| 91麻豆国产三级精品福利在线观看| 天天做天天爱天天爽夜夜揉| 91偷拍视频| 99热碰碰| 99热精品免费在线观看| 97成人丁香| 色婷五月天网站| 大香蕉综合在线| 色五月激情综合网| 欧美影院婷婷| 久操人妻| 九九热在线精品视频| 成人片在线播放| 婷婷午夜激情| 久久婷.com| 久久激情天堂| 五月婷婷激情综合| 五月开心激情| 成人婷婷色五月天| 国产又爽又猛又粗的视频A片| 天天免费成年人视频| 九九干视频| 97超级碰碰碰久久久| 五月丁香婷婷激情澎湃四射| 人人干99| 中美日韩成人在线| 久99视频| 思思热思在线精品视频| 秋霞免费视频| 天天天天爽爽天干| 99色色网| 思思w99| 99热香港| 久热免费| 色婷婷WWW| 91色婷婷综合久久中文字幕二区| 天天爽曰日爽| 国产乱子轮XXX农村| 九九热99精品| 日本久草福利| 91丨九色丨熟女高潮| 一区二区三区四区五区| 玖玖综合色区在线观看| 亚洲乱码w在线观看| 99re66热这里只有精品| 无码少妇高潮喷水A片免费| 色婷婷丁香香香蕉视频| 99re在线观看| 久久色六月| 婷婷五月天电影网| 中文字幕在线日亚州9| 亚洲国产精品二二三三区| 九九热视| 99久久99视频只有精品| 99热官网精品在线| 五月激情六月丁香| 天天天天天天天干| 久久婷婷五| 久久六月天| 亚洲精| 超碰国产av| 色五月大香蕉| 六月婷婷视频| 九九久久99| 日韩人妻在线观看| 婷婷久久欧美| 激情五月综合| 久热超碰91| 亚洲综合网激情小说| 五月天久久网站| 第四色在线观看| 色五月丁香婷婷| 人色五月天婷婷| 超碰色女| 久热精品免费视频4| 26UUU欧美| 激情五月天www| 婷婷九月色| 超碰v| 九热免费视频| 亚洲精品永久久久久久| 婷婷六月婷婷| 婷婷五月天最新综合你懂的| 丁香六月| 婷久久久| 99re欧美精品| 99这里都是精品| 99久久玖玖| 五月丁香六月婷婷开心网| 思思99热这里只有精品| 丁香婷婷综合激情五月色| 天天干天天av天天射| 五月天另类激情在线| 91要啪| 五月婷六月天| 九九九日本熟女| 日本高清不卡免费一区二区三区| 农村熟妇高潮精品A片| 91人操人人人操人| 色五月在线观看| 天天日,夜夜爽| 丁香五月婷婷深爱综合激情| 99色婷婷视频| 站长推荐无码播放| 99久久精品亚洲综合| 色和综合网| 婷婷五月在线视频| 91热爆在线| 在线中文字幕av| 五月婷婷丁香俺日污视频| 丁香五月人妻熟女| 天天综合色综合| 天天色综合色色色色色。| 97久久久久| 五月丁香激情综合| 亚洲国产成人在线| 黄色aaaaa| 婷婷五月综合在线| 亚洲色色在线| 久久久er热| 玖玖五月丁香| 97碰在线视频| 精品久热| 5月色婷婷| 综合久久婷婷五月丁香| 丁香五月婷婷婷婷欧美综合| 国产日产成人亚洲欧美国产VA| 狠狠色婷婷7777久| 国庆精品久久| 婷婷五月天激情偷拍| 另类天堂| 久色视频在线| 六月丁香激情婷婷| 色五XX| 99视频激情四射| 99ri精品在线| 婷婷亚洲天堂| 色人久久| 五月婷婷久久爱| 9久热在线精品| 亚洲无码黄色| 香蕉婷婷| 六月丁香婷婷天堂| 天天爱综合网| 人人舔人人| 色色欧美色色| 九月av| 99色天堂| 在线不卡AC| 噜噜操操| 五月婷婷内射网| 色五月婷激情| 丝袜激情网| 九九热在线视频观看| 开心激情站| 人妻在线观看视频| av在线观看免费| 天天摸,天天爽| 五月婷婷丁香瑟瑟视频| 丁香五月婷婷激情网| 成人精品视频99在线观看免费| 婷婷99综合| 99re热在线视频观看| 思思热天天看| 热99热9| 久草性爱| 国产成人精品一区二区三区视频| 亚洲综合五月天婷婷| 久久丁香婷婷五月| 最新激情五月天| 婷婷五月天六月丁香| 大香蕉520| wwww.9免费视频| 97碰在线视频| 激情五月天色婷婷| AA丁香综合激情| 强奸幻女毛片| 99热青青草原| 9色在线| www.99热| 99激情网| 五月丁香欧美综合| 青草视频在线播放| 在线观看免费狠狠色丁香香综合 | 久久久精品99亚洲综合| 婷婷 色 丁香 夜| 91久久久久久久| 亚洲无aV在线中文字幕| 丁香五月色播中文在线播放| 五月婷婷影院| 另类丁香五月天区图| 99精品久久| 五月天色不卡| 大大香蕉综合在线| 婷婷五月天在线观看av| 五月婷婷色影院| 亚洲黄色操逼| 久久综合天天综合| 热九九精品| 色久女| 日本操B视频| 97精品人人A片免费看| 99操久久| 深爱婷婷基地| 在线观看的av| 婷婷综合玖玖五月| 天天干天天日天天插| 99日本精品视频热| 色玖玖综合网| 五月丁香在线| 91超级碰在线| 天天色亚洲| 日碰日| 无码人妻一区二区三区四区| 久久五月婷| 婷婷久久五月| 99这里只有| 日本色天堂| 九九色大香蕉| 黄色一极大片| 99视频九九热| 99WWW免费视频| 天天日天天插| 亚州综合色| 日韩AAAAAAAAAAA片| 日本性视频| 五月丁香六月婷婷综合网站| 色婷婷狠狠禁久久| 天天综合中文| 男人視頻站| 天天日天天摸| 狠狠色噜噜狠狠| www.日韩国产| 91操片| 99免费| 一起草无码| 婷婷午夜激情| 九九激情网| 91黄操| 婷婷精品在线| 伊人91| 国产亚洲在线| 国产国产乱老熟女视频网站97| 丁香六月AV| 极品少妇高潮啪啪AV无码| 五月丁香久久综合| 97碰碰九九视频| 深爱激情69热| 国产97色在线 | 日韩| 亚洲综合在线播放| 人妻久久久久| 色五月综合| 5月丁香六月婷婷| 青青999| 色五月激情婷婷| 丁香五月综合激情久久潮喷| 亚洲爆乳无码精品AAA片蜜桃| 色。 日日日| 操操熟女| 日本欧美在线| 婷婷五月天熟妇| 色九月丁香婷婷蜜桃在线观看| 九九这里精品| 国产精品A成V人在线播放| 99丁香五月婷| 婷婷五月天av小说| 综合久久97| 久久五月六月| 国产精品 的国产| 最新久久网址| 99精品7| 六月婷婷日| 天天狠天天叉| 色小说五月婷婷| 国产色网站| 操一区| 开心激情综合| 啪啪婷婷五月天激情| 色欲色香综合网站| 亚洲精品色| 激情丁香图片| 色色色色热热| 婷婷中文字暮| 极品少妇XXXX精品少妇偷拍| 夜夜爱网站| 立川无码av| 久久婷婷六月综合综合| 五月天成人综合| 女人天堂 AV| 九九视频网| 很很色丁香久久停停| 亚洲精品一区中文字幕乱码| 五月天com| 色色免费网站| 久久91久久精品久久| 五月花激情| www天天爽| 久久丁香婷婷五月天| 丁香五月婷婷久久久| 五月综合激情| 天天天操天天天日| 天天在线久久综合 | 丁香婷婷超碰 | 97影院一级片| 亚洲五月花| 狠狠色官网| 99熟女视频| 特黄三级又爽又粗又大| 9久热精品在线视频| 国产免费AV网站| 六月丁香五月天| 婷婷另类开心| 狠狠色丁香婷婷五月| 色狠狠色噜噜AV天堂五区| 亚洲午夜av| 久久婷婷五月免费视频| 天天摸日日舔狠狠添婷婷婷| 99精品久久| 成人短视频在线| 亚洲免费电影2| 亚州成人综合在线| 狠狠CAO日日穞夜夜穞AV | 99热99艹在线观看| 99热6精品| 操99| 国产精品爽爽久久久久久| 亚洲激情综合免费| 99热这里只有精品最新地址获取| 国产成人VA| 五月婷婷六月丁香综合视频在线| 国产精品社区| 精品久热69| 久久久人人操A V| 国产色色小草视频| 99天堂在线观看免费视频| 国产日韩精品SUV| 99热只有这里有精品| www.五月天| 六月婷婷激情| WWW.婷婷| 极品少妇XXXX精品少妇偷拍| 五月丁香色综合| 99热久| 午夜大香蕉| 色婷婷免费视频| 婷婷五月色播| 成人综合AV| 五月丁香六月婷婷成人电影| 色色色热| 成人网站免费在线播放| 亚洲综合在线播放| 午夜成人AV在线| 亚洲精品视频在线| 99热精品在线观看| 五月婷婷黄色| 日本99热| 99亚洲视频| 国产真人做爰视频免费| 98国产精品综合一区二区三区 | 六月婷婷操逼| 色九月综合网| 狼人婷婷久久| 5月色婷婷| 午夜青草资源| 思思热在线免费视频| 丁香 婷婷 亚洲 熟女| 亚洲五月婷婷| 92久久| 亚洲中文乱字字幕在线永久| 99婷婷| www狠狠爱com| 色吧婷婷| 99久久66| 激情五月天无人视频在线| 丁香婷婷激情五月天无毒不卡蜜桃| 9九色首页| 大香蕉520| 专区无日本视频高清8| 久久人人添人人爽添人人片αV | 色婷婷色人人射| 九九精品免费| 依人大香蕉| 成人精品视频99在线观看免费| 久久大大香| 97影院一级片| 狠狠艹狠狠艹| 亚洲 五月 婷婷 成人| 超碰色综合| 国产精品色色| 日日操夜夜操中国无码| 人妻中文在线| 色噜噜在线| 99ri在线| 玩熟女五十AV一二三区| 五月天综合激情网| 婷婷五月 丁香六月| 丁香五月综合亚洲| 久久 婷婷 五月天| 欧美成人一区二区三区在线视频| 九月婷婷色色| 五月激情婷婷色| 五月天久久综合| 99在线观看精品| 午夜无码熟熟妇丰满人妻| 男人的天堂97| 五月丁香999| 青青草tp| 免费看欧美成人A片无码 | 日本啪啪视频HD| 丁香九月婷| 五月伊人综合| 超碰人人干| 亚洲五月六月婷婷| 超碰在线免费观看3 9| www.色婷婷| 色丁香五月天婷婷| 99re在线播放| 综合激情在线| 99热99这里只有精品| 99在线免费观看| 欧美WW在线网| 五月综合六月丁| 在线播放中文字幕| 五月天丁香综合在线| 久久久久99精品成人片| 亚洲人妻AV| 色情婷婷。| 99久久精品视频女神1| 久久色五月| 综合99在线| 亚洲九九九九| 激情小说五月天| 狼友视频在线观看18| 五月天亚洲综合网| 99精品综合在线| 婷婷久久视频| 日本色五月| 丁香蜜臀黄色婷婷五月天| 久久九九色| 色站9/| 日韩AV色色色| 玖玖色综合色| 99热国内| 天天综合精品| 婷婷久久欧美| www.久久| 99热久| 六月份天丁香婷婷| 婷五月天| 久久五月天婷婷| 综合久久五月| 六月丁香五月激情婷婷| 青草青草视频2免费观看| 久久网站观看免费欧洲国产| 97人人草| www.婷婷网| 久久国产高清| 毛片九九九九九九九九18| 夜夜天天久久婷婷| 538在线精品| 五月丁香婷婷无码中文| 五月丁香啪啪| 婷婷丁香社区网| 色播五月| 亚洲综合网激情小说| 婷婷久久五月| 欧美黑人巨大猛烈cuckold| 亚洲网视屏| 人妻性爱av网站| 激情网五月天| 日韩五月天婷婷| 中文字幕无码人妻少妇免费视频 | 综合99视频| 性爱网五月天| 东京热免费视频| 日韩三级片一区二区| 夫妇交换刺激做爰| 婷婷五月免费在线| 婷婷视频在线| 美女五月天| 免费啪啪亚州视频| 久久人妻视频| 亚洲成人AV在线播放| 91热爆在线| 亚洲激情无码久久| 91 影音先锋| 那里有AV网址| 婷婷丁香社区| 亚洲综合激情五月| 99日本在线| 91九色欧美| 五月丁香六月婷| 色色无码| 久热视频这里只有精品| 色婷婷88| 在线只有精品| 99热99热不卡| 成人在线网| 国产肥白大熟妇BBBB视频| 视色综合| 丁香五月综合| 香蕉久久国产AV一区二区| 思思热高清在线观看| 久久久久网站| 久久久国产精品黄毛片| 久久婷婷五月| 婷婷五月丁香五月| 激情人妻蜜夜系列区| 国产美女视频久| 五月婷婷免费在线| 日本英国美国欧美亚洲国产精亚洲日韩精品在线观看 | www激情| 性爱视频久久| www激情婷婷com| 噜噜色五月| 五月天大香蕉婷| 色爱亚洲| 这里只有精品在线视频在线观看| 久久激情综合| 成人做爰高潮A片免费视频| 97色色视频| 少妇日麻屄| 狠狠综合色网| 国产做爰视频免费播放| 色婷婷先锋| 婷婷亚洲丁香五月| 99久.| 天天射色五月天| 天天操天天插| 97九色视频| 色丁香久久久| 日本一级一级一级一级| 丁香五月婷婷高清| 久婷婷婷| 亚洲aV写真天天综合网久久| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 丁香五月激情综合久久| 丁香六月婷婷色XXXXX| 丁香五月婷婷视频| 日本欧美国产| www.91AV.com| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 久99| 综合色五月天| 天天操五月天| 狠狠五月婷婷| 丁香五月激情综合| 9久久久久久久久久久| 婷婷丁香五月综合网上| 就要去操亚洲成人精品五月天丁香婷婷| 日韩av高清| 五月婷婷色色爱| 国产一级片| 五月天激情无码专区| 中文久久久人妻| 久久五月天大美女| 五月天婷婷香蕉狠狠超碰综合| 亚洲天堂玖玖| 嫩草极品| 大香蕉av在线| 中文字幕黄色片| av色色国产| 日韩久久色| 五月天婷婷基地| 五月婷亚洲精品| 色综合日日| Www.婷婷五月| 色婷婷综合五月| 久久99热只有精品| 思恩热国产视频右线观看| 五月丁香婷婷啪啪| 丁香五月六月综合激情| 综合玖玖偷拍| 九色无码| 免费成人网在线观看| 99精品偷拍视频| 97婷婷丁香五月天激情图片| 丁香深五月婷婷| 欧在线一区| 丁香五月九九| 激情超碰网| 性无码专区无码| 嫩草AV久久伊人妇女超级A| 久久亚洲婷婷| 亚洲V国产V欧美V久久久久久| 99热这里是精品| 五月天大香蕉| 日本天天色| 国产毛片欧美毛片久久久| 色欲一二三| 久久人妻精品| 九九综合| 五月天操逼网| 99亚州综合精品成人网| 色色婷婷五月天| 丁香五月激情网| 久久综合婷婷五月| www999日韩精品| 日本久热| 99啪啪| 热久久999| 91人久| 人妻中文av| 91丨九色丨高潮丰满日本| 新激情综合| 噜噜网免费视频| 色色五月天丁香婷婷| 中文字幕激情综合| 日日综合网| 噼里啪啦完整版中文在线观看| 精品夜夜澡人妻无码AV| 影音先锋91网站在线观看| 婷婷婷五月香蕉| 亚洲愉拍99热成人精品| 成人噜噜网| av在线色五月丁香婷区久| 天天插天天爽| 欧美精品999| 亚洲精品V天堂中文字幕| 婷婷伊人欧美| 日韩视频女神99| 久久永久网址| 婷婷五月天美女视频| 婷婷五月综合久久中文字幕| 99热精品中文字幕| 欧美电影在线播放| 亚洲av成人在线| 国产亚洲99久久精品| www久久久久久久久久久| 男人視頻站| 玖玖精品婷婷| 久热这里只有精品性色AV| 五月婷婷自拍| 九热视频| 婷婷色五月偷拍| AV色色天堂中文| 色欲五月婷婷| aaaaaa片| 五月精品| 日韩AV免费电影在线播放| 2018国产大陆天天弄| 97久久精品视频| 色婷婷五月天激情| 九九久热| 婷婷五月天久久| 碰超在线九色| 日日夜夜狠狠婷婷色| 26uuu亚洲| 激情综合色| 亚洲色色五月天| 五月天夜夜爱夜夜操| 在线网黄| av一区免费看| 成人久久天天x资源站| 欧美久久网| 国产精品18久久久| 97碰啪啪| 丁香五月天AV| 色婷久久| www99久久| 久久人妻视步| 性av| 色婷婷久久综合久色综| 婷婷五月伦理| 欧美肉大捧一进一出免费视频| 婷婷午夜综合| 色五月婷婷五月丁香五月| 免费黄色视频网址| 97人人做| 天天天天天久久久久久| 天天日日夜夜| 超碰成人免费| 色婷婷综合亚洲| jiujiuxiangjiaowang| 五月天成人在线精品| 999热在线视频| 日本在线99| 久久欧洲综合网| 99超超碰| 婷婷丁香六月激情综合| 色婷婷六月天| www久久久久| 日日夜夜狠狠操| 日韩不卡123| 狠狠擼综合| 成人做爰高潮A片免费视频| 丁香五月天导航| 五月丁香激情综合啪啪| 丁香深五月婷婷| 色综合综合色| 玖玖色综合色| 99热日本| 婷婷五月天丁香| 97超碰99热99| 99日韩网站| 久热A片| 另类图片 五月激情| 99精品偷自拍| 六月丁香婷婷天堂| 成人做爰A片免费看网站找不到了 国产露脸150部国语对白 | 色综合久久综合| 日韩狠狠色婷婷| 男妓跪趴把舌头伸进我的嘴巴| 婷婷五月在线综合| 五月丁香六月激情在线| 激情六月丁香| 婷婷综合在线| Av狠狠色丁香婷| 图片区 小说区 区 亚洲五月 | 久热91|