更多资料请点击:我的目录
本篇仅用于记录自己所学知识及应用,代码仍可优化,仅供参考,如果发现有错误的地方,尽管留言于我,谢谢。
madplay命令使用详细参数:
-v 获取音乐播放时间
-q 不存在任何打印,但现实警告
-Q 不存在任何打印
–downsample 只采用一半数据
-i 忽略CRC校验错误
-o PATH/xx.wav 可以用来转码,将mp3转为wav,也可以是其他格式。
-a 开启衰减音量 ,增加音量,衰减系统为-175~+18 (当然通过键盘±也可以调整音量)
-A 同-a
-1 -2 -m -S 分别指左声道,右声道,双声道,立体声
-s 用于seek播放 0:1:10:20 ,seek到1小时,10分钟,20秒时开始播放
-t 用于播放时间设置(定时停止) 0:1:10:20 ,播放到1小时,10分钟,20秒时就停止
-z 用于随机播放列表歌曲
-r, 用于循环播放列表歌曲
-r, --repeat[=MAX] 循环播放无限次或Max次
使用例子:
播放某首歌一次:
./madplay music/1.mp3
播放某首歌(单曲循环):
./madplay music/1.mp3 -r
播放某目录文件下的MP3歌曲一次:
./madplay music/*.mp3
播放某目录文件下的MP3歌曲(列表循环播放):
./madplay music/*.mp3 -r
播放某目录文件下的MP3歌曲(列表随机播放):
./madplay music/*.mp3 -z
程序控制madplay播放,暂停播放,恢复播放,停止播放,关闭播放器的操作
system("madplay music/*.mp3 &"); //利用system函数调用madplay播放器播放music目录下所有的.mp3音乐
system("madplay music/*.mp3 -r &"); //列表歌曲循环播放
system("killall -STOP madplay &"); //利用system函数调用killall命令暂停播放音乐
system("killall -CONT madplay &"); //利用system函数调用killall命令恢复播放音乐
system("killall -9 madplay"); //利用system函数调用killall命令将madplay终止关闭
注意: &为后台运行,如果不加&则为前台播放,将无法对其进行暂停、恢复播放操作
简单程序示例:
int music_play()
{
printf("成功打开音乐播放器!\n");
//system("madplay music/*.mp3 -z &"); //列表随机播放
system("madplay music/*.mp3 -r &"); //列表循环播放
//设置节点
struct node
{
char *data;
struct node *next;
struct node *prev;
};
//初始化链表
struct node *list_init(char *newdata)
{
struct node *head = malloc(sizeof(struct node));
head->data = newdata;
head->next = head;
head->prev = head;
return head;
}
//创建新节点
struct node *newnode(char *newdata)
{
struct node *new = malloc(sizeof(struct node));
new->data = newdata;
new->next = NULL;
new->prev = NULL;
}
//加入新节点
int addnode(struct node *new,struct node *list)
{
struct node *p = list;
while(p->next != list)
{
p = p->next;
}
new->prev = list->prev;
new->next = list;
list->prev = new;
new->prev->next = new;
}
struct node *list = list_init("1.mp3"); //初始化双向循环链表
char *path = "music"; //music为音乐目录文件名
DIR *dp = opendir(path);
struct dirent *p;
while(p = readdir(dp)) //遍历目录文件
{
if(p->d_type == DT_REG)
{
if(strstr(p->d_name,".mp3")) //判断是否为.mp3文件
{
struct node *new = newnode(p->d_name); //创建新节点
addnode(new,list); //插入新节点
}
}
}
char buf[20]; //用于存放拼接后的字符串
struct node *head = list->next;
int num = 0;
for(;;)
{
scanf("%d",&num);
if(n == 1) //恢复播放
{
n = 0;
system("killall -CONT madplay &");
}
if(n == 2) //暂停播放
{
n = 0;
system("killall -STOP madplay &");
}
if(n == 3) //下一首
{
n = 0;
system("killall -9 madplay");
head = head->next;
bzero(buf,20);
sprintf(buf,"madplay %s/%s &",path,head->data);
system(buf);
}
if(n == 4) //上一首
{
n = 0;
system("killall -9 madplay");
head = head->prev;
bzero(buf,20);
sprintf(buf,"madplay %s/%s &",path,head->data);
system(buf);
}
if(n == 5) //退出
{
system("killall -9 madplay");
printf("成功退出音乐播放器!\n");
break;
}
}
}