久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2538|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

PCM數(shù)據(jù)以WAVE格式存到SD卡,程序源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:254724 發(fā)表于 2020-5-28 10:34 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
電話錄音采用什么文件格式?
小靈呼電話錄音系統(tǒng)LV包括呼叫中心系統(tǒng)的錄音功能均采用WAV格式作為文件存儲(chǔ),其實(shí)WAV格式也分2、4倍壓縮率及線性無壓縮之分,參見電話錄音壓縮率說明,我們可以看到a率、u率、adpcm、8位pcm,16位pcm均可采用WAV格式存儲(chǔ),可見采用WAV格式存儲(chǔ)并不一定很占空間,它還是可以采用壓縮格式的。
電話錄音采用WAV有什么好處?
WAV是Windows世界里最通用最流行的語音壓縮存儲(chǔ)格式,采用此格式存放錄音文件,可以被大多數(shù)播放軟件播放,而不局限于通過小靈呼軟件界面播放。
WAV文件格式介紹
文件是Windows標(biāo)準(zhǔn)的文件格式,WAV文件作為多媒體中使用的聲波文件格式之一,它是以RIFF格式為標(biāo)準(zhǔn)的。RIFF是英文Resource Interchange FileFormat的縮寫,每個(gè)WAV文件的頭四個(gè)字節(jié)便是“RIFF”。WAV文件由文件頭和數(shù)據(jù)體兩大部分組成。其中文件頭又分為RIFF/WAV文件標(biāo)識(shí)段和聲音數(shù)據(jù)格式說明段兩部分。WAV文件各部分內(nèi)容及格式見附表。常見的聲音文件主要有兩種,分別對應(yīng)于單聲道(11.025KHz采樣率、8Bit的采樣值)和雙聲道(44.1KHz采樣率、16Bit的采樣值)。采樣率是指:聲音信號在“模→數(shù)”轉(zhuǎn)換過程中單位時(shí)間內(nèi)采樣的次數(shù)。采樣值是指每一次采樣周期內(nèi)聲音模擬信號的積分值。對于單聲道聲音文件,采樣數(shù)據(jù)為八位的短整數(shù)(short int 00H-FFH); 而對于雙聲道立體聲聲音文件,每次采樣數(shù)據(jù)為一個(gè)16位的整數(shù)(int),高八位和低八位分別代表左右兩個(gè)聲道。WAV文件數(shù)據(jù)塊包含以脈沖編碼調(diào)制(PCM)格式表示的樣本。WAV文件是由樣本組織而成的。在單聲道WAV文件中,聲道0代表左聲道,聲道1代表右聲道。在多聲道WAV文件中,樣本是交替出現(xiàn)的。
WAV文件格式說明表
文件頭
偏移地址
字節(jié)數(shù)
數(shù)據(jù)類型
內(nèi) 容
00
H
4
char
"RIFF"標(biāo)志
04
H
4
long
int 文件長度
08
H
4
char
"WAV"標(biāo)志
0C
H
4
char
"fmt"標(biāo)志
10
H
4


過渡字節(jié)(不定)
14
H
2
int
格式類別(10HPCM形式的聲音數(shù)據(jù))
16
H
2
int
單聲道為1,雙聲道為2通道數(shù)
18
H
2
int
采樣率(每秒樣本數(shù)),表示每個(gè)通道的播放速度
1C
H
4
long
波形音頻數(shù)據(jù)傳送速率,其值為通道數(shù)×每秒數(shù)據(jù)位數(shù)×每樣 本的數(shù)據(jù)位數(shù)/8。播放軟件利用此值可以估計(jì)緩沖區(qū)的大小
22
H
2


