搜索
您的当前位置:首页正文

MPP模块标准参考

2023-11-23 来源:保捱科技网
MPP(mp3 player)项目

1 软件功能需求

         

能识别本地的MP3歌曲文件,能根据路径添加入播放器中。 能识别本地的播放列表信息。

具有播放列表功能,能根据用户的需求随意创建、删除播放列表。

用户能往指定的播放列表中添加、删除。添加时,歌曲必须是已经存在的。 用户能查看当前播放器中的所有歌曲。 用户能查看播放器中现有的播放列表信息。 用户能查看指定播放列表下的歌曲信息。

能对播放歌曲进行播放、暂停、停止三种操作。

具有默认、全部循环、单曲循环、随机播放等4中播放模式。

具有显示播放器当前状态功能,能实时显示播放器当前的播放状态和播放列表的一些基本信息。

 具有同步功能,在用户退出时, 能保存当前的状态,在下次播放器打开时,能回到退出

去前的状态。

模块分类

播放文件模块、播放列表模块、控制模块、播放模块。 2 文件模块

在指定的目录下搜索MP3歌曲文件,具有打印所有文件和获取歌曲文件信息等功能。

2.1 相关的系统函数

1) 目录相关:opendir closedir readdir chdir mkdir

2) 文件相关:fopen fclose fseek ftell fgets 3) 字符相关:strcmp strlen strcpy sprint

2.2 定义的结构体

#define MUSIC_NAME_LEN #define MUSIC_ARTISH_LEN ··#define MUSIC_PATH

 MP3信息头结构体 typedef struct _mp3_head{

int maxmusic;

30 // 文件名的长度 30 // 作者名长度 50 // 歌曲路径长度

// 歌曲链表中歌曲的数量 // 指向歌曲链表的头结点 // 指向歌曲链表的尾节点

struct _mp3_file *head; struct _mp3_file *tail;

}MP3_HEAD_S;

 MP3文件链表节点信息 typedef struct _mp3_file{

char musicname[MUSIC_NAME_LEN+1]; // 歌曲名 char artish[MUSIC_ARTISH_LEN+1]; char path[MUSIC_PATH+1] struct _mp3_file *next;

// 作者名

// 歌曲路径=目录+歌曲文件名 // 指向下一歌曲节点

}MP3_FILE_S;

2.3 函数接口

// 更新本地所有歌曲

// 成功返回0, 失败返回-1

int mpp_file_update(const char *dirpath); // 更新歌曲路径

// 判断文件是否为MP3文件 // 成功返回0 ,失败返回-1

int mpp_file_ismp3(const char *filename); // 歌曲文件名

// 读取文件信息,并填充到参数中 // 成功返回0, 失败返回-1

int mpp_file_fillinfo(const char *filename, // 歌曲文件名

const char *path, // 歌曲路径

MP3_FILE_S * mp3); // 歌曲节点指针

// 将新的节点添加到链表中 // 返回返回0, 失败返回-1

int mpp_file_addList(MP3_FILE_S *pst);

// 遍历本地所有歌曲

// 成功返回0, 失败返回-1 int mpp_file_travser();

// 测试MP3歌曲是否在MP3链表中 // 成功返回0, 失败返回-1

int mpp_file_testmp3(const char *musicname);

// 根据歌曲名获取歌曲的名字,作者和路径信息 // 成功返回0, 失败返回-1

