Linux项目设计:斗罗大陆宣传系统、基于Linux系统的媒体播放器、可播放音视频图片(基于gec6818项目设计)

哔哩哔哩项目视频链接:https://www.bilibili.com/video/BV1Hp4y1v7Pt
代码资料链接:https://download.csdn.net/download/mbs520/16668844
项目功能展示:
一、开机显示登入界面,可密码管理员登入,也可以免密码普通用户登入
在这里插入图片描述
二、登入后显示桌面,显示5个应用 ,分别是图片、视频、音乐、设置、文件管理
在这里插入图片描述
三、音乐相册功能,播放图片同时播放背景音乐,可以左右滑动切换图片等操作
在这里插入图片描述
四、视频播放功能,可以播放avi,mp4等格式视频
在这里插入图片描述
五、音乐播放器,可以播放mp3格式的音频
在这里插入图片描述
六、设置壁纸,可以根据喜好设置自己喜欢的壁纸
在这里插入图片描述
七、文件管理,可以对文件进行预览和删除
在这里插入图片描述

一、项目课题:

基于ARM平台的广告机系统设计
应用:电梯、公交车、公共场合。。。

项目基本功能:
1.广告图片切换(可以播放对应背景音乐)
2.广告视频播放

3.可以检索某个目录下所有的图片或多媒体数据(音乐,视频) readdir
显示出来,对其进行管理(加入播放列表,将其从列表移除)
(增删改查之类的多媒体操作,可以使用Secure CRT终端显示并输入)

项目拓展功能:(供参考,可自行决定更多功能)
1.使用触摸屏点击,实现多媒体数据管理(用户交互)
2.添加密码输入界面,实现用户管理机制
例如: root管理员权限:多媒体添加、删除、调整顺序、用户管理…
gec普通用户权限:多媒体浏览、调整顺序…
3.递归检索,可检索低层的所有子目录。(需要注意文件路径,绝对路径)

二、项目设计

1、图片准备
下载大量图片,用画图软件转换为.bmp图片方便显示

系统图片:
在这里插入图片描述
斗罗大陆广告图片:
在这里插入图片描述
二、视频准备
在这里插入图片描述
准备若干个斗罗视频,mp4,avi的都可以,avi的视频播放的更加流畅

三、音乐准备
下载几首斗罗主题曲,博主比较穷,找了半天找到一首不要钱的斗罗大陆,用中文不好传输我就把名字改成了英文。
在这里插入图片描述

三、代码编写

代码文件目录:
在这里插入图片描述
代码量比较多,所以用分文件管理,Makefile编译。
1、利用opendir函数打开文件目录检索文件
2、利用内核链表保存文件名方便管理

typedef struct kernel_list{
	// 1.数据域,保存文件名
	char buf[256];
	// 2.指针域(小结构体)
	struct list_head list;
}kl_st, *kl_pt;

3、利用.bmp .ebm图片代码驱动播放图片文件(其他)

//显示bmp
void show_bmp(char *bmp_patpname,int x_offset,int y_offset)
{
	/*向lcd文件中写入像素点数据*/
	//打开bmp图片
	int  bmp_fd = open(bmp_patpname, O_RDONLY);//完整路径 /mnt/hgfs/shear/day004/1.bmp
	if(bmp_fd == -1)
	{
		perror("打开bmp图片失败");
		exit(-1);
	}
	
	//读取图片头部信息
	bmp_head myhead;
	read(bmp_fd, &myhead, sizeof(bmp_head));
	
	//申请缓冲区
	char tmp_buf[myhead.width*myhead.height*3];
	//清空缓冲区
	bzero(tmp_buf,sizeof(tmp_buf));
	
	//读取图片数据
	read(bmp_fd, tmp_buf, sizeof(tmp_buf));
	//关闭图片文件
	close(bmp_fd);
	//将数据存入映射内存
	//将数据存入映射内存
	int i,j;
	for(i=0; i<myhead.height; i++)
		for(j=0; j<myhead.width; j++)
		{
			*(FB+((i+y_offset)*800+j+x_offset)*4) = tmp_buf[((myhead.height-1-i)*myhead.width+j)*3];
			*(FB+((i+y_offset)*800+j+x_offset)*4+1) = tmp_buf[((myhead.height-1-i)*myhead.width+j)*3+1];
			*(FB+((i+y_offset)*800+j+x_offset)*4+2) = tmp_buf[((myhead.height-1-i)*myhead.width+j)*3+2];
			*(FB+((i+y_offset)*800+j+x_offset)*4+3) = 0x00<<24;
		}
	
}

