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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p>  電子綜合課程設(shè)計報告</p><p>  基于ARM+linux的MP3播放器</p><p>  主要指標(biāo)和要求:1、能夠正常的播放音樂</p><p>  2、能夠播放自己隨意指定的音樂</p><p>  3、播放的是MP3格式的音樂</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>  對于一個MP3文件的解碼,本質(zhì)上就是循環(huán)地對每一個</p><p>  Frame進(jìn)行解碼,直到完成所有Frame的解碼,或者中途出現(xiàn)</p>&

3、lt;p>  錯誤而中止。MP3文件的解碼流程如圖l所示bj。</p><p>  而對于每一幀的解碼,首先是要獲取每一幀的同步字符</p><p>  和幀頭信息,從而獲得相應(yīng)的參數(shù),并根據(jù)對幀頭信息的分析</p><p>  進(jìn)而得到實際一幀的音頻數(shù)據(jù);然后讀取主要數(shù)據(jù)并獲得縮放因子數(shù)據(jù)和霍夫曼碼字,接著進(jìn)行霍夫曼解碼;其次進(jìn)行反</p>&

4、lt;p>  量化,并根據(jù)幀頭的立體聲信息對反量化結(jié)果進(jìn)行立體聲處</p><p>  理;最后通過混迭處理、IMDCT和合成濾波器重建數(shù)字音頻信</p><p>  號的解碼,生成PCM數(shù)據(jù)。然后將PCM數(shù)據(jù)寫入聲卡設(shè)</p><p>  備,即可實現(xiàn)音頻文件的播放。</p><p>  2 、MP3播放原理:在linux內(nèi)核中有已經(jīng)

5、做好了的聲卡驅(qū)動程序,所以當(dāng)我們加載聲卡驅(qū)動后我們就會在文件系統(tǒng)的/dev/下看到/dev/dsp 這個聲卡文件,根據(jù)文件的特性我們只要把我們的解碼后的音樂文件不斷地讀出并寫入聲卡文件即可實現(xiàn)正常的聲音播放,其中我們讀文件用read()這個系統(tǒng)調(diào)用函數(shù)寫文件用write()這系統(tǒng)調(diào)用,用ioctl()控制聲卡文件的某些參數(shù)。</p><p>  實現(xiàn)快進(jìn)、快退的方案:</p><p>  

6、a:循環(huán)讀寫文件之前創(chuàng)建一個子進(jìn)程,這個子進(jìn)程專門負(fù)責(zé)循環(huán)檢測getchar()中輸入的字符,根據(jù)不同的字符做出不同的反應(yīng),比如快進(jìn)、快退、正常退出等,這個方案優(yōu)點是思路明了,便于接受,但其缺點是進(jìn)程是屬于強占式的不利于進(jìn)程的執(zhí)行。</p><p>  b:在循環(huán)讀寫文件之前,編寫一個函數(shù)mode(),用來把程序由阻塞同步變?yōu)楫惒侥J?,這樣只要在循環(huán)讀寫中加入getchar()就不會阻塞進(jìn)程了,該方法實現(xiàn)簡單,使

7、程序執(zhí)行也更合理。</p><p>  綜上,我們選擇b方案。</p><p>  三 、各模塊及頂層文件的設(shè)計:</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>  遇到的問題及解決方法:</p><p>  1、聲卡的參數(shù)不好設(shè)置,即聲卡的采樣速度、聲道、格式等不好準(zhǔn)確地設(shè)置。&l

21、t;/p><p>  解決方法:用wav_fmt這個結(jié)構(gòu)體將音頻文件額參數(shù)特性讀進(jìn)這個結(jié)構(gòu),這個結(jié)構(gòu)中的變量的值就是與該音頻文件相對應(yīng)的參數(shù)</p><p>  在控制快進(jìn)、快退等功能時需要getchar(),而這個函數(shù)在鍵盤沒有輸入時進(jìn)程會阻塞,這樣可能造成音頻難以繼續(xù)播放</p><p>  解決方法:編寫一個mode()函數(shù)使進(jìn)程在getchar()之前進(jìn)入異步模

22、式,這樣就能使進(jìn)程在沒有輸入字符的情況下照樣正常運行。</p><p>  經(jīng)過后續(xù)測試上述方法很好的解決了所遇到的問題。</p><p><b>  收獲及其體會:</b></p><p>  這次課程設(shè)計的嵌入式MP3播放器目前已實現(xiàn),并擁有市面MP3播放器的基本功能且在arm9嵌入式平臺上運行良好。當(dāng)然,在MP3播放器的開發(fā)過程中,也遇到

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論