赞
踩
首先我们要来看几个函数:
接下来我们安装一下madplay
这是一个播放器。
sudo apt-get install madplay
建议给软件源换成阿里的,下载的快。
安装完成后测试方法为:
madplay xxxx
xxxx最好是绝对路径
示例:madplay /home/jason/music/stan.mp3
程序思路:
首先打开存放音乐文件的目录把
然后找出所有的.mp3文件并保存文件名
文件名有了,路径有了。就简单了嘛
接下来看一下madplay指令:
管理madplay的主程序,包括播放,暂停播放,恢复播放,停止播放
system("madplay north.mp3 &");//利用system函数调用madplay播放器播放*.mp3音乐
system("madplay north.mp3 -r &");//循环播放:参数-r
system("killall -9 madplay");//利用system函数调用killall命令将madplay终止掉
system("killall -STOP madplay &");//利用system函数调用killall命令将madplay暂停
system("killall -CONT madplay &");//利用system函数调用killall命令恢复madplay的播放
代码写的比较简陋,没有细细优化,我把遍历目录生成歌单和歌曲播放写在了一起,导致了每次查看歌单会导致程序出错。也就是text_mp3函数访问第一次是莫得问题的,暂停,播放,切换歌曲都是莫得问题的,不过一但查看菜单就会出错。因为每次查看菜单都要重新遍历文件夹。解决方法:给遍历查找,和歌单生成分开写就好了。
别问我为啥不改:懒懒懒!!!!!
#include "stdio.h" #include "stdlib.h" #include "unistd.h" #include "sys/types.h" #include "sys/stat.h" #include "dirent.h" #include "string.h" #define N 1024 struct text_work { char date[1024]; char music_name[1024]; char suffix[4]; }; struct text_work name[100]; char path_str[N]={0}; char str[N]={0}; char str_path[N]={0}; void text_mp3(void); char* reverse_string(char* str); int face(void); void play(void); void manual(void); void last(void); void next(void); void exit_music(void); void money(void); void stop(void); int count=0; int tim=0;//歌曲个数 int s;//正在播放歌曲 int main(void) { int n; while(1) { n=face(); switch (n) { case 1: manual();break; case 2: text_mp3();break; case 3: stop();break; case 4: play();break; case 5: last();break; case 6: next();break; case 7: exit_music();break; case 8: money();break; default:printf("输入错误,请重新输入\n"); break; } } return 0; } void text_mp3(void) { DIR * dir=NULL; int flag=0; int i; char buf[N]={0}; char *music_path; struct dirent * dis; printf("请输入需要播放的歌单路径\n"); scanf("%s", path_str); getchar(); strcpy(str_path,path_str); dir=opendir(path_str); if(dir==NULL) { printf("opendir error\n"); } while(1) { dis=readdir(dir); char *buff; if(dis==NULL) { break; } if(dis!=NULL) { printf("\n"); sscanf(dis->d_name,"%s",name[count].date); buff=reverse_string(name[count].date);//逆序 sscanf(buff,"%4s",name[count].suffix); if(strcmp(name[count].suffix,"3pm.")==0) { flag=1; sscanf(dis->d_name,"%s",name[tim].music_name); printf(" %d、%s\n",tim, dis->d_name); tim++; } } count++; } closedir(dir); if(flag==0) { printf(" 当前路径下面没有mp3文件!!!\n"); printf(" 请重新查找\n"); } printf(" ^_^ \n"); printf("请输入你需要播放的歌曲前的标号\n"); scanf("%d", &s); getchar(); for(i=0;i<count;i++) { if(s==i) { music_path=strncat(path_str,name[i].music_name,sizeof(name[i].music_name)); printf("music_path: %s\n", music_path); printf("当前播放歌曲:%s\n",name[i].music_name); sprintf(buf,"madplay %s &",music_path); system(buf); } } } char* reverse_string(char* str) { char *left = str; char *right = str + strlen(str) - 1; while (left<right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; } return str; } int face(void) { int n; printf("*********************************************************\n"); printf(" welcome 网抑云 \n"); printf(" 1、使用手册 2、查找歌单 \n"); printf(" 3、暂停播放 4、继续播放 \n"); printf(" 5、上一首歌 6、下一首歌 \n"); printf(" 7、退出程序 8、赞赏作者 \n"); printf("*********************************************************\n"); printf("\n"); scanf("%d", &n); getchar(); return n; } void stop(void) { system("killall -STOP madplay &"); } void manual(void) { char n; printf("创作者:sunbeam\n"); printf("创作日期:2021/1/8\n"); printf("根据菜单前面的标号既可操作相对应的功能\n"); printf("歌曲的暂停、切换等需要先查看歌单后才能操作\n"); printf("********************************\n"); printf("输入q/Q退出使用手册\n"); while(1) { scanf("%c", &n); if(n=='q'||n=='Q') { break; } else { printf("输入错误请重新输入\n"); } } system("clear"); } void next(void) { char *next_patg; char next_buf[N]={0}; memset(str,0,1024); strcpy(str,str_path); system("killall -9 madplay"); s++; if(s==count) { s=0; } next_patg=strncat(str,name[s].music_name,sizeof(name[s].music_name)); printf("music_path: %s\n", next_patg); printf("当前播放歌曲:%s\n",name[s].music_name); sprintf(next_buf,"madplay %s &",next_patg); system(next_buf); } void last(void) { char *last_path; char last_buf[N]={0}; memset(str,0,1024); strcpy(str,str_path); system("killall -9 madplay"); s--; if(s==-1) { s=count-1; } last_path=strncat(str,name[s].music_name,sizeof(name[s].music_name)); printf("music_path: %s\n", last_path); printf("当前播放歌曲:%s\n",name[s].music_name); sprintf(last_buf,"madplay %s &",last_path); printf("last_buf: %s\n",last_buf); system(last_buf); } void exit_music(void) { return 0; } void play(void) { system("killall -CONT madplay &"); } void money(void) { printf("hhh,开玩笑的啦~~\n"); }
代码运行:
刚刚运行发现,退出出程序也忘写了~~尴尬
END————_
如有错误和疑问欢迎评论区或者私信交流!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。