偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

HTML5音頻API Web Audio

開(kāi)發(fā) 前端
此文介紹HTML5音頻API的主要框架和工作流程,因?yàn)橐纛l處理模塊很多,因此只簡(jiǎn)單介紹幾種音頻處理模塊,并通過(guò)例子來(lái)展示效果。后續(xù)會(huì)介紹利用HTML5音頻API實(shí)現(xiàn)的項(xiàng)目,歡迎大家關(guān)注,敬請(qǐng)期待。

此文介紹HTML5音頻API的主要框架和工作流程,因?yàn)橐纛l處理模塊很多,因此只簡(jiǎn)單介紹幾種音頻處理模塊,并通過(guò)例子來(lái)展示效果。后續(xù)會(huì)介紹利用HTML5音頻API實(shí)現(xiàn)的項(xiàng)目,歡迎大家關(guān)注,敬請(qǐng)期待。

HTML5音頻API的主要框架和工作流程如下圖,在 AudioContext 音頻上下文中,把音頻文件轉(zhuǎn)成 buffer 格式,從音頻源 source 開(kāi)始,經(jīng)過(guò) AuidoNode 處理音頻,***到達(dá) destination 輸出音樂(lè)。這里形成了一個(gè)音頻通道,每個(gè)模塊通過(guò) connect 方法鏈接并傳送音頻。

 

 

AudioContext

AudioContext 是一個(gè)音頻上下文,像一個(gè)大工廠,所有的音頻在這個(gè)音頻上下文中處理。

  1. let audioContext = new(window.AudioContext || window.webkitAudioContext)(); 

AudioContext 音頻上下文提供了很多屬性和方法,用于創(chuàng)建各種音頻源和音頻處理模塊等,這里只介紹一部分,更多屬性和方法可到MDN查閱文檔。

屬性

AudioContext.destination

返回 AudioDestinationNode 對(duì)象,表示當(dāng)前 AudioContext 中所有節(jié)點(diǎn)的最終節(jié)點(diǎn),一般表示音頻渲染設(shè)備。

方法

AudioContext.createBufferSource()

創(chuàng)建一個(gè) AudioBufferSourceNode 對(duì)象, 他可以通過(guò) AudioBuffer 對(duì)象來(lái)播放和處理包含在內(nèi)的音頻數(shù)據(jù)。

AudioContext.createGain()

創(chuàng)建一個(gè) GainNode,它可以控制音頻的總音量。

AudioContext.createBiquadFilter()

創(chuàng)建一個(gè) BiquadFilterNode,它代表代表一個(gè)雙二階濾波器,可以設(shè)置幾種不同且常見(jiàn)濾波器類(lèi)型:高通、低通、帶通等。

createOscillator()

創(chuàng)建一個(gè) OscillatorNode, 它表示一個(gè)周期性波形,基本上來(lái)說(shuō)創(chuàng)造了一個(gè)音調(diào)。

音頻轉(zhuǎn)換成Buffer格式

使用decodeAudioData()方法把音頻文件編譯成buffer格式。

  1. function decodeAudioData(audioContext, url) { 
  2.     return new Promise((resolve) => { 
  3.         let request = new XMLHttpRequest(); 
  4.         request.open('GET', url, true); 
  5.         request.responseType = 'arraybuffer'
  6.         request.onload = () => { 
  7.             audioContext.decodeAudioData(request.response, (buffer) => { 
  8.                 if (!buffer) { 
  9.                     alert('error decoding file data: ' + url); 
  10.                     return
  11.                 } else { 
  12.                     resolve(buffer); 
  13.                 } 
  14.             }) 
  15.         } 
  16.         request.onerror = function() { 
  17.             alert('BufferLoader: XHR error'); 
  18.         } 
  19.         request.send(); 
  20.     }) 
  21.  
  22. let buffer = decodeAudioData(audioContext, './sounds/music.mp3'); 

 

AudioNode

音頻節(jié)點(diǎn)接口是一個(gè)音頻處理模塊。包括音頻源,音頻輸出,中間處理模塊。

方法

AudioNode.connect()

鏈接兩個(gè) AudioNode 節(jié)點(diǎn),把音頻從一個(gè) AudioNode 節(jié)點(diǎn)輸出到另一個(gè) AudioNode 節(jié)點(diǎn),形成一個(gè)音頻通道。

AudioNode.disconnect()

把 AudioNode 節(jié)點(diǎn)與其他節(jié)點(diǎn)斷開(kāi)鏈接。

AudioBufferSourceNode

音頻源有多種,這里只介紹 buffer 的音頻源,buffer 的音頻源通過(guò) AudioContext 接口的 createBufferSource 方法來(lái)創(chuàng)建。音頻源節(jié)點(diǎn)繼承 AudioNode 音頻節(jié)點(diǎn)。

  1. let bufferSource = audioContext.createBufferSource(); 

創(chuàng)建了 AudioBufferSourceNode 對(duì)象后,把 buffer 格式的音頻數(shù)據(jù)賦值給 AudioBufferSourceNode 對(duì)象的 buffer 屬性,此時(shí)音頻已經(jīng)傳遞到音頻源,可以對(duì)音頻進(jìn)行處理或輸出。

bufferSource.buffer = buffer;

方法

AudioBufferSourceNode.start(when[, duration])

開(kāi)始播放。

  • when:延遲播放時(shí)間,單位為秒。
  • offset:定位音頻到第幾秒開(kāi)始播放。
  • duration:從開(kāi)始播放結(jié)束時(shí)長(zhǎng),當(dāng)經(jīng)過(guò)設(shè)置秒數(shù)后自動(dòng)結(jié)束音頻播放。

AudioBufferSourceNode.stop([when])

  • when:延遲停止時(shí)間,單位為秒。

停止播放,注意調(diào)用該方法后,無(wú)法再次調(diào)用 AudioBufferSourceNode.start 播放。

AudioDestinationNode

音頻終點(diǎn)是通過(guò) AudioContext 接口的 destination 屬性訪問(wèn)的。音頻終點(diǎn)繼承 AudioNode 音頻節(jié)點(diǎn),

AudioDestinationNode 節(jié)點(diǎn)無(wú)法再把音頻信息傳遞給下一個(gè)音頻節(jié)點(diǎn),即無(wú)法再鏈接其他音頻節(jié)點(diǎn),因?yàn)樗呀?jīng)是終點(diǎn),沒(méi)有輸出,也可以理解為他自己就是輸出。

  1. let audioDestinationNode = audioContext.destination; 

