版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 電子綜合課程設(shè)計(jì)報(bào)告</p><p> 基于ARM+linux的MP3播放器</p><p> 主要指標(biāo)和要求:1、能夠正常的播放音樂(lè)</p><p> 2、能夠播放自己隨意指定的音樂(lè)</p><p> 3、播放的是MP3格式的音樂(lè)</p><p> 4、能夠?qū)崿F(xiàn)五秒快進(jìn)和五秒快退<
2、;/p><p> 5、能夠?qū)崿F(xiàn)正常退出</p><p> 方案選擇及工作原理:</p><p> 1、MP3解碼原理:MP3文件解碼流程</p><p> 對(duì)于一個(gè)MP3文件的解碼,本質(zhì)上就是循環(huán)地對(duì)每一個(gè)</p><p> Frame進(jìn)行解碼,直到完成所有Frame的解碼,或者中途出現(xiàn)</p>&
3、lt;p> 錯(cuò)誤而中止。MP3文件的解碼流程如圖l所示bj。</p><p> 而對(duì)于每一幀的解碼,首先是要獲取每一幀的同步字符</p><p> 和幀頭信息,從而獲得相應(yīng)的參數(shù),并根據(jù)對(duì)幀頭信息的分析</p><p> 進(jìn)而得到實(shí)際一幀的音頻數(shù)據(jù);然后讀取主要數(shù)據(jù)并獲得縮放因子數(shù)據(jù)和霍夫曼碼字,接著進(jìn)行霍夫曼解碼;其次進(jìn)行反</p>&
4、lt;p> 量化,并根據(jù)幀頭的立體聲信息對(duì)反量化結(jié)果進(jìn)行立體聲處</p><p> 理;最后通過(guò)混迭處理、IMDCT和合成濾波器重建數(shù)字音頻信</p><p> 號(hào)的解碼,生成PCM數(shù)據(jù)。然后將PCM數(shù)據(jù)寫(xiě)入聲卡設(shè)</p><p> 備,即可實(shí)現(xiàn)音頻文件的播放。</p><p> 2 、MP3播放原理:在linux內(nèi)核中有已經(jīng)
5、做好了的聲卡驅(qū)動(dòng)程序,所以當(dāng)我們加載聲卡驅(qū)動(dòng)后我們就會(huì)在文件系統(tǒng)的/dev/下看到/dev/dsp 這個(gè)聲卡文件,根據(jù)文件的特性我們只要把我們的解碼后的音樂(lè)文件不斷地讀出并寫(xiě)入聲卡文件即可實(shí)現(xiàn)正常的聲音播放,其中我們讀文件用read()這個(gè)系統(tǒng)調(diào)用函數(shù)寫(xiě)文件用write()這系統(tǒng)調(diào)用,用ioctl()控制聲卡文件的某些參數(shù)。</p><p> 實(shí)現(xiàn)快進(jìn)、快退的方案:</p><p>
6、a:循環(huán)讀寫(xiě)文件之前創(chuàng)建一個(gè)子進(jìn)程,這個(gè)子進(jìn)程專門負(fù)責(zé)循環(huán)檢測(cè)getchar()中輸入的字符,根據(jù)不同的字符做出不同的反應(yīng),比如快進(jìn)、快退、正常退出等,這個(gè)方案優(yōu)點(diǎn)是思路明了,便于接受,但其缺點(diǎn)是進(jìn)程是屬于強(qiáng)占式的不利于進(jìn)程的執(zhí)行。</p><p> b:在循環(huán)讀寫(xiě)文件之前,編寫(xiě)一個(gè)函數(shù)mode(),用來(lái)把程序由阻塞同步變?yōu)楫惒侥J剑@樣只要在循環(huán)讀寫(xiě)中加入getchar()就不會(huì)阻塞進(jìn)程了,該方法實(shí)現(xiàn)簡(jiǎn)單,使
7、程序執(zhí)行也更合理。</p><p> 綜上,我們選擇b方案。</p><p> 三 、各模塊及頂層文件的設(shè)計(jì):</p><p> 1、MP3 解碼原理圖:</p><p> 否 </p><p> 是 </p><p><b&
8、gt; 是</b></p><p><b> 否</b></p><p><b> 是</b></p><p><b> 系統(tǒng)主程序流程圖:</b></p><p><b> 否</b></p><p><
9、;b> 是</b></p><p><b> 是 </b></p><p><b> 否</b></p><p><b> 是</b></p><p><b> 否</b></p><p>
10、 以下為部分主程序 </p><p> int main(char argc,char **argv)</p><p><b> {</b></p><p> int fd1,fd2,n,speed=44100,channel=2,fmt=AFMT_S16_LE;</p><p> char buf1[
11、1024];</p><p> char com; </p><p> struct wav_fmt wav;</p><p> if(argc<2)</p><p><b> {</b></p><p> printf("The parameter is too les
12、s\n");</p><p><b> exit(1);</b></p><p><b> }</b></p><p> fd1=open(argv[1],O_RDONLY);</p><p><b> if(fd1<0)</b></p>
13、<p><b> {</b></p><p> printf("open the %s fail\n",argv[1]);</p><p><b> exit(1);</b></p><p><b> }</b></p><p> fd2
14、=open("/dev/dsp",O_WRONLY);</p><p><b> if(fd2<0)</b></p><p><b> {</b></p><p> printf("open the /dev/dsp fail\n");</p><p&
15、gt;<b> exit(1);</b></p><p><b> }</b></p><p> read(fd1,&wav,sizeof(struct wav_fmt));</p><p> printf("speed:%d,bitspersample:%d,channel:%d\n"
16、,wav.speed,wav.bitspersample,wav.nchannels);</p><p> ioctl(fd2,SNDCTL_DSP_SETFMT,&fmt);</p><p> ioctl(fd2,SNDCTL_DSP_SPEED,&speed);</p><p> ioctl(fd2,SNDCTL_DSP_CHANNELS,
17、&channel);</p><p><b> mode();</b></p><p> while((n=read(fd1,buf1,1024))>0)</p><p><b> {</b></p><p> write(fd2,buf1,n);</p><
18、;p> com=getchar();</p><p> switch(com)</p><p><b> {</b></p><p> case 'a':lseek(fd1,time,SEEK_CUR);break;</p><p> case 'b':lseek(fd1,
19、-time,SEEK_CUR);break;</p><p> case 'q':printf("\n");exit(0);</p><p> default:break;</p><p><b> }</b></p><p><b> }</b><
20、/p><p> printf("your opration is successful\n");</p><p> exit(0); </p><p> 遇到的問(wèn)題及解決方法:</p><p> 1、聲卡的參數(shù)不好設(shè)置,即聲卡的采樣速度、聲道、格式等不好準(zhǔn)確地設(shè)置。&l
21、t;/p><p> 解決方法:用wav_fmt這個(gè)結(jié)構(gòu)體將音頻文件額參數(shù)特性讀進(jìn)這個(gè)結(jié)構(gòu),這個(gè)結(jié)構(gòu)中的變量的值就是與該音頻文件相對(duì)應(yīng)的參數(shù)</p><p> 在控制快進(jìn)、快退等功能時(shí)需要getchar(),而這個(gè)函數(shù)在鍵盤沒(méi)有輸入時(shí)進(jìn)程會(huì)阻塞,這樣可能造成音頻難以繼續(xù)播放</p><p> 解決方法:編寫(xiě)一個(gè)mode()函數(shù)使進(jìn)程在getchar()之前進(jìn)入異步模
22、式,這樣就能使進(jìn)程在沒(méi)有輸入字符的情況下照樣正常運(yùn)行。</p><p> 經(jīng)過(guò)后續(xù)測(cè)試上述方法很好的解決了所遇到的問(wèn)題。</p><p><b> 收獲及其體會(huì):</b></p><p> 這次課程設(shè)計(jì)的嵌入式MP3播放器目前已實(shí)現(xiàn),并擁有市面MP3播放器的基本功能且在arm9嵌入式平臺(tái)上運(yùn)行良好。當(dāng)然,在MP3播放器的開(kāi)發(fā)過(guò)程中,也遇到
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于linux的mp3播放器設(shè)計(jì)與實(shí)現(xiàn)
- mp3音樂(lè)播放器軟件課程設(shè)計(jì)報(bào)告(mfc)
- 基于arm的mp3播放器設(shè)計(jì)與實(shí)現(xiàn)
- 基于mp3播放器的設(shè)計(jì)
- mp3播放器設(shè)計(jì)設(shè)計(jì)
- 基于dsp的mp3播放器設(shè)計(jì)
- 基于linux的互聯(lián)網(wǎng)mp3播放器的設(shè)計(jì)研究【開(kāi)題報(bào)告】
- dsp數(shù)字信號(hào)處理課程設(shè)計(jì)報(bào)告--基于dsp的mp3播放器設(shè)計(jì)
- mp3播放器的實(shí)現(xiàn)開(kāi)題報(bào)告
- 基于fpga的mp3音樂(lè)播放器設(shè)計(jì)
- 基于ZSP的MP3播放器SoC設(shè)計(jì).pdf
- 基于vc++mp3播放器的課程設(shè)計(jì)
- 硬件課程設(shè)計(jì)-基于fpga的mp3音樂(lè)播放器說(shuō)明書(shū)
- dsp數(shù)字信號(hào)處理課程設(shè)計(jì)--基于dsp的mp3播放器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于陀螺儀的智能mp3播放器
- 基于linux的互聯(lián)網(wǎng)mp3播放器的設(shè)計(jì)研究【文獻(xiàn)綜述】
- 基于dsp的多功能mp3播放器設(shè)計(jì)
- 基于java的mp3播放器設(shè)計(jì)與實(shí)現(xiàn)
- MP3播放器的實(shí)現(xiàn)開(kāi)題報(bào)告.doc
- 開(kāi)題報(bào)告--基于通用單片機(jī)mp3播放器設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論