每樣本的數(shù)據(jù)位數(shù),表示每個(gè)聲道中各個(gè)樣本的數(shù)據(jù)位數(shù)。如果有多 個(gè)聲道,對每個(gè)聲道而言,樣本大小都一樣。 24H 4 char 數(shù)據(jù)標(biāo)記符"data28H 4 long int 語音數(shù)據(jù)的長度
PCM數(shù)據(jù)的存放方式:
樣本1  樣本2
8位單聲道 0聲道 0聲道
8位立體聲 0聲道(左) 1聲道(右) 0聲道(左) 1聲道(右)
16位單聲道 0聲道低字節(jié) 0聲道高字節(jié) 0聲道低字節(jié) 0聲道高字節(jié)
16位立體聲 0聲道(左)低字節(jié) 0聲道(左)高字節(jié) 1聲道(右)低字節(jié) 1聲道(右)高字節(jié)
PCM數(shù)據(jù)的存放方式:
WAV文件的每個(gè)樣本值包含在一個(gè)整數(shù)i中,i的長度為容納指定樣本長度所需 的最小字節(jié)數(shù)。首先存儲(chǔ)低有效字節(jié),表示樣本幅度的位放在i的高有效位上, 剩下的位置為0,這樣8位和16位的PCM波形樣本的數(shù)據(jù)格式如下所示。
樣本大小
數(shù)據(jù)格式
最大值
最小值
8PCM
unsigned int
225
0
16PCM
int
327
67
多媒體技術(shù)近年來發(fā)展很快,較好品質(zhì)的聲卡可以提供16位的立體聲及44KHZ的播放錄制能力,它不僅可以提供原音逼真的取樣,其合成的音質(zhì)也十分理想,有的聲卡還加入了數(shù)字信號處理器,可編程控制的DSP具有強(qiáng)大的運(yùn)算能力,它可以用來作聲音信息的壓縮和一些特殊效果的處理。具有此功能的聲卡提供的WAV文件提供的語音信息可以滿足語音特征識(shí)別的要求。
RIFF概念
在Windows環(huán)境下,大部分的多媒體文件都依循著一種結(jié)構(gòu)來存放信息,這種結(jié)構(gòu)稱為"資源互換文件格式"(Resources lnterchange File Format),簡稱RIFF。例如聲音的WAV文件、視頻的AV1文件等等均是由此結(jié)構(gòu)衍生出來的。RIFF可以看做是一種樹狀結(jié)構(gòu),其基本構(gòu)成單位為chunk,猶如樹狀結(jié)構(gòu)中的節(jié)點(diǎn),每個(gè)chunk由"辨別碼"、"數(shù)據(jù)大小"及"數(shù)據(jù)"所組成。
塊的標(biāo)志符(4BYTES)
數(shù)據(jù)大小 (4BYTES)
數(shù)據(jù)
                               圖一、 塊的結(jié)構(gòu)示意圖
辨別碼由4個(gè)ASCII碼所構(gòu)成,數(shù)據(jù)大小則標(biāo)示出緊跟其后數(shù)據(jù)的長度(單位為Byte),而數(shù)據(jù)大小本身也用掉4個(gè)Byte,所以事實(shí)上一個(gè)chunk的長度為數(shù)據(jù)大小加8。一般而言,chunk本身并不允許內(nèi)部再包含chunk,但有兩種例外,分別為以"RIFF"及"L1ST"為辨別碼的chunk。而針對此兩種chunk,RIFF又從原先的"數(shù)據(jù)"中切出4個(gè)Byte。 此4個(gè)Byte稱為"格式辨別碼",然而RIFF又規(guī)定文件中僅能有一個(gè)以"RIFF"為辨別碼的chunk。
RIFF/LIST標(biāo)志符
數(shù)據(jù)1大小
數(shù)據(jù)1
格式/列表類型
數(shù)據(jù)
                               圖二、RIFF/LIST塊結(jié)構(gòu)
只要依循此一結(jié)構(gòu)的文件,我們均稱之為RIFF檔。此種結(jié)構(gòu)提供了一種系統(tǒng)化的分類。如果和MS一DOS文件系統(tǒng)作比較,"RIFF"chunk就好比是一臺(tái)硬盤的根目錄,其格式辨別碼便是此硬盤的邏輯代碼(C:或D:),而"L1ST"chunk即為其下的子目錄,其他的chunk則為一般的文件。至于在RIFF文件的處理方面,微軟提供了相關(guān)的函數(shù)。視窗下的各種多媒體文件格式就如同在磁盤機(jī)下規(guī)定僅能放怎樣的目錄,而在該目錄下僅能放何種數(shù)據(jù)。
WAV文件格式
WAVE文件是非常簡單的一種RIFF文件,它的格式類型為"WAVE"。RIFF塊包含兩個(gè)子塊,這兩個(gè)子塊的ID分別是"fmt"和"data",其中"fmt"子塊由結(jié)構(gòu)PCMWAVEFORMAT所組成,其子塊的大小就是sizeofof(PCMWAVEFORMAT),數(shù)據(jù)組成就是PCMWAVEFORMAT結(jié)構(gòu)中的數(shù)據(jù)。
標(biāo)志符(RIFF)
數(shù)據(jù)大小
格式類型("WAVE")
"fmt"
Sizeof(PCMWAVEFORMAT)
PCMWAVEFORMAT
"data"
聲音數(shù)據(jù)大小
聲音數(shù)據(jù)
                                                      圖三、WAVE文件結(jié)構(gòu)