此時(shí)我們有音頻起點(diǎn) AudioBufferSourceNode 和音頻終點(diǎn) AudioDestinationNode ,使用 AudioNode.connect() 方法把起點(diǎn)和終點(diǎn)鏈接起來(lái),就形成了一條有輸入輸出的音頻通道,可以把音頻直接播放出來(lái)。

  1. bufferSource.connect(audioDestinationNode); 

GainNode

用于音量變化。它是一個(gè) AudioNode 類(lèi)型的音頻處理模塊。

  1. let gainNode = audioContext.createGain(); 

把音頻源、音頻輸出和音頻處理模塊鏈接一起,形成可控制音量大小的音頻。

  1. bufferSource.connect(gainNode); 
  2.  
  3. gainNode.connect(audioDestinationNode); 
  4.  
  5. let controlVolume = value => { 
  6.  
  7. gainNode.gain.value = value); 
  8.  
  9.  
  10. // 兩倍音量播放 
  11.  
  12. controlVolume(2); 

 

 

 

BiquadFilterNode

表示一個(gè)簡(jiǎn)單的低頻濾波器,可控制聲調(diào)。它是一個(gè) AudioNode 類(lèi)型的音頻處理模塊。

  1. let filterNode = audioContext.createBiquadFilter(); 

輸出一個(gè)變調(diào)的音頻:

  1. bufferSource.connect(filterNode); 
  2.  
  3. filterNode.connect(audioDestinationNode); 
  4.  
  5. let controlFrequency = function(value) { 
  6.  
  7. filterNode.frequency.value = value; 
  8.  
  9.  
  10. // 音頻為1000變調(diào) 
  11.  
  12. controlFrequency(1000); 

 

多個(gè)音頻源

在一個(gè)音頻上下文中,可以有多個(gè)音頻處理通道,即多個(gè)音頻源同時(shí)輸出。各個(gè)音頻處理通道內(nèi)的操作是獨(dú)立的,不影響其他音頻通道。

 

 

多個(gè)音頻處理模塊

一個(gè)音頻源可以經(jīng)過(guò)多個(gè)音頻處理模塊處理,音頻處理模塊疊加效果后輸出。

 

責(zé)任編輯:龐桂玉 來(lái)源: segmentfault
相關(guān)推薦

2012-04-12 11:11:15

HTML5APIWEB

2013-01-18 10:59:44

IBMdW

2012-12-07 10:20:56

IBMdW

2014-08-28 10:16:17

HTML5

2022-11-14 08:26:40

系統(tǒng)音頻API

2015-10-28 13:29:21

音頻源碼audio

2012-05-30 09:34:57

2017-10-23 16:27:11

HTML5桌面Notificatio

2012-12-03 13:53:38

IBMdW

2011-05-25 09:34:30

HTML5cssjavascript

2012-10-09 11:02:11

IBMdw

2013-01-24 10:26:04

HTML5HTML 5HTML5的未來(lái)

2009-06-11 10:59:07

HTML5Flash插件

2009-10-29 09:53:02

2012-09-21 10:01:56

HTML5JS資訊

2015-06-10 10:18:27

WebAPP開(kāi)發(fā)技巧

2012-02-14 13:50:21

ibmdw

2010-01-14 09:39:47

HTML 5audiovideo

2013-08-07 14:48:00

HTML5

2013-10-21 15:24:49

html5游戲
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)