C语言实现音乐播放器(Linux madplay)
生活随笔
收集整理的這篇文章主要介紹了
C语言实现音乐播放器(Linux madplay)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(一)需求分析
1.掃描指定路徑下的音樂,并顯示出來
2.實現音樂的播放、暫停、上一首和下一首的功能
3.程序退出釋放內存資源
(二)思路
1.掃描出指定路徑下的音樂文件(便利指定文件夾,找出音頻文件放在數組里面)
2.創建鏈表存放音樂的信息(音樂名、歌曲路徑、歌曲總數等信息)
3.創建新的進程,用來播放音樂
4.調用kill函數實現音樂的切換和暫停播放功能
注意: 如果出現設備繁忙,可以使用ps -aux命令查看是否正在使用madplay,如果有madplay進程kill掉再運行程序就可以了
(三)接口函數
| DIR *opendir(const char *name); | 打開一個目錄 | #include <sys/types.h> #include <dirent.h> | |
| struct dirent *readdir(DIR *dirp); | 讀取目錄的信息放在返回值中 | #include <dirent.h> | |
| char *getcwd(char *buf, size_t size) | 獲取當前所在路徑 | #include <unistd.h> | |
| pid_t fork(void) | 創建一個新的進程 | #include <unistd.h> | 父進程和子進程 返回值不同 |
| int kill(pid_t pid, int sig); | 發送一個信號到進程 | #include <signal.h> | |
| int execlp(const char *file, const char *arg, …0) | 調用系統程序 | #include <unistd.h> | 注意和system區別 |
(四)功能演示
在使用前先安裝madplay音頻解碼器,在Ubuntu下安裝如下:apt install madplay
安裝完成后,編譯工程(make) 之后運行程序傳遞參數就可以播放音樂了
輸入1測試:
剩下的我就不一一測試了,感興趣的可以自己下載工程測試下
(五)代碼實現
這里貼出主要代碼,因為我把功能開寫的代碼有些多:
music.c
file.c
#include "file.h" /*************************************函數功能: 掃描目錄下指定后綴名的文件*輸入 : 路徑*輸出 : 掃描成功輸出0,掃描失敗輸出-1*注釋 : 掃描到的文件名放在song_info結構體里面*************************************/ struct song song_info={0,0};int search_file(char* name,char * type) {DIR *p=NULL;struct dirent *pdir;p=opendir(name);if(p==NULL){perror("open dir error");return -1;}chdir(name);while(pdir=readdir(p)){if(!(strcmp(pdir->d_name,".")==0) && !(strcmp(pdir->d_name,"..")==0)){struct stat st;stat(pdir->d_name,&st);if((st.st_mode &S_IFMT)== S_IFDIR){// printf("this is a content:%s\n",pdir->d_name);//system("pwd");search_file(pdir->d_name,"mp3");}else {char * file_type;file_type = strstr(pdir->d_name,type);if(file_type){getcwd(song_info.song_path[song_info.song_num],sizeof(song_info.song_path[0]));sprintf(song_info.song_name[song_info.song_num++],"/%s",pdir->d_name);}}}}chdir("..");closedir(p); return 0; }link.h
#pragma once #ifndef _LINK_H_ #define _LINK_H_ #include <stdio.h> #include <stdlib.h> #include <string.h> #define name_max 255 typedef struct _node {char name[name_max];char path[name_max];struct _node * prev;struct _node * next; }node;typedef struct _link {node *phead;//鏈表頭部int count;//節點個數char name[name_max];//鏈表名字 }link_t;int link_init(link_t *link);//鏈表初始化,成功返回0,失敗返回-1 int link_insert_tail(link_t *link, char *dat1,char *dat2);//尾插鏈表,使用前先執行link_init初始化鏈表 int destory_link(link_t *link);//刪除鏈表,成功返回0 失敗返回-1 node * pos_list(link_t link, int n);//定位到鏈表任意位置 node * next_node(node * node);//獲取當前節點的上一個節點 node * prev_node(node * node);//獲取當前節點的下一個節點 void out_list(link_t *head);//遍歷鏈表#endif /* ifndef _MUSIC_H_ */總結
以上是生活随笔為你收集整理的C语言实现音乐播放器(Linux madplay)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鲜肉老师百度云网盘(鲜肉老师百度云)
- 下一篇: 喜牌家居是哪里的?