PCMWAVEFORMAT結(jié)構(gòu)定義如下:
Typedef struct
{
     WAVEFORMAT wf;        /波形格式;
     WORD wBitsPerSample;    //WAVE文件的采樣大小;
} PCMWAVEFORMAT;

//WAVEFORMAT結(jié)構(gòu)定義如下:
typedef struct
{
     WORD wFormatag;        //編碼格式,包括WAVE_FORMAT_PCM,WAVEFORMAT_ADPCM等
     WORD nChannls;        //聲道數(shù),單聲道為1,雙聲道為2;
     DWORD nSamplesPerSec;    //采樣頻率;
     DWORD nAvgBytesperSec;    //每秒的數(shù)據(jù)量;
      WORD nBlockAlign;        //塊對齊;
} WAVEFORMAT;
"data"子塊包含WAVE文件的數(shù)字化波形聲音數(shù)據(jù),其存放格式依賴于"fmt"子塊中wFormatTag成員指定的格式種類,在多聲道WAVE文件中,樣本是交替出現(xiàn)的。如16bit的單聲道WAVE文件和雙聲道WAVE文件的數(shù)據(jù)采樣格式分別如圖四所示:
16位單聲道:
采樣一
采樣二
……
低字節(jié)
高字節(jié)
低字節(jié)
高字節(jié)
……





16位雙聲道:
采樣一
……
左聲道
右聲道
……
低字節(jié)
高字節(jié)
低字節(jié)
高字節(jié)
……





                             圖四、WAVE文件數(shù)據(jù)采樣格式
WAV文件格式實(shí)例分析:


0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
00000000H
00000010H
00000020H
00000030H
00000040H
52  49  46  46  0A 06 01 00 57 41 56 45 66 6D 74 20
12 00 00 00 01 00 02 00 44 AC 00 00 10 B1 02 00
04 00 10 00 00 00 66 61 63 74 04 00 00 00 76 41
00 00 64 61 74 61 D8 05 01 00 00 00 00 00 FF FF
00 00 FE FF FE FF  00 00 00 00 FE FF FE FF 00 00


偏移地址
字節(jié)數(shù)
數(shù)據(jù)類型
內(nèi)容






文件頭
00H
4
char
“RIFF”;   RIFF標(biāo)志
04H
4
long int
0x00 01 06 0A(注意數(shù)據(jù)存儲(chǔ)順序);   文件長度
08H
4
char
“WAVE”;   WAVE標(biāo)志
0CH
4
char
“fmt ”;   fmt標(biāo)志,最后一位為空
10H
4
long int
0x12;   sizeof(PCMWAVEFORMAT)
14H
2
int
1(WAVE_FORMAT_PCM); 格式類別,1表示為PCM形式的聲音數(shù)據(jù)
16H
2
int
2; 通道數(shù),單聲道為1,雙聲道為2
18H
2
int
44100; 采樣頻率(每秒樣本數(shù))
1CH
4
long int
0x10B10000;   每秒數(shù)據(jù)量;其值為通道數(shù)×每秒數(shù)據(jù)位數(shù)×每樣本的數(shù)據(jù)位數(shù)/8。播放軟件利用此值可以估計(jì)緩沖區(qū)的大小。
20H
2
int
數(shù)據(jù)塊的調(diào)整數(shù)(按字節(jié)算的),其值為通道數(shù)×每樣本的數(shù)據(jù)位值/8。播放軟件需要一次處理多個(gè)該值大小的字節(jié)數(shù)據(jù),以便將其值用于緩沖區(qū)的調(diào)整。
22H
2


