mp3播放器课程设计报告

mp3播放器课程设计报告

ID:9405940

大小:32.00 KB

页数:9页

时间:2018-04-30

mp3播放器课程设计报告_第1页
mp3播放器课程设计报告_第2页
mp3播放器课程设计报告_第3页
mp3播放器课程设计报告_第4页
mp3播放器课程设计报告_第5页
资源描述:

《mp3播放器课程设计报告》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、电子综合课程设计报告基于ARM+linux的MP3播放器专业班级:电信09101设计者:7谢佳红指导老师:雷立云设计时间:2012年4月一、主要指标和要求:1、能够正常的播放音乐2、能够播放自己随意指定的音乐3、播放的是MP3格式的音乐4、能够实现五秒快进和五秒快退5、能够实现正常退出二、方案选择及工作原理:1、MP3解码原理:MP3文件解码流程对于一个MP3文件的解码,本质上就是循环地对每一个Frame进行解码,直到完成所有Frame的解码,或者中途出现错误而中止。MP3文件的解码流程如图l所示bj。而对于每一帧的解码,首先是要获取每

2、一帧的同步字符和帧头信息,从而获得相应的参数,并根据对帧头信息的分析进而得到实际一帧的音频数据;然后读取主要数据并获得缩放因子数据和霍夫曼码字,接着进行霍夫曼解码;其次进行反量化,并根据帧头的立体声信息对反量化结果进行立体声处理;最后通过混迭处理、IMDCT和合成滤波器重建数字音频信号的解码,生成PCM数据。然后将PCM数据写入声卡设备,即可实现音频文件的播放。2、MP3播放原理:在linux内核中有已经做好了的声卡驱动程序,所以当我们加载声卡驱动后我们就会在文件系统的/dev/下看到/dev/dsp这个声卡文件,根据文件的特性我们只要

3、把我们的解码后的音乐文件不断地读出并写入声卡文件即可实现正常的声音播放,其中我们读文件用read()这个系统调用函数写文件用write()这系统调用,用ioctl()控制声卡文件的某些参数。3、实现快进、快退的方案:a:循环读写文件之前创建一个子进程,这个子进程专门负责循环检测getchar()中输入的字符,根据不同的字符做出不同的反应,比如快进、快退、正常退出等,这个方案优点是思路明了,便于接受,但其缺点是进程是属于强占式的不利于进程的执行。b:在循环读写文件之前,编写一个函数mode(),用来把程序由阻塞同步变为异步模式,这样只要在

4、循环读写中加入getchar()就不会阻塞进程了,该方法实现简单,使程序执行也更合理。综上,我们选择b方案。三、各模块及顶层文件的设计:1、MP3解码原理图:开始查找同步信号能否同步?否解码一音频数据是样本频率程度转换是缓冲区满写入播放缓冲区最后一帧否移动下一帧头的位置结束是2、系统主程序流程图:主程序入口打开声卡文件成功?否是打开音频文件成功?否是设置好声卡文件参数读音频文件返回值是否为正?否是是进程正常退出进程异常退出写声卡文件成功?否以下为部分主程序intmain(charargc,char**argv){intfd1,fd2,n

5、,speed=44100,channel=2,fmt=AFMT_S16_LE;charbuf1[1024];charcom;structwav_fmtwav;if(argc<2){printf("Theparameteristooless");exit(1);}fd1=open(argv[1],O_RDONLY);if(fd1<0){printf("openthe%sfail",argv[1]);exit(1);}fd2=open("/dev/dsp",O_WRONLY);if(fd2<0){printf("openthe/de

6、v/dspfail");exit(1);}read(fd1,&wav,sizeof(structwav_fmt));printf("speed:%d,bitspersample:%d,channel:%d",wav.speed,wav.bitspersample,wav.nchannels);ioctl(fd2,SNDCTL_DSP_SETFMT,&fmt);ioctl(fd2,SNDCTL_DSP_SPEED,&speed);ioctl(fd2,SNDCTL_DSP_CHANNELS,&channel);mode();whil

7、e((n=read(fd1,buf1,1024))>0){write(fd2,buf1,n);com=getchar();switch(com){case'a':lseek(fd1,time,SEEK_CUR);break;case'b':lseek(fd1,-time,SEEK_CUR);break;case'q':printf("");exit(0);default:break;}}printf("youroprationissuccessful");exit(0);四、遇到的问题及解决方法:1、声卡的参数不好设置,即声卡的

8、采样速度、声道、格式等不好准确地设置。解决方法:用wav_fmt这个结构体将音频文件额参数特性读进这个结构,这个结构中的变量的值就是与该音频文件相对应的参数2、在控制快进、快退等功能时需要getchar()

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。