4、用mplayer软件播放视频与音乐,相关软件文件已经上传到资料链接
在这里插入图片描述
mplayer使用方法:
首先把mplayer上传到开发板的 /usr/bin 文件目录下 使用一下mplayer 命令,看一下能否使用

命令使用:
1)、播放视频:播放起始位置(240,70),显示区域大小400*240,&后台播放

system("mplayer -geometry 240:70 -zoom -x 400 -y 240 ./mp4/dl.mp4 &");

2)、播放音乐:后台播放dl.mp3

system("mplayer  ./dl.mp3 &");

代码展示

由于代码过长,这里只显示部分代码

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <string.h>	
#include "lcd.h"
#include "ts.h"
#include "kl_list.h"
#include "list.h"
#include "font.h"
//密码
int pswd_cheak(char *psword);
//显示文件名
void LCD_show_filename(int x,int y,kl_pt head);

//应用界面触摸选择
int app_choose(void);
//文件选择
int file_choose(void);
//图片
void photo(void);
//视频
void video(void);
//音乐
void music(void);
//设置
void settings(void);
//移除文件
void file_del(char *phname,kl_pt head);
//文件触摸选项
int file_choose(void);
//扫描tailname文件到phname
void file_scan(char *phname,char *tailname);
//移除文件
void file_del(char *phname,kl_pt head);
//文件管理
void file_manage(const char *path_name);
//文件管理器触摸选项
int file_mag_choose(void);

kl_pt all_head;//递归链
char walpar[64]="bz1.bmp";//壁纸
int root=0;//0:游客 1:root用户

//主函数
int main(int argc, const char *argv[])
{
	all_head=kl_list_init();//初始化递归链
	if(argc != 2)
	{
		perror("input error\n");
		return 0;
	}
	char psword[]="1234";//设置密码
	int x=0,y=0;
	int app_val;
	open_lcd();//初始化lCd
	open_ts();//初始化触摸屏
	Init_Font();// 初始化字库
	show_ebm("./ebm/14.ebm");//显示密码界面
	root = pswd_cheak(psword);//获取登入权限
	while(1)
	{
		show_bmp(walpar,0,0);//显示壁纸				  		show_bmp("./bmp/15.bmp",110,190);//显示应用图标
		show_bmp("./bmp/16.bmp",270,190);
		show_bmp("./bmp/17.bmp",430,190);
		show_bmp("./bmp/18.bmp",590,190);
		show_bmp("./bmp/file.bmp",590,70);
		while(1)
		{
			app_val=app_choose();//获取触摸屏信息
			if(app_val)
			{
				switch(app_val)
				{
					case 1:photo();break;//应用
					case 2:video();break;
					case 3:music();break;
					case 4:settings();break;
					case 5:file_manage(".");//递归遍历
				}
				break;
			}
		}
	}
	close_lcd();//关闭文件
	close_ts();
	//关闭字库
	UnInit_Font();
	return 0;

}


资料说明:
1、拷贝整个目录到开发板(tftp nfs u盘…)
在这里插入图片描述
2、运行a.out

./a.out ./
  • 14
    点赞
  • 149
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论
C语言编写的MP3音乐播放器的详细设计主要包括以下几个方面: 1. 用户界面设计: 首先,需要设计一个用户界面,可以使用控制台或者图形界面。用户界面需要包括菜单功能,如播放、暂停、停止、音量调节等。同时,还需要显示当前播放的歌曲信息,如歌曲名、歌手、专辑等。 2. 音频文件解码: MP3音乐文件是经过压缩的格式,需要进行解码才能进行播放。在C语言中,可以使用开源库如MAD或libmpg123进行MP3解码。解码后的音频数据可以通过回调函数进行处理。 3. 播放控制: 通过调用系统相关的API或者库函数,可以实现音乐的播放、暂停、停止等功能。可以使用多线程或者非阻塞IO进行音乐播放,以免阻塞其他用户界面操作。 4. 音频控制: 音频控制包括音量调节、音频进度控制等功能。可以通过调用相关系统API或者库函数,来实现这些功能。 5. 音频可视化: 可以添加音频可视化效果,如频谱、波形图等,提升用户体验。可以通过FFT算法对音频数据进行频域分析,然后绘制相应的可视化效果。 6. 文件操作: 音乐播放器需要能够读取本地存储的音乐文件。可以使用C语言的文件操作函数,如fopen、fgets等进行文件的读取和解析。 7. 错误处理: 在设计中要考虑到可能出现的错误情况,如文件打开错误、解码错误等,需要给出相应的错误提示或者异常处理机制。 总而言之,C语言编写的MP3音乐播放器的详细设计需要考虑用户界面设计音频文件解码、播放控制、音频控制、音频可视化、文件操作和错误处理等方面。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

化作尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值