每樣本的數(shù)據(jù)位數(shù),表示每個(gè)聲道中各個(gè)樣本的數(shù)據(jù)位數(shù)。如果有多個(gè)聲道,對每個(gè)聲道而言,樣本大小都一樣。
50H
4
char
“data”;   數(shù)據(jù)標(biāo)記符
54H
4
long int
0x00 01 05 D8;   語音數(shù)據(jù)大小
在Windows環(huán)境下,大部分的多媒體文件都依循著一種結(jié)構(gòu)來存放信息,這種結(jié)構(gòu)稱為"資源互換文件格式"(Resources lnterchange File Format),簡稱RIFF。例如聲音的WAV文件、視頻的AVI文件等等均是由此結(jié)構(gòu)衍生出來的。RIFF可以看做是一種樹狀結(jié)構(gòu),其基本構(gòu)成單位為chunk,猶如樹狀結(jié)構(gòu)中的節(jié)點(diǎn),每個(gè)chunk由"辨別碼"、"數(shù)據(jù)大小"及"數(shù)據(jù)"所組成。
  辨別碼由4個(gè)ASCII碼所構(gòu)成,數(shù)據(jù)大小則標(biāo)示出緊跟其后數(shù)據(jù)的長度(單位為Byte),而數(shù)據(jù)大小本身也用掉4個(gè)Byte,所以事實(shí)上一個(gè)chunk的長度為數(shù)據(jù)大小加8。一般而言,chunk本身并不允許內(nèi)部再包含chunk,但有兩種例外,分別為以"RIFF"及"LIST"為辨別碼的chunk。而針對此兩種chunk,RIFF又從原先的"數(shù)據(jù)"中切出4個(gè)Byte。 此4個(gè)Byte稱為"格式辨別碼",然而RIFF又規(guī)定文件中僅能有一個(gè)以"RIFF"為辨別碼的chunk。
  只要依循此一結(jié)構(gòu)的文件,我們均稱之為RIFF檔。此種結(jié)構(gòu)提供了一種系統(tǒng)化的分類。如果和MS一DOS文件系統(tǒng)作比較,"RIFF"chunk就好比是一臺(tái)硬盤的根目錄,其格式辨別碼便是此硬盤的邏輯代碼(C:或D:),而"LIST"chunk即為其下的子目錄,其他的chunk則為一般的文件。至于在RIFF文件的處理方面,微軟提供了相關(guān)的函數(shù)。視窗下的各種多媒體文件格式就如同在磁盤機(jī)下規(guī)定僅能放怎樣的目錄,而在該目錄下僅能放何種數(shù)據(jù)。
  WAV為WAVEFORM(波形)的縮寫。在聲音文件的結(jié)構(gòu)中,"RIFF"的格式辨別碼為"WAVE"。整個(gè)文件由兩個(gè)chunk所組成:辨別碼"fmt "(注意,后面有一個(gè)空格)及"data"。
  在"fmt "的chunk下包含了一個(gè)PCMWAVEFORMAT數(shù)據(jù)結(jié)構(gòu),其定義如下:
  typedef struct pcmwaveformat - tag {
  WAVEFORMAT wf ;
  WORD wBitsPerSample;
  } PCMWAVEFORMAT;
  typedef struct waveformat - tag {
  WORD wFormatTag ;
  WORD nChannels;
  DWORD nSamplesPerSec;
  DWORD nAvgBytesperSec;
  WORD nBlockAlign;
  } WAVEFORMAT;
  其意義分別為:
  wFormatTag:記錄著此聲音的格式代號,例如WAVE_FORMAT_PCM,WAVE_F0RAM_ADPCM等等。
  nChannels:記錄聲音的頻道數(shù)。
  nSamp1esPerSec:記錄每秒取樣數(shù)。
  nAvgBytesPerSec:記錄每秒的數(shù)據(jù)量。
  nBlockA1ign:記錄區(qū)塊的對齊單位。
  wBitsPerSample:記錄每個(gè)取樣所需的位元數(shù)。
  "data"Chunk包含真正的聲音數(shù)據(jù)。Window目前僅提供WAVE_FORMAT_PCM一種數(shù)據(jù)格式,所代表的意義是脈派編碼調(diào)變(Pu1se Code Modulation)。針對此格式,Windows定義了在"data"的chunk中數(shù)據(jù)的存放情形,圖2中列出了四種不同頻道數(shù)及取樣所需的位元數(shù)以及位元位置的安排。
  "RIFF" 頻道0 頻道0 頻道0 頻道0
  xxxx nChannels=1,wBitsPerSample=8
  "WAVE" 頻0(左) 頻道1(右) 頻道0(左) 頻道1 (右)
  "fmt "
  nChannels=2,wBitsPerSample=8
  sizeof(PCMWAVEFORMAT)
  struct of PCMWAVEFORMAT 頻道0(低位) 頻道0(高位) 頻道0(低位)頻道0(高位)
  "data" nChannels=1,wBitsPerSample=16
  xxxx 頻道0(低位) 頻道0(高位) 頻道0(低位)頻道0(高位)
  (低位) (高位) (低位) (高位)
  wave form data
  nChannels=2,wBitsPerSample=16
  圖1 WAV文件結(jié)構(gòu) 圖2 PCM文件中位元安排方式
  第一排表示單聲道8位元,第二排表示雙聲道8位元,第三排表示單聲道16位元,第四排表示雙聲道16位元。8位元代表音量大小由8個(gè)位元所表示,16位元?jiǎng)t代表音量大小由16個(gè)位元所表示。理論上8位元可以表示0~255,16位元可表示0~65536,不過windows卻定16位元其值的范圍從-32168~32167。此外尚有一點(diǎn)要注意的是,0并不一定代表無聲,而是由中間的數(shù)值來決定,也就是在8位元時(shí)為128,16位元時(shí)為0才是無聲。所以,若程序設(shè)計(jì)時(shí)需放入無聲的數(shù)據(jù),糯特別注意聲音格式是16或是8位元,以放入適當(dāng)?shù)闹怠?br /> WAV文件信息的具體應(yīng)用
  WAV文件中包括了對原始聲音的高速率采樣,并且以WAVE_PCM_FORMAT脈派編碼調(diào)變格式,我們可以在VISUAL C++程序中實(shí)現(xiàn),在讀出WAVEHDR文件頭之后,下面就是原始聲音的高速率采樣信息,我們可以對它作多方面的信息處理。
