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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

windows 声音编程之waveout

發布時間:2024/3/26 windows 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 windows 声音编程之waveout 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本教程將幫助您了解如何使用Windows waveOut接口播放數字音頻。根據經驗,這些接口函數掌握起來有些困難。在本教程中,我們將會建立一個Windows命令行程序來原始數字音頻。注意:本教程假設您熟悉C程序及Windows API的使用。理解數字音頻的相關知識也是有益的,但不是必須的。

教程內容:

·?????????????????????????????獲取文檔

·?????????????????????????????什么是數字音頻

·?????????????????????????????打開聲音設備

·?????????????????????????????播放聲音

·?????????????????????????????播放流式音頻到設備

·?????????????????????????????緩存機制

·?????????????????????????????運行程序

·?????????????????????????????接下來該做什么?

獲取文檔?
首先,您需要有關waveOut接口的相關文檔。如果您有Microsoft Platform SDK或者VisualC++,那么它們已經提供了相關的信息。如果您還沒有這些,您可以通過MSDN在線查看。(http://msdn.microsoft.com)

什么是數字音頻?
這一部分是為那些對數字音頻如何存儲完全沒有概念的人準備的。如果您理解有關數字音頻的信息,同時了解“樣本(sample)”、“采樣頻率(samplerate)”、“樣本大小(samplesize)”及“聲道(channels)”的概念,您可以跳過此節。?
只要把字節碼發送到聲卡就可以播放聲音了,但是這些字節都是什么意思呢?音頻只是簡單的一系列運動的壓力波。在現實世界中,它們是一些相似的波形,但是在數字世界中,我們必須從這波形中采集一系列的樣本并存儲起來?!皹颖尽笔潜憩F某一時間點上波形振幅的一個值——它僅僅是一個數字。?
“采樣頻率”表明我們采集波形樣本的頻率。它的計量單位是赫茲(Hz)或每秒樣本數。顯然,采樣頻率越高,采樣的波形就越接近真實的波形,所以聲音的音質也就越好。?
另外一個有助于改善音質的參數是每個樣本的大小。當然,樣本越大音質也就越好。樣本大小用字節位數(bits)來計量。為何樣本越大音質越好?假設一個8bits的樣本,它有256(2的八次方)個可能的值,這意味著您不能精確地再現波形的振幅。而如果是一個16bits的樣本,它的可能值有65536(2的16次方)個,這樣它就擁有256倍于8bits的樣本的更精確表現波形的能力。?
最后是關于聲道。在多數機器上有兩個喇叭(左、右),那是兩個聲道。您需要同時把樣本數據存入左聲道和右聲道。?
幸運的是,操作兩個聲道是很容易的(您將在本教程中看到)。樣本總是交錯存儲的,它們將按左、右、左、右……的順序存儲。?
CD品質的音頻采樣頻率是44100Hz,樣本大小是16bits,意味著1M的音頻數據只能持續約6秒的時間。

打開聲音設備?
打開聲音設備需要使用waveOutOpen函數(可以在您的文檔中查到)。象其它許多Windows對象一樣,您可以簡單地使用一個句柄(Handle)調用該設備。如存儲Windows窗口句柄使用HWND類似,我們可以用HWAVEOUT句柄來調用聲音設備。?
下面的代碼段說明了如何打開一個CD標準音質的波形設備,然后關閉它。

#include <windows.h>
#include <mmsystem.h>
#include <stdio.h>
int main(int argc, char* argv[])
{

HWAVEOUT hWaveOut; /* device handle */
WAVEFORMATEX wfx; /* look this up in your documentation */
MMRESULT result;/* for waveOut return values */
/*
* first we need to set up the WAVEFORMATEX structure.?
* the structure describes the format of the audio.
*/
wfx.nSamplesPerSec = 44100; /* sample rate */
wfx.wBitsPerSample = 16; /* sample size */
wfx.nChannels = 2; /* channels*/
/*
* WAVEFORMATEX also has other fields which need filling.
* as long as the three fields above are filled this should
* work for any PCM (pulse code modulation) format.
*/
wfx.cbSize = 0; /* size of _extra_ info */
wfx.wFormatTag = WAVE_FORMAT_PCM;
wfx.nBlockAlign = (wfx.wBitsPerSample >> 3) * wfx.nChannels;
wfx.nAvgBytesPerSec = wfx.nBlockAlign * wfx.nSamplesPerSec;
/*
* try to open the default wave device. WAVE_MAPPER is
* a constant defined in mmsystem.h, it always points to the
* default wave device on the system (some people have 2 or
* more sound cards).
*/
if(waveOutOpen(&hWaveOut, WAVE_MAPPER, &wfx, 0, 0, CALLBACK_NULL) !=MMSYSERR_NOERROR) {

fprintf(stderr, "unable to openWAVE_MAPPER device\n");
ExitProcess(1);

}
/*
* device is now open so print the success message
* and then close the device again.
*/
printf("The Wave Mapper device was opened successfully!\n");
waveOutClose(hWaveOut);
return 0;

}

注意:要編譯本程序,您需要添加winmm.lib到您的工程,否則將會鏈接失敗。?
好了,我們已經做好了第一步,現在聲音設備已經準備好,我們可以寫音頻數據進去了。

播放聲音?
打開和關閉聲音設備挺有意思的,但是上面的代碼并沒有真的做什么事情。我們想要的是能從設備聽到聲音。在這之前,我們有兩件事要做。

·?????????????????????????????獲得一個正確格式的原始音頻

·?????????????????????????????解決如何將數據寫入設備


問題一很好解決,您可以使用Winamp的DiskWriter插件來轉換一個音樂文件為原始音頻。比如您可以轉換\Windows\Media下的Windows聲音文件(比如Ding.wav)為原始音頻文件。如果您不能轉換這些文件,那么直接播放未經轉換的文件也是件很有意思的事。直接播放的話,聽起來會很快,因為這些文件大部分是用22kHz的采樣頻率存儲的。?
問題二就稍微復雜一些了。音頻是以塊(Block)的形式寫入設備的,每個塊都有它自己的頭(Header)。寫入一個塊(Block)是很容易的,但是大部分時候,我們需要建立一個隊列機制并寫入很多的塊(Blocks)。之所以用一個小的文件開始學習,是因為下面的例子我們將載入整個文件到一個塊中并寫入設備。?
首先,我們要寫個函數發送一塊數據到音頻設備中。函數命名為writeAudioBlock。要寫入音頻數據,我們需要三個接口函數:waveOutPrepareHeader,waveOutWritewaveOutUnprepareHeader,并按這個順序調用它們。您可以在相關文檔中查找到并熟悉這些函數。?
下面的代碼是函數writeAudioBlock的初期版本。


void writeAudioBlock(HWAVEOUT hWaveOut, LPSTR block, DWORD size)
{

WAVEHDR header;
/*
* initialize the block header with the size
* and pointer.
*/
ZeroMemory(&header, sizeof(WAVEHDR));
header.dwBufferLength = size;
header.lpData = block;
/*
* prepare the block for playback
*/
waveOutPrepareHeader(hWaveOut, &header, sizeof(WAVEHDR));
/*
* write the block to the device. waveOutWrite returns immediately
* unless a synchronous driver is used (not often).
*/
waveOutWrite(hWaveOut, &header, sizeof(WAVEHDR));
/*
* wait a while for the block to play then start trying
* to unprepare the header. this will fail until the block has
* played.
*/
Sleep(500);
while(waveOutUnprepareHeader(hWaveOut,&header,sizeof(WAVEHDR)) ==WAVERR_STILLPLAYING)

Sleep(100);

}

現在我們有了一個寫入塊數據的函數。我們還需要一個函數來獲得音頻數據塊。這就是函數loadAudioBlock的任務了。函數loadAudioBlock讀取文件到內存并把指針返回。下面就是loadAudioBlock的代碼:

LPSTR loadAudioBlock(const char*filename, DWORD* blockSize)
{

HANDLE hFile= INVALID_HANDLE_VALUE;
DWORD size = 0;
DWORD readBytes = 0;
void* block = NULL;
/*
* open the file
*/
if((hFile = CreateFile(

filename,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
0,
NULL
)) == INVALID_HANDLE_VALUE)

return NULL;

/*
* get it's size, allocate memory and read the file
* into memory. don't use this on large files!
*/
do {

if((size = GetFileSize(hFile, NULL)) ==0)

break;

if((block = HeapAlloc(GetProcessHeap(),0, size)) == NULL)

break;

ReadFile(hFile, block, size,&readBytes, NULL);

} while(0);
CloseHandle(hFile);
*blockSize = size;
return (LPSTR)block;

}

這部分的最后,是整個程序調用和main函數。

#include <windows.h>
#include <mmsystem.h>
#include <stdio.h>
LPSTR loadAudioBlock(const char* filename, DWORD* blockSize);
void writeAudioBlock(HWAVEOUT hWaveOut, LPSTR block, DWORD size);
int main(int argc, char* argv[])
{

HWAVEOUT hWaveOut;?
WAVEFORMATEX wfx;?
LPSTR block;/* pointer to the block */
DWORD blockSize;/* holds the size of the block */

.
. (leave middle section as it was)?
.
printf("The Wave Mapper device was opened successfully!\n");
/*
* load and play the block of audio
*/
if((block = loadAudioBlock("c:\\temp\\ding.raw", &blockSize)) ==NULL) {

fprintf(stderr, "Unable to loadfile\n");
ExitProcess(1);

}
writeAudioBlock(hWaveOut, block, blockSize);?
waveOutClose(hWaveOut);
return 0;

}

將上面的代碼放到一個工程里進行編譯就可以播放小的聲音文件了。我們實現了類似PlaySound函數的功能。請試著做一些小的試驗:改變播放的采樣頻率(在main函數中)或者改變樣本大小(注意:一定要是8的倍數)看看會發生什么,甚至可以改變一下聲道的數量。我們會發現改變采樣頻率或者聲道數會加快或減慢播放的速度,而改變樣本大小可能會有毀滅性的影響!

播放流式音頻到設備?
您可能會注意到上面的代碼有幾個重要的缺陷(注意這些都是故意的:)),明顯的幾個缺陷如下:

·?????????????????????????????限于載入數據的方式,我們不能播放太大的文件。現在的方法緩存整個文件并一次播放完畢。而音頻本質上是很大的,所以我們需要找一種方法把音頻數據轉換為流式數據并一個塊(Block)接一個塊的寫入到設備中。

·?????????????????????????????現有的writeAudioBlock函數是同步執行的,所以一個位(bit)一個位地寫入多個塊會在兩個塊輸出之間有個間隔(即不能足夠快速地重新填充緩存(buffer))。微軟建議至少需要兩個buffer的體制,這樣我們可以在播放一個塊(block)的同時填充另一個塊,然后交換播放和填充的塊。實際上這樣也不完全能解決問題。即使交換數據塊播放也會引起一個非常小(但是很煩人)的間隔。


幸運的是數據塊的讀取很簡單,所以暫時不用管它?,F在讓我們集中于如何建立一種緩存機制以避免出現音頻設備的聲音間隔吧。?
這個塊切換的問題并不象它聽起來那么嚴重。我們不能無間隔地切換兩個數據塊,但是接口有某種機制可以讓我們避開這個問題。接口管理著一個塊的隊列,我們用waveOutPrepareHeader傳送的每個數據塊都可以通過調用waveOutWrite插入到這個隊列中。這意味著我們可以寫2個(或者更多)的數據塊到設備中,當第一個數據塊播放時填充第三個數據塊,然后當第二個播放的時候再進行切換。這樣我們可以得到無間隔的音頻輸出了。?
在說明這個方法之還有最后一個問題,我們如何知道一個數據塊播放完了?前面writeAudioBlock的第一個例子中直到塊完成再調用waveOutUnprepareHeader的方式是非常不好的。我們在實際應用中不能這么做,因為我們還要繼續填充新的數據塊到設備中以繼續播放,關于這些,在waveOut接口中提供了更好的方法來實現。?
waveOut接口提供了4種回調機制來通知我們數據塊已經播放完成了。它們是:

·?????????????????????????????事件(Event)——數據塊播放完成的時候會觸發一個事件

·?????????????????????????????回調函數(CallbackFunction)——數據塊播放完成時會調用一個函數

·?????????????????????????????線程消息(Thread)——數據塊播放完成時會發送一個線程消息

·?????????????????????????????窗口消息(Window)——數據塊播放完成時會發送一個窗口消息


要指定使用哪種方式只需要在調用waveOutOpen函數時指定參數dwCallback的值就可以了。在我們下面的例子中將使用回調函數的方式。?
所以我們需要一個新的函數:waveOutProc。這個函數如何定義可以在相關文檔中查到。您可以看到,這個函數將在以下三種情況下被調用:

·?????????????????????????????設備打開時(Opened)

·?????????????????????????????設備關閉時(Closed)

·?????????????????????????????數據塊播放完成時


我們感興趣的只是數據塊播放完成時這種情況。

緩存機制?
我們將要實現的緩存機制如上面我們提到的一樣運行。它需要一個變量來隨時保存空閑緩存(buffer)的數量(你可能想到了使用信號量(Semaphore)來控制,但是我們不能使用它,后面將解釋原因)。這個變量初始化為緩存的數量,當數據塊寫入的時候減小并在數據塊完成時增加。如果沒有緩存可用,我們將等待直到該變量計數器為1以上然后再繼續寫入。這將可以讓我們有效地循環向任何數量的數據塊隊列中寫入數據。我們例子中沒有使用3個數據塊隊列,而是更多,比如20個,這樣每次可以處理大概8KB的數據。?
有些事情你可能猜中了:waveOutProc是在不同的線程中被調用的。Windows建立了一個特殊的線程來管理音頻播放。在此回調函數中你可以做的事情有很多限制。讓我們看一下微軟的文檔上是怎么說的吧:

"Applications should not call anysystem-defined functions from inside a callback function, except forEnterCriticalSection, LeaveCriticalSection, midiOutLongMsg, midiOutShortMsg,OutputDebugString, PostMessage, PostThreadMessage, SetEvent, timeGetSystemTime,timeGetTime, timeKillEvent, and timeSetEvent.?
Calling other wave functions will cause deadlock."?
應用程序不能在該回調函數中調用除下列以外的系統函數:EnterCriticalSection,LeaveCriticalSection, midiOutLongMsg, midiOutShortMsg, OutputDebugString,PostMessage, PostThreadMessage, SetEvent, timeGetSystemTime, timeGetTime,timeKillEvent, and timeSetEvent。?
調用其它的wave函數可能會引起死鎖。

這解釋了為什么我們不能使用信號量(Semaphore)——這將需要調用ReleaseSemaphore系統函數,而這是我們不能去做的。在實際應用中可能會靈活一些——我見過在回調函數中使用信號量的代碼,不過那樣的程序可能在某些版本的Windows上可以執行而不能執行在其它版本的機器上。同樣的,在回調函數中調用waveOut函數也將導致死鎖。實際上我們也將在回調函數中調用waveOutUnprepareHeader,不過我們不能那么做。(如果你不調用waveOutReset將不會發生死鎖)。?
您可能注意到waveOutOpen提供了一個傳遞實例數據到回調函數的方法(一個用戶定義的指針),我們將使用這個方法傳遞我們的計數器變量指針。?
另外需要注意的是,既然waveOutProc被在另外的線程中調用,所以會有兩個以上的線程操作此計數器變量。為了避免線程沖突,我們需要使用Critical Section對象(我們將使用一個靜態變量并命名為waveCriticalSection)。?
下面是waveOutProc函數的代碼:

static void CALLBACK waveOutProc(

HWAVEOUT hWaveOut,?
UINT uMsg,?
DWORD dwInstance,?
DWORD dwParam1,
DWORD dwParam2?
)

{

/*
* pointer to free block counter
*/
int* freeBlockCounter = (int*)dwInstance;
/*
* ignore calls that occur due to openining and closing the
* device.
*/
if(uMsg != WOM_DONE)

return;

EnterCriticalSection(&waveCriticalSection);
(*freeBlockCounter)++;
LeaveCriticalSection(&waveCriticalSection);

}

然后我們需要兩個函數分配和釋放數據塊的內存以及一個命名為writeAudio的新的writeAudioBlock的實現。下面的兩個函數allocateBlocks和freeBlocks實現了數據塊的分配和釋放。allocateBlocks分配了一組數據塊(Block),每個數據塊的頭(Header)是固定長度的。freeBlocks則釋放了數據塊的內存。如果allocateBlocks失敗將導致程序退出。這意味著我們不需要在main函數中檢查它的返回值。

WAVEHDR* allocateBlocks(int size, intcount)
{

unsigned char* buffer;
int i;
WAVEHDR* blocks;
DWORD totalBufferSize = (size + sizeof(WAVEHDR)) * count;
/*
* allocate memory for the entire set in one go
*/
if((buffer = HeapAlloc(

GetProcessHeap(),?
HEAP_ZERO_MEMORY,?
totalBufferSize
)) == NULL)

{

fprintf(stderr, "Memory allocationerror\n");
ExitProcess(1);

}
/*
* and set up the pointers to each bit
*/
blocks = (WAVEHDR*)buffer;
buffer += sizeof(WAVEHDR) * count;
for(i = 0; i < count; i++) {

blocks[i].dwBufferLength = size;
blocks[i].lpData = buffer;
buffer += size;

}
return blocks;

}
void freeBlocks(WAVEHDR* blockArray)
{

/*?
* and this is why allocateBlocks works the way it does
*/?
HeapFree(GetProcessHeap(), 0, blockArray);

}

新的writeAudio函數需要能夠把那些必須的數據塊(Block)寫入隊列中?;镜倪壿嬋缦?#xff1a;

While there's data available

If the current free block is prepared

Unprepare it

End If
If there's space in the current free block

Write all the data to the block
Exit the function

Else

Write as much data as is possible tofill the block
Prepare the block
Write it
Decrement the free blocks counter
Subtract however many bytes were written from the data available
Wait for at least one block to become free
Update the current block pointer

End If

End While

這就產生了一個問題:我們如何知道什么時候一個數據塊(Block)準備好了而什么時候沒有準備好??
實際上這是一個相當簡單的事情。Windows使用結構體WAVEHDR的dwFlags成員變量來解決這個問題。waveOutPrepareHeader函數的功能中有一項就是設置dwFlags為WHDR_PREPARED。所以我們需要做的就是檢查dwFlags中的這個標識位。?
我們將使用結構體WAVEHDR中的dwUser成員變量來管理數據塊的計數器。下面是writeAudio函數的代碼:

void writeAudio(HWAVEOUT hWaveOut,LPSTR data, int size)
{

WAVEHDR* current;
int remain;
current = &waveBlocks[waveCurrentBlock];
while(size > 0) {

/*?
* first make sure the header we're going to use is unprepared
*/
if(current->dwFlags & WHDR_PREPARED)

waveOutUnprepareHeader(hWaveOut,current, sizeof(WAVEHDR));

if(size < (int)(BLOCK_SIZE -current->dwUser)) {

memcpy(current->lpData +current->dwUser, data, size);
current->dwUser += size;
break;

}
remain = BLOCK_SIZE - current->dwUser;
memcpy(current->lpData + current->dwUser, data, remain);
size -= remain;
data += remain;
current->dwBufferLength = BLOCK_SIZE;
waveOutPrepareHeader(hWaveOut, current, sizeof(WAVEHDR));
waveOutWrite(hWaveOut, current, sizeof(WAVEHDR));
EnterCriticalSection(&waveCriticalSection);
waveFreeBlockCount--;
LeaveCriticalSection(&waveCriticalSection);
/*
* wait for a block to become free
*/
while(!waveFreeBlockCount)

Sleep(10);

/*
* point to the next block
*/
waveCurrentBlock++;
waveCurrentBlock %= BLOCK_COUNT;
current = &waveBlocks[waveCurrentBlock];
current->dwUser = 0;

}

}


現在我們有了寫音頻的新的函數,因為不會再被用到所以你可以扔掉writeAudioBlock函數了。你也可以扔掉loadAudioBlock函數,因為下一部分我們將在main函數中實現新的方法不再需要loadAudioBlock函數了。

運行程序?
如果您按照本教程進行到這里,現在應該擁有了一個C文件包含下面的函數:

·?????????????????????????????main

·?????????????????????????????waveOutProc

·?????????????????????????????allocateBlocks

·?????????????????????????????freeBlocks

·?????????????????????????????writeAudio


下面讓我們完成main函數的新版本以實現把硬盤上的文件流式播放到waveOut設備上吧。下面的代碼當然也包括了程序運行所需要的模塊變量的聲明以及我們已經寫出的函數的原型。

