問:程序員大牛與菜雞分別寫音樂播放器汁蝶,播放同一首歌,音質(zhì)會有差別嗎论悴?
答:差別非常大掖棉,筆記本外放我都能聽出來,while循環(huán)聲音更純膀估,但是復(fù)雜混音解析度不夠幔亥,for循環(huán)在對于i的操作過于規(guī)整化,導(dǎo)致內(nèi)存固定周期的讀寫會產(chǎn)生干擾波察纯,不屬于白噪紫谷,會導(dǎo)致音樂略微失真。
好的播放器盡可能使用靜態(tài)變量捐寥,不得不用非靜態(tài)的時候盡量讓變量創(chuàng)建和刪除的時候有高頻音或鼓點的遮蓋笤昨,這個就非常需要經(jīng)驗了。不過現(xiàn)在可以用機器學(xué)習(xí)來解決握恳。
內(nèi)存回收一定要手動進行瞒窒,不要用智能指針,更不要用java乡洼,java寫出的播放器內(nèi)存塊不停移動的噪音就像一個施工隊在你家窗外修路一樣崇裁。android音質(zhì)一直不如iphone和語言也有很大關(guān)系。
新手寫的播放器往往只有一種解碼方式束昵,能聽個響就算成功拔稳。高手寫的播放器至少要有6個解碼模塊來適配不同類型的電流,還有一個電流預(yù)判的貝葉斯模塊來預(yù)測電壓波動和抗電涌锹雏,和一個解碼器實時調(diào)參模塊來做分支預(yù)測選擇合適的參數(shù)適配電流巴比,調(diào)參模塊非常難,沒有大cpu廠做分支預(yù)測5年以上經(jīng)驗的,基本搞不好轻绞。6個基本模塊分別是針對水電采记,火電,風(fēng)電政勃,核電唧龄,電池和太陽能,但是現(xiàn)在城市供電都是混合供電奸远,一般還需要一個卡爾曼濾波器來對6個解碼模塊加權(quán)來進行協(xié)作解碼既棺。
新手寫的播放器在無外界電磁干擾,設(shè)備用電池的時候還勉強能聽懒叛。但是需要外接電源的時候基本屬于噪音生成器丸冕,高手寫的播放器無論電池還是電源基本能達到一致。
評論:
值得一提的是芍瑞,給變量取名也會對音質(zhì)有所影響晨仑。大牛程序員會盡量使用同一風(fēng)格的作曲家給變量取名褐墅,而菜鳥程序員則不會注意這一點拆檬,造成音質(zhì)上有所欠缺
新手因為沒學(xué)過數(shù)據(jù)結(jié)構(gòu),只會使用線性查找妥凳,復(fù)雜度為O(N)竟贯,聽碼率高的mp3時可能會產(chǎn)生延遲,左右聲道進行不一致的情況逝钥。而高手在這里會使用二分查找樹屑那,或哈希算法,復(fù)雜度能減少為O(logN)甚至O(1)艘款,即使mp3碼率達到320kbps持际,也不會聽出任何延遲的感覺。
哈希查找聲音比較雜哗咆,不如二分查找聽起來均衡蜘欲。
其實編譯器也有很大講究,gcc編譯出的播放器奔放熱烈晌柬,適合聽歡快音樂姥份,vs編譯器編譯的我個人感覺聽蔡琴的更有味道,聲音醇柔綿長年碘,過幾天想試試clion的效果呢
基本說到點上了澈歉,我還要補充一點。高手寫播放器從來不會用break, continue, goto這類的語句屿衅,貿(mào)然的分支截斷會產(chǎn)生音階嚴重跳變埃难,進而導(dǎo)致可怕的失真。btw,科普一下凯砍,齒音一般就是這么來的箱硕。