Linux字符界面 MP3播放器

本文介绍如何在Ubuntu 18.04环境下开发一个基于C语言的字符界面MP3播放器。内容包括播放器的功能实现,如播放、暂停、切歌和模式切换,并提供了安装madplay的解决方案及代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面:大家好,我是草莓橙须圆。毕业之前在CSDN和微信公众号活跃
欢迎关注我的公众号:【草莓橙须圆】
微信公众号主要就是更新大学生或者考研党的日常
CSDN主要就是学习Java过程中总结的笔记,以及编程分享

这篇文章主要是给大家分享字符界面 MP3播放器

本次基于 Ubuntu18.04,64位环境下的字符界面 MP3播放器,对于字符界面 MP3播放器:主要包括,执行播放指令,开创子进程允许各类模式播放,通过文件进行沟通,通过主界面的提示,以及输入的字符判断要执行的操作。拥有下一曲,上一曲,暂停,播放,显示目录点歌,对应每个选项又有相应的功能操作,通过杀死之前的子进程,打开另一个子进程,进行切歌,模式其切换等功能

首先先安装madplay:
在这里插入图片描述
在这里插入图片描述
因为网络问题无法安装madplay
解决办法:
无法下载 http://archive.ubuntu.com/ubuntu/·····暂时不能解析域名,解决办法
在这里插入图片描述
已经madplay配置完成

代码:

1.头文件:madplay.h
 说明:实现madplay的控制,包括播放play、暂停suspend、开始start、下一首next、上一首previous

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

#include "madplay.h"

#ifdef MADPLAY_DEBUG
int main()
{
   
    pid_t pid;
    char *name = "./music/happy.mp3";
    pid = play(name);
    printf("child pid: %d\n", pid);
    char con;

    printf("suspend?");
    scanf("%c", &con);
    getchar();
    printf("\n");
    if('y' == con)
        suspend(pid);
   
    printf("continue?");
    scanf("%c", &con);
    getchar();
    if('y' == con)
         continuePlay(pid);

    printf("end?");
    scanf("%c", &con);
    printf("\n");
    end(pid);
    return 0;
}
#endif

/* 成功则返回进程pid,失败则返回0 */
int play(char *name)
{
   
    pid_t pid;
    int status;
    if((pid = fork()) < 0)
    {
   
        perror("Fork error\n");
        return 0;
    }
    else if(0 == pid)
    {
   
        waitpid(getppid(), &status, 0); // 等待父进程结束
        execlp("madplay", "madplay","-q", name, (char*)0);
        return 0;
    }
    else
    {
   
        return pid;    
    }
}

int suspend(pid_t pid)
{
   
    kill(pid, SIGSTOP);
    return 0;
}

int continuePlay(pid_t pid)
{
   
    kill(pid, SIGCONT);
    return 0;
}

int end(pid_t pid)
{
   
    kill(pid, SIGINT);
    return 0;
}
2.文件名:madplay.h
   
#ifndef MADPLAY_H
#define MADPLAY_H
 包含四个功能函数的声明。
int play(char *name);   //播放

int suspend(pid_t pid);  //暂停

int continuePlay(pid_t pid);  //继续播放

int end(pid_t pid);  
3.文件名:music_list.c
头文件:music_list.h
  说明:music结构体双向循环链表的具体实现
  
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "music_list.h"

int bSearch(int funcFlag, music_list *mList, char *value, int low, int high);


/*
int main()
{
    music_list *mList;
    mList = createMusicList();
    char *name = "abcd";
    musicListInsert(mList, name);
    musicListDisplay(mList);
    return 0;
}
*/

music_list * createMusicList()
{
   
    music_list *mList;
    mList = (music_list *)malloc(sizeof(music_list));
    if(NULL == mList)
    {
   
        perror("mList malloc fail\n");
        exit(1);
    }
    mList->length = 0;
    mList->mHead = NULL;

    return mList;
}

int musicListInsert(music_list *mList, char *name)
{
   
    music *mNew;
    mNew = (music *)malloc(sizeof(music));
    if(NULL == mNew)
    {
   
        perror("mNew malloc fail\n");
        exit(1);
    }
    mNew->name = name;

    if(NULL == mList->mHead) // 初始节点
    {
   
        mNew->next = mNew;
        mNew->prev = mNew;
        mList->mHead = mNew;
#ifdef MUSIC_LIST_DEBUG    
        printf("init next: %s\n", mList->mHead->next->name);
        printf("init prev: %s\n", mList->mHead->prev->name)</
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值