Android音樂播放可視化

music.gif

前言

一直對于音樂可視化非常感興趣,正好工作中涉及到這一塊,所以整理一下歼郭,用Android實現(xiàn)一個簡單音樂可視化的播放器。

基礎(chǔ)知識

1辐棒、音量

人主觀上感覺到的聲音大胁≡(也叫響度),由“振幅”(amplitude)和人離聲源的距離決定漾根。

2泰涂、音調(diào)

聲音的高低(高音、低音)辐怕,由“頻率”(frequency)決定逼蒙,頻率越高音調(diào)越高。

3寄疏、音色
音色是一種抽象的東西是牢,波形決定了聲音的音色僵井。聲音因不同發(fā)聲物體材料而具有不同特性,波形是把這個抽象特性直觀的表現(xiàn)出來驳棱。典型的音色波形有方波批什,鋸齒波,正弦波社搅,脈沖波等驻债。

4、采樣
  所謂采樣形葬,即按一定的采樣頻率將模擬信號變成時間軸上離散的抽樣信號的過程合呐。原則上采樣頻率越高,聲音的質(zhì)量也就越好笙以,聲音的還原也就越真實淌实。
  采樣率即每秒從模擬信號中提取并組成離散信號的采樣個數(shù),用赫茲(Hz)來表示源织。說到采樣率有一個不得不提的著名定律翩伪,即香農(nóng)(Shannon)/奈奎斯特(Nyquist)采樣定律,該定律表明采樣頻率必須大于或等于所傳輸?shù)哪M信號的最高頻率的2倍谈息,才能不失真地恢復(fù)模擬信號。

5凛剥、 量化
  前面采樣得到的抽樣信號雖然是時間軸上離散的信號侠仇,但仍然是模擬信號,其采樣值在一定的取值范圍內(nèi)犁珠,可有無限多個值逻炊,必須采用“四舍五入”的方法把樣值分級“取整”,使一定取值范圍內(nèi)的樣值由無限多個值變?yōu)橛邢迋€值犁享,這一過程稱為量化余素。
6、編碼
  量化后的抽樣信號就轉(zhuǎn)化為按抽樣時序排列的一串十進制數(shù)字碼流炊昆,即十進制數(shù)字信號桨吊。簡單高效的數(shù)據(jù)系統(tǒng)是二進制碼系統(tǒng),因此凤巨,應(yīng)將十進制數(shù)字碼變換成二進制編碼视乐,這種把量化的抽樣信號變換成給定字長(量化位數(shù))的二進制碼流的過程稱為編碼。
  編碼方式種類非常多敢茁,其對比可見 Comparison of audio coding formats佑淀,PCM音頻格式編碼常見有四種:PCM(Linear PCM)、ADPCM(Adaptive differential PCM)彰檬、 A-law(A律13折線碼)伸刃、μ-law(μ律15折線碼)谎砾,最簡單的當然是下圖所示的LPCM(示例為4bit),這是一種均勻量化編碼捧颅,廣泛用于 Audio CD, AES3, WAV, AIFF, AU, M2TS, VOB中景图。 
 

在這里插入圖片描述

模擬信號到數(shù)字信號的過程

在這里插入圖片描述

同過上面的圖可以看出隘道,模擬信號通過pam后生成采樣信號症歇,然后通過量化生成了-127到+127之間的數(shù)據(jù),最后通過二進制存放谭梗。

Visualizer

有了上面的基礎(chǔ)知識忘晤,可以知道音樂可視化其實可以通過量化后的數(shù)據(jù)去生成音樂的可視化內(nèi)容,google官方提供了Visualizer類來幫助實現(xiàn)音樂可視化激捏,這個類主要是可以返回音樂的Waveform data和Frequency data
1设塔、Waveform data
waveform data 波形數(shù)據(jù),就是上面圖中模擬信號經(jīng)過處理后的數(shù)據(jù)远舅,google提供的是一個8bit的無符號數(shù)據(jù)闰蛔。

2、Frequency data
Frequency data 就是頻率數(shù)據(jù)图柏,頻率數(shù)據(jù)是通過快速傅里葉轉(zhuǎn)換序六,把時域上連續(xù)的信號(波形)強度轉(zhuǎn)換成離散的頻域信號(頻譜)

Visualizer使用

1、獲取實例

visualizer = new Visualizer(mediaPlayer.getAudioSessionId());

2蚤吹、設(shè)置采樣值

visualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]);

通過Visualizer.getCaptureSizeRange()這一底層實現(xiàn)的方法來返回一個采樣值的范圍數(shù)組例诀,0為最小值128,1為最大值1024!采樣值都為2的n次冪裁着!

3繁涂、設(shè)置監(jiān)聽器

setDataCaptureListener(OnDataCaptureListener listener, rate,iswave,isfft )

先說后面三個參數(shù):rate采樣的頻率,下邊通過方法Visualizer.getMaxCaptureRate()返回最大的采樣頻率二驰,單位為milliHertz毫赫茲扔罪,iswave是波形信號,isfft是頻域信號桶雀。
第一個參數(shù)OnDataCaptureListener接口矿酵,這里可以一個它的匿名內(nèi)部類,然后它有兩個回調(diào)方法:

onWaveFormDataCapture(Visualizer visualizer, byte[] waveform, int samplingRate)

onFftDataCapture(Visualizer visualizer, byte[] fft, int samplingRate)

這兩個回調(diào)對應(yīng)著上邊的兩個參數(shù)iswave和isfft背犯!如果iswave為true坏瘩,isfft為false則會回調(diào)onWaveFormDataCapture方法,如果iswave為false漠魏,isfft為true則會回調(diào)onFftDataCapture方法倔矾。

音樂可視化實現(xiàn)

music.gif

代碼實現(xiàn)

未完待續(xù)....

項目地址

https://github.com/hankinghu/AudioVisulizer

參考

1、https://developer.android.com/reference/android/media/audiofx/Visualizer

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市哪自,隨后出現(xiàn)的幾起案子丰包,更是在濱河造成了極大的恐慌,老刑警劉巖壤巷,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邑彪,死亡現(xiàn)場離奇詭異,居然都是意外死亡胧华,警方通過查閱死者的電腦和手機寄症,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矩动,“玉大人有巧,你說我怎么就攤上這事”唬” “怎么了篮迎?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長示姿。 經(jīng)常有香客問我甜橱,道長,這世上最難降的妖魔是什么栈戳? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任岂傲,我火速辦了婚禮,結(jié)果婚禮上子檀,老公的妹妹穿的比我還像新娘譬胎。我一直安慰自己,他們只是感情好命锄,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著偏化,像睡著了一般脐恩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上侦讨,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天驶冒,我揣著相機與錄音,去河邊找鬼韵卤。 笑死骗污,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的沈条。 我是一名探鬼主播需忿,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了屋厘?” 一聲冷哼從身側(cè)響起涕烧,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎汗洒,沒想到半個月后议纯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡溢谤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年瞻凤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片世杀。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡阀参,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出玫坛,到底是詐尸還是另有隱情结笨,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布湿镀,位于F島的核電站炕吸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏勉痴。R本人自食惡果不足惜赫模,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蒸矛。 院中可真熱鬧瀑罗,春花似錦、人聲如沸雏掠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乡话。三九已至摧玫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绑青,已是汗流浹背诬像。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留闸婴,地道東北人坏挠。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像邪乍,于是被迫代替她去往敵國和親降狠。 傳聞我的和親對象是個殘疾皇子对竣,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容