波形顯示。
  我們可以以時(shí)域-幅度的方式顯示出原始聲音的波形,這是最簡單同時(shí)也是最直接的信息處理方式。在時(shí)域范圍內(nèi),我們可以觀察該信號波形是否連續(xù),中間是否有跳變等。
頻譜顯示
  我們可以以頻域-幅度的方式顯示出原始聲音的頻譜,在對原始信號經(jīng)過FFT變換之后,可以得到該信號的頻譜,進(jìn)而得到該信號的能量集中帶,分布特征,譜對稱系數(shù)等等。
用于語音信號識(shí)別
  講話者的個(gè)體識(shí)別是語音信號處理的一個(gè)重要內(nèi)容,但它的一個(gè)前提條件是必須提供語音信號的數(shù)字波形,通常的方法是將原始的語音信號進(jìn)行放大、抗混疊濾波、A/D采樣、數(shù)值編碼,最終得到語音信號的數(shù)字波形,通常多采用硬件處理,費(fèi)時(shí)費(fèi)力,如果我們借助非常成熟的聲卡技術(shù),將WAV文件打開,就非常方便地得到語音信號的數(shù)字波形,為下一步進(jìn)行語音信號識(shí)別提供良好的前端預(yù)處理。

單片機(jī)源程序如下:
  1. #include "wave.h"
  2. char wave_file[]="00_1942.wav";
  3. FIL waveFile;
  4. UINT wave_bw;
  5. u8 wave_top_table[44];
  6. //u32 wave_write_table[1024];

  7. FRESULT wavefileStatus;
  8. void wave_top_init(u8 select,int channels,int sample_rate,unsigned char *table,int num)
  9. {
  10.         WAVE_HEADER   pcmHEADER;  
  11.   WAVE_FMT   pcmFMT;  
  12.   WAVE_DATA   pcmDATA;  
  13.         u16 i,j=0;
  14.         u8 *p;
  15.         u8 CounterTimer=0;
  16.         CounterTimer=select;
  17.         wavefileStatus = f_open(&waveFile,(TCHAR const*)wave_file, FA_OPEN_ALWAYS | FA_WRITE |FA_READ );
  18.           if(FR_OK==wavefileStatus)
  19.           {
  20.                         //WAVE_HEADER
  21.       memcpy(pcmHEADER.fccID,"RIFF",strlen("RIFF"));   
  22.       if(CounterTimer==0)
  23.                         {                        
  24.       pcmHEADER.dwSize=44-8+num;        
  25.                         }
  26.                         else
  27.                         {
  28.                           pcmHEADER.dwSize=num+waveFile.obj.objsize-8;        
  29.                         }
  30.       memcpy(pcmHEADER.fccType,"WAVE",strlen("WAVE"));  
  31.             //WAVE_FMT
  32.             
  33.             memcpy(pcmFMT.fccID,"fmt ",strlen("fmt "));
  34.             pcmFMT.dwSize=16;                              
  35.             pcmFMT.wFormatTag=1;                          
  36.             pcmFMT.wChannels=channels;                     
  37.       pcmFMT.dwSamplesPerSec=sample_rate;           
  38.       pcmFMT.dwAvgBytesPerSec=channels*sample_rate*24/8;  
  39.             pcmFMT.wBlockAlign=1*24/8;            
  40.       pcmFMT.uiBitsPerSample=24;                     
  41.             
  42.       //WAVE_DATA;
  43.       memcpy(pcmDATA.fccID,"data",strlen("data"));  
  44.                         if(CounterTimer==0)
  45.                         {
  46.       pcmDATA.dwSize=num;
  47.                         }
  48.                         else
  49.                         {
  50.                            pcmDATA.dwSize=waveFile.obj.objsize-44+num;
  51.                         }
  52.                         //waveFile.obj.objsize=0;
  53.             j=0;
  54.             p=(u8*)(&pcmHEADER);
  55.             for(i=0;i<sizeof(WAVE_HEADER);i++)
  56.             {
  57.               wave_top_table[j++]=*p;
  58.                     p++;
  59.             }
  60.             p=(u8*)(&pcmFMT);
  61.             for(i=0;i<sizeof(WAVE_FMT);i++)
  62.             {
  63.               wave_top_table[j++]=*p;
  64.                     p++;
  65.             }
  66.             p=(u8*)(&pcmDATA);
  67.             for(i=0;i<sizeof(WAVE_DATA);i++)
  68.             {
  69.               wave_top_table[j++]=*p;
  70.                     p++;
  71.             }  
  72.                         
  73.             f_lseek (&waveFile,0);
  74.             f_write(&waveFile, (const void*)wave_top_table, 44, &wave_bw);
  75.                         f_sync (&waveFile);
  76.                         
  77.       f_lseek (&waveFile,waveFile.obj.objsize);
  78.                         f_write(&waveFile, (const void*)table, num, &wave_bw);
  79.                         f_sync (&waveFile);
  80.             f_close(&waveFile);
  81.         }
  82. }
