青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

FMOD Ex文檔前兩章翻譯(轉)

Posted on 2009-12-27 15:47 hyf 閱讀(3356) 評論(2)  編輯 收藏 引用 所屬分類: Game Design

Firelight Technologies FMOD Ex

術語 / 基本原理

導言

下文中的術語和原理將貫穿整個FMOD文檔,本節對部分術語和原理進行解釋,以免混淆。

Samples vs bytes vs milliseconds

在很多FMOD函數中都會提到PCMsamplesbytesmilliseconds
要理解它們有什么區別,請看下圖。下圖描述了原始PCM采樣數據在FMOD緩沖中的存儲方式:

從圖中可以看出立體聲音頻由左/右聲道的數據交替組成。

. 一對左/右聲道(聲道)數據稱為一個sample

. 因為是16bit的數據,所以1 sample = 4 bytes

. 如果采樣率是44.1khz或者或回放頻率是44100 采樣/秒,那么1個采樣是1/44100,或者1/44毫秒。因此44100個采樣就等于1秒鐘的數據。

下面的公式可以用來在不同的術語間進行轉換:

. ms = samples * 1000 / samplerate.

. samples = ms * samplerate / 1000.

. samplerate = samples * 1000 / ms.

. bytes = samples * bits * channels / 8.

. samples = bytes * 8 / bits / channels.

一些函數如Sound::getLength 提供了以毫秒、字節和采樣為單位的長度值,這樣就不必再使用上述公式計算了。

聲音——采樣 vs 壓縮采樣 vs

加載聲音有三種方式:一是將靜態幀解壓后以PCM格式裝入內存;二是以其原始格式裝入內存,并在運行時解壓;三是將聲音流化后并從外部媒介(如硬盤或CD)實時(in chunks)解碼。

. "Samples" 適合那些需要多次播放的小的聲音片段,例如音效。它播放時占用很少的CPU,并且能使用硬件加速。參見FMOD_CREATESAMPLE

. "Streams" 適合那些因為太大而無法載入內存的聲音,聲音會被流化并裝入到一小段由FMOD管理的環形緩沖中。這會占用少量CPU和硬盤帶寬,具體視文件格式而定。舉個例子,實時解碼MP3會比播放一個PCM(未壓縮WAV)文件占用更多的CPU。一個流式的聲音只能播放一次,因為一個流只有一個文件句柄和一個環形緩沖。參見FMOD_CREATESTREAM.

. "Compressed samples" 是一個新的高級選項,它允許用戶將一個確定格式的壓縮文件裝載到內存中,并且不需要對其解壓。用CPU進行軟件混合,沒有stream的只能播放一次的限制。它比標準的PCM采樣占用更多的CPU,但由于不需要訪問硬盤且使用更少的緩沖,因此比streamCPU的占用更少。參見FMOD_CREATECOMPRESSEDSAMPLE.

你可能注意到術語"Sample""Stream"都沒有對應的類名,那是因為所有的FMOD APIs 都統一使用"Sound"類型。
默認情況下,System::createSound 會將整個聲音文件解碼到內存中
要使用流進行實時播放且節約內存的話,創建聲音時使用FMOD_CREATESTREAM標記,或者使用helper函數System::createStream,其本質和System::createSound相同,只是自動使用了FMOD_CREATESTREAM標記。
要創建一個壓縮采樣則在System::createSound中使用FMOD_CREATECOMPRESSEDSAMPLE標記。

硬件 vs 軟件

FMOD Ex支持通過DirectSound或者控制臺硬件API對音頻回放使用硬件加速,但也可以使用自己的軟件混合機制。
由于基于硬件和軟件的音頻回放的某些特征,所以通常硬件和軟件交替使用。
Hardware sounds(
使用FMOD_HARDWARE創建,CPU占用率低,響應時間短,可以訪問硬件混響),例如EAX4
Hardware sounds
在某些方式下也有其局限性,例如DirecSound就僅限于Windows,靜態采樣不支持任意位置的循環點(循環播放整個sound或者不循環), 不能播放非混響音效(例如chorus, distortion, lowpass etc)

