首先我们要来看几个函数:



接下来我们安装一下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 &");//循环播放:参数-rsystem("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————_
如有错误和疑问欢迎评论区或者私信交流!

linux下用C语言实现MP3播放器相关推荐

  1. linux命令音乐视频合并,Linux下基于命令行的音乐播放器 (1)

    按照同事的话说,我是一个十足的命令控. 利用最近项目通宵发布的空闲时间中,写了一个命令行下的音乐播放器,以满足我在linux命令下的需求. 播放器利用技术: Python+GST(http://gst ...

  2. linux 命令行 播放器,Linux下基于命令行的音乐播放器

    玩家使用技术: Python + GST()+控制台解析 播放器自我维持操作: 1. 播放 2. 下一首 3. 上一首歌 4. 暂停 5. 查看播放列表信息 6. 查看当前的播放信息 7. 停止(退出 ...

  3. linux下和嵌入式linux下通过udp接收来自vlc播放器的视频并转发播放

    1.最近需要在linux下基于udp写一个应用程序,实现接收vlc播放器发送的视频流,并将接收到的视频流转发到另一个vlc客户端播放.并将这个应用程序交叉编译到ARM上执行测试通过.主机端ip地址:1 ...

  4. Linux 下的三款 Flash 独立播放器

    现在互联网上流传有不少以 SWF 形式发布的教学视频.如何在 Linux 下观看这些教学视频文件呢? 实际上,这些 SWF 格式的视频就是编译好的 Flash 字节码文件.与同样是以 Flash 传播 ...

  5. 无损播放器Linux系统,Ubuntu Linux下支持无损CUE的音乐播放器——Qmmp

    我用的是Ubuntu 10.04 i386 alternate,qmmp 0.4.0可以安装,其他版本的ubuntu没试过.如果直接sudo apt-get install qmmp  的话,安装的将 ...

  6. 基于嵌入式Linux的MP3播放器的设计与实现

    摘要:本文详细介绍了嵌入式系统的特点以及嵌入式系统开发的流程,分析基于嵌入式Linux的MP3播放器的关键技术,设计和实现了一种基于嵌入式系统的 MP3 播放器.该播放器利用 QT 技术和开源的音频解 ...

  7. Ubuntu Linux 中两款不错的音乐播放器

    用Ubuntu Linux 的朋友在播放器的选择上,有的人喜欢功能多的,有的喜欢简洁的.今天我就大家说说我用的这两款播放器,或许和大家用的不一样,但我觉得这两款播放器的确不 错.   songbird ...

  8. Linux下基于Libmad库的MP3音乐播放器编写

    linux下基于Libmad库的MP3音乐播放器编写 libmad是一个开源mp3解码库,其对mp3解码算法做了很多优化,性能较好,很多播放器如mplayer.xmms等都是使用这个开源库进行解码的: ...

  9. linux下面的 mp3播放器xmms

    linux下面的mp3播放器xmms 首先去下载,可以下载可执行文件或者是源代码,我提倡下载二进制的可执行程序,这个是一个 安装包. 网址: 下载之后就是安装了,用强行安装,否则可能会出现一下比如说g ...

最新文章

  1. python 打包成exe 1053_Python程序打包成exe的一些坑
  2. 从零实操基于WSL2 Docker部署Asp.Net Core项目
  3. 阿里格林深瞳计算机视觉岗实习面经
  4. 想设计亿万级高并发架构,你要先知道高并发是什么?
  5. MyEclipse2014安装aptana插件
  6. 很好用的查看PE文件的小工具---LordPE Deluxe 1.4 汉化版
  7. 人工智能改变我们生活的7种方式
  8. 利用DHT网络原理制作bt采集蜘蛛
  9. 联邦学习FATE社区2021年度生态峰会倒计时1天,请查收这份参会攻略
  10. DBT-50000及相关问题处理
  11. iOS 屏幕旋转监听
  12. 使用C#设计一个Windows应用程序——记事本
  13. css动画与渐变案例,使用动画和渐变做一个背景动态网页
  14. [bzoj3073]Journeys
  15. GB2312编码一级汉字表
  16. cisco 华三 对接_h3c开启trunk口与思科设备相互连接
  17. 用java设计一个动物声音 模拟器,Java语言 设计一个动物声音“模拟器”(用接口实现)...
  18. 机器人关节模组的总结归纳
  19. PMP学习笔记之一 准备篇
  20. c#实现文件重命名操作

热门文章

  1. xp安全模式下如何修复计算机,xp系统电脑安全模式进不去的处理方法
  2. 值得收藏!VScode 中这 15 个神仙插件写代码必备!
  3. 微信固定金额收款码批量生成
  4. Android 各种时间格式转换
  5. js运算保留后面两位小数
  6. php zip解压,php解压缩zip和rar压缩包文件
  7. 如何在微信小程序中使用ECharts图表
  8. GitHub牛逼开源项目!像写 Markdown 一样画流程图
  9. odbc sqlstate:IM004
  10. spring整合mongoDB 和 Redis 极简入门