編寫多格式音樂播放器(掃盲)

考試考完後決定把智能播放器重新寫一遍,要能支持更多格式(包括wav、MP3、wma、flac、ape等常見的格式),用新的智能算法。於是就不能用MCI接口來做簡單的編程了,就必須用到第三方解碼器,這個過程是曲折的,花了我一週的時間才寫出能夠解碼播放上述格式的音樂播放器,而智能算法現在還沒有實現。。在此把這方面編程的入門知識寫下來,希望能幫助某些像我當初一樣的人。萬事開頭難,真的是這樣子的,因此我也把開頭的那部分寫下來,很多技術實現都被我隱藏了,本文只是做一個基本的掃盲,有任何問題都可以留言相問。

 

   音頻播放的流程如果是無壓縮的波形文件,直接將其讀入聲卡就可以自動的播放了(如果有的聲卡能夠支持硬件解碼,或許也能直接播放某些格式的音樂,但這一點我不太瞭解^_^),如果是經過編碼的文件格式,比如MP3flac等格式的文件,就必須先軟解碼成波形數據,然後再送入聲卡播放。以你此,要編一個windowslinux等操作系統下的音頻播放器,一般有以下兩個流程:解碼à播放。(剛開始編播放器的時候這一點都不知道,囧,於是面對那些解碼庫無從下手浪費了很多時間)。如果有開源的解碼庫,要做解碼工作應該不難,比如MP3就有mpg123解碼器,flacape也都有相應的開源解碼器,這些只要在網上搜一下都能找到它們的開源官網。用來播放的技術似乎也不少,我知道的就有directsoundsdl,它們負責將解碼後的數據播放。

 

採樣率: 採樣率(也稱爲採樣速度或者採樣頻率)定義了每秒從連續信號中提取並組成離散信號的採樣個數,單位用赫茲(Hz)來表示。採樣頻率的倒數是採樣週期(也稱爲採樣時間),它表示採樣之間的時間間隔。(截取自百度百科)

補充:也叫頻率

音樂文件中常用的採樣率爲4410048000.(正常人耳能聽到的範圍爲20HZ-20kHZ,根據抽樣定理,採樣率必須設置在40k以上,但由於A/D轉換與D/A轉換中的濾波的緣故,常用的採樣率設置爲44100就能較好保留較爲完整的音樂信息了,CD就是用這個採樣率,但這樣採樣率的原始聲音數字信息是很大的)

正常的播放速度等於採樣率

 

    比特:也叫採樣精度。聲音波形振幅的大小用多少比特位來表示,就有多少比特。音樂常見的比特爲16bits。

 

聲道每個聲道記錄單獨的波形文件,在播放的時候,通過不同位置的揚聲器播放不同的聲道,從而還原一個比較真實甚至是超真實的效果。採樣率、採樣精度、聲道就決定了一個聲音數字化的基本特性,是聲音數字化的最重要參數。

 

比特率: 比特率是指將數字聲音由模擬格式轉化成數字格式的採樣率,採樣率越高,還原後的音質就越好。

補充:也叫碼率

比特率代表每秒採樣來的數據的大小。採樣率決定多長時間採集一次,比特率除以採樣率的值決定每次採樣採集多大的數據

          MP3文件可以使用的比特率一般是8320kbps

 

:在數據和數字通信中,按某一標準預先確定的若干比特或字段組成的特定的信息結構。(截取自百度百科)

補充:幀是一種相對獨立的信息結構,比如視頻的一幀一般就是一個畫面。用一定的速度刷新不斷變化的畫面,實際上就是一幀接着一幀播放,就形成了視頻。在波形文件中很少提到幀,這一概念一般在編碼的音樂文件中提到,經過編碼後的數據按幀存放。

 

PCM編碼PCM 脈衝編碼調製Pulse Code Modulation的縮寫。(又叫脈衝編碼調製):數字通信的編碼方式之一。主要過程是將話音、圖像等模擬信號每隔一定時間進行取樣,使其離散化,同時將抽樣值按分層單位四捨五入取整量化,同時將抽樣值按一組二進制碼來表示抽樣脈衝的幅值。

在計算機應用中,能夠達到最高保真水平的就是PCM編碼,被廣泛用於素材保存及音樂欣賞,CDDVD以及我們常見的 WAV文件中均有應用。(截取自百度百科)

補充:說白了,PCM就是一種將模擬信號轉換成數字信號的編碼方式,這種編碼得到的音樂文件是未經壓縮的波形文件。

 

WAV文件:微軟開發的音樂文件格式。它的數據保存格式如下:(參考鏈接http://www.codeproject.com/KB/audio-video/CWave.aspx

 

  

發佈了36 篇原創文章 · 獲贊 58 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章