繪製聲音訊率的波紋動畫效果

Spike發表於2016-08-04

在一些音樂類應用中, 經常會展示隨著節奏上下起伏的波紋資訊, 這些波紋形象地傳達了聲音資訊, 可以提升使用者體驗, 那麼是如何實現的呢? 可以使用Visualizer類獲取當前播放的聲音資訊, 並繪製在畫布上, 使用波紋展示即可. 我來講解一下使用方法.

更多: http://www.wangchenlong.org/

voice-logo

主要
(1) Visualizer類提取波紋資訊的方式.
(2) 應用動態許可權管理的方法.
(3) 分離自定義檢視的展示和邏輯.

本文原始碼的GitHub下載地址

歡迎Follow我的GitHub: https://github.com/SpikeKing


基礎準備

Android 6.0引入動態許可權管理, 在這個專案中, 會使用系統的音訊資訊, 因此把許可權管理引入這個專案,參考. Gradle配置引入了Lambda表示式, 參考.

頁面佈局, 使用自定義的波紋檢視控制元件.

效果

voice-demo


首頁邏輯

新增動態許可權管理, 在啟動頁面時, 獲取應用所需的音訊許可權.
RendererFactory工廠類建立波紋的繪製類SimpleWaveformRender.
startVisualiser方法獲取當前播放音樂的音訊資訊.
注意頁面關閉, 在onPause時, 釋放Visualiser類.

Visualizer類
new Visualizer(0), 初始化; setCaptureSize, 獲取波紋數量; setEnabled, 啟動監聽;
setDataCaptureListener, 第一個引數是回撥, 使用WaveFormData或FftData; 第二個是更新率; 第三個是判斷使用WaveFormData; 第四個是判斷使用FftData, 第三\四個均與回撥的返回值有關.


波紋檢視

頁面框架, 分離顯示和邏輯, 使用介面渲染, 輸入畫布Canvas和波紋Waveform.

陣列複製Arrays.copyOf(), 在設定波紋後重繪頁面invalidate().


波紋邏輯

核心部分renderWaveform, 渲染波紋.
把頁面分為網格樣式, 根據波紋值, 繪製曲線; 沒有波紋, 繪製居中水平直線.

繪製移動moveTo, 繪製直線lineTo.


效果

voice-anim

通過繪製波紋, 可以類似地繪製一些連續資料, 更加直觀地展示, 提升使用者體驗.

參考

That’s all! Enjoy it!

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

繪製聲音訊率的波紋動畫效果

相關文章