Software sounds (
使用FMOD_SOFTWARE創建,雖然有時會占用更多的CPU,但它能做更多的事,如復雜循環、實時解析、音效和采樣精確同步)

Hardware vs Software.

Hardware
優點

. Usually lower latency. (Although on consoles or ASIO output in windows, using FMOD_SOFTWARE can have extremely low latency as low as 2-5ms)

. Less CPU time. (Although on Windows software is a lot faster due to bad hardware sound card driver design, and inefficiencies in the DirectSound API).

. On Windows, access to EAX2, EAX3, EAX4, I3DL2 reverb per voice. (FMOD Ex has its own high quality I3DL2 reverb solution in software, but may not be as flexible or have the quality of EAX4 for example.).

. Free hardware obstruction / occlusion (this is usually equivalent to a lowpass filter or reverb attenuation which can also be performed in software at some expense to the CPU), but only on EAX compatible sound cards on Windows. FMOD_SOFTWARE is cross platform.

. On PS2, PSP, XBox, GameCube, Wii, hardware voices can play back ADPCM compressed sound data with no cpu hit.

. On a limited number of soundcards, hardware 3d sounds will be realtime encoded into an AC3 Dolby Digital stream via a digital / optical output on the card so an amplifier can play it in 3D surround sound. FMOD software mixing now supports 5.1 and 7.1 mixing at slightly higher CPU expense, and will work via analog outputs such as soundcards with 3 stereo jacks to run to a 5.1 speaker setup.

Hardware
缺點

. Win32平臺上不支持點到點循環,XBoxGameCube平臺支持點到點循環,而PS2上僅支持循環起點,所以不具有跨平臺兼容性。

. No access to hardware effects per voice. 大多數PC聲卡和控制臺都不支持如lowpassdistortionflangechorus etc.等硬件加速音效。

. 沒有循環計數控制。一個聲音要么被無限次地循環,要么就不循環。

. 特性支持不一致。例如PS2不支持EAX混響,且3D音效的執行通常聽上去不同。

. 有時比FOMDWindows上的軟件混合速度慢許多。虛擬聲音在換進/出時導致的大量狀態變化會帶來很大的硬件開銷(明顯的幀率下降),而軟件卻不會。

Software
優點

. Consistent sound on every platform, there is no variation in playback.

. Sample accurate synchronization callbacks and events.

. Compressed sample playback support without using streams.

. Cross platform reverb.

. Complex looping and loop counts.

. Reverse sample playback.

. Spectrum analysis.

. Filters per channel or for the global mix, to perform effects such as lowpass, distortion, flange, chorus etc.

. Complex DSP network construction for realtime sound synthesis.

. Access to final mix buffer to allow analyzing, drawing to screen, or saving to file.

Software
缺點

. 某些音頻設備的響應時間(win32waveout輸出)可能會很長。

. 內存占用量更大(分配混合單元和混合緩沖,或將聲音儲存在主存而非聲卡緩存中)

Channels and sounds.

當你加載完你的聲音后就須要播放,這時會用到System::playSound函數,它返回一個Channel / FMOD_CHANNEL句柄。
參數channelid通常設為FMOD_CHANNEL_FREE,表示FMOD將自動選擇一個未使用的通道來播放。

2D vs 3D.

A 3D sound source is a channel that has a position and a velocity. When a 3D channel is playing, its volume, speaker placement and pitch will be affected automatically based on the relation to the listener.
A listener is the player, or the game camera. It has a position, velocity like a sound source, but it also has an orientation.

listener
source間的相對距離決定音量
listener
source 間的相對速度決定音調(多普勒現象)
listener
相對于source 的方位決定左右聲道平衡揚聲器位置

2D sound
不受3D soundlistener的影響 ,沒有多普勒現象,不衰減,也不受揚聲器位置影響。
創建2D sound可以調用Channel::setSpeakerMixChannel::setSpeakerLevelsChannel::setPan
創建3D sound可以調用所有函數名中含有3D的函數.