int mpp_file_getinfo(const char *musicname, // 要查找的那首歌的歌曲名 char ** name, // 保存查找到的歌曲名 char ** artish, // 保存查找到的作者名 char ** path); // 保存查找到的歌曲路径

// 通过索引号获取MP3歌曲的名字,作者和路径信息 // 成功返回0, 失败返回-1

int mpp_file_getinfobyidx(int musicidx, // 歌曲在链表中的位置 char ** name, // 保存查找到的歌曲名 char ** artish, // 保存查找到的作者名 char ** path); // 保存查找到的歌曲路径

// 获取歌曲数量 成功返回当前MP3列表中的歌曲数量 int mpp_file_getnum();

// 指向新的节点结构体的指针

// MP3歌曲名

3 播放列表模块开发

创建播放列表,添加歌曲至播放播放列表,删除播放列表,和播放列表相关的功能。

3.1 播放列表结构体

#define PL_NAME_LEN 30 // 播放列表名长度 #define DEFAULT_PL_DIR \"./playlist\" // 播放列表存放的路径  播放列表头结点信息 typedef struct pl_head{

int qlnum; char *curpl;

// 当前播放器拥有播放列表的个数 // 当前选择播放的播放列表名 // 当前选择播放的歌曲名 // 指向播放列表的头结点 // 指向播放列表的尾结点

char *curmusic;

struct pl_info *hpl; struct pl_info *tpl;

}PL_HEAD_S;

 播放列表节点的信息 typedef struct pl_info{

char plname[PL_NAME_LEN+1]; // 播放列表名 int musicnum;

// 列表下拥有的歌曲数量 // 指向歌曲列表的前一个结点 // 指向歌曲列表的尾结点 // 指向播放列表的前一节点 // 指向播放列表的后一结点

struct pl_music *hmu; struct pl_music *tmu; struct pl_info *prev; struct pl_info *next;

}PL_INFO_S;  歌曲节点的信息 typedef struct pl_music{

char *musicname; // 指向MP3文件链表结点中歌曲名的指针 char *artish;

// 指向MP3文件链表结点中作者指针 // 指向MP3歌曲链表结点中歌曲路径的指针

// 指向前一歌曲结点 // 指向下一歌曲结点

char *musicpath;

struct pl_music *prev; struct pl_music *next; }PL_MUSIC_S;

3.2 函数接口

// 搜索播放列表是否存在

// 存在返回该列表地址, 不存在返回NULL

PL_INFO_S * mpp_pl_search(const char *plname); // 播放列表名

// 在指定播放列表中搜索歌曲

// 成功返回该歌曲的地址,失败返回NULL

PL_MUSIC_S * mpp_pl_searchmusic(PL_INFO_S *ppl, // 播放列表结点

const char *music); // 歌曲名

// 获取播放列表头结点中的当前播放列表和当前播放歌曲

int mpp_pl_getcurinfo(char **plname, // 存放当前播放列表名

char ** musinc); // 存放当前播放歌曲名

// 设置播放列表头结点中的当前播放列表和当前播放歌曲

int mpp_pl_setcurinfo(char *plname, // 要设置的当前播放列表名

char *music); // 要设置的当前播放歌曲名

// 播放列表路径

// 更新播放播放列表

// 成功返回0 ,失败返回-1

int mpp_pl_update(const char *pldirpath);

// 创建播放列表

// 成功返回0,失败返回-1

int mpp_pl_create(const char *plname);

// 销毁播放列表

// 成功返回0,失败返回-1

int mpp_pl_destroy(const char *plname);

// 播放列表名

// 播放列表名

// 播放列表添加歌曲

// 成功返回0,失败返回-1

int mpp_pl_addmu(const char *plname, // 播放列表名

const char *music); // 歌曲名

// 播放列表删除歌曲

// 成功返回0,失败返回-1

int mpp_pl_delmu(const char *plname, const char *music);

// 将链表同步到文件当中 flag 0: 写入文件操作, 1: 删除文件操作 // 成功返回0,失败返回-1

int mpp_pl_syncfile(const char *plname, char flag);

// 根据播放列表名,遍历

int mpp_pl_travserbyname(const char *plname); // 播放列表名

// 遍历播放列表 int mpp_pl_travser();

// 遍历当前播放列表下的歌曲列表 int mpp_pl_travsertocontrol();

// 获取播放列表总个数 int mpp_pl_getplnum();

// 获取当前播放的播放列表名

// 成功返回指向当前的播放列表名的指针,失败返回NULL char * mpp_pl_getcurpl();

// 获取当前播放的歌曲名

// 成功返回指向当前播放歌曲名的指针, 失败返回NULL char * mpp_plgetcurmusic();

4 控制模块

显示一些系统的相关信息,提供命令输入的接口,和命令显示相关的功能。

4.1 控制台编写流程

4.1.1 循环打印命令提示符,并接收命令 4.1.2 判断是否为空命令,去掉结尾的回车符 4.1.3 进行命令匹配,判断命令是否匹配到 4.1.4 根据不同命令指行不同指令

4.2 相关函数

fgets strcmp strlen strtok

4.3 控制结构体

#define CMD_LEN 6 // 命令的长度 #define DES_LEN 50 // 命令解析的长度 #define PROMPT \"my-mpp #\" typedef struct cmd_info { char cmdn[CMD_LEN + 1]; // 控制命令 void (*pFun)(void *); // 控制函数 char des[DES_LEN + 1]; // 命令解析 }CMD_INFO_S;

4.4 函数接口

// 命令台初台化 int Control_initialize();

// 显示当前播放状态界面 void RefreshScreen();

5 播放模块

播放歌曲,暂停播放,停止播放,播放模式, 和播放相关的功能

5.1 相关函数

signal fork

信号 :SIGINT

SIGSTOP SIGCONT

中止一个进程 暂时执行进程 继续执行进程

向一个进程发送信号

wait execl getpid getppid

kill

int kill(pid_t pid, int sig);

sighandler_t signal(int signum, sighandler_t handler);

pid_t fork(void)

创建一个新的进程

注册信号

fork的返回值有三种 -1 0 > 0

o : 表示当前执行程序为子进程

>0 : 表示当前执行的程序为父进程,父进程返回子进程的PID号

pid_t waitpid(int pid, int *status, int option); 等等回收子进程资源

int execl(const char *path, const char *arg, ...);

进程的替换

5.2 播放模块结构体

 播放模式枚举类型 typedef enum{ PLAY_MODE_DEFAULT = 0x1, PLAY_MODE_LOOP,

PLAY_MODE_LOOPONE, PLAY_MODE_RANDOM,

PLAY_MODE_RESEVR,

}PLAY_MODE_S;

 播放状态枚举类型 typedef enum{

PLAY_STATUS_PLAY = 0x1, PLAY_STATUS_PAUSE, PLAY_STATUS_STOP,

PLAY_STATUS_RESERV,

}PLAY_STATUS_S;

 播放相关信息 */ typedef struct play_info{

PLAY_MODE_S playmode;

PLAY_STATUS_S playstatus; pid_t playpid;

char *curplaymusic; char *curartish;

char *curmusicpath;

}PLAY_INFO_S;

5.3 函数接口

// 默认播放 // 全部循环播放 // 单曲循环播放 // 随机播放

// 预留

// 播放 // 暂停 // 停止 // 预留

// 播放模式 // 播放状态 // 播放子进程ID号 // 指向当前播放的歌曲名 // 指向当前播放歌曲的作者名// 指向当前播放的歌曲的路径

// 播放下一首歌曲 int mpp_play_next();

// 播放上一首歌曲 int mpp_play_prev();

// 播放歌曲

int mpp_play_playmusic(const char *musicname, // 播放歌曲名 const char *artish, // 播放歌曲的作者名 const char *path); // 播放歌曲的路径

// 暂停歌曲

int mpp_play_pausemusic();

// 停止播放歌曲

int mpp_play_stopmusic();

// 设置播放的模式

int mpp_play_setmode(PLAY_MODE_S emode); // 播放模式

// 获取当前播放的模式

// 返回当前的播放模式字符串 \"LOOP\" \"LOOP ONE\" \"DEFAULT\" \"RANDOM\" \"unKnown\" char *mpp_getmodestring();

// 获取当前的播放状态

// 返回当前的播放模式字符串 \"Play\" \"Pause\" \"Stop\" \"unKnown\" char *mpp_getstatusstring();

// 随机播放模式

int mpp_play_random();

// 等待播放子进程状态改变的处理函数 void mpp_play_wait(int argc);

因篇幅问题不能全部显示,请点此查看更多更全内容

Top