<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 消費(fèi)電子 > 設(shè)計(jì)應(yīng)用 > vW90P71 0的智能音樂播放囂系統(tǒng)設(shè)計(jì)

          vW90P71 0的智能音樂播放囂系統(tǒng)設(shè)計(jì)

          作者: 時(shí)間:2009-11-17 來源:網(wǎng)絡(luò) 收藏

          2.1 主、從機(jī)控制器
          W90P710主機(jī)是控制和管理的核心,實(shí)現(xiàn),錄音,文件和錄音文件的存儲、刪除、顯示,以及與單片機(jī)的串口通信等功能。該處理器以ARM7TDMI為內(nèi)核,具有以下特性:
          ①片內(nèi)集成LCD控制器,方便實(shí)現(xiàn)顯示功能;
          ②外部總線接口具有豐富的片選資源,可擴(kuò)展NAND Flash等大容量存儲設(shè)備;
          ③具有4個串口,可方便實(shí)現(xiàn)與凌陽單片機(jī)的串口通信及程序調(diào)試。
          同時(shí),W90P710主頻能達(dá)到80 MHz,功耗低,有著十分優(yōu)秀的性價(jià)比,特別適用于控制領(lǐng)域。
          的語音識別芯片為SPCE061A,是凌陽科技公司推出的針對語音識別領(lǐng)域的16位單片機(jī),具有體積小、功耗低、性能好且易于開發(fā)等特點(diǎn)。該芯片使用凌陽音頻編碼SACM_S240方式(2.4 kbps),能容納210 s的語音數(shù)據(jù);具備串行設(shè)備接口;7通道10位電壓A/D轉(zhuǎn)換器(ADC)和1個單通道的聲音專用A/D轉(zhuǎn)換器。聲音A/D轉(zhuǎn)換器輸入通道,內(nèi)置麥克風(fēng)放大器和自動增益控制(AGC)電路。語音模式成功啟動或處于訓(xùn)練模式下,單片機(jī)自行采集語音信號并進(jìn)行識別,識別結(jié)果通過串行接口傳給主機(jī)。
          2.2 音頻模塊
          音頻模塊在整個系統(tǒng)中起著舉足輕重的作用,不但要實(shí)現(xiàn)錄音功能,而且還需MP3、提示音和錄音文件。本系統(tǒng)的音頻接口由AC97音頻接口總線接口和ALC203音頻編解碼器組成。ALC203是Realtek公司推出的一款經(jīng)濟(jì)型音頻編解碼器,它通過AC97數(shù)字音頻接口實(shí)現(xiàn)音頻信號的數(shù)字化處理。圖2是關(guān)于音頻編解碼的具體實(shí)現(xiàn)電路,ALC203的2、3腳接1個24.576 MHz的晶振;5、6、7、10腳和華邦W90P710的AC97數(shù)字音頻接口AC97-DATO、AC97-BCLK、AC97-DATI、AC97-SYNC相連;MIC1和MIC2接麥克風(fēng)兩端;HP-OUT-L和HP-OUT-R腳分別通過一個有極電容接到耳機(jī)插口處;GPIO1和GPIO0可以硬件調(diào)節(jié)音量,但本采用軟件進(jìn)行音量調(diào)節(jié)。

          本文引用地址:http://www.ex-cimer.com/article/166854.htm

          2.3 其他模塊
          LCD顯示屏選用的是AUO公司的A030DL01(320×240)工業(yè)級液晶屏。該液晶屏的彩色格式為RGB656格式,彩色色深可達(dá)到64K色,顯示文件名和歌曲基本信,同時(shí)因屏幕空間較大,可添加彩色背景畫面。漢字顯示是通過添加字庫軟件實(shí)現(xiàn)的。鍵盤有4×1個按鍵,方便用戶控制器,同時(shí)也保證在語音模式不能正確工作時(shí)可以按鍵控制機(jī)器。

          MPEGDEC_STREAM*MPEGDEC_open(char*filename,MPEGDEC_CTRL*ctrl);
          功能描述:打開MPEG音頻文件。
          參數(shù):filename為待打開的音頻文件,ctrl為控制數(shù)據(jù)解碼信息的結(jié)構(gòu)體。
          返回值:打開成功,則返回包含數(shù)據(jù)流信息和解碼信息的結(jié)構(gòu)體指針;失敗,則返回NULL。
          void MPEGDEC_dose(MPEGDEC_STREAM*mpds);
          功能描述:關(guān)閉MPEG音頻文件。
          參數(shù):mpds指向待關(guān)閉的音頻文件。
          無返回值。
          unsigned long MPEGDEC_decode_frame(MPEGDEC_STREAM*mpds,short*pcm[MPEGDEC_MAX_CHANNELS]);;
          功能描述:為當(dāng)前打開的音頻文件的一幀解碼。
          輸入:mpds指向打開的音頻文件。
          輸出:pcm[]存放解碼后的16位音頻數(shù)據(jù);pcm[0]中存放單聲道或左聲道或聲道1的數(shù)據(jù);pcm[1]中存放右聲道或聲道2的數(shù)據(jù)。
          返回值:返回解碼一幀的音頻數(shù)據(jù)數(shù)目;返回MPEG-DEC_ERR_EOF,則說明當(dāng)前幀是最后一幀;返回MPEG-DEC_ERR_BADFRAME,則說明該幀已損壞。
          3.2.2 歌曲基本信息結(jié)構(gòu)體
          按照MP3的ID3 V1.0標(biāo)準(zhǔn)定義,MP3文件的最后128字節(jié)用來存放標(biāo)簽頭、歌曲名、演唱者等信息。為了在LCD屏上顯示當(dāng)前播放歌曲的基本信息,給出了一個結(jié)構(gòu)體來讀取并存放這些信息。這個結(jié)構(gòu)體定義如下:


          3.2.3 播放主流程
          當(dāng)用戶選中歌曲進(jìn)入播放界面時(shí),ARM7主機(jī)首先通過串口給單片機(jī)發(fā)一個命令字0x01,通知從機(jī)進(jìn)入識別“播放器”這組命令的函數(shù)。從機(jī)接收到命令后,首先判斷“播放器”這組命令是否已經(jīng)訓(xùn)練。若訓(xùn)練,則返回0x04,同時(shí)播放器的語音模式啟動成功;若未訓(xùn)練,則返回0x06,LCD屏顯示提醒用戶訓(xùn)練該庫;若從機(jī)在規(guī)定時(shí)間內(nèi)(因?qū)崟r(shí)性要求,這里“規(guī)定時(shí)間”指200 ms)返回其他值或未返回值,則播放器的語音模式啟動失敗。若成功啟動語音模式,音樂是分幀解碼后播放,在幀一幀循環(huán)中,主機(jī)需查詢鍵盤和串口,來實(shí)現(xiàn)“上一首”、“下一首”、“播放”、“暫停”、“退出”和調(diào)節(jié)音量的功能。若語音模式啟動失敗,則只需查詢鍵盤。每次接收到“退出”命令時(shí),主機(jī)在退出音樂模式前需通過串口發(fā)送0x05給單片機(jī),通知單片機(jī)同步退出該模式;單片機(jī)接收到命令后,需返回0x04告知主機(jī)已退出。播放的主流程如圖4所示。關(guān)于語音命令如何訓(xùn)練,可見參考文獻(xiàn)[5],這里不再贅述。

          4 實(shí)驗(yàn)結(jié)果
          以W90P710開發(fā)套件+凌陽SPCE061A為硬件,采用嵌入式操作系統(tǒng)μClinux,在實(shí)驗(yàn)室安靜和嘈雜的情況下(安靜時(shí)室內(nèi)噪聲為50 dB,嘈雜時(shí)為60 dB),測試播放器語音模式的工作效率。在測試語音模式的工作效率前,先進(jìn)行了按鍵測試,測試通過率為100%,且音樂播放流暢,響應(yīng)滿足實(shí)時(shí)性要求。



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();