#include <windows.h>
#include <mmsystem.h>
#include <stdio.h>
/*
* some good values for block size and count
*/
#define BLOCK_SIZE 8192
#define BLOCK_COUNT 20
/*
* function prototypes
*/?
static void CALLBACK waveOutProc(HWAVEOUT, UINT, DWORD, DWORD, DWORD);
static WAVEHDR* allocateBlocks(int size, int count);
static void freeBlocks(WAVEHDR* blockArray);
static void writeAudio(HWAVEOUT hWaveOut, LPSTR data, int size);
/*
* module level variables
*/
static CRITICAL_SECTION waveCriticalSection;
static WAVEHDR* waveBlocks;
static volatile int waveFreeBlockCount;
static int waveCurrentBlock;
int main(int argc, char* argv[])
{

HWAVEOUT hWaveOut; /* device handle */
HANDLEhFile;/* file handle */
WAVEFORMATEX wfx; /* look this up in your documentation */
char buffer[1024]; /* intermediate buffer for reading */
int i;
/*
* quick argument check
*/
if(argc != 2) {

fprintf(stderr, "usage: %s\n", argv[0]);
ExitProcess(1);

}
/*
* initialise the module variables
*/?
waveBlocks = allocateBlocks(BLOCK_SIZE, BLOCK_COUNT);
waveFreeBlockCount = BLOCK_COUNT;
waveCurrentBlock= 0;
InitializeCriticalSection(&waveCriticalSection);
/*
* try and open the file
*/?
if((hFile = CreateFile(

argv[1],
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
0,
NULL
)) == INVALID_HANDLE_VALUE)

{

fprintf(stderr, "%s: unable toopen file '%s'\n", argv[0], argv[1]);
ExitProcess(1);

}
/*
* set up the WAVEFORMATEX structure.
*/
wfx.nSamplesPerSec = 44100; /* sample rate */
wfx.wBitsPerSample = 16; /* sample size */
wfx.nChannels= 2; /* channels*/
wfx.cbSize = 0; /* size of _extra_ info */
wfx.wFormatTag = WAVE_FORMAT_PCM;
wfx.nBlockAlign = (wfx.wBitsPerSample * wfx.nChannels) >> 3;
wfx.nAvgBytesPerSec = wfx.nBlockAlign * wfx.nSamplesPerSec;
/*
* try to open the default wave device. WAVE_MAPPER is
* a constant defined in mmsystem.h, it always points to the
* default wave device on the system (some people have 2 or
* more sound cards).
*/
if(waveOutOpen(

&hWaveOut,?
WAVE_MAPPER,?
&wfx,?
(DWORD_PTR)waveOutProc,?
(DWORD_PTR)&waveFreeBlockCount,?
CALLBACK_FUNCTION
) != MMSYSERR_NOERROR)

{

fprintf(stderr, "%s: unable toopen wave mapper device\n", argv[0]);
ExitProcess(1);

}
/*
* playback loop
*/
while(1) {

DWORD readBytes;
if(!ReadFile(hFile, buffer, sizeof(buffer), &readBytes, NULL))

break;

if(readBytes == 0)

break;

if(readBytes < sizeof(buffer)) {

printf("at end of buffer\n");
memset(buffer + readBytes, 0, sizeof(buffer) - readBytes);
printf("after memcpy\n");

}
writeAudio(hWaveOut, buffer, sizeof(buffer));

}
/*
* wait for all blocks to complete
*/
while(waveFreeBlockCount < BLOCK_COUNT)

Sleep(10);

/*
* unprepare any blocks that are still prepared
*/
for(i = 0; i < waveFreeBlockCount; i++)

if(waveBlocks[i].dwFlags &WHDR_PREPARED)

waveOutUnprepareHeader(hWaveOut,&waveBlocks[i], sizeof(WAVEHDR));

DeleteCriticalSection(&waveCriticalSection);
freeBlocks(waveBlocks);
waveOutClose(hWaveOut);
CloseHandle(hFile);
return 0;

}

接下來該做什么??
接下來要做的事就取決于你自己了。我有幾個您可能會有興趣的建議:

·?????????????????????????????試著修改原始音頻程序讓它可以從標準輸入讀取。您可以直接從命令行控制管道輸出聲音文件。

·?????????????????????????????重寫讀取部分讓它直接讀取Wave文件(*.wav)而不是RAW文件(原始音頻文件)。您會發現這令人吃驚的簡單。Wave文件使用結構體WAVEFORMATEX來定義數據格式,您可以在打開聲音設備后使用它。關于文件格式的有關信息可以參考WOTSIT's Format網站(http://www.wotsit.org)。

·?????????????????????????????看看自己能不能創建新的或更好的緩存機制

·?????????????????????????????試著把這些代碼加入某個開源解碼器中,如Vorbis解碼器或MP3解碼器。這樣您就可以得到一個屬于您自己的媒體播放器了:)

總結

以上是生活随笔為你收集整理的windows 声音编程之waveout的全部內容,希望文章能夠幫你解決所遇到的問題。

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