For a more detailed description of 3D sound, read the tutorial in the documentation on 3D sound.

 

 

 

 

 

 

 

 

 

 

 

()[FMOD編程指南]2.GETTING STARTED

 

GETTING STARTED.

導言

FMOD Ex API被設計得非常直觀和靈活,本教程將簡要介紹引擎的使用方法,并對使用中涉及的相關問題做出解釋。

配置——What to include and what to link.

查閱文檔中的"Platform specific issues",找出指定平臺上要使用FMOD Ex函數所需鏈接的文件。

C/C++中,如果只須使用C接口,則包含"fmod.h",要使用C++接口則須包含"fmod.hpp"
注意:常量、回調函數、宏定義和枚舉類型都在fmod.h中,所以fmod.hpp也包含fmod.h,如果你使用C++的話就必須交叉使用。

對于DelphiC#Visual Basic,都有其對應的頭文件可供在程序中使用。

初始化

要初始化fmod,最簡單的方法就是調用System::init函數,FMOD會使用默認參數來配置聲卡和其他設置。

在查看文檔中的System::init函數時,要記住maxchannels參數是你在游戲中可以同時播放聲音的最大數量,該數與聲卡或軟件混合器無關。

這些聲音是 虛擬聲音(virtual voices)。這意味著你可以同時播放任意多的聲音,而不用擔心硬件或軟件資源問題。
你可以在游戲中安全地播放每個聲音,而無須擔心System::playSound超出播放上限或搶占其它聲音。因此只要你喜歡,你可以將maxchannels設置為任意大的數,如11002001000
注意:同時播放1000個聲音并不會音像性能,因為它們中的大部分是聽不見的 (聽不見的聲音被虛擬化)。而FMOD Ex虛擬聲音管理器決定哪些聲音能聽見,哪些聽不見只需要很小的系統開銷。
下面我們看一個初始化FMOD Ex的例子。

FMOD_RESULT result;

FMOD::System *system;

result =system); // 創建主system對象

if (result != FMOD_OK)

{

printf("FMOD error! (%d) %s\n", result, FMOD_ErrorString(result));

exit(-1);

}

result = system->init(100, FMOD_INIT_NORMAL, 0); // 初始化FMOD

if (result != FMOD_OK)

{

printf("FMOD error! (%d) %s\n", result, FMOD_ErrorString(result));

exit(-1);

}

這是最基本的初始化FOMD引擎的方法,使用了100個虛擬聲音。
注意:mods3mxmitmidi格式的文件播放時只使用一個聲音,不要以為在這里增大數量就可以使用多個聲音來播放這些格式的文件。這些格式的都使用它們自己的internal pool voices

配置選項

如果你不想使用默認設置的話,可以自行設定輸出硬件、FOMD資源使用和其他配置選項。
這些操作都必須在System::init函數調用前進行。
常用配置如下:

. System::setOutput選擇輸出方式。例如你可以在Windows上選擇DirectSoundWinMMASIOno-soundwave-writer或其他輸出選項,每個平臺都有不同的選擇。如果你只是要使用默認配置,就不需要調用它。

. System::setDriver選擇用于播放的設備驅動。當你擁有不止一塊聲卡并且不想使用默認聲卡的時候,這個函數就很有用了。你需要用System::getNumDrivers函數來獲取設備數,用System::getDriverName函數來獲取驅動名稱以供用戶選擇。

. System::setHardwareChannels使用這個函數來限制硬件聲音的數量,或設定在reverting to 100% software mixed voice support之前的最小硬件聲音數量。“minimum”選項用于保證同時至少能聽到的聲音數量。

. System::setSoftwareChannels使用這個函數來設定FMOD通道使用的軟件混合聲音的數量。 This will be purely for polyphony reasons or CPU / memory resource usage reasons. 使用mod/s3m/xm/it/midi這些格式時,不要指望使用它來增加聲音的數量,它們不使用通道的pool而使用自己的。

. System::setSoftwareFormat用于改變FMOD軟件混合器的設置。包括采樣率、輸出模式(integer vs float)、輸出通道數(multi-output channel ASIO devices)、內存使用和混合質量。