復(fù)制代碼

頭文件51hei提供下載:
PCM轉(zhuǎn)wave存到sd卡.rar (1.33 KB, 下載次數(shù): 21)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 超碰日韩 | 久久国产高清 | 久久国产麻豆 | 久久久国产一区二区三区 | 中文字字幕一区二区三区四区五区 | 久久久久无码国产精品一区 | 激情91 | www.国产精品 | 97精品一区二区 | 欧美日韩综合一区 | 超碰综合| 欧美一区免费在线观看 | 国产精品久久久久久吹潮 | 国产欧美一区二区在线观看 | 国产精品久久久久久久久免费丝袜 | 精品日韩欧美一区二区 | 在线亚洲电影 | 在线免费国产 | 欧美一级高潮片免费的 | 黄色亚洲 | 日本字幕在线观看 | 色婷婷综合久久久中字幕精品久久 | 天天拍天天射 | 日韩在线一区二区三区 | 日韩精品一区二区在线观看 | 黄色毛片免费视频 | 国产一区不卡 | caoporn视频在线 | 九九热这里 | 九九国产在线观看 | 国产成人99久久亚洲综合精品 | 黄色毛片网站在线观看 | 五月天婷婷丁香 | 国产亚洲一区二区三区 | 在线视频中文字幕 | 成人精品一区二区 | 久久一视频 | 一区二区三区在线观看免费视频 | 91精品国产综合久久久密闭 | 欧美天堂 | 九色视频网站 |