#千锋你逆战班,qt#
******************假如我不能,我一定要;假如我一定要,我就一定能*******************
上一篇文章说到了如何给按钮和label添加图片,今天就来说一下在slave模式下如何获得歌曲的一些信息和如何创建线程
一、获得歌曲信息
先介绍Mplayer 在slave模式下常用的命令:
loadfile string //播放string指定的歌曲。 string为歌曲路径+文件名(例:“loadfile ../easylove.mp3”)。
volume x 1 //设置音量,x为音量的大小。
mute 1/0 //静音开关。1:静音;0:取消静音。
pause //暂停/取消暂停。
seek value //快进或快递参数value指定的秒数
当value为正时,快进;当value为负时,快退。
get_percent_pos //获得文件的播放进度(百分比:0--100)。
get_time_pos //获得文件的当前位置,以秒为单位,精确到小数位1位。
get_file_name //获得文件的文件名。
get_time_length //获得文件的长度,以秒为单位。
get_meta_album //获得文件的 '专辑' 的元数据。
get_meta_artist //获得文件的 '艺术家' 的元数据。
get_meta_comment //获得文件的 '评论' 的元数据。
get_meta_genre //获得文件的 '流派' 的元数据。
get_meta_title //获得文件的 '标题' 的元数据。
get_meta_year //获得文件的 '年份' 的元数据。
在编码过程中,我们应该创建无名管道(pipe)和有名管道(mkfifo),便于后面进行读写使用,创建方法如下:
在获得歌曲的播放当前时间和总时长时,我们先打开有名管道,向管道里写命令,在无名管道端读数据,向管道写数据时,我们最好先定义一把锁,用于互斥:pthread_mutex_t mutex;
例如:向管道写volume命令,改变音量
在QT中,如果直接在主窗口下进行读写,程序会发生错误,为了避免发生错误,我们应该创建线程,在线程中读写,再把读到的数据发送给主窗口,再由主窗口对一些控件进行设置
( 我们需将标准输出重定义到无名管道的读端
)
线程如何创建,就由读者自己搜索了
案例:点到项目右击 -> 添加新文件 -> c++ -> c++ class ->"class name :自己取名",“base class <custom>:自定义”-> 继承:QThread -> 下一步完成
.h
.cpp 在线程中读写,获取歌曲播放的当前时间,这里建议用一个线程写,另一个线程读
主窗口.cpp 启动线程,注册信号与槽
设置label,显示当前时间
获得总时间,播放进度,类似
今天就分享到这了,欢迎留言讨论