太原理工大三下学期mp3实验报告

上传人:第*** 文档编号:34953973 上传时间:2018-03-05 格式:DOC 页数:13 大小:241.50KB
返回 下载 相关 举报
太原理工大三下学期mp3实验报告_第1页
第1页 / 共13页
太原理工大三下学期mp3实验报告_第2页
第2页 / 共13页
太原理工大三下学期mp3实验报告_第3页
第3页 / 共13页
太原理工大三下学期mp3实验报告_第4页
第4页 / 共13页
太原理工大三下学期mp3实验报告_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《太原理工大三下学期mp3实验报告》由会员分享,可在线阅读,更多相关《太原理工大三下学期mp3实验报告(13页珍藏版)》请在金锄头文库上搜索。

1、 课程设计 课程名称: 物联网传输课程设计 设计名称: MP3 音乐播放器 专业班级: 物联 14 学号: 201400 学生姓名: 指导教师: 2017年 6月 12日太原理工大学课程设计任务书 学生姓名 专业班级 物联 课程名称 物联网传输课程设计 设计名称 MP3 音乐播放器 设计周数 2 设计 任务 主要 设计 参数 总体概述: 基于 madplay 库 linux 应用编程实现音乐播放器 1. 将目录重定向到文件 2. 读文件导入链表 3. 循环进行功能选择 (上一首,下一首,播放,暂停,继续,退出) 4. 退出函数 设计内容 设计要求 循环进行功能选择: 1.播放 2.暂停 3.继

2、续 4.上一首 5.下一首 6.退出 主要参考 资 料 课程 PPT, 用 man 命令查询 API, CSDN 博客, 百度百科 学生提交 归档文件 封面任务书说明书 注: 1.课程设计完成后,学生提交的归档文件应按照:封面任务书说明书图纸的顺 序进行装订上交(大张图纸不必装订) 。 2.可根据实际内容需要续表,但应保持原格式不变。 指导教师签名: 日期: 设计说明书 1 功能说明: 本次设计是基于 madplay 库 linux 应用编程实现了一个音乐播放器。用户可 以循环进行功能的选择。主要有 6个功能可以选择。1.上一首,2.下一首,3.播 放,4.暂停,5.继续,6.退出。 用户使用

3、界面 2)用户操作界面2.功能设计 步骤: 1.总体概述:基于madplay库linux应用编程实现音乐播放器, 2.准备工作: 2.1 、引言: madplay是一个开源mp3解码库,其对mp3解码算法做了很多优化, 性能较好,很多播放器如mplayer、xmms等都是使用这个开源库进行解 码的;如果要设计mp3播放器而又不想研究mp3解码算法的话, madplay是个不错的选择。 2.2 、库的使用: 2.1.1、创建一个文件用于存放madplay依赖的库 mkdir mp3lib 2.1.2、将mp3.tar.gz压缩包移动到文件mp3lib下mv mp3.tar.gz mp3lib 2

4、.1.3、进入mp3lib目录cd mp3lib 2.1.4、解压mp3.tar.gz压缩包 tar zxvf mp3.tar.gz mp3.tar.gz压缩包中包括libmad、libid3tag、libz等库 2.1.5、将可执行文件madplay 移动到 /usr/binmv madplay /usr/bin此时可以使用madplay这个命令 3.实现步骤:3.1、 单独测试 3.1.1、我们用的是madplay库,在链接madplay 共享库时只是指定了动 态链接器和该程序所需要的库文件,并没有真的做链接,可执行文 件madplay中调用的madplay 库函 数仍然是未定义符号,要在

5、运 行时做动态链接。 解决方法: 可设置环境变量 ,动态连接器就从这个指定的路径下搜索共享库 export LD_LIBRARY_PATH=./mp3lib 3.1.2、拷贝一个mp3文件 madply 1.mp3 可以播放表示成功 madplay可用 3.2、程序编写 3.2.1、搭写框架 1)将目录重定向到文件 2)读文件导入链表 3)循环进行功能选择 (上一首,下一首,播放,暂停,继续,退出) 4)退出函数 3.2.2、功能实现 3.2.2.0、目录到文件操作 1)创建一个目录song用于存放音乐 mkdir song 2)将目录重定向到文件中,以便之后对文件的读取 程序中调用syste

