概述
第3步:功能:屏幕上显示歌曲长度、当前播放到多少秒、当前歌曲的“专辑、歌手、标题、发行年份”,进度条
要求:
1:在屏幕歌曲信息窗口中显示歌曲的总长度,当前播放时间.(切换歌曲活快进快退的时候刷新信息)
2:在歌曲信息窗口中显示 歌曲的“专辑、歌手、标题、发行年份”.(切换歌曲的时候刷新信息).
3:播放进度条随着时间推移。(切换歌曲、或快进快退的时候可以刷新)
提示: 1: 父子进程通过管道通信。即子进程通过管道把消息传给父进程
子进程把Mplayer输出的信息重定向到管道中。
主进程从管道中读,读出来后解析再做相应的处理。
2: 主进程几个创建子线程
1:pipe_read 循环读管道把读到的消息保存在字符数组中。
2:pipe_read_dispose 循环解析读到的消息,把有用的消息解析出来,做相应的处理
3:get_percent_pos 每隔一段时间发一条检测时间的命令,获取当前播放时间。
第4步:功能:在歌词窗口显示歌词。
要求:歌词循环打印,歌词与歌曲同步,切换歌曲的时候切换新的歌词。
提示:可以用Mplayer返回回来的当前播放时间去查找歌词解析里的时间,这样快进歌词也可以跟着同步。
如果用以前的虚拟时间,歌曲快进,歌词不能同步。
歌词解析功能也是创建一个新的线程去完成
四,思路
1,初始化:
在编写任何一个项目程序之前,都有一些初始化工作要做,首先必须把该项目要用的硬件配置好,也就是静态的程序工作,上边的第零步和第一步都是初始化工作。还有一个初始化的就是触摸屏,因为之词用的是图片,所以要找到图片是对应功能键在触摸屏上的位置,包括x,y坐标的范围和对应的功能键,这个以通过建立一个结果体数组,然后有键按下后判断其范围,并把对应的键值返回:
这在touchscreen.c文件里实现
2,从最基本的功能一步一步实现最终的功能,基本功能是实现最终功能的基础
3,写程序之前应该分析项目的整体实现方法,要有可行性,不要最后走到死胡同
4,做完之后要检测,看某些地方有没有再好的实现方法。
在分析项目的时候,看要不要用进程,用不上进程的地方就尽量不要用,进程一般用在、、、;用了进程之后,进程之间如何通信,有关联的进程数据传输一般用无名管道,无关联的用有名管道,
一些实时性要求比较高的地方要用到线程,比如等待触摸屏,独立的线程处理比较简单,但关联的线程处理起来就比较麻烦,信号,互斥锁,信号量,都不能用的时候就自己建立一个标志位,进行控制;
Mplayer的执行和控制部分:
1,简单的播放歌曲
在该项目中,mplayer可执行程序的运行要通过exec函数来实现,这种函数执行完之后就退出线程了,因此必须给他新建一个子线程,
if((pid=fork())==-1)
{
perror("fork");
exit(1);
}
else if(pid==0)//在子进程中播放歌曲
{
char song[SONG_CHNUM];
close(pipedes[0]);
dup2(pipedes[1],1);
sprintf(song,"%s%s","./song/",song_list[0]);//得到整个歌曲路径
execlp("./mplayer","","-ac","mad","-slave","-quiet","-input","file=fifo",song,NULL);}
通过程序控制mplayer要用有名管道传送命令,通过无名管道读取mplayer返回的信息,因为mplayer默认是把信息发送到标准输出上,所以要用dup2()中定向标准输出到无名管道的写端: dup2(pipedes[1],1);。
创建有名管道和无名管道
unlink(FIFO);//如果管道存在,先删除
if(mkfifo("fifo",IPC_CREAT|0x744)==-1)//创建有名管道
{
perror("mkfifo");
exit(1);
}
if(pipe(pipedes)==-1)//创建无名管道用于从mplayer读取歌曲信息
{
perror("pipe");
exit(1);
}
因为在该项目中要经常向mplayer发送命令,那么就建立一个函数通过写有名管道向mplayer发送命令:
写之前在主进程中打开:
if((fd=open(FIFO,O_RDWR))==-1)
{
perror("open");
exit(1);
}
void send_cmd(char *cmd)//通过有名管道向mplayer发送命令
{
if((write(fd,cmd,strlen(cmd)))!=strlen(cmd))
{
perror("write cmd");
}
}
这样一个简单的mplayer就建立成功了,运行这个框架下的程序,可以自己播放一首歌,一首歌播完后由于exec函数的性质,整个程序就执行完了。
最后
以上就是糟糕白昼为你收集整理的Mplayer播放器程序设计Linux,Linux下编程实现mplayer播放器总结的全部内容,希望文章能够帮你解决Mplayer播放器程序设计Linux,Linux下编程实现mplayer播放器总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复