当前位置:   article > 正文

linux下用C语言实现MP3播放器_mp3小项目在linux系统下编程

mp3小项目在linux系统下编程

首先我们要来看几个函数:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
接下来我们安装一下madplay这是一个播放器。

sudo apt-get install madplay
  • 1

建议给软件源换成阿里的,下载的快。
安装完成后测试方法为:
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的播放
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

代码写的比较简陋,没有细细优化,我把遍历目录生成歌单和歌曲播放写在了一起,导致了每次查看歌单会导致程序出错。也就是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");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234

代码运行:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
刚刚运行发现,退出出程序也忘写了~~尴尬
END————_
如有错误和疑问欢迎评论区或者私信交流!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/151854
推荐阅读
相关标签
  

闽ICP备14008679号