基于QT实现Mp3播放器(理论论述部分)

前言

    最近有一个课程实验,利用window上的API接口实现MP3播放器。 突发奇想,在linux下用相关接口做一个MP3播放器。最先的打算是完全使用纯C写的,但后来感觉编写调试实在费劲。于是就使用了QT这个IDE工具,还可以编写个图形界面的。这篇博客主要说些理论设计部分,具体的代码,请参见我的另一篇博客(基于QT实现Mp3播放器(代码部分))
    来,小二,上个图(注重逻辑,界面并没有认真规划,⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄)。
基于QT实现Mp3播放器(理论论述部分)

技术综述

   本次的小项目从技术上比较简单,基本上一个UI的过程。主进程接收用户的操作,然后新建一个进程,在这个进程中通过调用Mplayer这个工具提供的接口实现播放、暂停等动作。
(所以如果想运行本程序,必须在linux安装mplayer这个多媒体播放工具,关于Mplayer的安装、使用在此就不在赘述了)。 可以参照下面这篇博客:Qt5下QProcess + MPlayer实现QT音乐播放类

功能实现

(1)、添加歌曲(可以从文件夹中成批添加)
(2)、删除歌曲(只能删除当前歌曲)
(3)、播放
(4)、暂停、开始
(5)、上一曲、下一曲
(6)、加音量、减音量
(7)、自动连续播放

没贴图时的UI设计如下
基于QT实现Mp3播放器(理论论述部分)

代码架构

本次的项目代码主要分为三个部分,分别类属三个类:
(1)、playerprocess:主要实现最底层对mplayer接口调用
(2)、player:用来处理用户触发的动作,并做基本的逻辑处理,最后把具体的操作下发给playerprocess层。从某种程度上来说算是一种中间件。
(3)、widget:这是视图层。用于显示歌曲列表,并接收用户的动作,下发给player层。
具体的架构如下图所示:
基于QT实现Mp3播放器(理论论述部分)

总结

   这个项目虽然很小,但确实多多少少花了我将近一个星期,功能上倒是很快就实现了。但一开始总感觉在代码设计上显得不够好,冗余太多,耦合也比较多,模块之间的界限也不是很清晰。花了好长时间进行代码架构设计,力求各层任务清晰,每层的函数功能也比较清晰。前前后后总共改了三四个版本,(最终是在是改不动了,想的我脑壳疼),虽然可能还有些 不太完善的地方,但目前的版本总体还算满意吧。
   虽然花了很多时间,但确实也学到了不少东西,技术上的还是其次,更多的是设计思想上的,对面向对对象中的封装、对策略和机制、对分层有了更深的理解。也算是时间花的有所值吧。

后言

具体的工程代码已经打包了,有需要的请到对应的资源页进行下载。