• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于ARM 嵌入式系統(tǒng)的高保真無損音樂播放器設計

      2012-08-09 08:08:30陳自龍周書杰湯勇明
      電子器件 2012年6期
      關鍵詞:高保真開發(fā)板播放器

      陳自龍,周書杰,湯勇明

      (東南大學電子科學與工程學院,南京 210096)

      嵌入式系統(tǒng)播放MP3 等有損壓縮格式音樂的技術已經(jīng)比較成熟[1~3],但是對于播放無損壓縮音樂卻鮮有報道。

      本次設計選擇基于ARM11 處理器核心的TINY6410 開發(fā)板進行,其良好的計算能力可滿足對高壓縮率音樂軟解碼的需求。針對開發(fā)板硬件資源和軟件設計要求,本設計裁剪Linux 內核并對大容量存儲器做了支持工作,研究了Linux 內核的ALSA音頻架構,移植FLAC 解碼庫和APE 解碼庫,設計了音樂播放器的用戶界面,使用Qt/Embedded 開發(fā)工具完成了播放器的軟件開發(fā)工作。

      1 高保真音樂

      1.1 WAV 格式

      WAV 是微軟公司開發(fā)的一種音頻文件格式,用于保存WINDOWS 平臺的音頻信息資源。該格式支持MSADPCM、CCITT A LAW 等多種采樣壓縮算法,支持多種音頻位數(shù)、采樣頻率和聲道,標準格式的WAV 文件和CD 格式一樣,也是44.1 kHz 的采樣頻率,速率88 kbyte/s,16 bit 量化位數(shù)。

      WAV 格式的優(yōu)點是:編/解碼簡單(幾乎直接存儲來自模/數(shù)轉換器(ADC)的信號)、多系統(tǒng)支持以及無損壓縮。

      其主要缺點是需要較大的音頻存儲空間。

      1.2 FLAC 格式

      FLAC 是Free Lossless Audio Codec 的縮寫,即無損音頻壓縮編碼,是一套著名的自由音頻壓縮編碼,其特點是無損壓縮,即音頻數(shù)據(jù)以FLAC 編碼壓縮后不會丟失任何信息。

      FLAC 解碼只需整數(shù)運算,相對于大多數(shù)音頻編碼方式而言,對計算速度要求不高。

      FLAC 編碼有很多優(yōu)點:可以定位、便于對CD進行備份、抗損傷、富于彈性的Metadata 等等。而且,F(xiàn)LAC 是開源項目,其文件格式對公眾完全開放,其文件格式和編/解碼的實現(xiàn)方式都不受任何已知專利的限制。FLAC 解碼庫所有的源代碼都可在開放源代碼的授權方式下得到。

      1.3 APE 格式

      APE 格式的音樂是流行的數(shù)字音樂格式之一,由Monkey's Audio 推出的一套無損音樂壓縮算法壓縮而成,該壓縮算法針對音頻數(shù)據(jù)進行了專門的優(yōu)化,因而壓縮率相對比較高,而且解壓之后的音頻數(shù)據(jù)沒有任何損失。按照Monkey's Audio 官方的說法,同樣一首歌曲的APE 格式僅是WAV 格式文件大小的一半左右,比FLAC 格式文件也要小。由于APE 格式音樂的解碼涉及到浮點運算,而FLAC 格式只需要整數(shù)運算,所以通常FLAC 的解碼速度比APE 快30%。而且,APE 格式使用了對稱算法[4],在解壓縮時還需要進行一些編碼工作,這也消耗了部分CPU和內存資源,相比之下,F(xiàn)LAC 的格式則沒有這個問題。

      2 硬件系統(tǒng)

      TINY6410 開發(fā)板的硬件系統(tǒng)由主控制器ARM11(S3C6410)、觸摸顯示屏、大容量存儲設備(移動硬盤、SD 卡和優(yōu)盤)、高品質音頻解碼芯片(WM9714)和功放輸出組成。其中除大容量存儲設備和觸摸顯示屏為外接設備外,其余都集成在開發(fā)板上。

      圖1 硬件系統(tǒng)框圖

      S3C6410 處理器采用ARM11 架構,主頻533 MHz,最高667 MHz。

      S3C6410 的高主頻特性保證了對各音頻格式軟解碼時的要求,特別是壓縮率很高的APE 音樂。

      豐富的外接存儲接口滿足了掛載多種存儲器的需求。

      開發(fā)板自帶的4.3 吋TFT 真彩色觸摸顯示屏可滿足用戶的交互控制需求。

      本嵌入式高保真音樂播放軟件系統(tǒng)需要消耗可觀的內存,主要原因包括:

      (1)程序運行需要加載大量且必要的動態(tài)鏈接庫到內存;

      (2)播放器程序的界面設計中使用了很多PNG格式的圖片以達到美觀的目的,但是加載圖片需要消耗內存;

      (3)掛載外接大容量存儲設備(特別是大容量移動硬盤)也需要消耗內存。

      TINY6410 自帶的128M DDR RAM 可以滿足上述所有的內存消耗。

      3 軟件系統(tǒng)

      本項目軟件開發(fā)部分工作從底層到上層可以依次為:操作系統(tǒng)內核裁剪、程序庫移植和編程應用、應用程序開發(fā)。圖2 給出了該軟件系統(tǒng)的框架結構。

      圖2 軟件系統(tǒng)架構

      3.1 Linux 內核裁剪

      為了支持多種處理器和設備,Linux 內核龐大而復雜。就嵌入式高保真音樂播放器來說,內核的很多功能均未使用,將這些不必要的功能模塊從內核裁減掉,有助于提高內核的運行效率,降低內存使用率[5]。主要被裁剪的模塊有:

      (1)網(wǎng)絡設備支持(以太網(wǎng)控制器驅動和無線網(wǎng)卡驅動)

      (2)多媒體支持(Video for Linux 圖像采集框架以及相應的視頻采集卡驅動)

      (3)輸入設備支持(鼠標和鍵盤)

      (4)各種USB 設備支持(除了USB 大容量存儲器支持)

      (5)不必要的文件系統(tǒng)支持(Network File Systems、Ext3 Journaling File System 等)

      (6)TINY6410 開發(fā)板自帶的外接設備驅動(LED、蜂鳴器、按鍵驅動等)

      經(jīng)過裁剪之后的內核鏡像大小為2 519 036 byte,相比未裁剪之前的3 689 004 byte,體積減小了約三分之一。

      內核除了必要的裁剪,還需要添加對外接大容量存儲器掛載支持[6]。

      無損音樂文件體積大,開發(fā)板自帶的存儲空間不能滿足需求,需要外接大容量存儲設備。

      不管是優(yōu)盤、SD 卡還是移動硬盤,連接到開發(fā)板后都會有相應的內核信息產(chǎn)生,利用Linux 內核的熱插拔機制(本系統(tǒng)利用Mdev 機制,Linux 內核還有其他熱插拔機制),運行相應的存儲分區(qū)掛載命令就可以掛載外部存儲設備到開發(fā)板上。不過,NTFS 格式的移動硬盤掛載還需要在編譯Linux 內核的時候添加NTFS 文件系統(tǒng)支持選項。

      3.2 程序庫移植和編程應用

      3.2.1 ALSA 庫移植和應用

      對Linux 內核進行音頻編程的本質是要使用音頻驅動程序提供的編程接口,完成對聲卡的各種操作。目前Linux 內核中聲卡驅動程序主要是ALSA 架構。

      ALSA 是Advanced Linux Sound Architecture 的縮寫,即高級Linux 聲音架構,它為Linux 內核提供了音頻驅動和應用程序音頻編程接口。其主要特性包括:

      (1)高效地支持從消費類入門級聲卡到專業(yè)級音頻設備所有類型的音頻接口;

      (2)完全模塊化的設計;

      (3)支持對稱多處理(SMP)和線程安全;

      (4)對OSS(Open Sound System,Linux 內核早期的音頻子系統(tǒng)架構)的兼容;

      (5)提供了用戶空間的ALSA-Lib 庫來簡化應用程序的開發(fā)。

      圖3 給出了ALSA 的層次結構示意。

      圖3 ALSA 層次結構圖

      可以看出ALSA 架構包括驅動包(ALSADriver),開發(fā)包(ALSA-Libs),開發(fā)包插件(ALSALib-Plugins),設置管理工具包(ALSA-Utils),其他聲音相關處理小程序包(ALSA-Tools)),特殊音頻固件支持包(ALSA-Firmware),OSS 接口兼容模擬層工具(ALSA-OSS)共7個子項目,其中驅動包是必須的。

      ALSA-Driver 指內核驅動程序,包括硬件相關的代碼和一些公共代碼,非常龐大。ALSA-Libs 指用戶空間編程的函數(shù)庫。ALSA-Utils 包含一些基于ALSA 的用于控制聲卡的應用程序。

      在ALSA 的官網(wǎng)上下載ALSAlib 的源碼包,使用如下命令編譯ALSA 庫:

      完成編譯配置之后,進行編譯:

      從上面的編譯配置可以看出,指定的交叉編譯平臺是ARM,采用靜態(tài)編譯并且禁用了Python 組件,指定了ALSA Config Files和ALSA Plugin Files 路徑。

      將生成的庫文件復制到板載系統(tǒng)對應的路徑中,尤其Lib和Share 文件夾需要拷貝到/usr/local/lib和/usr/share/路徑下。

      3.2.2 ALSA 音頻播放編程

      ALSA 架構能夠實現(xiàn)音頻的回放、錄音和混音等絕大多數(shù)音頻處理相關的功能,這里只討論音頻回放功能。

      ALSA 架構播放音頻的一般編程步驟是:

      (1)打開ALSA 的音頻播放接口;

      (2)設置硬件參數(shù)(訪問模式、數(shù)據(jù)格式、聲道數(shù)和采樣率等);

      (3)循環(huán)分次將所有PCM 數(shù)據(jù)送入聲卡設備進行播放;

      (4)播放完畢,關閉播放接口。

      編寫高保真音樂播放程序的思路是:先將FLAC和APE 音樂解碼(WAV 無需解碼),然后將所得音頻數(shù)據(jù)送入聲卡設備即可實現(xiàn)播放,其流程如圖4所示。

      圖4 音頻數(shù)據(jù)播放流程圖

      3.3 FLAC 格式解碼支持

      FLAC 的官方網(wǎng)站提供了一個開源的跨平臺FLAC 編解碼庫,使用這個庫的API 可以實現(xiàn)對FLAC 格式音樂的解碼工作。

      3.3.1 FLAC 解碼庫的移植

      在FLAC 官網(wǎng)下載FLAC 編解碼庫的最新版本flac-1.2.1.tar.gz,解壓后需要先修改flac-1.2.1/examples/cpp/encode/file/main.cpp 文件,否則編譯的時候會出錯。打開main.cpp,然后在開頭添加一行#include <cstring>即可。接下來進行交叉編譯的配置,執(zhí)行命令:

      配置結束后就可以編譯和安裝了:

      這樣FLAC 庫就被安裝到宿主機的/opt/embedded/libflac 路徑下,將此路徑下編譯好的FLAC 運行庫復制到開發(fā)板上的系統(tǒng)里,并設置LD_LIBRARY_PATH 變量就可以讓運行的程序調用這個庫的API。

      3.3.2 FLAC 解碼庫的編程使用

      FLAC 的解碼庫提供了C 語言接口和C++語言接口,本系統(tǒng)使用C 語言接口。對一個FLAC 格式音樂文件解碼分為以下幾個步驟:

      (1)申請解碼對象;

      (2)初始化解碼對象;

      (3)MD5值檢查(可選);

      (4)FLAC 數(shù)據(jù)幀解碼;

      (5)刪除解碼對象。

      對應的函數(shù)分別是:

      每解碼一幀數(shù)據(jù),都有一個回調函數(shù)執(zhí)行,這個回調函數(shù)將解碼后的PCM 數(shù)據(jù)做適當調整后送入聲卡設備播放。

      至于音頻參數(shù)信息的獲取則需要FLAC__Metadata_SimpleIterator 這個結構體獲得。通過FLAC__Metadata_SimpleIterator 從FLAC 文件中得到id為METADATA_BLOCK_STREAMINFO 的數(shù)據(jù)塊,然后從這個數(shù)據(jù)塊可以解析出具體的音頻參數(shù)信息對聲卡設備進行參數(shù)設置。

      3.4 APE 格式解碼支持

      APE 格式的官方網(wǎng)站Monkey's Audio 提供了一個Monkey's Audio SDK 開發(fā)者工具包,使用其中的API 編程可以實現(xiàn)對APE 格式音樂的編解碼工作。

      3.4.1 Monkey's Audio SDK 的移植

      Monkey's Audio 官方目前只是針對Windows 平臺做了支持,不過一些開源愛好者已經(jīng)將Monkey's Audio SDK 移植到Linux 平臺,我們要對這個移植版本進行編譯和安裝,使用下列命令:

      從上述配置可以看出,匯編被禁用,目標平臺是ARM,并且編譯好的庫被安裝到宿主機的/opt/embedded/libape 路徑下。將這些編譯好的庫復制到開發(fā)板上的系統(tǒng)里,并設置LD_LIBRARY_PATH 變量就可以讓應用程序使用Monkey's Audio SDK 了。

      3.4.2 Monkey's Audio SDK 的編程

      由于只需要進行解碼工作,所以這里只涉及到解碼API 的使用。Monkey's Audio SDK 使用C++語言編寫,要解碼APE 格式音樂,使用其解碼類“IAPEDecompress”即可。APE 的解碼接口只需調用“IAPEDecompress”類的“GetData()”函數(shù)、“Seek()”函數(shù)、“GetInfo()”函數(shù)即可,所有的數(shù)據(jù)同步和緩沖都由解碼庫自動完成。

      3.5 播放器應用程序開發(fā)

      本設計中的應用程序采用C++開發(fā)語言在Qt/Embedded 開發(fā)平臺上實施。它是一個用于桌面系統(tǒng)和嵌入式開發(fā)的跨平臺應用程序框架,包括一個直觀的應用接口程序函數(shù)(API)和一個豐富的類庫,以及用于GUI 開發(fā)和國際化的集成工具。

      3.5.1 程序功能描述

      本項目軟件旨在實現(xiàn)一個功能完善的高保真無損音樂播放系統(tǒng)。

      當用戶按下電源按鈕啟動系統(tǒng)后,系統(tǒng)第一個執(zhí)行的用戶程序就是高保真音樂播放器程序。此程序掃描所有外接存儲器中的無損壓縮音樂文件,并生成一個音樂列表,保存掃描結果。這樣以后再啟動程序時,程序只需要讀取這個音樂列表得到所有的歌曲信息。如果外接存儲器發(fā)生變更或改動后,用戶可以啟動播放器的更新音樂庫線程來更新音樂列表。這種設計在保持音樂文件同步的同時,減少掃描等待時間,提升用戶體驗。

      用戶可以進行播放、暫停、停止、上一曲、下一曲、播放進度調節(jié)和音量調節(jié)的控制等操作。歌曲的選擇通過一個簡潔、美觀的播放列表實現(xiàn),同時,對某一首歌曲的詳細信息(如專輯、歌手、音樂流派等)也可以進一步查看。

      作為一個完整的系統(tǒng)設計,播放器主界面還提供了時間日期顯示和設置、關機和更新本地音樂庫等系統(tǒng)服務和功能。

      3.5.2 界面設計

      隨著軟件設計水平的提升,用戶不僅關注軟件的實用性,對軟件界面設計的美觀性和易用性也有著較高的要求。

      本嵌入式高保真音樂播放器界面設計以簡約、美觀為主,配合以陰影、半透明和動畫等效果,在實現(xiàn)系統(tǒng)完整功能的基礎上,帶給用戶良好的人機交互體驗。

      主界面、播放列表界面、單曲信息查看界面等設計如圖5~7所示,其它一些界面元素設計如圖8所示。

      3.5.3 應用程序設計

      本應用程序涉及到Qt 界面編程、多線程處理、Linux 內核音頻編程以及無損壓縮音頻軟解碼等,其程序模塊化設計如圖9所示。

      圖5 播放器主界面

      圖6 音樂列表界面

      圖7 單曲信息查看界面

      圖8 播放器界面元素綜合圖

      圖9 程序模塊劃分圖

      可以將上述模塊粗略地劃分為:

      (1)界面顯示模塊;

      (2)音樂播放控制模塊;

      (3)音頻解碼模塊;

      (4)系統(tǒng)設置和服務模塊。

      界面顯示模塊是播放器人機交互的接口。通過繼承Qt 的QWidget 類,并實現(xiàn)相應的繪圖函數(shù)和消息處理,可以實現(xiàn)各種界面元素和控件,有了這些最基本的界面元素和控件,同時利用Qt 特有的“信號/槽”機制作為中間“通信”工具,不難構造出完整的程序界面[7]。

      音樂播放控制模塊是整個高保真音樂播放器的核心,利用Qt 自帶的多線程處理機制,可以實現(xiàn)音樂播放與界面顯示的隔離,不會產(chǎn)生界面凍結和卡死問題。

      通過繼承Qt 的QThread 線程類,并按程序需要完善其“run”函數(shù),可以比較容易的實現(xiàn)多線程處理,例如音樂播放模塊的“run”函數(shù)代碼如下:

      上述代碼比較簡單,就是按要播放的音樂格式,分別調用相應的處理函數(shù),其中對于FLAC 格式的音樂,其播放處理函數(shù)“processFlacMusic”代碼如下:

      這段代碼根據(jù)不同的播放狀態(tài)進行處理的過程:在播放狀態(tài)時不斷解碼;在暫停狀態(tài)時不進行解碼,并使線程睡眠;在停止狀態(tài)時復位flac 解碼器對象并返回,結束播放線程。對于WAV 格式和APE格式音樂的播放處理完全類似,不再贅述。

      音頻解碼模塊是音樂播放模塊的基礎,能對FLAC 格式和APE 格式音樂進行順序解碼以及隨機位置解碼,并將解碼后的音頻采樣數(shù)據(jù)返回給音樂播放模塊。順序解碼滿足正常的音樂播放功能,隨機位置解碼可以滿足播放進度調節(jié)功能。此外,解碼模塊可以獲得音頻文件的參數(shù)信息(采樣率、采樣位數(shù)、聲道數(shù)等)和專輯信息(專輯名稱、歌手、流派、發(fā)行時間等)。播放模塊會根據(jù)參數(shù)信息對聲卡設備進行設置,否則音樂無法正確播放,而專輯信息則可以以圖文并茂的方式呈現(xiàn)給用戶,提升用戶體驗。

      系統(tǒng)設置和服務模塊是為了系統(tǒng)的完整性而存在的。由于整個系統(tǒng)運行時只有高保真音樂播放器作為前臺程序運行,必須提供必要的關機和時間日期設置功能。同時,為了使程序更加人性化,還提供了時間日期顯示功能和關閉屏幕功能。作為嵌入式應用,功耗是重要的設計問題,就整個硬件系統(tǒng)而言,屏幕的功耗占了整個系統(tǒng)功耗的相當一部分,如果在用戶不需要查看屏幕時,將屏幕關閉,可有效降低系統(tǒng)功耗。

      4 系統(tǒng)驗證

      在完成系統(tǒng)設計的硬件和軟件工作目標后,對該嵌入式高保真無損音樂播放器進行試聽驗證。對于16 bit或24 bit 采樣位數(shù),采樣頻率上限為48 kHz 的無損高保真音樂均可順利播放。用戶界面操作流暢,沒有崩潰或卡死現(xiàn)象發(fā)生。播放器順利加載1TB 移動硬盤中的1600 首無損高保真音樂。

      5 結束語

      基于ARM11 開發(fā)板和嵌入式Linux 內核,本文給出了一個界面美觀,功能齊全的高保真音樂播放器設計,實現(xiàn)了WAV、FLAC、APE 三種無損格式高保真音樂的播放,提升了嵌入式系統(tǒng)音樂播放的視聽感受。限于S3C6410 芯片的AC'97 音頻控制模塊最高只支持48 kHz 采樣頻率的音頻,所以造成了高保真無損音樂播放的采樣率瓶頸??梢钥紤]使用S3C6410 芯片的IIS 音頻接口(采樣位數(shù)支持8/16/24 bit,采樣率支持從8 kHz 到192 kHz),外接高品質音頻解碼芯片[8]的方案,獲得更好的高保真無損音樂播放體驗。

      [1]郁峰.基于嵌入式文件系統(tǒng)的MP3 播放器的設計和實現(xiàn)[D].蘇州:蘇州大學,2009.

      [2]於少峰,嚴菊明,胡晨.基于AC97 標準的嵌入式音頻系統(tǒng)設計與實現(xiàn)[J].電子器件,2004,27(4):733-736.

      [3]焦正才,樊文俠.基于Qt/Embedded 的MP3 音樂播放器的設計與實現(xiàn)[J].電子設計工程,2012,20(7):148-150.

      [4]Theory of Monkey's Audio[online].http://www.monkeysaudio.com/theory.html.

      [5]李彬.基于應用程序的嵌入式Linux 內核自動裁剪[D].東南大學:計算機應用專業(yè),2006.

      [6]查婧,劉波,曹劍中.Linux 內核在S3C2440 上移植的方法[J].電子器件,2009,32(4):844-845.

      [7]Jasmine Blancehette,Mark Summerfield.C++GUI QT4 programming(The second Edition)[M].2004:36-68.

      [8]章堅武,董平,馬勇.一種嵌入式多媒體播放器的硬件設計與實現(xiàn)[J].電子器件,2006,29(4):1123-1125.

      猜你喜歡
      高保真開發(fā)板播放器
      Walkman誕生40周年 索尼適時發(fā)布NW-ZX500和NW-A100系列播放器
      基于STM32的MP3播放器設計
      電子制作(2019年9期)2019-05-30 09:41:44
      Moon ACE播放器/放大器一體機
      Symmetries in the Sem iosphere:A Typology
      電視媒體“走轉改”如何做到“高保真”
      傳媒評論(2017年4期)2017-07-10 09:22:56
      Microchip最新推出兩款PIC32 Curiosity開發(fā)板
      淺析單片機開發(fā)板的設計與制作
      電子制作(2017年22期)2017-02-02 07:10:14
      高保真色彩管理應用技術綜述
      出版與印刷(2016年2期)2016-12-20 06:32:22
      利用 PixelGrid 軟件實現(xiàn)航空影像高保真高效率DSM 的生產(chǎn)
      遙感信息(2015年3期)2015-12-13 07:26:52
      播放器背板注塑模具設計
      中國塑料(2015年8期)2015-10-14 01:10:55
      湖南省| 巢湖市| 郎溪县| 贞丰县| 彰武县| 屏东市| 怀仁县| 乌兰浩特市| 于都县| 宁乡县| 左贡县| 涿鹿县| 青神县| 九台市| 桂林市| 葫芦岛市| 乌拉特后旗| 芦山县| 宁乡县| 乡宁县| 土默特右旗| 巫山县| 鄱阳县| 新疆| 调兵山市| 吴旗县| 宜兰市| 民乐县| 洛扎县| 大同县| 石泉县| 渑池县| 时尚| 南阳市| 佛坪县| 聊城市| 黄山市| 永修县| 兰溪市| 阿坝县| 渭源县|