亚洲尺码电影av久久 | 国产精品一区二区三区观看 | 日韩久久精品一区二区三区 | 日韩欧美精品在线 | 婷婷中文字幕综合 | 国产视频九色蝌蚪 | 操操色| 最近乱久中文字幕 | 蜜桃av人人夜夜澡人人爽 | 日韩欧美在线视频一区二区三区 | 久久超级碰 | 国产v在线| 久草视频在线免费播放 | 麻豆91在线观看 | 婷婷丁香在线观看 | a级免费观看| 日韩av免费一区二区 | 国产精品成人品 | av福利超碰网站 | 在线免费色 | www.97色.com | 国产亚洲一级高清 | 亚洲va天堂va欧美ⅴa在线 | 亚洲日韩中文字幕在线播放 | 婷婷日韩 | 99久热精品 | 99综合影院在线 | 亚洲另类视频在线 | 91精品对白一区国产伦 | 91九色蝌蚪视频 | 日韩三级在线观看 | 中文在线8新资源库 | 天天色 天天 | 国产精品入口久久 | 亚洲国产97在线精品一区 | 激情综合中文娱乐网 | 久久国产精品99久久久久久丝袜 | av中文字幕网 | www.亚洲激情.com | 亚洲午夜精品一区 | 日日草av | 成年人免费电影在线观看 | а天堂中文最新一区二区三区 | 婷婷精品国产一区二区三区日韩 | 国产亚洲精品成人av久久ww | 午夜成人免费影院 | 日韩欧美高清一区二区 | 中文字幕一区二区三区四区久久 | 国产精品去看片 | 国产美女永久免费 | 美女露久久 | 免费观看成人 | 探花视频在线观看+在线播放 | 国产第一福利 | 国产一二区精品 | 国产成人一区二区三区久久精品 | 99精品视频免费 | 伊人官网 | 在线中文字幕观看 | 日韩精品欧美一区 | 免费av在线播放 | 精品网站999www | 欧美日韩高清在线 | 欧美日韩一区二区三区在线观看视频 | 亚洲成人精品影院 | 久久久久久网站 | 成片免费 | 国产麻豆电影 | 色丁香综合 | 国产精品激情偷乱一区二区∴ | 日韩欧美在线免费观看 | 狠狠干天天干 | 91久久久国产精品 | 国产视频18 | 日本三级香港三级人妇99 | 中文字幕高清有码 | 在线免费观看的av | 久久综合影音 | 黄色毛片在线观看 | 亚洲精品永久免费视频 | 在线一二三区 | 久章草在线 | 美女久久视频 | 成人久久18免费网站 | 黄色的视频 | 综合国产在线 | 成人国产精品免费 | 国产视频一区在线免费观看 | 毛片888| 国产成人精品一区一区一区 | 精品一区二区三区在线播放 | 天天操天天舔天天爽 | 91av视频免费观看 | 一区二区伦理电影 | 色吊丝在线永久观看最新版本 | 欧美日韩裸体免费视频 | 欧美在线视频一区二区三区 | www婷婷 | 成人午夜电影免费在线观看 | 久久大香线蕉app | 国产五码一区 | 国产欧美精品一区二区三区 | 91精品天码美女少妇 | 国产精品成人自产拍在线观看 | 久久99精品国产 | www.久久com| 亚洲精品h| 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 中文字幕在线观看一区二区 | 日韩电影中文,亚洲精品乱码 | 狠狠色丁香婷综合久久 | 成人av在线影院 | 国产精品久久久久久久久久白浆 | 超碰97免费观看 | 久久久精品国产一区二区电影四季 | 日本精品久久久一区二区三区 | 日韩在线观看免费 | 天天色天天操综合 | 91av色| 黄色com| 免费在线观看av网站 | 四虎视频| 亚洲综合网| 狠狠亚洲 | 在线www色 | 九九九九九九精品 | 久久久69| 丁香六月av | 日韩欧美高清一区二区三区 | 久久亚洲成人网 | 久久综合网色—综合色88 | 亚洲精品影院在线观看 | 亚洲欧美日韩一区二区三区在线观看 | 欧美俄罗斯性视频 | 国产91电影在线观看 | 亚洲精品女 | 又黄又爽又无遮挡免费的网站 | 啪嗒啪嗒免费观看完整版 | 美女国内精品自产拍在线播放 | 国产黄色精品网站 | 国产亚洲精品美女 | 狠狠操综合 | 黄p在线播放 | 国产又粗又猛又色又黄网站 | 国产一区二区在线视频观看 | 免费av观看网站 | 亚洲少妇影院 | 成人午夜剧场在线观看 | 日本美女xx | 国产精品一区二区在线免费观看 | av在线电影播放 | 在线成人欧美 | 成人性生交大片免费看中文网站 | 五月婷婷免费 | 久青草视频 | 日日婷婷夜日日天干 | 久久久久久久网 | 中文字幕传媒 | 一区二区三区日韩在线观看 | 亚洲一区网 | 91免费版在线 | 中文字幕资源网在线观看 | 日韩黄色免费电影 | 国产精品综合久久 | 日韩va在线观看 | 日躁夜躁狠狠躁2001 | 欧美精品成人在线 | 久久嗨| 四虎国产精品成人免费影视 | 一本一本久久a久久精品牛牛影视 | www.狠狠操.com | 青青河边草观看完整版高清 | 超级碰碰碰视频 | 欧美另类交在线观看 | 婷婷亚洲五月色综合 | 精品国产电影 | 国产精品乱码一区二区视频 | 日本午夜在线观看 | 国产黄大片 | 黄色网在线播放 | 国产一级免费观看 | 在线免费性生活片 | 日韩激情影院 | av在线免费网站 | 久久久久久美女 | 精品一区二区影视 | 国产看片免费 | 狠狠操天天射 | 国产精品黄色影片导航在线观看 | 日本夜夜草视频网站 | 欧美午夜性 | av丝袜制服 | 中文字幕乱码在线播放 | 欧美精品一区二区三区四区在线 | 中文字幕黄色网 | 在线一二三区 | 91精品啪在线观看国产线免费 | 亚洲精品资源 | 日本黄色免费观看 | 成人在线免费视频观看 | 亚洲精品88欧美一区二区 | 丁香婷五月 | 国产精品综合在线观看 | 亚洲欧美视频在线播放 | 免费在线成人 | 婷婷色综 | 最近日本中文字幕a | 日韩欧美精品一区 | 伊人婷婷激情 | 色偷偷88欧美精品久久久 | 综合网天天射 | 97视频在线播放 | 精品亚洲免费视频 | 日韩精品久久久久久久电影竹菊 | 日韩中文字幕在线不卡 | 夜夜操网| 免费看污在线观看 | 久久999精品 | 国产色综合天天综合网 | 亚州国产视频 | 国产免费一区二区三区网站免费 | 中文字幕av网站 | 香蕉成人在线视频 | 精品国产自在精品国产精野外直播 | 国模精品一区二区三区 | 国产欧美精品一区二区三区四区 | 中文字幕乱在线伦视频中文字幕乱码在线 | 亚洲综合婷婷 | 久久r精品 | 丁香花在线视频观看免费 | 亚洲国产精品久久久久 | 香蕉网在线播放 | 伊人五月在线 | 久久久久久久久亚洲精品 | 婷婷六月天丁香 | 天天综合入口 | 成人小电影在线看 | 欧美久草视频 | 免费观看丰满少妇做爰 | 在线免费av网站 | 久久久久久久久久久成人 | 热久久最新地址 | 99久热在线精品视频观看 | 久久久精品午夜 | 狠狠色丁香婷婷综合 | 狠狠操狠狠 | 中文字幕在线色 | 久久精品99国产精品日本 | 国产二区电影 | bbb搡bbb爽爽爽 | 国产91在| 久久久久久久久久久久av | 伊人久久在线观看 | a视频在线观看免费 | 天天干天天操天天做 | 亚洲国产影院av久久久久 | 久久成人午夜视频 | 色综合久久久网 | 五月激情六月丁香 | 免费在线黄 | 亚洲视频一区二区三区在线观看 | 免费在线观看成人 | 成人影片在线播放 | 国产在线观看二区 | 日韩精品免费在线观看 | 久草视频手机在线 | 久久乐九色婷婷综合色狠狠182 | 日韩久久网站 | 久草在线最新 | 免费h精品视频在线播放 | 亚洲日本一区二区在线 | 国内偷拍精品视频 | 黄色亚洲片 | 97色国产 | 色狠狠一区二区 | 国产免费不卡av | 在线观看国产成人av片 | 久久久久久久久久久电影 | 国产精品久久久久久久电影 | 99色亚洲 | 91麻豆产精品久久久久久 | 精品美女久久久久 | 亚洲少妇激情 | 久久久久欧美精品999 | 亚洲久草在线视频 | 亚洲高清不卡av | 天天操天天干天天插 | 在线观看av免费观看 | 高清av免费看| 99精品偷拍视频一区二区三区 | 国产一区在线观看免费 | 久久精品免费观看 | 五月天天av | 开心丁香婷婷深爱五月 | 丝袜美腿av | 日韩免费在线视频观看 | 麻花传媒mv免费观看 | 99这里有精品 | 久草资源免费 | 五月婷香 | 黄色免费在线看 | 午夜美女视频 | 久久久99精品免费观看乱色 | 六月丁香婷婷在线 | 欧美黄色成人 | 麻豆极品| 91热精品 | 狠狠躁日日躁狂躁夜夜躁 | 精品国产自 | 国产视频久久久 | 91污视频在线 | 欧美日韩免费在线观看视频 | 久久久国产精品麻豆 | 亚洲国产精品成人精品 | 精品一区二区免费在线观看 | 日韩在线高清免费视频 | 国产精品电影一区 | 久久综合亚洲鲁鲁五月久久 | 久久精品国产免费看久久精品 | 狠狠操在线 | 91精品久久久久久久久 | 五月婷婷中文网 | 国产黄色大全 | 伊人影院得得 | 国产一区av在线 | 日韩精品视频在线观看网址 | 亚洲第一区在线播放 | 欧美一区二区在线刺激视频 | 99欧美 | 人人爱人人添 | 午夜电影av| 色视频在线观看 | 午夜精品一区二区三区免费 | 日韩在线视频国产 | 丁香九月婷婷综合 | 久久黄色小说 | 日韩特黄av | 中文在线www | 麻豆国产电影 | 久久成年人网站 | 一区中文字幕在线观看 | 日韩在线网址 | 日本中文字幕一二区观 | 午夜视频二区 | 在线va网站 | 久久99精品波多结衣一区 | 国产午夜精品理论片在线 | 激情导航| 国产福利精品一区二区 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 亚洲蜜桃在线 | 激情欧美一区二区免费视频 | 国产精品久久久久999 | 一级片在线 | 九九九九九九精品任你躁 | 久久免费精彩视频 | 中文字幕影片免费在线观看 | 亚洲天天综合网 | 日韩二区精品 | 国产激情小视频在线观看 | 九九精品在线观看 | 91视频91自拍| 成人毛片在线视频 | 狠狠干 狠狠操 | 91丨九色丨国产在线 | 日韩mv欧美mv国产精品 | 黄色电影网站在线观看 | 久久在线视频精品 | 欧美另类v | 免费亚洲一区二区 | 婷婷射五月 | 亚洲高清视频在线观看免费 | 亚洲一区免费在线 | 国产在线视频在线观看 | 欧美久久久久久久久久久 | 精品国产一区二区三区久久 | 成人在线视频网 | 色综合亚洲精品激情狠狠 | 天天综合网久久 | 在线成人av| 国产视频 久久久 | 国产白浆视频 | 日本在线中文在线 | 一区二区三区精品久久久 | 探花国产在线 | 亚洲 综合 激情 | 国产精品乱码一区二三区 | 日韩精品久久久久久久电影竹菊 | 欧美一区二区在线 | 免费av电影网站 | 久操中文字幕在线观看 | 91在线操 | 国产精品扒开做爽爽的视频 | 一级黄视频 | 国产91精品看黄网站在线观看动漫 | 欧美日韩视频在线观看一区二区 | 免费人成在线观看 | 成人h视频在线 | 五月婷婷丁香 | 国产精彩视频一区二区 | 国产91精品久久久久久 | av激情五月 | 一区二区伦理电影 | 激情网第四色 | 国产九色91| 韩国av在线 | 四虎在线观看视频 | 中文字幕高清在线播放 | 国产黄a三级 | 激情五月婷婷综合网 | 日韩成人一级大片 | 久草在线免费资源 | 亚洲欧美日韩中文在线 | 国产操在线| 中文字幕第一页在线 | 就要干b | 国偷自产视频一区二区久 | www.天天射 | 中文字幕 在线看 | 国产91亚洲精品 | 久草视频一区 | 日韩久久电影 | 日日干天天插 | 国产va饥渴难耐女保洁员在线观看 | 日本电影黄色 | 午夜精品福利影院 | 91网址在线观看 | 欧美a级片免费看 | 久久精品一区 | 国产一级二级三级视频 | 国产精品毛片久久久久久久久久99999999 | 国产不卡一二三区 | 久久精品国产一区二区电影 | 久久视频在线观看中文字幕 | 中文日韩在线 | 97在线免费视频 | 久久免费av电影 | 国产96视频 | 国产日韩欧美自拍 | 狠狠色狠狠色综合日日92 | 欧美日韩在线免费观看视频 | 亚洲午夜精品福利 | 成人黄色大片在线免费观看 | 亚洲精品456在线播放第一页 | 最近免费中文字幕 | 91福利视频免费观看 | 99在线视频播放 | 国产午夜在线观看 | 97色噜噜| 九九色在线观看 | 成人91av| 久久人人添人人爽添人人88v | 亚洲精品成人在线 | 免费看十八岁美女 | 国产淫片免费看 | 久久久久国产成人精品亚洲午夜 | 国产精品自产拍在线观看网站 | 亚洲一级黄色大片 | 99视频精品| 国产一级黄色电影 | 成人a视频片观看免费 | 国产成人一区二区三区影院在线 | 中文字幕在线观看网 | 午夜在线观看影院 | 人人爽人人av | 久久精品精品电影网 | 美女黄视频免费 | 天天操网| 久久不色 | 国产精品毛片一区二区三区 | 欧美福利视频一区 | 超碰国产人人 | 国产精品2区 | 亚洲狠狠婷婷综合久久久 | 国产精品成人免费精品自在线观看 | av中文字幕在线电影 | 成人免费视频播放 | 亚洲小视频在线 | 伊人影院得得 | 麻豆国产网站 | 亚洲精品午夜久久久久久久 | 久久精品欧美日韩精品 | 中文字幕在线一区二区三区 | 一本—道久久a久久精品蜜桃 | 中文字幕在线观看av | 国产中文字幕三区 | 欧美最猛性xxxx | 国产理论免费 | 毛片99 | 九九综合九九综合 | 黄色特一级片 | 五月天婷亚洲天综合网鲁鲁鲁 | 久久九九久久九九 | 欧美精品中文在线免费观看 | 免费观看国产成人 | 综合亚洲视频 | 亚洲精品国产综合99久久夜夜嗨 | 天天色影院 | 99精品视频免费观看视频 | 樱空桃av | 国产在线色站 | 国产精品视频大全 | 在线观看日本高清mv视频 | 久久人人爽人人人人片 | 91av在线免费播放 | www.黄色片网站 | 天天做天天爱天天爽综合网 | 色av资源网 | 精品国产乱码久久久久久浪潮 | 国产精品97| av免费高清观看 | 成人三级网址 | 人人爽夜夜爽 | 九九综合九九综合 | av免费电影在线观看 | 人人揉人人揉人人揉人人揉97 | 91av原创 | 五月婷婷中文字幕 | 久草在线视频看看 | 国产女人40精品一区毛片视频 | 欧美精品亚洲二区 | a在线视频v视频 | 欧美天堂视频在线 | 久久免费片 | 美女网站视频免费黄 | 国产女教师精品久久av | 国产r级在线观看 | 啪啪午夜免费 | 日韩在线观看高清 | 狠狠久久| 激情欧美国产 | 国产69精品久久久久99尤 | 字幕网av | 国产涩图 | 国产一区二区三区在线 | 成人97视频一区二区 | 最近中文字幕完整高清 | 欧美极品在线播放 | 日韩在线精品 | 久久久69 | 亚洲资源视频 | 久久久亚洲国产精品麻豆综合天堂 | 免费成人在线视频网站 | 伊人久久五月天 | 亚洲综合色丁香婷婷六月图片 | 国产精品一区电影 | 欧美日韩高清在线观看 | 久久久精品小视频 | 欧美成人区 | 午夜视频99 | 婷婷av资源| 一区二区不卡在线观看 | 日韩在线视频在线观看 | 国产日韩欧美在线播放 | 国产亚洲婷婷 | 草在线视频 | 97视频人人 | 五月婷婷亚洲 | 亚洲视频 在线观看 | 在线草| 中文字幕人成不卡一区 | 久久久香蕉视频 | 国产美女视频网站 | 久久久久亚洲精品国产 | 97视频资源 | 国产精品黑丝在线观看 | 久草在线一免费新视频 | 特级黄色视频毛片 | 中文字幕在线观看视频网站 | 欧美99热| 久在线观看视频 | 国内精品免费久久影院 | 日韩另类在线 | 久草视频免费在线观看 | 国产精品久久久久久av | 四虎5151久久欧美毛片 | 国产美女网 | 日韩成人欧美 | av成人免费| 天堂视频一区 | 日日干日日色 | 99久久超碰中文字幕伊人 | 日日躁夜夜躁aaaaxxxx | 国产精品四虎 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 欧美日韩高清在线 | 欧美性生交大片免网 | 在线免费观看一区二区三区 | 在线观看亚洲电影 | 制服丝袜成人在线 | 国产在线 一区二区三区 | 亚洲美女免费视频 | 久久久精品国产一区二区三区 | 欧美日韩一区二区三区免费视频 | 欧美有色| 在线精品亚洲一区二区 | 午夜精品视频福利 | 欧美日韩首页 | 精品国产免费一区二区三区五区 | 午夜精品久久久久久久99热影院 | 日本中文字幕在线播放 | 日韩精品一区二区三区免费观看 | 99av在线视频 | 国产精品一区二区视频 | 精品日韩中文字幕 | 最近免费观看的电影完整版 | 日韩免费看视频 | 超碰在线97免费 | 午夜精品久久久久久99热明星 | 天天做天天爱天天爽综合网 | 91免费日韩 | 久久嗨| 最近日本mv字幕免费观看 | 欧美日一级片 | 天天操天天射天天舔 | 五月婷婷导航 | 一区二区三区视频网站 | 中文字幕亚洲精品在线观看 | 久久永久免费视频 | 成人午夜电影在线 | 国产专区在线看 | 亚洲经典精品 | 久久视频免费 | 亚洲成人黄色在线观看 | 日韩在线观看电影 | 国产精品久久久久一区二区国产 | 久久国产精品网站 | 麻豆传媒在线视频 | 日本中文字幕在线看 | 天天操天天插 | 免费在线观看一区二区三区 | 开心激情综合网 | 中文字幕在线一区二区三区 | 日韩深夜在线观看 | 久久久久久久久久久免费 | 国产精品原创av片国产免费 | 中文字幕一区二区三区在线视频 | 久九视频 | 成人在线免费观看视视频 | 五月宗合网 | 激情久久久久久久久久久久久久久久 | 国产亚洲精品成人 | 一本一道波多野毛片中文在线 | 丁香狠狠| 中文国产字幕在线观看 | 天天爽夜夜爽人人爽曰av | 日韩在线欧美在线 | 99热九九这里只有精品10 | 日韩高清一 | 欧美aaa一级| 黄色一级免费网站 | 日日激情| 久久精品男人的天堂 | 99精品视频观看 | 亚洲欧美日韩在线看 | 免费国产在线精品 | 一区二区三区动漫 | 国产精品手机在线播放 | 久久激五月天综合精品 | 国产精品视频永久免费播放 | 久久精品www人人爽人人 | av免费高清观看 | www.91国产| 四虎在线视频 | 成人综合婷婷国产精品久久免费 | 久久久国产精品成人免费 | 视频二区在线 | 性色大片在线观看 | 精品影院一区二区久久久 | 国产午夜激情视频 | 丰满少妇对白在线偷拍 | 91av中文| 精品乱码一区二区三四区 | 精品一区二区在线免费观看 | 99tvdz@gmail.com| 粉嫩高清一区二区三区 | 日韩午夜一级片 | 久久久免费少妇 | 久久久av电影 | 丁香在线观看完整电影视频 | 成人午夜免费剧场 | 久久久99精品免费观看乱色 | 国产精品欧美久久久久久 | 久久在线视频精品 | 久久久视频在线 | 日韩久久精品一区二区 | 欧美一区免费观看 | 波多野结衣亚洲一区二区 | 欧亚日韩精品一区二区在线 | 操久在线| 精品国产_亚洲人成在线 | 黄色免费视频在线观看 | 国产激情久久久 | 六月天综合网 | 欧美一区二区在线刺激视频 | 开心激情久久 | 天天操 夜夜操 | 精品国产一区二区三区日日嗨 | 日韩精品一区二区三区免费视频观看 | 99视频播放| 国产99久 | 97国产在线观看 | 成年人电影毛片 | 手机在线永久免费观看av片 | 色橹橹欧美在线观看视频高清 | 在线影视 一区 二区 三区 | 日韩在线观看电影 | 激情小说 五月 | 成人动漫视频在线 | 黄色网免费 | 激情xxxx | 在线不卡a | 亚洲日韩欧美一区二区在线 | 日韩精品在线一区 | a在线免费观看视频 | 国产免费黄色 | 成人亚洲免费 | 国产精品一区在线 | 国产成人久久久久 | 天堂av一区二区 | 国产日韩精品一区二区三区在线 | 国产精品网站一区二区三区 | 波多野结衣一区二区三区中文字幕 | 精品国模一区二区三区 | 色婷婷a| 日韩 在线a| 久久尤物电影视频在线观看 | 嫩小bbbb摸bbb摸bbb | 99国产成+人+综合+亚洲 欧美 | 久久国产精品免费视频 | 欧美在线视频a | 天天操天天干天天操天天干 | 成人在线观看网址 | 国产精品高清在线观看 | 久久艹欧美 | 日韩免费av网址 | 开心激情五月婷婷 | 人人干人人爽 | 99精品国产99久久久久久福利 | 亚洲视频大全 | 99热这里只有精品在线观看 | 欧美日韩高清一区二区 | 8x成人免费视频 | 最近中文字幕免费观看 | 伊人永久在线 | 亚a在线 | 亚洲国内精品在线 | 毛片a级片 | 在线va网站| 999久久a精品合区久久久 | 国产精品久久久久久久久软件 | 亚洲成人资源在线观看 | 丁香花中文在线免费观看 | 日韩在线三级 | 成人中文字幕+乱码+中文字幕 | 欧美精品在线观看免费 | 在线视频观看成人 | 久久国产二区 | 超碰官网 | 亚洲va欧美 | 99久久久久久国产精品 | 视频一区二区三区视频 | 亚洲经典视频在线观看 | 黄色在线看网站 | 狠狠色丁香婷婷综合 | 欧美日韩精品在线观看视频 | 中文字幕中文字幕在线中文字幕三区 | 欧美性生活久久 | 免费视频三区 | 婷婷综合网 | 日韩欧美精品一区二区三区经典 | 免费看久久久 | 日批网站在线观看 | 国产手机视频在线观看 | 999久久久免费视频 午夜国产在线观看 | 久久久精品国产一区二区电影四季 | 99精品久久久久久久久久综合 | 免费国产在线精品 | 伊人精品影院 | 香蕉视频在线视频 | 国产免费大片 | 久久久久久久久久久久久影院 | 色网免费观看 | 九九热1 | 久久99精品热在线观看 | 91久久在线观看 | 激情视频一区 | www黄色com | 99久久www免费 | 久久精品草 | 久草综合在线观看 | 国产精品久久久久久久久久东京 | 欧美作爱视频 | 欧美精品一区二区蜜臀亚洲 | 婷婷新五月 | 国产成人l区 | 激情欧美日韩一区二区 | 久久精品视频免费 | 国产日韩精品视频 | 免费h精品视频在线播放 | 在线成人免费电影 | 免费视频久久久久 | 欧美成人精品在线 | 亚洲一级国产 | 国产一区免费在线观看 | www.久久久| 精品视频免费在线 | 国产成人一区二区三区在线观看 | 久久久受www免费人成 | 波多野结衣电影一区 | 在线观看黄污 | 中文字幕一区二区三区久久 | 香蕉视频最新网址 | 国产精品6 | 欧美地下肉体性派对 | 涩涩网站免费 | 97视频网址 | 日韩高清一区二区 | 色爱区综合激月婷婷 | 久久这里有 | 日本三级不卡 | 久久综合久久八八 | 99久久精品国产免费看不卡 | 人人舔人人插 | 国产日韩精品在线 | 999在线观看视频 | 久久女教师| 天天草天天干天天射 | 国产专区视频在线 | 91在线免费视频 | 国产成人一二片 | 不卡的av| 亚洲天堂在线观看完整版 | 深夜免费福利网站 | 国产精品99久久免费黑人 | 色福利网 | 一区二区电影网 | 狠狠的操你 | 西西大胆免费视频 | 久久国产精品免费看 | 日韩一区在线播放 | 婷婷射五月 | 久久午夜免费观看 | 99久久精品无码一区二区毛片 | 亚洲视频第一页 | ,久久福利影视 | 国产一区免费在线观看 | 在线电影av| 一区中文字幕电影 | 99视频精品全国免费 | 99久热在线精品视频成人一区 | 久久99热这里只有精品国产 | 中文字幕一区二区三区乱码不卡 | 狠狠狠干狠狠 | 色www精品视频在线观看 | 成人av一区二区兰花在线播放 | 黄色在线成人 | 亚洲精品九九 | 久久69精品 | 欧美做受xxx | 国产精品永久 | 国产精品区二区三区日本 | 国产高清免费 | 国产成人精品一区二区三区免费 | 在线观看成人国产 | 在线观看日韩国产 | 久久精品老司机 | 九九免费精品视频在线观看 | 中文字幕视频网站 | 91精品国产入口 | 国产精品av免费在线观看 | 欧美日韩一级久久久久久免费看 | 狠狠搞,com | 国产午夜精品一区二区三区在线观看 | 天天干天天射天天插 | 亚洲激情综合 | 天天干天天想 | 婷婷综合亚洲 | 91精品国 | 国产精品久久久一区二区 | 国产精品一区在线播放 | 在线观看视频中文字幕 | 色综合欧洲| 精品久久久久一区二区国产 | 国产精品久久一 | 天天操比| 亚洲成av人影院 | 激情欧美在线观看 | av资源免费观看 | 91自拍成人 | 日本夜夜草视频网站 | 精品久久亚洲 | 97热久久免费频精品99 | 免费黄色在线 | 在线观看 国产 | 激情久久久久 | 国产精品99久久99久久久二8 | 久久99精品久久久久久清纯直播 | 精品亚洲免费 | 亚洲成人黄色在线观看 | 久久精品国产免费 | 国产视频在线观看一区 | 日日干美女 | 五月天电影免费在线观看一区 | 成年人免费观看国产 | 黄色免费视频在线观看 | 中文一二区 | 成人蜜桃网 | 91丨九色丨蝌蚪丨老版 | aa一级片 | 久草观看视频 | 欧美成人一二区 | 香蕉影视在线观看 | 91亚洲精品国偷拍 | 中文字幕人成不卡一区 | 2024国产精品视频 | 欧美国产日韩一区二区 | 国产精国产精品 | 亚洲狠狠丁香婷婷综合久久久 | 国产精品美女久久久久久网站 | 国产精品一区二区久久精品爱微奶 | 超碰在线中文字幕 | 国产成人av电影在线 | 狠狠色噜噜狠狠狠狠 | 日日干夜夜草 | 中文字幕一区二区三区久久蜜桃 | av在线永久免费观看 | 亚洲中字幕 | 三级在线国产 | 在线免费国产 | 超碰在线94 | av丝袜在线 | 99热这里有精品 | 久久久久综合网 | 午夜性色 | av不卡在线看 | x99av成人免费 | 在线视频一二区 | 亚洲第一区在线观看 | 精品99在线观看 | 亚洲精品在线免费看 | 91看片成人 | 婷婷久久综合网 | 97色免费视频 | 六月丁香激情综合色啪小说 | 午夜在线看 | 欧美性脚交| 91在线公开视频 | 91av原创| 中文字幕一区二区三区四区视频 | 999久久久久久久久久久 | 国产精品久久精品 | 亚洲一区二区麻豆 | 国产精品久久久久久久久久久久冷 | 中文字幕4 | 国产在线一区二区三区播放 | 一区二区视频免费在线观看 | 国产一区二区日本 | 91在线亚洲| 国产成人综合在线观看 | 日本不卡一区二区三区在线观看 | 国产精品一区二区三区电影 | 在线观看视频你懂的 | 狠狠操操网 | 久久综合偷偷噜噜噜色 | 天天狠狠操 | 懂色av懂色av粉嫩av分享吧 | www国产一区| 免费三级黄 | 99久久精品网 | 久久在线免费 | 日韩成人不卡 | 国产色视频123区 | 91高清免费看 | 免费视频你懂得 | 久久夜夜爽 | 人人超碰免费 | 在线观看国产一区 | 手机在线看a| 久久夜色网 | 免费观看午夜视频 | 综合在线色 | 婷婷精品国产一区二区三区日韩 | 人人看人人做人人澡 | 国产色网站 | 九九热精 | 日韩高清一区二区 | 国产精品一区二区三区久久久 | 久久人人爽人人爽人人片av软件 | 国产精品免费大片视频 | av中文电影 | 91大神免费在线观看 | 成人av电影在线播放 | 天天操天天吃 | 精品国产一二三四区 | 日韩网站在线观看 | 欧美日本一二三 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 |