. System::setDSPBufferSize如果在很慢的機器上或非良好的聲卡驅動上出現聲音抖動,就需要使用這個函數。它可以改變軟件混合器的響應時間,但誤用的話也可能影響性能。一些人可能想讓用戶在低響應時間高兼容性兩種模式間做出選擇,可以通過調整緩沖大小來達到犧牲響應時間換取穩定性的目的。

. System::setSpeakerMode設置揚聲器輸出模式。此函數只對FMOD軟件混合引擎起作用,默認值為stereo (5.1 on xbox and xbox360 and 7.1 on ps3),可以按需要任意更改。注意:聲道數越多,占用的內存也越多。

下面的例子使用了一些配置項來初始化FMOD要記住這些選項都是可選的,如果不需要就不用設置,在你沒有弄懂其真正含義前,千萬不要僅僅將下面的代碼復制再粘貼! 例如,如果用戶沒有5.1聲道的系統,你就不能僅僅將揚聲器模式設定為5.1

FMOD_RESULT result;

FMOD::System *system;

result =system); //創建主system對象

ERRCHECK(result);

// 設置揚聲器模式為5.1聲道

result = system->setSpeakerMode(FMOD_SPEAKERMODE_5POINT1); ERRCHECK(result);

// 允許同時播放100個軟件混合聲音

result = system->setSoftwareChannels(100); ERRCHECK(result);

// 要求聲卡至少要有322D3D硬件聲音,如果聲音數超過64,就限制為64

result = system->setHardwareChannels(32, 64, 32, 64); ERRCHECK(result);

// 初始化FOMD,使用100個虛擬聲音

result = system->init(200, FMOD_INIT_NORMAL, 0);

ERRCHECK(result);

加載與播放

要播放聲音,你必須先加載!
使用System::createSoundSystem::createStream就可以完成這項工作。
默認情況下,系統會嘗試將整個聲音解壓到內存中(如果使用 System::createSound函數),而和sample不同的是stream(System::createStream創建)是在運行時解碼,僅使用很少的內存作為緩沖,這就是為什么大文件最好用stream的原因。
更多請參見術語/基本原理

下面是一個加載MP3文件的例子,默認條件下System::createSound函數將整個MP3解壓成16bitPCM格式,這就意味著將占用比文件本身大許多倍的內存。

FMOD::Sound *sound;
// FMOD_DEFAULT
等效于FMOD_LOOP_OFF | FMOD_2D | FMOD_HARDWARE.

result = system->createSound("../media/wave.mp3", FMOD_DEFAULT, 0, &sound);

ERRCHECK(result);

 

下面是一個用stream打開MP3文件的例子。System::createStream函數將打開文件并預緩沖小部分數據,然后就可以在System::playSound調用時直接播放了。

FMOD::Sound *sound;
// FMOD_DEFAULT
等效于FMOD_LOOP_OFF | FMOD_2D | FMOD_HARDWARE.

result = system->createStream("../media/wave.mp3", FMOD_DEFAULT, 0, &sound);

ERRCHECK(result);



指定用軟件混合就必須使用FMOD_SOFTWARE標記。如果你想要使用如DSP effectsspectrum analysisgetwavedatapoint to point looping和其它更多的高級技術,就必須使用軟件混合。

FMOD::Sound *sound;
//
使用軟件混合

result = system->createSound("../media/wave.mp3", FMOD_SOFTWARE, 0, &sound);

ERRCHECK(result);



下一個例子是將MP3sample的形式載入內存而不解壓,使用 FMOD_CREATECOMPRESSEDSAMPLE標記。此時如果沒有指定FMOD_HARDWAREFMOD_SOFTWARE,將默認為軟件混合。硬件聲音回放不支持這個標記,除非格式為ADPCM on XboxVAG on PS2/PSPGCADPCM on Gamecube/Wii Platforms like PS3 and Xbox 360 are all done one the cpu (usually a different core to the main cpu so it does not affect performance).

