電子綜合課程設(shè)計(jì)報(bào)告--基于arm+linux的mp3播放器_第1頁(yè)
已閱讀1頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論