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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

开大你的音响,感受HTML5 Audio API带来的视听盛宴

發布時間:2023/12/18 HTML 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 开大你的音响,感受HTML5 Audio API带来的视听盛宴 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

話說HTML5的炫酷真的是讓我愛不釋手,即使在這個提到IE就傷心不完的年代。但話又說回來,追求卓越Web創造更美世界這樣高的追求什么時候又與IE沾過邊兒呢?所以當你在看本文并且我們開始討論HTML5等前沿東西的時候,我們默認是把IE排除在外的。本文的例子可以工作在最新的Chrome及Firefox瀏覽器下,其他瀏覽器暫未測試。

// 若下方未出現演示頁面請刷新。

?你也可以點此全屏演示? 或者前往GitHub進行代碼下載然后本地運行。

你還可以?下載示例音樂(如果你手頭沒有音頻文件的話)

文件列表:
bbc_sherlock_openning.mp3
Neptune Illusion Dennis Kuo .mp3
單曲Remix ┃ 愛上這個女聲 放進專輯里私藏 夜電播音員.mp3
愛啦啦.mp3

最后,喜歡的朋友可以去GitHub星我(star me)叉我(fork me)。

?

這里將要介紹的HTML5 音頻處理接口與Audio標簽是不一樣的。頁面上的Audio標簽只是HTML5更語義化的一個表現,而HTML5提供給JavaScript編程用的Audio API則讓我們有能力在代碼中直接操作原始的音頻流數據,對其進行任意加工再造。

展示HTML5 Audio API?最典型直觀的一個例子就是跟隨音樂節奏變化的頻譜圖,也稱之為可視化效果。本文便是以此為例子展示JavaScript中操作音頻數據的。

文中代碼僅供參考,實際代碼以下載的源碼為準。

了解Audio API

一段音頻到達揚聲器進行播放之前,半路對其進行攔截,于是我們就得到了音頻數據了,這個攔截工作是由window.AudioContext來做的,我們所有對音頻的操作都基于這個對象。通過AudioContext可以創建不同各類的AudioNode,即音頻節點,不同節點作用不同,有的對音頻加上濾鏡比如提高音色(比如BiquadFilterNode),改變單調,有的音頻進行分割,比如將音源中的聲道分割出來得到左右聲道的聲音(ChannelSplitterNode),有的對音頻數據進行頻譜分析即本文要用到的(AnalyserNode)。

瀏覽器中的Audio API

統一前綴

JavaScript中處理音頻首先需要實例化一個音頻上下文類型window.AudioContext。目前Chrome和Firefox對其提供了支持,但需要相應前綴,Chrome中為window.webkitAudioContext,Firefox中為mozAudioContext。所以為了讓代碼更通用,能夠同時工作在兩種瀏覽器中,只需要一句代碼將前綴進行統一即可。

window.AudioContext = window.AudioContext || window.webkitAudioContext || window.mozAudioContext || window.msAudioContext;

?

這是一種常見的用法,或者操作符'||' 連接起來的表達式中,遇到真值即返回。比如在Chrome中,window.AudioContext為undefined,接著往下走,碰到window.webkitAudioContext不為undefined,表達式在此判斷為真值,所以將其返回,于是此時window.AudioContext =window.webkitAudioContext ,所以代碼中我們就可以直接使用window.AudioContext 而不用擔心具體Chrome還是Firefox了。

var audioContext=new window.AudioContext();

?

考慮瀏覽器不支持的情況

但這還只是保證了在支持AudioContext的瀏覽器中能正常工作,如果是在IE中,上面實例化對象的操作會失敗,所以有必要加個try catch語句來避免報錯。

try {var audioContext = new window.AudioContext(); } catch (e) {Console.log('!Your browser does not support AudioContext'); }

?

這樣就安全多啦,媽媽再不擔心瀏覽器報錯了。

組織代碼

為了更好地進行編碼,我們創建一個Visualizer對象,把所有相關屬性及方法寫到其中。按照慣例,對象的屬性直接寫在構造器里面,對象的方法寫到原型中。對象內部使用的私有方法以短橫線開頭,不是必要但是種好的命名習慣。

其中設置了一些基本的屬性將在后續代碼中使用,詳細的還請參見源碼,這里只簡單展示。