FMOD::Sound *sound;
// FMOD_CREATECOMPRESSEDSAMPLE
標記讓sample先嘗試直接播放(不解壓到內存),但僅限于IMA ADPCMMP2MP3XMA格式

result = system->createSound("../media/wave.mp3", FMOD_CREATECOMPRESSEDSAMPLE, 0, &sound);

ERRCHECK(result);

警告! 必須謹慎使用這種模式,它看上去和PCM sample很相似,但它會在運行時導致巨大CPU開銷。FMOD按照聲音的壓縮格式,在播放時對其進行解碼。


現在,要播放soundstream只需簡單地調用System::playSound就行了。

FMOD::Channel *channel;

result = system->playSound(FMOD_CHANNEL_FREE, sound, false, &channel);

ERRCHECK(result);

此時,聲音已經在后臺播放了!而你的程序將繼續執行。

關于playSound的注意事項:

. 如果不需要的話,可以不必獲取channel句柄,可以將其設為0NULL。如果你不需要更改這個sound實例,或者這個聲音很短(不循環),就可以省去它。例如:

result = system->playSound(FMOD_CHANNEL_FREE, sound, false, 0);

ERRCHECK(result);

. 可以在開始播放時暫停,這樣就可以更改聲音的屬性而不會被用戶聽見,這就是“paused”參數的用處所在。例如,如果你將paused設為true,再設置音量為0.5,然后解除暫停,此時聲音就會一一般的音量播放。但如果你是將paused設為false,而其它操作相同的話,你會聽見聲音開始時瞬間是全音量播放的,用戶可不希望聽到。

result = system->playSound(FMOD_CHANNEL_FREE, sound, true, &channel);

ERRCHECK(result);

// 暫停時設定音量

result = channel->setVolume(0.5f);

ERRCHECK(result);

// 聲音從這里才開始播放

result = channel->setPaused(false);

ERRCHECK(result);

. 一個“channel”就是一個聲音的實例。一個聲音你可以同時播放多次,每次播放都會得到一個新的channel句柄,stream除外,它只能同時播放一次,如果你嘗試多次播放,只會重復播放當前stream并返回同上次一樣的channel句柄。這是因為stream只有一個緩沖和一個文件句柄。要同時播放兩個stream就必須打開兩次再播放兩次。

. 始終使用FMOD_CHANNEL_FREEFMOD會使用通道管理器自動為你選擇一個未使用的channel。如果希望使用一個現有的channel來播放,就使用FMOD_CHANNEL_REUSE標記,這樣可以避免每次調用System::playSound函數都產生一個新的實例。

. 不需要“free”“release”一個channel句柄。所有的channel都位于你使用System::init所創建的一個pool中。當聲音停止后,channel可以被復用;如果所有的channel都處于播放狀態,那么其中一個優先級最低的會被搶占。其實只需增大System::init中的通道數就可以避免發生這樣的情況。

. 一個channel會在播放結束時即刻失效。這意味著你不能再對其進行更改,即使做了也沒有實際意義,因為它不可能再播放了。絕大多數情況下,引用一個已失效的channel會導致一個FMOD_ERR_INVALID_HANDLE錯誤。

Update. (This is important!)

在每一幀中調用System::update函數是很重要的,但不需要多次調用,那樣只會影響效率。
該函數用于更新FMOD Ex的以下內容:

. Platform specific routines 例如向PS2IOP發送一個frame command packet。在這個平臺上,不調用update的話就聽不到聲音。

. Virtual voice emulation 不調用update,虛擬聲音就不會播放。

. 3D voice calculation 如果不調用update,就算channellistener已經正確設置,也無法聽到聲音移動的3D音效。

. Geometry engine FMODpolygon/geometry引擎需要通過update來啟用。否則用戶定義的occlusion/obstruction特性將無法呈現。

. Non realtime output FMOD_OUTPUTTYPE_NOSOUND_NRTFMOD_OUTPUTTYPE_WAVWRITER_NRT標記需要此函數才能更新到輸出(如用FMOD_OUTPUTTYPE_WAVWRITER_NRT寫出到文件)

