web audio api 實現音訊的視覺化

2021-10-24 02:49:24 字數 1643 閱讀 1272

使用web audio api的基本流程

1.建立乙個audiocontext物件

audiocontext是web audio api的第一步也是最不可或缺的,類似於canvas的getcontext

const audiocontext = window.audiocontext || window.webkitaudiocontext;

this

.audiocontext =

newaudiocontext()

;

2.建立analysernode獲取音訊頻率資料
this

.analyser =

this

.audiocontext.

createanalyser()

;this

.analyser.fftsize =

256;

//設定傅利葉係數

3.給audiocontext物件新增聲音源並連線
const xhr =

// 設定響應型別為 arraybuffer

xhr.responsetype =

"arraybuffer"

;const that =

this

; xhr.

onload

=function()

);};

xhr.

send()

;

當我在新增音訊源的時候遇到了兩個問題

第一,本來打算使用mediaelementaudiosourcenode 將節點直接作為輸入的,但出現了返回的dataarray為全0陣列,查了好多資料,有乙個回答說是在chrome/69(不含)以下的版本會出現這個情況,因此我只能使用xhr來獲取網路資料(這裡的this.currentmusicdetail.songlink是一段音訊的**鏈結)

第二,在解碼的時候出現了無法解碼的問題,經排查是因為獲取的buffer為null

4.繪製音訊柱形圖

getcanvas()

window.

requestanimationframe

(render)

;//遞迴呼叫渲染

}// requestanimationframe()用來渲染動畫幀,此時渲染第一幀

window.

requestanimationframe

(render)

;}

audiobuffersourcenode.stop(when)

when: 結束時間

play()

//音訊的暫停

pause()

,//音訊的停止

stop()

,//獲得暫停的位置

getposition()

,學習下來發現對web audio api雖然有了初步的認識,但具體還是不太明白,由於web audio api 的功能非常強大,等我有時間我還會去研究的。

音訊seekTo的實現

1.音訊的seekto最終是在audioplayer類中實現的,audioplayer seekto函式 status t audioplayer seekto int64 t time us else return ok 2.buffer的填充是在audioplayer audiosinkcall...

音訊重取樣的實現

在聲紋識別中,為了滿足對不同取樣率的要求,常需要對語音進行重取樣。重取樣即將原始的取樣頻率變換為新的取樣頻率以適應不同取樣率的要求。實現重取樣的傳統方法有三種 一是若原模擬訊號x t 可以再生,或是已記錄下來,那麼可以進行重新取樣 二是將 x n 通過數模轉換 d a變成模擬訊號 x t 對x t ...

音訊 一 音訊認知 3 音訊取樣

音訊取樣 首先我們先了解一下過去和現在的音訊錄製原理 錄音 話筒將接收到聲音的波動大小轉化成對應強弱的電流,通過蹄形磁鐵,產生相應的磁性,磁鐵下有勻速通過空隙的磁帶,上面帶有磁粉,磁粉受到不同磁性強度的影響,會聚集在不同的位置,以此來實現對聲音的記錄.音訊數位化 數位化音訊技術是將模擬訊號進行數字編...