var Visualizer = function() {this.file = null, //要處理的文件,后面會講解如何獲取文件this.fileName = null, //要處理的文件的名,文件名this.audioContext = null, //進行音頻處理的上下文,稍后會進行初始化this.source = null, //保存音頻 }; Visualizer.prototype = {_prepareAPI: function() {//統一前綴,方便調用window.AudioContext = window.AudioContext || window.webkitAudioContext || window.mozAudioContext || window.msAudioContext;//這里順便也將requestAnimationFrame也打個補丁,后面用來寫動畫要用window.requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.msRequestAnimationFrame;//安全地實例化一個AudioContext并賦值到Visualizer的audioContext屬性上,方便后面處理音頻使用try {this.audioContext = new AudioContext();} catch (e) {console.log('!妳的瀏覽器不支持AudioContext:(');console.log(e);}}, }

?

加載音頻文件

不用說,你肯定得先在代碼中獲取到音頻文件,才能夠對其進一步加工。

文件獲取的方法

讀取文件到JavaScript可以有以下三種方法:

1.新開一個Ajax異步請求來獲取文件,如果是本地測試需要關掉瀏覽器的同源安全策略才能獲取成功,不然只能把網頁放到服務器上才能正常工作。

具體說來,就是先開一個XMLHttpRequest請求,將文件路徑作為請求的URL,并且設置請求返回類型為'ArrayBuffer',這種格式方便我們后續的處理。下面是一個例子。

loadSound("sample.mp3"); //調用 // 定義加載音頻文件的函數 function loadSound(url) {var request = new XMLHttpRequest(); //建立一個請求request.open('GET', url, true); //配置好請求類型,文件路徑等request.responseType = 'arraybuffer'; //配置數據返回類型// 一旦獲取完成,對音頻進行進一步操作,比如解碼request.onload = function() {var arraybuffer = request.response;}request.send(); }

?

2.通過文件類型的input來進行文件選擇,監聽input的onchnage事件,一擔文件選中便開始在代碼中進行獲取處理,此法方便,且不需要工作在服務器上

3.通過拖拽的形式把文件拖放到頁面進行獲取,比前面一種方法稍微繁雜一點(要監聽'dragenter','dragover','drop'等事件)但同樣可以很好地在本地環境下工作,無需服務器支持。

更多在JavaScript中獲取及處理文件的方法可以見這里

不用說,方法2和3方便本地開發與測試,所以我們兩種方法都實現,既支持選擇文件,也支持文件拖拽。

通過選擇獲取

在頁面放一個file類型的input。然后在JavaScript中監聽它的onchange事件。此事件在input的值發生變化時觸發。

對于onchange事件,在Chrome與Firefox中還有一點小的區別,如果你已經選擇了一個文件,此時Input就有值了,如果你再次選擇同一文件,onchange事件不會觸發,但在Firefox中該事件會觸發。這里只是提及一下,關系不大。

<label for="uploadedFile">Drag&drop or select a file to play:</label> <input type="file" id="uploadedFile"></input>

?

當然,這里同時也把最后我們要畫圖用的canvas也一起放上去吧,后面就不用多話了。所以下面就是最終的HTML了,頁面基本不會變,大量的工作是在JavaScript的編寫上。

<div id="wrapper"><div id="fileWrapper" class="file_wrapper"><div id="info">HTML5 Audio API showcase | An Audio Viusalizer</div><label for="uploadedFile">Drag&drop or select a file to play:</label><input type="file" id="uploadedFile"></input></div><div id="visualizer_wrapper"><canvas id='canvas' width="800" height="350"></canvas></div> </div>

?

再稍微寫一點樣式

#fileWrapper {transition: all 0.5s ease; } #fileWrapper: hover {opacity: 1!important; } #visualizer_wrapper {text-align: center; }

?

向Visualizer對象的原型中新加一個方法,用于監聽文件選擇既前面討論的onchange事件,并在事件中獲取選擇的文件。

_addEventListner: function() {var that = this,audioInput = document.getElementById('uploadedFile'),dropContainer = document.getElementsByTagName("canvas")[0];//監聽是否有文件被選中audioInput.onchange = function() {//這里判斷一下文件長度可以確定用戶是否真的選擇了文件,如果點了取消則文件長度為0if (audioInput.files.length !== 0) {that.file = audioInput.files[0]; //將文件賦值到Visualizer對象的屬性上that.fileName = that.file.name;that._start(); //獲取到文件后,開始程序,這個方法會在后面定義并實現};}; }

?

上面代碼中,我們假設已經寫好了一個進一步處理文件的方法_start(),在獲取到文件后賦值給Visualizer對象的file屬性,之后在_start()方法里我們就可以通過訪問this.file來得到該文件了,當然你也可以直接讓_start()方法接收一個file參數,但將文件賦值到Visualizer的屬性上的好處之一是我們可以在對象的任何方法中都能獲取該文件 ,不用想怎么用參數傳來傳去。同樣,將文件名賦值到Visualizer的fileName屬性當中進行保存,也是為了方便之后在音樂播放過程中顯示當前播放的文件。

通過拖拽獲取

我們把頁面中的canvas作為放置文件的目標,在它身上監聽拖拽事件'dragenter','dragover','drop'等。

還是在上面已經添加好的_ addEventListner方法里,接著寫三個事件監聽的代碼。

dropContainer.addEventListener("dragenter", function() {that._updateInfo('Drop it on the page', true); }, false); dropContainer.addEventListener("dragover", function(e) {e.stopPropagation();e.preventDefault();e.dataTransfer.dropEffect = 'copy'; //設置文件放置類型為拷貝 }, false); dropContainer.addEventListener("dragleave", function() {that._updateInfo(that.info, false); }, false); dropContainer.addEventListener("drop", function(e) {e.stopPropagation();e.preventDefault();that.file = e.dataTransfer.files[0]; //獲取文件并賦值到Visualizer對象that.fileName = that.file.name;that._start(); }, false);

?

注意到上面代碼中我們在'dragover'時設置文件拖放模式為'copy',既以復制的形式獲取文件,如果不進行設置無法正確獲取文件

然后在'drop'事件里,我們獲得文件以進行一下步操作。

用FileReader讀取文件為ArrayBuffer

下面來看這個_start()方法,現在文件得到 了,但首先需要將獲取的文件轉換為ArrayBuffer格式,才能夠傳遞給AudioContext進行解碼,所以接下來_start()方法中要干的事情就是實例化一個FileReader來將文件讀取為ArrayBuffer格式。

_start: function() {//read and decode the file into audio array buffervar that = this, //當前this指代Visualizer對象,賦值給that以以便在其他地方使用file = this.file, //從Visualizer對象上獲取前面得到的文件fr = new FileReader(); //實例化一個FileReader用于讀取文件fr.onload = function(e) { //文件讀取完后調用此函數var fileResult = e.target.result; //這是讀取成功得到的結果ArrayBuffer數據var audioContext = that.audioContext; //從Visualizer得到最開始實例化的AudioContext用來做解碼ArrayBufferaudioContext.decodeAudioData(fileResult, function(buffer) { //解碼成功則調用此函數,參數buffer為解碼后得到的結果that._visualize(audioContext, buffer); //調用_visualize進行下一步處理,此方法在后面定義并實現}, function(e) { //這個是解碼失敗會調用的函數console.log("!哎瑪,文件解碼失敗:(");});};//將上一步獲取的文件傳遞給FileReader從而將其讀取為ArrayBuffer格式fr.readAsArrayBuffer(file); }

?

注意這里我們把this賦值給了that,然后再 audioContext.decodeAudioData的回調函數中使用that來指代我們的Visualizer對象。這是因為作用域的原因。我們知道JavaScript中無法通過花括號來創建代碼塊級作用域,而唯一可以創建作用域的便是函數。一個函數就是一個作用域。函數內部的this指向的對象要視情況而定,就上面的代碼來說,它是audioContext。所以如果想要在這個回調函數中調用Visualizer身上方法或屬性,則需要通過另一個變量來傳遞,這里是that,我們通過將外層this(指向的是我們的Viusalizer對象)賦值給新建的局部變量that,此時that便可以傳遞到內層作用域中,而不會與內層作用域里面原來的this相沖突。像這樣的用法在源碼的其他地方也有使用,細心的你可以下載本文的源碼慢慢研究。

所以,在 audioContext.decodeAudioData的回調函數里,當解碼完成得到audiobuffer文件(buffer參數)后,再把audioContext和buffer傳遞給Visualizer的_visualize()方法進一步處理:播放音樂和繪制頻譜圖。當然此時_visualize()方法還沒有下,下面便開始實現它。

創建Analyser分析器及播放音頻

上面已經將獲取的文件進行解碼,得到了audio buffer數據。接下來是設置我們的AudioContext以及獲取頻譜能量信息的Analyser節點。向Visualizer對象添加_visualize方法,我們在這個方法里完成這些工作。

播放音頻

首先將buffer賦值給audioContext。AudioContext只相當于一個容器,要讓它真正豐富起來需要將實際的音樂信息傳遞給它的。也就是將audio buffer數據傳遞給它的BufferSource屬性。

其實到了這里你應該有點暈了,不過沒關系,看代碼就會更明白一些,程序員是理解代碼優于文字的一種生物。

var audioBufferSouceNode = audioContext.createBufferSource(); audioBufferSouceNode.buffer = buffer;

?

就這么兩名,把音頻文件的內容裝進了AudioContext。

這時已經可以開始播放我們的音頻了。

audioBufferSouceNode.start(0);

?

這里參數是時間,表示從這段音頻的哪個時刻開始播放。

注意:在舊版本的瀏覽器里是使用onteOn()來進行播放的,參數一樣,指開始時刻。

但此時是聽不到聲音的,因為還差一步,需要將audioBufferSouceNode連接到audioContext.destination,這個AudioContext的destination也就相關于speaker(揚聲器)。

audioBufferSouceNode.connect(audioContext.destination); audioBufferSouceNode.start(0);

?

此刻就能夠聽到揚聲器傳過來動聽的聲音了。

_visualize: function(audioContext, buffer) {var audioBufferSouceNode = audioContext.createBufferSource();audioBufferSouceNode.connect(audioContext.destination);audioBufferSouceNode.buffer = buffer;audioBufferSouceNode.start(0); }

?

創建分析器

創建獲取頻譜能量值的analyser節點。

var analyser = audioContext.createAnalyser();

?

上面一步我們是直接將audioBufferSouceNode與audioContext.destination相連的,音頻就直接輸出到揚聲器開始播放了,現在為了將音頻在播放前截取,所以要把analyser插在audioBufferSouceNode與audioContext.destination之間。明白了這個道理,代碼也就很簡單了,audioBufferSouceNode連接到analyser,analyser連接destination。

audioBufferSouceNode.connect(analyser); analyser.connect(audioContext.destination);

?

然后再開始播放,此刻所有音頻數據都會經過analyser,我們再從analyser中獲取頻譜的能量信息,將其畫出到Canvas即可。

假設我們已經寫好了畫頻譜圖的方法_drawSpectrum(analyser);

_visualize: function(audioContext, buffer) {var audioBufferSouceNode = audioContext.createBufferSource(),analyser = audioContext.createAnalyser();//將source與分析器連接audioBufferSouceNode.connect(analyser);//將分析器與destination連接,這樣才能形成到達揚聲器的通路analyser.connect(audioContext.destination);//將上一步解碼得到的buffer數據賦值給sourceaudioBufferSouceNode.buffer = buffer;//播放audioBufferSouceNode.start(0);//音樂響起后,把analyser傳遞到另一個方法開始繪制頻譜圖了,因為繪圖需要的信息要從analyser里面獲取this._drawSpectrum(analyser); }

?

繪制精美的頻譜圖

接下來的工作,也是最后一步,也就是實現_drawSpectrum()方法,將跟隨音樂而靈動的柱狀頻譜圖畫出到頁面。

繪制柱狀能量槽

首先你要對數字信號處理有一定了解,嚇人的,不了解也沒多大關系。頻譜反應的是聲音各頻率上能量的分布,所以叫能量槽也沒有硬要跟游戲聯系起來的嫌疑,是將輸入的信號經過傅里葉變化得到的(大學里的知識終于還是可以派得上用場了)。但特么我知道這些又怎樣呢,僅僅為了裝逼顯擺而以。真實的頻譜圖是頻率上連續的,不是我們看到的最終效果那樣均勻分開鋸齒狀的。

通過下面的代碼我們可以從analyser中得到此刻的音頻中各頻率的能量值。

var array = new Uint8Array(analyser.frequencyBinCount); analyser.getByteFrequencyData(array);

?

此刻array中存儲了從低頻0Hz到高頻~Hz的所有數據。頻率做為X軸,能量值做為Y軸,我們可以得到類似下面的圖形。

你也可以上傳文件自己看一下效果?http://sandbox.runjs.cn/show/1kn8nr4l?

所以,比如array[0]=100,我們就知道在x=0處畫一個高為100單位長度的長條,array[1]=50,然后在x=1畫一個高為50單位長度的柱條,從此類推,如果用一個for循環遍歷array將其全部畫出的話,便是你看到的上圖。

采樣

但我們要的不是那樣的效果,我們只需在所有數據中進行抽樣,比如設定一個步長100,進度抽取,來畫出整個頻譜圖中的部分柱狀條。

或者先根據畫面的大小,設計好每根柱條的寬度,以及他們的間隔,從而計算出畫面中一共需要共多少根,再來推算出這個采樣步長該取多少,本例便是這樣實現的。說來還是有點暈,下面看簡單的代碼:

var canvas = document.getElementById('canvas'),meterWidth = 10, //能量條的寬度gap = 2, //能量條間的間距meterNum = 800 / (10 + 2); //計算當前畫布上能畫多少條 var step = Math.round(array.length / meterNum); //計算從analyser中的采樣步長

?

我們的畫布即Canvas寬800px,同時我們設定柱條寬10px , 柱與柱間間隔為2px,所以得到meterNum為總共可以畫的柱條數。再用數組總長度除以這個數目就得到采樣的步長,即在遍歷array時每隔step這么長一段我們從數組中取一個值出來畫,這個值為array[i*step]。這樣就均勻地取出meterNum個值,從而正確地反應了原來頻譜圖的形狀。

var canvas = document.getElementById('canvas'),cwidth = canvas.width,cheight = canvas.height - 2,meterWidth = 10, //能量條的寬度gap = 2, //能量條間的間距meterNum = 800 / (10 + 2), //計算當前畫布上能畫多少條ctx = canvas.getContext('2d'),array = new Uint8Array(analyser.frequencyBinCount); analyser.getByteFrequencyData(array); var step = Math.round(array.length / meterNum);計算從 analyser中的采樣步長 ctx.clearRect(0, 0, cwidth, cheight); //清理畫布準備畫畫 //定義一個漸變樣式用于畫圖 gradient = ctx.createLinearGradient(0, 0, 0, 300); gradient.addColorStop(1, '#0f0'); gradient.addColorStop(0.5, '#ff0'); gradient.addColorStop(0, '#f00'); ctx.fillStyle = gradient; //對信源數組進行抽樣遍歷,畫出每個頻譜條 for (var i = 0; i < meterNum; i++) {var value = array[i * step];ctx.fillRect(i * 12 /*頻譜條的寬度+條間間距*/ , cheight - value + capHeight, meterWidth, cheight); }

?

使用requestAnimationFrame讓柱條動起來

但上面繪制的僅僅是某一刻的頻譜,要讓整個畫面動起來,我們需要不斷更新畫面,window.requestAnimationFrame()正好提供了更新畫面得到動畫效果的功能,關于requestAnimationFrame的使用及更多信息可以從我的上一篇博文<requestAnimationFrame,Web中寫動畫的另一種選擇>中了解,這里直接給出簡單改造后的代碼,即得到我們要的效果了:跟隨音樂而靈動的頻譜柱狀圖。

var canvas = document.getElementById('canvas'),cwidth = canvas.width,cheight = canvas.height - 2,meterWidth = 10, //能量條的寬度gap = 2, //能量條間的間距meterNum = 800 / (10 + 2), //計算當前畫布上能畫多少條ctx = canvas.getContext('2d'); //定義一個漸變樣式用于畫圖 gradient = ctx.createLinearGradient(0, 0, 0, 300); gradient.addColorStop(1, '#0f0'); gradient.addColorStop(0.5, '#ff0'); gradient.addColorStop(0, '#f00'); ctx.fillStyle = gradient; var drawMeter = function() {var array = new Uint8Array(analyser.frequencyBinCount);analyser.getByteFrequencyData(array);var step = Math.round(array.length / meterNum); //計算采樣步長ctx.clearRect(0, 0, cwidth, cheight); //清理畫布準備畫畫for (var i = 0; i < meterNum; i++) {var value = array[i * step];ctx.fillRect(i * 12 /*頻譜條的寬度+條間間距*/ , cheight - value + capHeight, meterWidth, cheight);}requestAnimationFrame(drawMeter); } requestAnimationFrame(drawMeter);

?

查看效果?http://sandbox.runjs.cn/show/q1ng0jgp

繪制緩慢降落的帽頭

到上面一步,主要工作已經完成。最后為了美觀,再實現一下柱條上方緩慢降落的帽頭。

原理也很簡單,就是在繪制柱條的同時在同一X軸的位置再繪制一個短的柱條,并且其開始和結束位置都要比頻譜中的柱條高。難的地方便是如何實現緩慢降落。

首先要搞清楚的一點是,我們拿一根柱條來說明問題,當此刻柱條高度高于前一時刻時,我們看到的是往上沖的一根頻譜,所以這時帽頭是緊貼著正文柱條的,這個好畫。考慮相反的情況,當此刻高度要低于前一時刻的高度時,下方柱條是立即縮下去的,同時我們需要記住上一時刻帽頭的高度位置,此刻畫的時候就按照前一時刻的位置將Y-1來畫。如果下一時刻頻譜柱條還是沒有超過帽頭的位置,繼續讓它下降,Y-1畫出帽頭。

通過上面的分析,所以我們在每次畫頻譜的時刻,需要將此刻頻譜及帽頭的Y值(即垂直方向的位置)記到一個循環外的變量中,在下次繪制的時刻從這個變量中讀取,將此刻的值與變量中保存的上一刻的值進行比較,然后按照上面的分析作圖。

最后給出實現的代碼:

_drawSpectrum: function(analyser) {var canvas = document.getElementById('canvas'),cwidth = canvas.width,cheight = canvas.height - 2,meterWidth = 10, //頻譜條寬度gap = 2, //頻譜條間距capHeight = 2,capStyle = '#fff',meterNum = 800 / (10 + 2), //頻譜條數量capYPositionArray = []; //將上一畫面各帽頭的位置保存到這個數組ctx = canvas.getContext('2d'),gradient = ctx.createLinearGradient(0, 0, 0, 300);gradient.addColorStop(1, '#0f0');gradient.addColorStop(0.5, '#ff0');gradient.addColorStop(0, '#f00');var drawMeter = function() {var array = new Uint8Array(analyser.frequencyBinCount);analyser.getByteFrequencyData(array);var step = Math.round(array.length / meterNum); //計算采樣步長ctx.clearRect(0, 0, cwidth, cheight);for (var i = 0; i < meterNum; i++) {var value = array[i * step]; //獲取當前能量值if (capYPositionArray.length < Math.round(meterNum)) {capYPositionArray.push(value); //初始化保存帽頭位置的數組,將第一個畫面的數據壓入其中};ctx.fillStyle = capStyle;//開始繪制帽頭if (value < capYPositionArray[i]) { //如果當前值小于之前值ctx.fillRect(i * 12, cheight - (--capYPositionArray[i]), meterWidth, capHeight); //則使用前一次保存的值來繪制帽頭} else {ctx.fillRect(i * 12, cheight - value, meterWidth, capHeight); //否則使用當前值直接繪制capYPositionArray[i] = value;};//開始繪制頻譜條ctx.fillStyle = gradient;ctx.fillRect(i * 12, cheight - value + capHeight, meterWidth, cheight);}requestAnimationFrame(drawMeter);}requestAnimationFrame(drawMeter); }

?

Reference:

  • A question about how to make an audio visualizer:?http://stackoverflow.com/questions/3351147/html5-audio-visualizer
  • Web audio API:?http://www.html5rocks.com/en/tutorials/webaudio/intro/
  • File reader in JavaScript:?https://developer.mozilla.org/en-US/docs/Web/API/FileReader
  • Local audio visualizer source code:?http://cbrandolino.github.io/local-audio-visualizer/docs/local_audio_visualizer
  • Audio context from MDN:?https://developer.mozilla.org/en-US/docs/Web/API/AudioContext
  • Window.requestAnimationFrame():https://developer.mozilla.org/en/docs/Web/API/window.requestAnimationFrame
  • 3d visualizer with three.js :?http://do.adive.in/music/
  • A CodePen example:?http://s.codepen.io/Wayou/fullpage/auCLE?
  • Visualizer tutorial :?http://www.smartjava.org/content/exploring-html5-web-audio-visualizing-sound
  • Web audio examples from Google code :?http://chromium.googlecode.com/svn/trunk/samples/audio/index.html
  • ?

    轉自:https://www.cnblogs.com/Wayou/p/3543577.html#top

    總結

    以上是生活随笔為你收集整理的开大你的音响,感受HTML5 Audio API带来的视听盛宴的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    久久激五月天综合精品 | 国产欧美最新羞羞视频在线观看 | 免费人成网ww44kk44 | 天天操天天操天天操天天操天天操天天操 | 97超碰.com | 欧美中文字幕久久 | 国产美女精品久久久 | 中文字幕亚洲不卡 | 日韩在线第一 | avav片| 国产97色在线 | 成人午夜电影在线观看 | 又黄又爽的免费高潮视频 | 亚洲国产一区av | 国内精品视频免费 | 久久激情视频 | 国产视频中文字幕在线观看 | 欧日韩在线视频 | 天天爱综合| 精品国产中文字幕 | 色激情五月 | 久久久久成人免费 | 麻豆高清免费国产一区 | 成人h电影| 五月婷香蕉久色在线看 | 久久精品伊人 | 在线国产一区二区三区 | 久久久国产网站 | 在线一区观看 | 免费的国产精品 | 免费av网址在线观看 | 88av视频| 美女黄网站视频免费 | 欧美一级性视频 | 欧美a级片免费看 | 天天干天天操天天搞 | 国产精品自产拍在线观看 | 视频在线99re | 欧美精品一区在线发布 | 天天插狠狠插 | 国产剧情久久 | 精品日韩中文字幕 | 最近中文字幕免费av | 999成人| 91av视频在线观看 | 亚洲精品观看 | 久久久免费观看 | 亚洲午夜久久久久 | 天天干人人插 | 天天曰夜夜操 | 久久精品网 | aaa日本高清在线播放免费观看 | 午夜精品久久久久久久99无限制 | 国产精品中文字幕在线观看 | 超碰在线个人 | 日韩网站免费观看 | 成人av在线观| 91免费试看 | 一本到在线 | 激情伊人 | 人人爽人人射 | 91高清完整版在线观看 | 91桃色在线播放 | 午夜av一区二区三区 | 最近高清中文字幕在线国语5 | 国产又粗又猛又爽又黄的视频先 | 911国产在线观看 | 五月婷影院 | 青青河边草免费观看 | 久久亚洲欧美日韩精品专区 | 日韩在线视频免费播放 | 欧美一级日韩三级 | 天堂在线一区二区 | 成人精品一区二区三区中文字幕 | 69国产盗摄一区二区三区五区 | 久久久久久久久久久网站 | 奇米影视8888在线观看大全免费 | 日日日日日| 亚洲精品字幕在线观看 | 精精国产xxxx视频在线播放 | 中文国产在线观看 | 超碰97av在线 | 久久精品系列 | 国产69精品久久久久久 | 国产精品亚洲综合久久 | 国产成人av免费在线观看 | 久草视频首页 | 欧美日韩中文另类 | 成人免费共享视频 | 免费久久99精品国产婷婷六月 | 中文字幕在线高清 | 91豆花在线 | 国产精品第2页 | 日韩在线观看一区二区 | 国产中文字幕在线看 | 天天看天天干 | 夜夜夜影院 | 久久久久久久久精 | 天天夜夜狠狠操 | 国产在线a | 亚洲一区二区91 | 天天综合色网 | av一级免费 | 婷婷射五月 | 亚洲最大在线视频 | 五月婷婷影院 | 九九免费在线观看 | 91字幕| 免费观看一级一片 | 亚洲狠狠丁香婷婷综合久久久 | 久章草在线 | 中文字幕高清av | 成人一级黄色片 | 超碰在线最新网址 | 日韩啪啪小视频 | 免费看片成人 | 99热精品国产一区二区在线观看 | 99久久久国产精品免费99 | 亚洲毛片一区二区三区 | 亚洲国产免费 | 成人全视频免费观看在线看 | 狠狠做深爱婷婷综合一区 | 伊人影院99 | 精品一区精品二区高清 | 美女视频久久黄 | 在线观看亚洲免费视频 | 久久最新网址 | 三上悠亚一区二区在线观看 | 精品国产乱码一区二区三区在线 | 午夜精品电影一区二区在线 | 国产婷婷视频在线 | 少妇按摩av | 国产精品欧美激情在线观看 | 久久午夜视频 | 五月天丁香亚洲 | 成人av在线电影 | 色成人亚洲 | 亚洲爱av| 久久精品区 | 一区二区三区电影在线播 | 国产综合精品久久 | 91av久久 | 激情网五月婷婷 | 手机看片 | 天天干一干 | 国产欧美在线一区二区三区 | 日韩久久久久久久久 | 天天干天天上 | 久久国产精品系列 | 午夜久久福利影院 | 国产乱对白刺激视频在线观看女王 | 九九热中文字幕 | 久久国产99 | 97在线观看视频 | 亚洲国产精品久久 | 成人在线观看免费 | 91人人插| 精品国产自 | 欧美成人黄 | 97网在线观看 | 黄色大全在线观看 | 97香蕉久久超级碰碰高清版 | 欧美激情综合色综合啪啪五月 | 日本精品一区二区 | 狠狠色丁香婷婷综合久小说久 | 四季av综合网站 | 国产一级做a爱片久久毛片a | 久久99久久99精品免视看婷婷 | 日韩一级片观看 | 久久精品99 | 亚洲精品视频免费在线 | 中文日韩在线视频 | 九九视频免费 | 五月婷婷网站 | 国产精品a久久 | 欧美老人xxxx18 | 中文字幕在线观看免费 | 日韩一级成人av | 午夜久久网 | 国产精品一区二区av影院萌芽 | 亚洲国产福利视频 | 丁香婷婷激情网 | 久久一级片 | 国产亚洲激情视频在线 | 日韩精品中文字幕在线播放 | 51精品国自产在线 | 国产高清在线看 | 丁香六月天 | 午夜av影院 | 天天操夜 | 丁香综合五月 | 中文欧美字幕免费 | 人人爱夜夜操 | 免费一级片视频 | 色综合网在线 | 亚洲码国产日韩欧美高潮在线播放 | 手机看片| 欧美日韩视频一区二区三区 | 五月的婷婷 | 成人动态视频 | 亚洲在线日韩 | 亚洲日本一区二区在线 | 色999在线 | 色在线观看网站 | 日本精品视频一区 | 久久久精品国产一区二区电影四季 | 中文字幕区 | 天天操综合网站 | 国产在线观看你懂的 | 一级片免费视频 | 国产成人av在线影院 | 亚洲日日夜夜 | av福利网址导航大全 | 天堂av网在线 | 国产精品av一区二区 | 亚洲va欧美va人人爽 | 成年人免费观看国产 | 国产精品久久久久久久久毛片 | 日韩黄色在线 | 欧美成人一区二区 | 日韩欧美在线视频一区二区三区 | а中文在线天堂 | 欧美日韩裸体免费视频 | 91在线免费播放 | 综合视频在线 | 综合网在线视频 | 国模视频一区二区 | 91精品综合在线观看 | av中文字幕在线看 | www激情com| 久久久久久久久久久久久久av | 国产专区第一页 | 国产高清在线看 | 九九视频免费 | 中文字幕欲求不满 | av网站免费在线 | 成人黄色中文字幕 | 激情开心站| 精品在线看| 狠狠综合久久av | 欧美色图亚洲图片 | 久久精品美女视频网站 | 久久99久久99精品免观看软件 | 又黄又刺激又爽的视频 | 久99视频 | 91人人爱 | 欧美成人h版在线观看 | 91精品少妇偷拍99 | 久久久久久久久久久久av | www.夜夜骑.com | 国产精品成人免费精品自在线观看 | 国产在线观看地址 | 中文字幕日本在线观看 | 黄色动态图xx | 国产黄色一级片在线 | 麻豆av一区二区三区在线观看 | 国产精品久久久久久模特 | 免费高清在线一区 | 九九精品视频在线看 | 国产精品av免费观看 | 亚洲专区免费观看 | 中文字幕免费观看视频 | 亚洲乱码中文字幕综合 | 午夜久久久久久久 | 日韩视频1区 | 人交video另类hd | 五月婷婷免费 | 日韩一区二区三区在线观看 | 免费观看9x视频网站在线观看 | 久久人人爽人人片av | 国产剧情av在线播放 | 国产精品国产三级国产aⅴ入口 | 99精品视频免费全部在线 | 久久 地址 | 天天射天天搞 | 亚洲精品中文在线观看 | 日韩高清网站 | 天干啦夜天干天干在线线 | 国产高清在线视频 | 久久久久女人精品毛片九一 | 日本久久久久久 | 五月天中文字幕 | 1000部国产精品成人观看 | 91免费观看国产 | 天天操福利视频 | 亚洲天堂网在线视频 | 精品视频国产 | 99国产精品久久久久久久久久 | 日韩精品一区二区三区水蜜桃 | 81国产精品久久久久久久久久 | 婷婷视频在线播放 | 国产伦精品一区二区三区… | 国产欧美在线一区二区三区 | av一区二区在线观看中文字幕 | 中文字幕频道 | 久久高清免费 | 97精品视频在线 | 午夜精品福利一区二区 | 五月天久久久 | 91亚洲成人 | 激情xxxx| 在线а√天堂中文官网 | 国产v在线播放 | 国产精品亚洲人在线观看 | 精品国产1区2区3区 国产欧美精品在线观看 | 久久免费观看少妇a级毛片 久久久久成人免费 | 91精品色 | 色综合天天色综合 | www.婷婷色 | 国产成人av免费在线观看 | 中文在线a天堂 | 国产精品免费在线视频 | 免费中文字幕在线观看 | 国产一区在线视频播放 | 午夜在线观看一区 | 亚洲男人天堂a | 日日夜夜网站 | 97天天干 | 天天色婷婷 | 久久99网 | 欧美一进一出抽搐大尺度视频 | 久久精品久久99精品久久 | 久久国产精品99久久久久久进口 | 午夜精品久久 | 色停停五月天 | a在线v | 中文字幕在线观看资源 | 精产嫩模国品一二三区 | 亚洲免费a | 国产黄色片久久久 | 国产一级片在线播放 | 日韩在线观看av | 91爱爱视频| 日本99精品 | 热热热热热色 | 美女久久精品 | 97精品在线观看 | 丝袜制服综合网 | 91高清免费 | 国产在线专区 | 国产精品免费视频久久久 | 午夜精品久久久久久 | 国产精品久久久久久久久久久久午夜 | 在线看成人 | 国产精品女同一区二区三区久久夜 | 久久综合九色综合久久久精品综合 | 国产精品乱码高清在线看 | 国产在线2020 | 久久久久北条麻妃免费看 | 亚洲成人av电影在线 | 激情综合网五月激情 | 中文字幕人成人 | 波多野结衣在线视频免费观看 | 九色精品免费永久在线 | 超碰在线观看97 | 97色噜噜| 免费在线色视频 | 国产人免费人成免费视频 | www.天天色 | 国产精品一区二区三区观看 | 国产一区二区视频在线播放 | 欧美日韩精品影院 | 亚洲资源在线 | 国产精品原创视频 | 欧美精品久久人人躁人人爽 | 在线免费观看视频一区二区三区 | 欧美日韩高清一区二区三区 | 免费av在线播放 | 黄视频色网站 | 色综合天天综合 | 69av视频在线观看 | 日女人免费视频 | 夜夜骑天天操 | 99精品国产99久久久久久福利 | 精品欧美小视频在线观看 | www.夜夜草 | 中文字幕av全部资源www中文字幕在线观看 | 日韩欧美电影网 | 玖草在线观看 | 国产高清精品在线 | 亚洲黄色软件 | 高清在线一区 | 午夜在线观看影院 | av在线com | 欧美一级免费 | 91亚洲精品久久久蜜桃网站 | 亚洲va韩国va欧美va精四季 | 97在线观看免费观看 | 国产伦理久久精品久久久久_ | 国产在线永久 | 国产美女精品人人做人人爽 | 最近2019年日本中文免费字幕 | 精品亚洲免费 | 啪啪资源| 国产成人精品一区二区在线 | av线上看| 日日夜夜网| 一级一片免费看 | 手机在线欧美 | 国产不卡av在线 | 狠狠狠综合 | 久草在线电影网 | 久久精品国产一区二区 | 91超碰在线播放 | 一区电影 | 丁香电影小说免费视频观看 | 一区二区三区久久精品 | 日韩中文字幕91 | 精品国产欧美一区二区三区不卡 | 久久国产精品免费一区二区三区 | 国产精品视频专区 | 久草在线免费新视频 | 91久久国产自产拍夜夜嗨 | 黄色免费大全 | 国产系列在线观看 | 欧美精品一区二区在线播放 | 成人免费影院 | 麻豆视频在线观看免费 | 天天综合狠狠精品 | 免费在线黄色av | 国产98色在线 | 日韩 | 日韩专区视频 | 丁香婷婷电影 | 亚洲综合黄色 | 色七七亚洲影院 | 精品成人国产 | 国产精品久久人 | 国产精品毛片久久久久久久久久99999999 | 国产在线一卡 | 日韩在线观看视频一区二区三区 | 亚洲精品一区二区在线观看 | 国产精品中文字幕av | 日韩精品中字 | 丁香亚洲 | 最近日本韩国中文字幕 | 亚洲欧美视屏 | 奇米网8888 | 亚洲欧美色婷婷 | 国产午夜激情视频 | 一本色道久久精品 | 日韩1级片 | 伊在线视频 | 99久久久久久久久 | 欧美色888| 香蕉成人在线视频 | 99国产精品久久久久久久久久 | 日韩二区在线播放 | 99久久久成人国产精品 | 国产精品热视频 | 日韩伦理片一区二区三区 | av免费在线观看网站 | 日韩极品视频在线观看 | 中文字幕婷婷 | 一性一交视频 | 狠狠狠色 | 婷婷色中文网 | 欧美一级激情 | 久久精品久久精品久久39 | 亚洲精品美女久久久久网站 | 香蕉久久久久久av成人 | 丝袜少妇在线 | 91在线播| 精品国产电影一区 | 久久国产成人午夜av影院宅 | 日韩精品1区2区 | 久久精品综合网 | 久久久久成人精品 | 日韩一级电影在线 | 免费一级片观看 | 欧美在线观看视频 | 91人人爽人人爽人人精88v | 日日夜夜操操操操 | 国产一区二区在线免费视频 | 亚洲精品资源 | 五月综合久久 | 欧美 国产 视频 | 四虎影视精品 | 久久久久婷 | 成年人免费在线播放 | 久久久综合色 | a级国产乱理伦片在线观看 亚洲3级 | 亚洲精品小视频在线观看 | 成人av电影在线观看 | av福利在线免费观看 | 国产日韩欧美在线免费观看 | 久久国产精品久久精品国产演员表 | 国产福利精品一区二区 | 极品美女被弄高潮视频网站 | 亚洲一区久久 | 日韩高清免费在线观看 | 久久久福利 | 日韩理论在线观看 | 不卡av电影在线观看 | 玖玖视频免费在线 | 激情黄色一级片 | 国产成人性色生活片 | 婷婷丁香九月 | 欧美精彩视频在线观看 | 天天操天天曰 | 99精品国产成人一区二区 | 久久精品综合网 | 欧美日韩色婷婷 | 国产成人三级三级三级97 | 日产乱码一二三区别免费 | 欧美激情精品久久久久久变态 | 午夜婷婷网| 久久久午夜影院 | 久久国产手机看片 | 国产一级二级三级在线观看 | 丁香六月天 | 91久久久国产精品 | 国精产品满18岁在线 | 久草精品在线观看 | 中文字幕乱码电影 | 99精品在线观看视频 | 久久综合久久88 | 日韩在线视频免费播放 | 国外调教视频网站 | 国产成人一区二区三区 | 国产字幕在线播放 | 日韩av进入| av在线播放中文字幕 | 国产不卡网站 | av免费网站在线观看 | 中文字幕网站 | 欧美日韩在线电影 | 久久精品在线免费观看 | 精品婷婷 | 日韩中文三级 | 五月激情六月丁香 | 国产成人在线观看免费 | av色图天堂网| 天天插天天干 | 国产成年免费视频 | 婷婷色网视频在线播放 | 国产色婷婷在线 | 中文字幕在线播放日韩 | 日韩精品aaa | 免费黄色在线网址 | 在线精品视频免费播放 | 国产精品久久网 | 婷婷色网 | 黄色一集片 | 精品福利在线观看 | 久久福利电影 | 免费三级黄色片 | 免费看国产视频 | 欧美精品乱码久久久久久 | 99国产视频| 国产91aaa | 玖玖爱国产在线 | 天天干天天操天天做 | 五月天中文字幕 | 黄色片视频免费 | 91探花国产综合在线精品 | 久久99精品视频 | 亚洲精品国产精品国自产在线 | 在线亚洲欧美视频 | 成人a视频片观看免费 | 亚洲精选视频免费看 | 91黄视频在线观看 | japanesefreesexvideo高潮 | 亚洲国产av精品毛片鲁大师 | 日韩,精品电影 | 日韩a级免费视频 | 狠狠操操操 | 日韩久久久久久久 | 韩国中文三级 | 天天鲁一鲁摸一摸爽一爽 | 91黄色在线观看 | 国产精品久久99综合免费观看尤物 | 一区二区日韩av | 欧美午夜寂寞影院 | av免费看av | 国产91勾搭技师精品 | 久久国产成人午夜av影院潦草 | 92国产精品久久久久首页 | 中文字幕在线观看不卡 | 在线观看片 | av免费看电影 | 久久国产电影院 | 欧美日韩国产三级 | 91看片在线免费观看 | 天天操天天操天天操天天操天天操 | 天天曰天天曰 | 九色91福利 | a级国产片 | 国产精品99久久久精品 | 久久国产欧美日韩 | 超碰97公开 | 国内丰满少妇猛烈精品播放 | 揉bbb玩bbb少妇bbb | 日韩特级毛片 | 国产一区二区日本 | 毛片3 | 97狠狠操| 精品在线观看一区二区三区 | 久久中文网 | 亚洲h视频在线 | 亚洲精品一区二区三区在线观看 | 久久综合久久久 | 99人久久精品视频最新地址 | 91视频在线播放视频 | 国内精品在线一区 | 成年人免费在线观看网站 | 欧美日韩高清一区二区 | 久久久91精品国产一区二区三区 | 欧美精品二 | av成人亚洲 | 亚洲天堂免费视频 | 免费观看xxxx9999片 | 亚洲精品国产精品国自产观看 | 天天曰天天干 | 国产亚洲成人精品 | 欧美成人999 | 精品一区二区在线免费观看 | 美女福利视频 | 国产亚洲精品久久久久秋 | 精品国产乱码久久久久久久 | 国产精品免费久久久久久久久久中文 | 亚洲国产成人精品电影在线观看 | 9999在线视频 | 在线v片免费观看视频 | 亚洲精品久久久蜜臀下载官网 | 久草在线视频看看 | 五月天天色 | 丁香六月网 | 国产精品国产亚洲精品看不卡 | 正在播放亚洲精品 | 婷婷六月丁 | 日本爽妇网 | 欧美动漫一区二区三区 | 欧美最猛性xxxxx免费 | 美女一二三区 | 成人免费av电影 | 精品国产免费一区二区三区五区 | 久久草 | 欧美超碰在线 | 国产精品一区二区吃奶在线观看 | 欧美激情综合色综合啪啪五月 | 久久99热这里只有精品国产 | 国产精品日韩在线 | 久久国产精品免费视频 | 成人欧美日韩国产 | 欧美精品免费视频 | 天天色天天草天天射 | 超碰公开在线 | 免费午夜视频在线观看 | 九九视频在线观看视频6 | 欧美最猛性xxxxx免费 | 91成人精品观看 | 日韩va亚洲va欧美va久久 | 丁香花中文在线免费观看 | av中文资源在线 | 97人人模人人爽人人少妇 | 国产小视频国产精品 | 久久av伊人 | 免费视频黄 | 欧美在线1区 | 伊香蕉大综综综合久久啪 | 91在线视频在线观看 | 国产xxxxx在线观看 | 日韩精品一区二区三区中文字幕 | 五月天丁香 | 五月综合色 | 国产精品久久久久久久久毛片 | 日日婷婷夜日日天干 | 亚洲综合精品视频 | 美女久久久久久 | 久久人人爽人人爽人人片 | 日韩高清www| 久久免费视频这里只有精品 | 96国产精品视频 | 成年人黄色大片在线 | 99爱在线| 国产午夜精品一区二区三区 | 手机版av在线| 午夜精品福利一区二区三区蜜桃 | 中文字幕一二 | 日韩欧在线 | 亚洲国产精品一区二区尤物区 | 激情伊人五月天 | 日韩69视频 | 色综合五月 | 成年人在线看片 | 久久精品激情 | 999视频在线观看 | 91中文字幕在线 | 色天天中文 | 亚洲视频免费在线观看 | 国产一级免费在线观看 | 日韩在线三区 | 国产黄色在线网站 | 玖玖999 | 91久色蝌蚪 | 日韩精品在线播放 | 亚洲精品午夜aaa久久久 | 国产不卡在线看 | 免费观看www7722午夜电影 | 久久综合中文字幕 | 色国产精品一区在线观看 | 免费一级黄色 | 黄色一级网 | 99热官网 | 免费亚洲黄色 | 日韩欧美一区二区三区视频 | 日韩精品五月天 | 国产亚洲在线视频 | 色激情五月 | 欧美日韩一区二区在线观看 | 亚洲精品久久久久久久蜜桃 | 999久久久久 | 亚洲国产精品va在线看黑人动漫 | 免费在线国产精品 | 久久不射电影网 | 欧洲一区二区在线观看 | 国产伦精品一区二区三区照片91 | 天天操天天干天天摸 | av成人动漫在线观看 | 超碰99在线 | 国产美女网站在线观看 | 久久久久99精品国产片 | 国产在线观看高清视频 | 久久综合狠狠综合 | 999一区二区三区 | 精品久久1 | 久久久人人爽 | 日韩精品久久中文字幕 | 综合影视 | 日韩一级黄色大片 | 黄色三级视频片 | 最新日韩电影 | 麻豆视频在线免费 | 久久视频二区 | 二区三区中文字幕 | 免费涩涩网站 | 日韩大片在线 | 成人午夜免费剧场 | 激情五月在线观看 | 在线韩国电影免费观影完整版 | 国产a免费 | a在线观看视频 | 天天综合在线观看 | 日韩字幕在线观看 | 国产精品美女久久久久久久 | 中文字幕在线观看视频一区 | 中文字幕第一页在线 | 欧美成人91 | 亚洲成人av免费 | 亚洲精品久久在线 | 午夜av影院| 精品免费在线视频 | 激情丁香婷婷 | 天天爽天天爽夜夜爽 | 精品久久久免费 | 亚洲精品美女免费 | 91mv.cool在线观看 | 一本色道久久综合亚洲二区三区 | 国产不卡高清 | 91精品秘密在线观看 | 亚洲免费在线观看视频 | 久久综合狠狠综合久久狠狠色综合 | 免费av免费观看 | 国内精品福利视频 | 成人av午夜 | 精品欧美一区二区在线观看 | 91视频免费看网站 | 五月天com | 中文久草| 精品国产乱码久久久久久三级人 | 亚洲欧美少妇 | 超碰人人草 | 亚洲国产视频在线 | 国产精品视频app | 一级精品视频在线观看宜春院 | 日韩在线观看网站 | 欧美激情精品久久久久久免费印度 | 正在播放 国产精品 | 一区二区 不卡 | 97色噜噜| 精品黄色在线观看 | 欧美一区二区三区在线视频观看 | 国产污视频在线观看 | 久久色视频 | 国产精品黄网站在线观看 | 日韩影片在线观看 | 国产精品视频观看 | 久久社区视频 | 99久久电影| 中文字幕免费国产精品 | 日韩av成人 | 欧美一级日韩免费不卡 | 在线视频欧美精品 | 夜夜视频 | 久久久免费看视频 | 国产小视频在线免费观看 | 黄a在线看 | 啪啪小视频网站 | 五月婷婷国产 | 中文字幕制服丝袜av久久 | 久久免费视屏 | 狠狠色伊人亚洲综合网站色 | 四虎影视欧美 | 成人av一区二区三区 | 国产一区二区在线免费观看 | 欧美一级片免费观看 | 亚洲精品视频播放 | 91精品秘密在线观看 | 欧美成a人片在线观看久 | 日韩爱爱网站 | 97超碰在线资源 | 人人干人人添 | 成年人在线播放视频 | 国产福利91精品一区 | 国产精品成人久久久 | 日韩中文字幕91 | 国产精品av久久久久久无 | 久久久久久影视 | 九九影视理伦片 | 欧美大香线蕉线伊人久久 | 色网站免费在线看 | 成人午夜剧场在线观看 | 亚洲自拍偷拍色图 | 在线国产专区 | 婷婷日韩| aa级黄色大片 | 亚洲一级在线观看 | 天天操综| 网站免费黄色 | 91香蕉国产在线观看软件 | 91免费网站在线观看 | 国产精品一区二区av日韩在线 | 亚洲天堂网在线视频观看 | 色婷婷激婷婷情综天天 | av亚洲产国偷v产偷v自拍小说 | 日韩电影一区二区在线观看 | 亚洲va韩国va欧美va精四季 | 国内精品视频在线 | 成人av电影免费观看 | 2019中文最近的2019中文在线 | 91精品在线麻豆 | 一区久久久 | 一区二区三区高清 | 手机在线欧美 | 久久久91精品国产 | 91色影院 | 国产精品综合av一区二区国产馆 | 日韩高清一二区 | 午夜精品福利一区二区 | 日本精品视频在线播放 | 精品一二三四五区 | 女人18片毛片90分钟 | 色综合婷婷 | 在线观看黄色的网站 | 色丁香综合 | 久久精品一级片 | 国产精品av久久久久久无 | 狠狠干婷婷 | 丝袜美女在线观看 | 亚洲视频免费在线观看 | 亚洲精品视频在线观看网站 | 免费观看性生交 | 四虎在线免费观看 | 亚洲午夜久久久久久久久 | 久久久久久久av | 欧美韩国日本在线观看 | 久久涩涩网站 | 欧美日视频 | 亚洲三级网站 | a电影在线观看 | 日韩一区二区三免费高清在线观看 | 亚洲精品视频第一页 | 欧美成人一区二区 | 超碰在线人人 | 激情婷婷欧美 | 久久久国产影视 | 日本久久久精品视频 | 最近高清中文字幕在线国语5 | 亚洲综合婷婷 | 二区三区中文字幕 | 69国产精品成人在线播放 | 丁香五月网久久综合 | 男女啪啪视屏 | 国产精品大片免费观看 | 欧美va在线观看 | 久草在线免费播放 | 韩国av不卡 | 黄色免费电影网站 | 91看片在线播放 | 日韩一区二区三区免费视频 | 日韩欧美精品在线视频 | 狠狠色丁香婷婷综合久小说久 | 成人午夜免费剧场 | 在线www色 | 免费黄色看片 | 日韩精品一区在线播放 | 成人黄色在线电影 | 夜夜摸夜夜爽 | 中文亚洲欧美日韩 | 夜夜操天天干, | 免费视频一二三区 | 麻豆手机在线 | 亚洲国产中文字幕 | 99免费精品 | 中文字幕永久在线 | 国产亚洲欧美精品久久久久久 | 不卡在线一区 | 亚洲综合小说 | av手机在线播放 | 日本精品一二区 | 人人澡人人爽欧一区 | 亚洲精品 在线视频 | 最新国产一区二区三区 | 国产黄色精品在线观看 | 日韩黄色一区 | 美女黄视频免费 | 伊人婷婷久久 | 日韩一区二区免费在线观看 | 久久精品综合一区 | 97视频免费播放 | 日韩精品免费在线 | 五月天亚洲综合小说网 | 免费在线观看av网址 | a√资源在线 | 黄色网中文字幕 | av女优中文字幕在线观看 | 精品欧美乱码久久久久久 | 久久99精品久久只有精品 | 视频福利在线观看 | 不卡国产视频 | 久久一区二区三区四区 | 亚洲一区二区精品在线 | 欧美成a人片在线观看久 | www黄| 久久久久成人精品 | 高清一区二区三区av | 深夜免费福利网站 | a在线免费观看视频 | 中文字幕在线免费观看视频 | 亚洲视频播放 | 人人澡人人舔 | 91久久国产精品 | 最近高清中文字幕在线国语5 | 午夜骚影 | 色综合天天综合在线视频 | 91免费观看 | 久久一区精品 | 美女福利视频 | 四虎免费av | 日本久久免费电影 | www.久热 | 日本黄色免费在线 | 日本色小说视频 | 国产欧美日韩精品一区二区免费 | 久久久精品亚洲 | 国产小视频在线播放 | 97精品国产97久久久久久久久久久久 | 亚洲一区日韩在线 | 欧美精品久久久久久久久老牛影院 | 免费久久99精品国产婷婷六月 | 亚洲视频一| 视频在线观看91 | 婷婷在线视频 | 福利视频入口 | 精品久久亚洲 | 亚洲午夜av | 亚洲婷婷网 | 成人在线你懂得 | 黄色三级在线看 | 操操综合网 | 狠狠色丁香久久婷婷综合丁香 | 特级毛片在线 | 午夜精品久久久 | 91av原创| 91精品国产一区二区在线观看 | 久久精品直播 | 五月开心婷婷网 | 欧美日韩国产一区二区在线观看 | av一区二区三区在线播放 | 久草免费电影 | 91热爆在线观看 | 六月丁香婷 | 五月婷婷欧美视频 | 黄p网站在线观看 | 特级黄录像视频 | 欧美综合色| 黄色免费av | 久久婷婷色 | 国产一区二区三区免费在线 | 久久久久一区二区三区 | 国产麻豆精品一区二区 | 日韩a免费| 国产视频中文字幕 | www.夜夜操| 国产亚洲精品久久久久动 | 日韩激情片在线观看 | 欧美日韩精品在线 | 欧美久久久久久 |