第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播放器总结相关推荐

  1. linux mplayer分析,Linux系统下玩转 MPlayer

    Linux系统下玩转 MPlayer,MPlayer 是我在 Linux 系统中用到的相当好的媒体播放程序,它因支持播放广泛的音/视频文件格式而著称.本文所要探 MPlayer 是我在 Linux 系 ...

  2. 计算机音乐播放器设置,Win7系统下设置默认音乐播放器的两种方法

    可能很多新手用户不知道Win7系统下怎么设置默认音乐播放器?我们习惯将某一程序设置为默认打开方式,音乐播放器也可以这样子的.一些用户想把酷狗播放器.或者qq音乐设置为默认音乐播放器,只要打开音乐文件, ...

  3. linux 中rpc 服务器,实现Linux环境下编程RPC通信之个人经验总结(转)

    #include #include "trans.h" char * readfile(char *); static char * retcode; char ** readfi ...

  4. Linux环境下编程有哪些优势?

    ★Linux系统它是一种开源的,并且有很多可用的软件支持,再者它大多数都是免费使用的:例如我们的手机的安卓系统底层就是基于Linux系统开发的:Linux最广泛的应用是在服务区和嵌入式系统中,一些知名 ...

  5. python播放音乐同步歌词_linux 下 python 调用 mplayer 解析歌词同步播放显示

    标签: 加载同目录同名歌词同步显示 #!/usr/bin/python # -*- coding: utf-8 -*- import sys, os, time, subprocess, re, ch ...

  6. ik分词器 mysql php_php环境下使用elasticSearch+ik分词器进行全文搜索

    首先需要说明的一点是,如果需要启用ik分词器,那么分词器的版本必须与es版本一致,即6.3.0的分词器需要同样6.3.0版本的es支持. 安装java win-64bit的安装包需要去java英文官网 ...

  7. pythonproperty装饰器_实例讲解Python编程中@property装饰器的用法

    取值和赋值 class Actress(): def __init__(self): self.name = 'TianXin' self.age = 5 类Actress中有两个成员变量name和a ...

  8. linux下最好用的视频播放器,mplayer,smplayer怎么安装 播放黑屏

    推荐一款linux环境下好用的视频播放器 mplayer没有图形化界面 smplayer是mplayer的有图形化界面的软件 用yum命令安装 yum install smplayer 该命令会让mp ...

  9. linux音频自动转码,使用SoundConverter在Linux系统下批量音频转码的方法

    以下教你在 Linux 操作系统下批量音频转码,只需要下载并安装 SoundConverter 即可,它的使用方法非常的简单,下面会做一说明. 背景 时下最流行的音频压缩格式当然是 MP3 了,目前主 ...

  10. android 音频播放过程,一种Android系统中的音频播放方法与流程

    本申请涉及android系统技术,特别涉及一种android系统中的音频播放方法. 背景技术: 在android系统中,现有的使用audiotrack进行音频播放时,audiotrack应用与andr ...

最新文章

  1. java 小对话框_创建Java对话框
  2. Spring-AOP 静态普通方法名匹配切面
  3. MVC中helper的用法。
  4. 2020年你应该学习 .Net Core
  5. HDU - 5438 Ponds 拓扑 dfs
  6. qt使用自带的日志输出实例输出日志时,在日志中显示行数
  7. swiper 定义放多少张图片_小程序瀑布流组件:支持翻页与图片懒加载
  8. CCF NOI1022 平均年龄
  9. 利用k-means算法解决简单的无监督图像识别任务
  10. [梦]2005年9月1日
  11. c语言之图形编程 pdf,《C语言图形编程》.pdf
  12. easyExcel添加背景水印
  13. Day11:股市风险
  14. android wifi 文件共享,一个Android WiFi 文件共享程序
  15. python百度地图标注自己的店名_百度地图上怎么显示店名 百度地图标注店名方法...
  16. OneDrive不能上了?DNS被污染,解决方法很简单
  17. 监控 - Prometheus监控
  18. office办公软件插件推荐word插件excel插件ppt插件
  19. MySQL学习笔记——第3章 数据表的管理和表中数据操纵
  20. [树莓派 PICO(基于MicroPython)]基础教程02-按键测试、按键控制外设LED开关

热门文章

  1. Linux中的子shell是什么,怎么理解?
  2. 知我者谓我心忧,不知者谓我何求!
  3. https封装类,支持get/post请求
  4. nfc卡模式与标准模式_全功能NFC是什么意思?点对点/读写卡/卡模拟三种模式介绍...
  5. Linux安装应用时需要考虑时区问题并修改时区
  6. Dual-edge triggered flip_flop(Dualedge)
  7. Unbuntu更换阿里源
  8. 2022年安徽省和湖北省供应链创新与应用示范城市和示范企业申报条件流程
  9. b2b2c商城php源码,多用户B2B2C商城系统 thinkphp5.0
  10. linux md5加密文件,linux md5 加密字符串和文件方法