远程WEB控制MP3播放器设计(基于mini2440)

基于mini2440的MP3播放器设计,采用远程WEB控制方式。通过WEB界面实现播放器的控制,后台运行包括WEB控制端、WEB服务器端(使用BOA服务器)和MP3播放应用程序。重点介绍MP3播放代码、BOA服务器通过CGI程序与应用交互以及简单的WEB控制脚本修改。
摘要由CSDN通过智能技术生成

网上有很多 基于mini2440的MP3播放器设计的资料,多是按键控制,这里博主做了些轻微改动,利用远程WEB来控制MP3播放,具体怎么实现,下面会给出,大家先看看效果:

WEB界面:


后台运行:


因为不是什么课程设计报告,博主就不阐述的那么详细,这个设计主要有三部分组成:

1、WEB控制端(就是浏览器);

2、WEB服务器端(将mini2440开发板作为服务器,其中移植了BOA服务器,这里不做详细介绍,大家网上搜一搜,好多资料,BOA服务器是嵌入式设备中用的比较多的WEB服务器);

3、应用程序部分(就是MP3播放器);

下面将代码列出,就其中重要部分进行详解:

MP3播放代码如下:

/*
 *     SD卡mp3播放器控制程序
 *	   功能:
 			 k1:播放、暂停
 			 k2:停止播放
 			 k3:上一首
 			 k4:下一首
 *     附加:歌曲自动循环播放SD卡/sdcard/song目录中mp3歌曲
 */
 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <signal.h>
#include <sys/select.h>
#include <sys/time.h>
#include <errno.h>
#include <sys/wait.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>

/*共享内存申请标记*/
#define PERM S_IRUSR|S_IWUSR													

/*双向循环列表:存放歌曲名*/
struct song				
{
	char songname[20];
	struct song *prev;
	struct song *next;
};

/*孙子进程id号*/
pid_t gradchild;

/*子进程id号*/
pid_t pid;

/*共享内存描述标记*/
int shmid;
char *p_addr;
/*共享内存内容格式*/
/*|gradchild(孙子进程PID) |+ |空一个字节|+ currentsong(当前播放列表的节点指针)|*/

/*播放标记*/
int first_key=1;
int play_flag=0;

/*************************************************
Function name: play
Parameter    : struct song *
Description	 : 播放函数
Return		 : void
Argument     : void
**************************************************/
void play(struct song *currentsong)
{
	pid_t fd;
	char *c_addr;
	char *p;
	int len;
	char my_song[30]="/sdcard/song/"; 
	while(currentsong)
	{
		/*创建子进程,即孙子进程*/
		fd = fork();
		if(fd == -1)
		{	
			perror("fork");
			exit(1);
		}
		else if(fd == 0) 
		{
			/*把歌曲名加上根路径*/
			strcat(my_song,currentsong->songname); 
			p = my_song;
			len = strlen(p);
			/*去掉文件名最后的'\n'*/
			my_song[len-1]='\0';

			printf("THIS SONG IS %s\n",my_song);
                      /*运行madplay播放器,播放MP3*/
                     system("printf(" THIS SONG IS %s\n", $my_song) >>/tmp/songname");
		
			
			execl("/bin/madplay","madplay",my_song,NULL);
			printf("\n\n\n");
		}
		else 
		{
			/*内存映射*/
			
			c_addr = shmat(shmid,0,0);

			
			memcpy(c_addr,&fd,sizeof(pid_t));
			memcpy(c_addr + sizeof(pid_t)+1,¤tsong,4);

			/*使用wait阻塞子进程,直到孙子进程播放完才能被唤醒;
			  当被唤醒时,表示播放MP3期间没有按键按下,则继续顺序播放下一首MP3*/
			
			if(fd == wait(NULL))
			{
				currentsong = currentsong->next;
				printf("THE NEXT SONG IS %s\n",currentsong->songname);
			}
		}
	}
}

/*************************************************
Function name: creat_song_list
Parameter    : void
Description	 : 创建歌曲名的双向循环链表
Return		 : struct song *
Argument     : void
**************************************************/
struct song *creat_song_list(void)
{	
	FILE *fd;
	size_t size;
	size_t len;
	char *line = NULL;
	struct song *head;
	struct song *p1;
	struct song *p2;
	system("ls /sdcard/song >song_list");
	fd = fopen("song_list","r");

	p1 = (struct song *)malloc(sizeof(struct song));

	printf("==================================song list=====================================\n");
	system("ls /sdcard/song");	
	printf("\n");
	printf("==========================================================================&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值