使用mpg123来生成一个无界面音乐播放器

 无界面MP3:

功能实现:W -- 上一首 N -- 下一首 S -- 启动/恢复(播放) X -- 暂停 Q -- 退出

#include <stdio.h>
#include <glob.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
int main()
{
    int ret = 0;
    int i = 0;
    //记录歌曲
    int num = 0;
    char ch = 0;
    glob_t pglob;
    pid_t pid;
    //查找mp3文件
    ret = glob("../音乐/*.mp3",0,NULL,&pglob);
    if(ret == -1)
    {
        perror("glob error");
        return -1;
    }
    //打印歌曲名
    printf("找到以下歌曲:\n");
    for(i = 0;i<pglob.gl_pathc;i++)
    {
        printf("%d..%s\n",i+1,pglob.gl_pathv[i]);
    }
    
    //创建子进程
    pid = vfork();
    while (1)
    {
        if(pid == -1)
        {
            perror("vfork error");
            return -1;
        }
        else if(pid == 0)//子进程
        {
            printf("***************准备播放******************\n");
            printf("w-上一首 n-下一首 x-暂停 s-恢复播放 q退出\n");
            printf("请输入你的操作\n");
            printf("***************正在播放******************\n");
            printf("%s\n", pglob.gl_pathv[num]);
            execl("/usr/bin/mpg123", "mpg123","-q", pglob.gl_pathv[num], NULL);
        }
        else//父进程
        {
            ch = 0;
        next:
            //读取操作
            ch = getchar();
            if(ch == -1)
            {
                perror("getchar");
                goto next;
            }
            switch (ch)
            {
            case 'W':
            case 'w':
                kill(pid,9);
                if(num == 0)
                    num = pglob.gl_pathc-1;
                else
                    num--;
                pid = vfork();
                break;
            case 'N':
            case 'n':
                kill(pid,9);
                if(num >= (pglob.gl_pathc-1))
                    num=0;
                else
                    num++;
                pid = vfork();
                break;
            case 'x':
            case 'X':
                kill(pid,19);
                break;
            case 's':
            case 'S':
                kill(pid,18);
                break;
            case 'q':
            case 'Q':
                printf("欢迎下次使用\n");
                kill(pid, 9); // 杀死当前进程
                raise(9);
                break;
            default:
                printf("输入错误!\n");
                break;
            }
        }
    }
    
    
    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值