在linux系统下使用madplay制作音乐播放器_在linux上madplay播放器怎么写?-程序员宅基地

技术标签: Ubuntu  mp3  播放器  幼稚的小东西  madplay  linux  

目的

制作一个可以在Linux环境下运行的MP3播放器。要求实现的MP3主要功能包括:播放、暂停、继续、停止、循环播放、上一曲、下一曲、退出、歌曲显示等功能。
本设计是基于madplay库实现的,程序运行时会显示一个字符界面,在该字符界面下输入相应的提示字符即可实现音乐的播放、暂停、继续、停止、上一曲、下一曲、歌词的显示等功能,也可以加入额外的一些功能。编写一个MakeFile文件,make命令来实现程序的编译。
环境搭建
Madplay是一个开源mp3解码库,对mp3解码算法做了很多优化。常用的安装环境步骤如下
创建依赖库->解压工具软件包->move可执行文件->设置环境变量
Ubuntu环境下直接执行sudo apt-get install madplay可以直接在线安装

抽象数据类型定义
1 音乐文件的存储采用双向链表的结构体music表示,列表单由music_list表示。
2 音乐文件的本机读取通过readFileList函数实现,定义char类型数组musicFilePath存放文件路径。
3 通过musicFind()函数返回音乐所在位置,在主函数的getMusicDir()有所应用,定义控制指针*pos实现上下首的播放切换。
4 使用madplay命令基础操作,定义进程pid控制。
5 定义arg[]数组存放指令的参数,定义command字符变量(char类型)来存放控制指令。

详细设计
封装madplay功能

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;
}

歌曲列表

music_list * createMusicList()
{
    music_list *mList;
    mList = (music_list *)malloc(sizeof(music_list));
    if(NULL == mList)
    {
        perror("fail\n");
        exit(1);
    }
    mList->length = 0;
    mList->mHead = NULL;
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44611644/article/details/95061974

智能推荐

python画散点图程序实例_python – 如何在散点图中绘制线条-程序员宅基地

文章浏览阅读1k次。我无法相信这是如此复杂,但我现在尝试和谷歌搜索了一段时间.我只是想用一些图形功能来分析我的散点图.对于初学者,我想简单地添加一行.现在,这不起作用.坦率地说,文档-examples-gallery组合和matplotlib的内容是一个糟糕的信息来源.我的代码基于图库中的简单散点图:# definitions for the axesleft, width = 0.1, 0.85 #0.65bott..._python散点图怎么绘制分隔线

一文了解Cortex-M中断向量表对齐原则-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏11次。关注+星标公众号,不错过精彩内容来源| 痞子衡嵌入式一、Cortex-M中断向量表对齐原则中断向量表就是一个集中保存系统全部中断处理函数(xxxIRQHandler)地址的常量数组(函数..._cortex-m 中断向量表

maven项目打包命令_maven打包命令-程序员宅基地

文章浏览阅读1w次。maven项目常用打包命令以及使用_maven打包命令

JAVA中URI转String_java.net.uri 转string-程序员宅基地

文章浏览阅读5.3k次。定义语法:public static URI create(String str)用例:URI uri = URI.create("http://java2s.com");_java.net.uri 转string

CentOS 7部署laravel_centos 7 laravel框架的.env-程序员宅基地

文章浏览阅读1.4k次。目录LNMP环境安装安装和配置 git安装 Composer安装 redisLaravel 项目安装拉取 github 上的 Laravel 项目代码安装依赖配置环境变量数据配置权限配置Nginx 配置elasticsearch0.安装JDK111.下载Elasticsearch72.下载完了解压压缩包3.移动目录4.新建一..._centos 7 laravel框架的.env

android 插入耳机 使用自身mic录音_苹果iPhone 12携最新系统强势登场,10款主流TWS耳机兼容性测试...-程序员宅基地

文章浏览阅读517次。北京时间2020年10月14日凌晨,苹果第二次秋季发布会成功落幕,会上发布了旗下搭载最新 iOS14 系统的 iPhone 12 系列智能手机和最新一代 HomePod mini 智能音箱,为了环保理念,苹果在此次发布会之后,官方商店在售 iPhone 系列所有产品均已不再标配 EarPods 有线耳机。因此购买了 iPhone 12 的小伙伴就需要自行配置耳机,而TWS真无线耳机凭借着..._android 耳机录音

随便推点

修改MAGENTO2.1默认邮件模板_"magneto inlinecss file=\"css/email-inline.css"-程序员宅基地

文章浏览阅读1.3k次。Customize email templatesEmail templates are stored in the &lt;module_dir&gt;/view/&lt;area&gt;/email directory of their respective modules. For example, the template for the new order transactional e..._"magneto inlinecss file=\"css/email-inline.css"

Windows下 命令提示符不能TAB补全_cmd中tab不能补全命令-程序员宅基地

文章浏览阅读3.6k次。第一个修改注册表,让命令提示符支持tab,(只能在当前目录下补全文件名和目录名,不能补全命令)windows键 + r 调出命令提示符窗口 注 : windows键就是图案是Microsoft Windows的视窗徽标的按键 输入 regedit 命令,进入注册表编辑器 3:进入HKEY_LOCAL_MACHINESOFTWAREMicrosoftCommand Processor,选择CompletionChar右键修改, 在弹出的窗口中, 修改值为9 ,选择(十进制),点击确定。4:重_cmd中tab不能补全命令

从零学习Swagger3.0-程序员宅基地

文章浏览阅读9.8k次,点赞12次,收藏42次。一、什么是Swagger?1、前言做为一个后端开发人员或者是前端开发人员,总归是要沟通调试项目的,前端要接口数据,不知道接口地址,我总不能一个一个的把接口地址发给他吧,前端可能要打人了,后端觉得编写及维护接口文档会耗费不少精力,所以双方经常抱怨,经常扯皮,有这时间摸摸鱼不好嘛,所以Swagger就来接手这个重任,将项目的接口进行管理。所以前端只需要这一份接口文档就可以拿到数据,进行数据的处理等。提高开发效率。2、Swagger介绍官方网址:Swagger官网3、使用Swagger的好处无依_swagger3.0

Linux终端如何运行py文件【python代码文件】_怎么在linux终端允许python文件-程序员宅基地

文章浏览阅读7.6w次,点赞60次,收藏262次。在Linux终端【ubuntu】下运行后缀为.py文件的另种方法_怎么在linux终端允许python文件

c语言如何自定义运算公式,怎样用C语言编写数学公式 如何用C语言输入数学公式...-程序员宅基地

文章浏览阅读8k次。导航:网站首页 >怎样用C语言编写数学公式 如何用C语言输入数学公式怎样用C语言编写数学公式 如何用C语言输入数学公式相关问题:匿名网友:1、C语言有现场的常用数学函数,所在函数库为math.h、stdlib.h。函数名及解释:int abs(int i) 返回整型参数i的绝对值double cabs(struct complex znum) 返回复数znum的绝对值double fabs(..._c语言定义公式

算法竞赛入门经典第2版题解目录-程序员宅基地

文章浏览阅读522次。第3章 数组和字符串编号标题难度

推荐文章

热门文章

相关标签