. Streaming engine 如果指定了FMOD_INIT_STREAM_FROM_UPDATE標記,如果用戶希望在主線程中自己驅動流引擎,就必須有規律地調用update,否則會導致抖動和緩沖溢出。

關閉

調用System::release函數來關閉輸出設備并釋放對象關聯的內存。
你不必人工關閉channelsound,這些都在System::release中自動完成。
當然,你也可以手動關閉它們,這是個很好的編程練習(雖然是多余的)
如果你要釋放system對象就不需要調用System::close函數了,在System::release中已經包含了對System::close的調用。

資源使用配制

在程序開發中,一些開發人員希望和其它程序一樣用自己的函數來訪問所有的磁盤或內存。
FMOD Ex中你可以通過System::setFileSystem函數來設置FMOD文件系統使你自己的文件程序。

要讓FMOD使用你的內存系統,或將FMOD限制在一個內存塊中,使用Memory_Initialize

注意! XboxXBox 360中,必須給FMOD提供一個塊內存。Xbox 360上必須使用XPhysicalAlloc來分配這塊內存。更多參見"Platform specific issues"

 

 

 

 

 

 

 

 

 

 

Feedback

# re: FMOD Ex文檔前兩章翻譯(轉)  回復  更多評論   

2009-12-28 16:36 by 陳梓瀚(vczh)
幾年前就用過FMODEX了,這是個好東西,而且demo也非常好,基本上不用看文檔看一眼demo的代碼就知道怎么回事了。所以我覺得如果想讓文章更有價值的話你可以寫教程。

# re: FMOD Ex文檔前兩章翻譯(轉)[未登錄]  回復  更多評論   