6、m(“ls song songfile”); 3.2.2.1、文件到链表操作 struct node char SongName1024; struct node *next; struct node *prev; ; 定义结构体,为双向链表的结点信息,包含字段歌曲名, 节点的前后指针域。 思路: 1)打开文件 读取文件数据,并拼接成歌曲的正确路径 2)将路径存入节点p,将p添加入链表。 细节实现 1: open,fgets,sprintf去实现 细节实现2: Node *p = malloc(sizeof(Node); strcpy(p - SongName,songname); p - n

7、ext = *head;p - prev = NULL; if(*head) (*head) - prev = p; *head = p; /新的节点成为链表头 详解: 定义一个新的节点指针p,并手动分配空间。 将路径存入节点中路径字段 并将p的next指针 指向链表头 将p的prev指针 指向空 如果此条链表不为空 将头节点的prev指针指向p 最后 让p成为链表头 链表添加成功 3)关闭文件 close 3.2.2.2、上一首思路: 1)发送SIGKILL命令给当前执行的歌曲所在的进程, 结束进程,等待回收子进程 2)判断当前播放的上一首是否存在 如果不存在,找见最后一首,当前为最后一首

8、如果存在 当前为前一首歌 3)创建子进程,关闭不需要的文件描述符,播放当前这首歌 4.父进程修改标志位为播放状态 3.2.2.3、下一首思路: 1)发送SIGKILL命令给当前执行的歌曲所在的进程, 结束进程,等待回收子进程 2)判断当前播放的下一首是否存在 如果不存在,当前为第一首 如果存在 当前为下一首歌 3)创建子进程,关闭不需要的文件描述符,播放当前这首歌 4)父进程修改标志位为播放状态 3.2.2.4、播放思路: 1)判断标志位 是否允许播放 2)如果链表为空返回 3)不为空 创建子进程 4)子进程关闭不需要的文件描述符 execlp执行madplay去播放这首歌 如果execlp出

9、错则退出 5)父进程中 修改当前播放的歌曲是哪首 修改标志位 表明正在播放 3.2.2.5、暂停思路: 1)判断标志位 是否允许暂停2)给当前播放音乐的进程发送暂停信号 3)修改标志位表明暂停 3.2.2.2、继续思路: 1)判断标志位,是否允许继续 2)给当前暂停的进程发送继续信号 3)修改标志位表明继续播放 3.2.2.2、退出思路: 向当前开启的子进程发送SIGKILL命令,结束子进程 4.编译:gcc music.c -L./mp3lib lmad o music 5.实现效果: 3项目设计 文件名 函数名 返回值类型 功能描述 mp3.c main( ) int 该程序的主函数,完成

10、要求 的 6个功能。 songName.txt 无 无 保存歌单 song 无 无 存放 mp3 歌曲的文件夹 4 命名规则及程序要求 1) 程序开始有注释信息格式如下: /* *FileName:FiveRow.c * *Purpose: * *Author: * *Data:XX/XX/XX */ 2) 定义全局结构体指针 Stu *pHead 3) 函数命名规则:驼峰命名法 4) 程序 #include #include #include #include #include #include #include /*FileName:mp3.c*Purpose:paly mp3 music

11、*Author:zhaoyulong *Data:2017/6/17*Cast:6h* */ int main() system(“ls song songfile“); struct node char songName1024; struct node *next; struct node *prev; typedef struct node Node; Node *head = malloc(sizeof(Node); Node *p = malloc(sizeof(Node); head-next = p; p-prev = head; FILE *song = fopen(“song

12、file“,“r“); if (song = NULL) perror(“open“); return 1; char songName300=0; while (fgets(songName,300,song)!=NULL) sscanf(songName,“%.“,p-songName); memset(songName,0,strlen(songName)-1); Node *p1 = malloc(sizeof(Node); p-next = p1; p1-prev = p; p = p1; head-prev = p-prev;p-prev-next = head; / printf

13、(“%s“,head-next-next-songName); pid_t pid = fork(); if (pid=0) printf(“-mp3 player-n1. Playn2. Pausen3. Continuen4. MoveNextn5. MovePreviousn6. Exitn-nPlease input the choose:“); Node *node = malloc(sizeof(Node); node = head-next; while(1) char input; while (1) scanf(“%c“, if (input48|inputsongName)

14、; strcat(cmd,“.mp3“); / system(cmd); printf(“ %s is playingn“,node-songName); pid_t pid1 = fork(); if (pid1=0) execlp(“madplay“,“madplay“,“-q“,cmd,NULL); break; case 2: /kill(pid1,SIGSTOP); system(“killall -STOP madplay printf(“ Pausingn“); break; case 3: system(“killall -CONT madplay printf(“ Playing n“); break; case 4: system(“killall -9 madplay“); node = node-next; if (strcmp(node-songName,“)=0) node = node-next; printf(“ %s is playingn“,node-songName); char cmd100 = “./song/“; s

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 初中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号