C语言音乐播放器实例代码
2018-07-06 08:26
633 查看
实例代码如下:
#include <stdio.h> #include<dirent.h> #include<stdlib.h> #include<unistd.h> #include<string.h> typedef struct node_ node_t; struct node_{ char* name;//gequming node_t * prev; node_t * next; }; node_t *head = NULL; int first=1;//diyicibofnag node_t * cur =NULL;//dangqianbofang enum{STOP,PAUSE,PLAY}; int status = STOP; void List_init(void){ head = malloc(sizeof(node_t)); memset(head,0x00,sizeof(node_t)); head->next = head->prev=head; } void list_insert(const char* name){ node_t *p = malloc(sizeof(node_t)); memset(p,0x00,sizeof(node_t)); p->name = malloc(strlen(name)+1); strcpy(p->name,name); p->next = head->next; p->prev = head; head->next->prev = p; head->next = p; } int menu(void){ printf("*************menu************************\n"); printf("1. play/pause\n"); printf("2. next\n"); printf("3. prev\n"); printf("4. stop\n"); printf("5. exit\n"); printf("**************************************\n"); list_show(); int choose =4; do{ printf(" > "); scanf("%d",&choose); if(choose>=0&&choose<=4) break; printf("choose invalid\n"); while(getchar()!='\n'); }while(1); return choose; } void list_show(void){ node_t *p = head->next; while(p!=head){ printf("%s ",p->name); if(p==cur) printf("<<==cur"); printf("\n"); p = p->next; } } void load_music(const char * path){ DIR * pdir = opendir(path); if(pdir == NULL){ perror("opendir"); exit(1); } struct dirent * p = NULL; while((p=readdir(pdir))!=NULL){ if(p->d_name[0]=='.') continue; list_insert(p->d_name); } closedir(pdir); } void playPause(){ if(first==1){ char buf[1024] = {}; sprintf(buf,"madplay -o wav:- ./music/Music/%s 2> /dev/null | aplay 2>/dev/null &",cur->name); system(buf); first = 0; status = PLAY; }else{ if(status==PLAY){ system("killall -SIGSTOP aplay"); status = PAUSE; }else if(status==PAUSE){ system("killall -SIGCONT aplay"); status = PLAY; } } } void stop(){ system("killall -SIGKILL aplay"); first=1; } void next(){ stop(); cur = cur ->next; if(cur==head){ cur = cur->next; } playPause(); } void prev(){ stop(); cur = cur->prev; if(cur==head){ cur= cur->prev; } playPause(); } int main(int args,char * argv[]) { List_init(); load_music("./music/Music"); if(head->next!=head) cur = head->next; //printf("%s\n",cur->name); //list_show(); do{ int choose = menu(); switch(choose){ case 1: playPause(); break; case 2: next(); break; case 3: prev(); break; case 4: stop(); break; case 0: printf("thanks"); system("killall -SIGKILL aplay"); exit(0); break; default: break; //do nothing; } }while(1); return 0; }
实例效果图片如下:
您可能感兴趣的文章:
相关文章推荐
- C语言 解压华为固件的实例代码
- <C语言>结构体的各种定义、初始化、操作代码实例----注释详解
- C语言双向链表实现根据使用频率安排元素位置的功能实例代码
- C语言sscanf()函数的介绍和实例代码学习
- C语言统计一篇英文短文中单词的个数实例代码
- c语言实现输入一组数自动从大到小排列的实例代码
- c语言同名标靶点自动匹配算法实现实例代码
- C语言 表、栈和队列详解及实例代码
- Redis:安装、配置、操作和简单代码实例(C语言Client端)
- C语言实现树的动态查找实例代码
- C语言中实现“17进制”转“10进制”实例代码
- C语言代码实例
- C语言中的数组和指针汇编代码分析实例
- c语言实现的货物管理系统实例代码(增加删除 查找货物信息等功能)
- c语言5个常用的排序算法实例代码
- C语言输入三角形边长判断其类型并输出面积实例代码
- Android MediaPlayer实现音乐播放器实例代码
- C语言 奇偶排序算法详解及实例代码
- C语言-数据结构-循环链表实例-维吉尼亚(vigener)密码源代码
- Redis:安装、配置、操作和简单代码实例(C语言Client端)