2010-01-02 23:35 by SonicMisora
HYF神牛威武
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品福利在线观看网址| 欧美大片一区二区三区| 国产精品久久久999| 欧美精品18+| 久久精品麻豆| 久久av资源网站| 午夜精品久久久久影视| 午夜精品福利一区二区三区av| 日韩视频一区二区三区在线播放免费观看| 欧美激情一区二区久久久| 欧美jizz19性欧美| 欧美激情视频一区二区三区免费 | 国产自产v一区二区三区c| 欧美不卡在线视频| 美女图片一区二区| 久久久久综合网| 欧美大片国产精品| 欧美午夜精彩| 狠狠色狠狠色综合日日小说| 亚洲人成久久| 亚洲一区3d动漫同人无遮挡| 久久精品五月| 亚洲人成在线观看网站高清| 一本色道久久综合亚洲二区三区| 亚洲一级在线观看| 久久国内精品视频| 欧美日本在线播放| 国产精品尤物福利片在线观看| 亚洲第一狼人社区| 亚洲综合色丁香婷婷六月图片| 麻豆成人在线观看| 亚洲一区不卡| 免费欧美在线| 国产精品一二三四| 亚洲日本电影在线| 性做久久久久久久免费看| 欧美福利在线| 亚洲综合视频网| 欧美va亚洲va国产综合| 国产日韩亚洲欧美精品| 亚洲欧洲精品成人久久奇米网| 午夜精品久久久久影视| 亚洲国产精品久久久久秋霞蜜臀| 性欧美1819sex性高清| 欧美日韩国产黄| 在线观看欧美黄色| 久久av老司机精品网站导航 | 亚洲免费观看高清完整版在线观看熊 | 国产精品久久久久久亚洲调教| 黄色精品一区二区| 亚洲女人天堂成人av在线| 欧美第十八页| 久久国内精品自在自线400部| 国产精品精品视频| 99精品欧美一区二区蜜桃免费| 老司机精品视频一区二区三区| 亚洲视频免费观看| 欧美区亚洲区| 欧美一区二区三区在线视频 | 日韩小视频在线观看| 免费视频最近日韩| 久久综合久久88| 一区二区在线观看视频| 久久久久久久综合日本| 亚洲欧美在线x视频| 国产精品永久| 久久国产精品久久久久久久久久| 亚洲午夜精品在线| 国产精品毛片大码女人| 性色一区二区三区| 欧美一区二区三区四区在线 | 国产一区二区0| 欧美一区午夜精品| 亚洲欧美中文日韩v在线观看| 国产精品久久中文| 欧美一区二区日韩一区二区| 亚洲欧美中文日韩v在线观看| 国产精品网站在线观看| 久久精品91| 久久久成人网| 亚洲欧洲一二三| 99re6这里只有精品视频在线观看| 欧美三日本三级少妇三2023| 先锋影音网一区二区| 亚洲欧美日本日韩| 国产自产在线视频一区| 欧美大片在线看| 欧美日韩三级视频| 久久九九精品| 欧美国产一区二区三区激情无套| aa亚洲婷婷| 亚洲欧美中文字幕| 亚洲电影在线免费观看| 亚洲精品在线免费| 欧美性大战xxxxx久久久| 久久久久综合| 欧美区一区二| 久久精品中文字幕一区二区三区| 久久综合影视| 午夜精品一区二区三区在线| 久久久青草婷婷精品综合日韩| 一区二区高清| 欧美一区午夜精品| 日韩视频免费| 欧美一区二区三区的| 一区二区日韩| 久久不见久久见免费视频1| 亚洲人体1000| 亚洲综合第一页| 亚洲六月丁香色婷婷综合久久| 亚洲欧美乱综合| 亚洲日本免费电影| 久久精品国产一区二区三| 国产精品久久久久久久久久直播| 国内精品视频666| 亚洲免费观看视频| 极品裸体白嫩激情啪啪国产精品| 99国产麻豆精品| 韩日午夜在线资源一区二区| 99精品视频一区二区三区| 国产在线欧美日韩| 一级成人国产| 亚洲毛片在线看| 久久久久久亚洲综合影院红桃| 香蕉久久一区二区不卡无毒影院| 欧美大片一区二区三区| 久久午夜电影网| 国产精品第三页| 亚洲精品久久久蜜桃| 在线欧美日韩国产| 欧美亚洲免费高清在线观看| 亚洲免费在线视频一区 二区| 欧美精品在线观看播放| 亚洲电影激情视频网站| 在线高清一区| 久久精品亚洲热| 久久精品视频导航| 国产美女精品一区二区三区| 在线视频精品一区| 亚洲一区欧美激情| 欧美视频在线观看一区| 夜夜夜久久久| 亚洲香蕉网站| 欧美视频精品一区| 日韩视频在线观看免费| 亚洲视频大全| 国产精品嫩草久久久久| 中文av字幕一区| 亚洲综合99| 国产欧美二区| 久久疯狂做爰流白浆xx| 老司机免费视频一区二区| 亚洲第一免费播放区| 美国成人毛片| 91久久线看在观草草青青| 一本色道综合亚洲| 国产精品高潮呻吟久久av无限| 在线亚洲+欧美+日本专区| 午夜电影亚洲| 国语自产在线不卡| 麻豆精品视频在线观看| 亚洲裸体视频| 亚洲欧美另类国产| 久久影音先锋| 日韩网站免费观看| 国产精品国产三级国产普通话三级| 亚洲一区二区在线观看视频| 久久婷婷麻豆| 在线亚洲免费视频| 国产婷婷97碰碰久久人人蜜臀| 欧美亚洲专区| 91久久中文字幕| 性欧美暴力猛交另类hd| 影音欧美亚洲| 国产精品久久久久久久久久尿| 久久国产天堂福利天堂| 亚洲激情偷拍| 久久精品一区二区三区四区 | 西瓜成人精品人成网站| 你懂的国产精品| 国产综合色产在线精品| 欧美国产日韩亚洲一区| 中国女人久久久| 精品成人乱色一区二区| 欧美久久电影| 欧美一级艳片视频免费观看| 亚洲国产中文字幕在线观看| 午夜精品影院| 日韩香蕉视频| 永久域名在线精品| 国产精品日韩精品欧美精品| 美女主播一区| 午夜欧美精品| 日韩午夜激情av| 欧美成人精品高清在线播放| 欧美一区影院| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲国产高清自拍| 欧美在线亚洲一区| 亚洲伦理一区|