资源描述
2010 第六届“博创杯”全国大学生嵌入式设计大赛
KTV点播系统
KTV AVOD System
参赛院校 :济源职业技术学院
参赛队员 :宋金时、杨晓东、张书铭
指导教师:王树森、陈平
2010年07月16日
摘 要
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。嵌入式作为计算机应用的一部分,也以很快的速度发展,开发设计一套行之有效的嵌入式点唱系统,对于快节奏的生活有着很好的调节作用。
KTV点唱系统是娱乐场所不可缺少的一种娱乐方式,它设计的目的在于丰富用户的精神文化生活,在紧张的工作之余能够放松身心,缓解工作所带来的压力。还有另外一个重要的作用就是能够加深KTV系统使用者之间的感情,为彼此之间的沟通增加了一种新的方式。
一般用户使用计算机收听歌曲,通过网上下载的途径,如果网速过慢或其它原因,使用并不是很方便。如果去KTV等娱乐场所或者直接购买一套我们的KTV点唱系统,就可以直接的K歌所带来乐趣,较其他娱乐方式相比既健康又享受,又不用因等待下载而浪费时间。
因此,开发这样一套实际应用软件成为很有必要的事情,下面我们将以开发一套KTV点唱系统为例,谈谈其开发过程和所涉及到的问题及解决方法。
关键词:KTV 点播系统
目 录
摘 要 I
第一章 KTV点播系统概述 1
1.1目的和意义 1
1.2 系统功能 1
1.3 系统设计方案 1
1.3.1 嵌入式系统组成 1
1.3.2 KTV点播系统组成 2
1.3.3 方案论证 2
第二章 宿主机开发环境的配置 4
2.1开发环境方案 4
2.2 宿主机Linux环境的搭建 4
第三章 硬件开发平台及其操作系统的构建 5
3.1开发平台的硬件资源 5
3.2 开发平台的体系结构 5
3.3 开发平台硬件间的工作流程 6
3.4 开发平台操作系统的搭建 6
3.4.1 U-Boot的编译 6
3.4.2烧写U-boot 7
3.4.3 内核(kernel)的编译与烧写 7
第四章 基于Qt/Embedded的嵌入式图形系统 8
4.1 Qt概述 8
4.2 Qt特征 8
4.3 Qt编程核心技术 8
4.3.1 元对象系统 8
4.3.2信号和插槽 9
4.3.3 属性 9
4.3.4. QObject类 9
4.3.5 对象树 9
4.3.6 事件 9
4.3.7. QApplication类 10
4.3.8 QWidget类 10
4.4 Qt Creator:跨平台的Qt IDE 10
4.5 Qt/Embedded 10
4.5.1 QTE与QT/X11比较 12
4.5.2 Qt/Embedded开发模型 12
4.6建立Qt/Embedded开发环境 12
4.6.1 准备工作 12
4.6.2 安装交叉编译器 13
4.6.3安装qt-sdk-linux-x86-opensource-2010.04.bin开发工具包 13
4.6.4 编译及安装QT/E4.6.3-x86和QT/E4.6.3-arm 14
第五章 KTV点播系统设计 20
5.1 SQLite数据库 20
5.1.1 SQLite数据库简介 20
5.1.2 SQLite数据库的操作 20
5.1.3 Qt程序中对SQLite的操作 21
5.2 使用Qt Creator 进行系统开发 22
5.2.1 熟悉Qt Creator IDE 22
5.2.2 使用Qt Creator 建立工程 23
5.2.3 设计界面 23
5.2.4 程序代码的编写 23
5.2.5 程序调试以及修改 25
5.2.6 KTV点播系统的功能测试 26
5.3 MPlayer播放器 28
5.3.1 MPlayer简介 28
5.3.2 MPlayer播放器的架构及工作原理 28
第六章 系统的移植与集成 30
6.1移植QT/E4.6.3以及tslib1.4到开发板 30
6.2 MPlayer的编译及移植 32
6.2.1下载source文件与解压 32
6.2.2配置 33
6.2.3参数配置简单介绍 33
6.2.5编译及移植 33
6.3 KTV点播系统的移植 33
6.3.1 交叉编译 33
6.3.2 将程序下载到开发平台并运行 34
第七章 系统整体测试 35
7.1触屏的测试与校准 35
7.2 系统完整的运行测试 35
参考文献 37
25
第一章 KTV点播系统概述
1.1目的和意义
计算机已经成为我们学习和工作的得力助手,但同时也是我们娱乐放松的工具。今天,计算机的价格已经十分低廉,性能却有了长足的进步。它已经被应用于许多领域,尤其是娱乐方面,应用更是广泛,其中就有和我们所要开发的系统及其相近的一个领域,那就是KTV夜总会等一些娱乐方式多样的场所。将我们的KTV点播系统应用到这些场所后,也为人们的业余娱乐生活提供了新的方式,特别是那些爱好唱歌,喜欢以K歌的方式放松心情的人们。在这样的前提下,我们设计并开发了该系统。
1.2 系统功能
我们的KTV点播系统拥有即点即放、歌曲查找、可根据自己喜好添加播放列表进行播放、播放列表还可以根据用户的意愿随意的删除以及其他等功能。
1.3 系统设计方案
1.3.1 嵌入式系统组成
嵌入式系统组成如图1.1所示,嵌入式硬件平台中包含嵌入式微处理器、存储器、通用设备接口和I/O接口等。嵌入式硬件平台与嵌入式操作系统之间为中间层,也称板级支持包(Board Support Package,BSP),它将系统上层软件与底层硬件分离开来,使系统的底层驱动程序与硬件无关,上层软件开发人员无需关心底层硬件的具体情况,根据BSP 层提供的接口即可进行开发。嵌入式操作系统负责嵌入系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。嵌入式应用软件是由基于实时系统开发的应用程序组成,用来实现对被控对象的控制功能。功能层是要面对被控对象和用户,为方便用户操作,往往需要提供一个友好的人机界面。
图1.1嵌入式系统组成
1.3.2 KTV点播系统组成
KTV点播系统组成如图1.2所示,首先使用数据库系统创建候选歌曲列表,然后KTV点播系统通过响应用户的选择操作,将用户所选择的相应歌曲在数据库的支持下添加到已选歌曲列表中,然后KTV点播系统再调用媒体播放器播放对应的已选歌曲。
图1.2 KTV点播系统组成图
1.3.3 方案论证
1.硬件平台选择
现在用作嵌入式开发的硬件平台很多,由于博创公司的经典S3C2410平台硬件资源丰富,可扩展性好,并且带有视频音频输出以及触摸屏设备,非常适合用作KTV点播系统的开发平台,因此我们在众多硬件平台中选择了博创2410平台。
2.Bootloder选择
用作嵌入式开发平台的Bootloder有很多种,其中著名的被广泛应用到实际的有u-boot和vivi两种,因为u-boot具有开放源码,支持多种嵌入式操作系统内核,支持多个处理器系列,较高的可靠性和稳定性,高度灵活的功能设置,丰富的设备驱动源码等特点,所以我们选择了u-boot作为我们开发平台的Bootloder。
3.嵌入式操作系统选择
Linux本身具有源码开发、内核可裁剪等种种特点,使其成为嵌入式开发的首选,因此这里我们也选择了Linux作为我们的嵌入式操作系统。
4.开发工具选择
Qt是一个跨平台的C++图形用户界面(GUI)工具包,Qt 应用程序接口与工具兼容于所有支持平台,并且Qt中QtSql模块实现了对数据库的完美支持,因此我们选择了Qt 作为我们的开发工具。
5.数据库系统选择
SQLite是一套非常强大的数据库系统,同时它还拥有开源、小巧等特点,非常适合用到嵌入式开发中,因此我们选择了SQLite数据库系统。
第二章 宿主机开发环境的配置
2.1开发环境方案
宿主机嵌入式LINUX开发环境有如下方案:
1.基于PC 机WINDOWS 操作系统下的CYGWIN;
2.在WINDOWS 下安装虚拟机后,再在虚拟机中安装LINXUX 操作系统;
3.直接安装LINUX 操作系统。
这里我们选择第二种基于WINDOWS 的虚拟机上的Linux开发环境。通常的嵌入式系统的软件开发采用一种交叉编译调试的方式。交叉编译调试环境建立在宿主机上,对应的开发板叫做目标板。运行Linux 的PC开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码,然后把可执行文件下载到目标机上运行。调试时的方法很多,可以使用串口,以太网口等。宿主机和目标板的处理器一般不相同,宿主机为Intel 处理器,而目标板如UP-TECH S2410/P270 DVP 开发板为三星S3c2410。GNU 编译器提供这样的功能,在编译器编译时可以选择开发所需的宿主机和目标机从而建立开发环境。所以在进行嵌入式开发前第一步的工作就是要安装一台装有指定操作系统的PC 机作宿主开发机。
2.2 宿主机Linux环境的搭建
开发过程中所使用到的Linux操作系统是开发代号为Lucid Lynx的长期支持版本:Ubuntu10.04。该系统继承了前期Ubuntu版本的优良特性,具有启动速度快,内核新,软件更新方便,具有强大的后备支持等诸多优良特点。
第三章 硬件开发平台及其操作系统的构建
3.1开发平台的硬件资源
1.核心板为 S3C2410,配置2MNor Flash AM29LV160/320,硬件支持从NorFlash 启动并可增加NandFlash 容量。
2.LCD 和VGA 接口,标配8 寸16bit 真彩屏,同时预留一个24bit 接口。扩展了VGA 接口和AV 接口,可以连接VGA 显示器。
3.AUDIO:CODEC 采用UDA1341 和UCB1400,二者根据核心板的不同由软件设置CPLD 逻辑进行选择,具有放音、录音和线路输入等功能。功放电路由LM386 构成,板载扬声器可播放音频。
3.2 开发平台的体系结构
图3.1 s3c3410体系结构图
3.3 开发平台硬件间的工作流程
图3.2 s3c3410工作流程图
3.4 开发平台操作系统的搭建
3.4.1 U-Boot的编译
1.U-Boot主要目录结构
- board 目标板相关文件,主要包含SDRAM、FLASH驱动;
- common 独立于处理器体系结构的通用代码,如内存大小探测与故障检测;
- cpu 与处理器相关的文件。
2.编译U-boot
首先运行如下命令配置U-Boot:
# make up2410_config
然后运行make命令编译:
# make
编译成功之后会产生三个重要映象文件U - Boot1bin、U - Boot和U- Boot1srec文件。其中U - Boot是一个二进制的源映像文件,U - Boot1bin是个elf格式的二进制映像文件,将使用这个文件。
3.4.2烧写U-boot
将烧写软件sjf2410和U - Boot1bin放在同一个目录下,然后进入DOS命令行模式,切换到所在目录,输入sjf2410-s.exe /f:u-boot.bin。选择0:K9S1208 prog→0:K9S1208 Program。然后再入一次0,进行烧写。
3.4.3 内核(kernel)的编译与烧写
安装内核:把内核源码安装/usr/src/ linux子目录中。
cd /usr/src/linux
make mrproper
配置内核,修改相关参数。
字符界面下,make menuconfig
在内核配置菜单中正确设置各内核选项,保存退出正确设置关联文件
make
编译内核,用编译U-Boot时在源代码的tools目录下生成的mkimage可执行文件对前面编译内核时生成的zImage进行处理,生成uImage以供U-Boot启动。使用内核把uImage放入主机的TFTP目录下,启动开发板,用U-Boot的tftp命令下载uImage到SDRAM,并启动。至此我们开发平台的BOOT和操作系统搭建完成。
第四章 基于Qt/Embedded的嵌入式图形系统
4.1 Qt概述
Qt是Trolltech公司的标志性产品(现Trolltech公司已被手机巨头NOKIA公司收购),是一个跨平台的C++图形用户界面(GUI)工具包,Qt 应用程序接口与工具兼容于所有支持平台,让开发员们掌握一个应用程序接口,便可执行与平台非相关的应用开发与配置Qt/Windows(Windows XP, 2000, NT 4, Me/98) Qt/Mac(Mac OS X) Qt/X11(Linux, Solaris, HP-UX, IRIX, AIX等) Qt对不同平台的专门API进行了专门的封装(文件处理,网络等)。
4.2 Qt特征
引入一种用于无缝对象通讯的被称为信号和槽非常强大机制,可查询和可设计的属性,强大的事件和事件过滤器,根据上下文进行国际化的字符串翻译,完善的时间间隔驱动的计时器使得在一个事件驱动的图形界面程序中很好地集成许多任务成为可能。以一种自然的方式组织对象所有权的分层次和可查询的对象树。被守护的指针,QGuardedPtr,当参考对象被破坏时,可以自动地设置为无效,不像正常的C++指针在它们的对象被破坏的时候变成了“摇摆指针”。
4.3 Qt编程核心技术
4.3.1 元对象系统
元对象系统是一个C++扩展,使得QT更适合真正的组件GUI编程,使用元编译器moc产生能被标准C++编译器访问的附加C++代码,带有moc预编译器的C++基本上提供了面向对象的灵活性,并保持了C++的执行效率和扩展性。
4.3.2信号和插槽
在Qt程序中,利用信号(signal)和插槽(slot)机制进行对象间的通信。事件处理的方式也是回调。当对象状态发生改变的时候,发出signal通知所有的slot接收signal,尽管它并不知道哪些函数定义了slot,而slot也同样不知道要接收怎样的signal。signal和slot机制真正实现了封装的概念,slot除了接收signal之外和其它的成员函数没有什么不同,而且signal和slot之间也不是一一对应的。
4.3.3 属性
属性也是一个类的成员,在类声明中用宏Q_PROPERTY来声明,只能在继承于QObject的子类中声明,设置和得到属性的成员函数如下:
QObject::setProperty()
QMetaObject::propertyNames()
QMetaObject::property()
4.3.4. QObject类
QObject是Qt类体系的唯一基类,是Qt各种功能的源头活水,就象MFC中的CObject和Dephi中的TObject。
4.3.5 对象树
QObject在对象树中组织它们自己。当你以另外一个对象作为父对象来创建一个QObject时,它就被添加到父对象的children()列表中,并且当父对象被删除的时候,它也会被删除。这种机制很好的适合了图形用户界面应用对象的需要。
4.3.6 事件
事件是由窗口系统或qt本身对各种事务的反应而产生的。当用户按下、释放一个键或鼠标按钮,一个键盘或鼠标事件被产生;当窗口第一次显示,一个绘图事件产生,从而告知最新的可见窗口需要重绘自身。大多数事件是由于响应用户的动作而产生的,但还有一些,比如定时器等,是由系统独立产生的。
4.3.7. QApplication类
QApplication类和QWidget类都是QObject类的子类.
QApplication类负责GUI应用程序的控制流和主要的设置,它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件,并且处理应用程序的开始、结束以及会话管理,还包括系统和应用程序方面的设置。对于一个应用程序来说,建立此类的对象是必不可少的。
4.3.8 QWidget类
QWidget类是所有用户接口对象的基类,它继承了QObject类的属性。组件是用户界面的单元组成部分,它接收鼠标、键盘和其它从窗口系统来的事件,并把它自己绘制在盘屏幕上。QWidget类有很多成员函数,但一般不直接使用,而是通过子类继承来使用其函数功能。如,QPushButton、QlistBox等都是它的子类。
4.4 Qt Creator:跨平台的Qt IDE
Qt Creator 是 Qt 被 Nokia 收购后推出的一款新的轻量级集成开发环境(IDE)。此 IDE 能够跨平台运行,支持的系统包括 Linux(32 位及 64 位)、Mac OS X 以及 Windows。Qt Creator包含了一套用于创建和测试基于Qt应用程序的高效工具,包括:一个高级的C++代码编辑器、上下文感知、帮助系统、可视化调试器、源代码管理、项目和构建管理工具等。Qt Creator 的设计目标是使开发人员能够利用 Qt 这个应用程序框架更加快速及轻易的完成开发任务。
4.5 Qt/Embedded简介
Qt/Embedded(简称QtE)是一个专门为嵌入式系统设计图形用户界面的工具包。使用QtE,开发者可以:用QtE开发的应用程序要移植到不同平台时,只需要重新编译代码,而不需要对代码进行修改。可以随意设置程序界面的外观。可以方便地为程序连接数据库。可以使程序本地化。可以将程序与Java集成。
嵌入式系统地要求是小而快速,而QtE就能帮助开发者为满足这些要求开发强壮地应用程序。QtE是模块化和可裁剪地。开发者可以选取他所需要的一些特性,而裁剪掉所不需要的。这样,通过选择所需要的特性,QtE的映像变得很小,最小只有600K左右。QtE由于平台无关性和提供了很好的Gui编程接口,在许多嵌入式系统中得到了广泛的应用,是一个成功的嵌入式GUI产品。
4.6建立Qt/Embedded开发环境
4.6.1 准备工作
在/usr/local目录下新建一个名字为QT的目录,然后将要用到的文件包arm-linux-gcc-3.4.6-glibc-2.3.6.tar.bz2、qt-everywhere-opensource-src-4.6.3.tar.gz(适用于QT-X11和QT/E)、tslib-1.4.tar.bz2以及Qt Creator的安装包qt-sdk-linux-x86-opensource-2010.04.bin(软件开发工具包,包含QT-X11和Qt Creator)放到新建的QT目录中。
4.6.2 安装交叉编译器
在终端中执行如下操作:
# cd /usr/local/QT
# tar xvzf arm-linux-gcc-4.3.2.tgz –C /usr/local/
执行该命令,将把 arm-linux-gcc3.4.6 安装到/usr/local/gcc-3.4.6-glibc-2.3.6/arm-linux/目录。
然后,将交叉编译器的环境变量设置为: PATH=/usr/local/gcc-3.4.6-glibc-2.3.6/arm-linux/bin:$PATH,在终端中进行以下操作:export PATH=/usr/local/arm/4.3.2/bin:$PATH 这样就把交叉编译器的环境变量设置好了。
4.6.3安装qt-sdk-linux-x86-opensource-2010.04.bin开发工具包
1.安装QT-X11的开发工具包
qt-sdk-linux-x86-opensource-2010.04.bin安装完成后可以产生Qt开发工具,如Qt Creator、designer、qvfb等,嵌入式的开发有了qvfb,就可以不需要实际的开发板,也可以开发Qt应程序。首先进入软件包的存放目录,然后在终端中执行以下命令:
# chmod +x qt-sdk-linux-x86-opensource-2010.04.bin
./ qt-sdk-linux-x86-opensource-2010.04.bin
默认的安装路径为/opt/qtsdk-2010.04,这样我们的开发工具包就安装成功了。
2. 设置环境变量
在~/.profile文件的最后添加如下语句:
export QTDIR=$PATH:/opt/qtsdk-2010.04/qt
export PATH=$PATH:/opt/qtsdk-2010.04/qt/bin
使环境变量立即起效:
Source ~/.profile
至此我们的Qt Creator以及其他QT-X11的开发工具安装成功。
4.6.4 编译及安装QT/E4.6.3-x86和QT/E4.6.3-arm
1. 解压QT文件包
将/usr/local/QT目录下的qt-everywhere-opensource-src-4.6.3.tar.gz解压两次,分别重命名为QT/E4.6.3-x86和QT/E4.6.3-arm。
这里,qt-everywhere-opensource-src-4.6.3有两个复制:QT/E4.6.3-x86和QT/E4.6.3-arm,根据他们的名字可以知道前者是适合x架构的,后者适合arm架构,如果有开发板的话,可以只编译qt-everywhere版本成arm架构的就可以了,但是很多时候用qvfb的话,开发会方便很多,所以多编译一个x86架构的。QT/E4.6.3-arm版本只能在嵌入式板子上面运行,编译成x86架构的程序也只能在x86的嵌入式板子上跑。前面说过,我们需要qvfb来测试开发程序,但是qvfb只能执行x86架构的应用程序,所以需要让QT/E4.6.3-x86生成关于x86的库和其他文件。最终的qt应用程序需要在arm架构上面运行,需要这方面的库,所以还需要编译应用arm的。
2. 解压及编译触摸屏软件tslib1.4.tar.bz2
打开文件所在目录:cd /usr/local/QT ,解压:tar xjvf tslib-1.4.tar.bz2,进入解压目录:cd tslib-1.4,修改脚本:gedit build.sh,为:
#/bin/sh
export CC=arm-linux-gcc
./autogen.sh
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
./configure --host=arm-linux --cache-file=arm-linux.cache -prefix=/usr/local/tslib
make
make install
执行:./build.sh,成功安装到了/usr/local/tslib目录下,至此tslib1.4编译成功。
3. 编译及安装QT/E4.6.3-x86
进入/usr/local/QT/QT/E4.6.3-x86目录,进行编译安装。在终端中进行如下操作:
# cd /usr/local/QT/QT/E4.6.3-x86
# ./configure -prefix /usr/local/QT/E4.6.3-x86 -embedded x86 -qvfb
# make
# make install
安装编译过程大概需要4个小时,具体时间得看机器的配置,完成后QT/E4.6.3-x86被成功安装在了/usr/local/QT/E4.6.3-x86目录下。
4. 编译及安装QT/E4.6.3-arm
进入/usr/local/QT/QT/E4.6.3-arm目录,首先修改src/3rdparty/freetype/include/freetype/config/ftconfig.h文件,将第330行修改为:"orr %0, %0,%2, lsl #16\n\t" /* %0 |= %2 << 16 */。
修改完成后开始配置configure,具体命令为:
# ./configure -qt-kbd-tty -qt-gfx-linuxfb -no-gfx-transformed -no-gfx-multiscreen -qt-mouse-pc -no-gfx-qvfb -no-gfx-vnc -qt-kbd-tty -qt-gfx-linuxfb -no-gfx-qvfb -no-gfx-vnc -qt-mouse-tslib -no-glib -prefix /usr/local/ QT/E4.6.3-arm -embedded arm -release -shared -fast -no-largefile -qt-sql-sqlite -no-qt3support -no-xmlpatterns -no-mmx -no-3dnow -no-sse -no-sse2 -no-svg -no-webkit -qt-zlib -qt-gif -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -make libs -nomake tools -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-g++ -little-endian -qt-freetype -depths 16,18 -I/usr/local/tslib/include -L/usr/local/tslib/lib -v -D__ARM_ARCH_5TEJ__
命令写好后按下回车,然后再输入O回车、输入yes回车,然后configure就开始配置生成Makefile,配置成功后会有一个提示,然后就可以根据系统的提示进行编译安装了,具体命令为:
# make
# make install
5.环境变量的设置
由于我们有两种不同架构的QT/E,为了使用方便不与混淆,所以我们使用脚本设置环境变量的方法。
(1)QT/E4.6.3-x86环境变量设置
QTEDIR=/usr/local/QT/E4.6.3-x86
PATH=/usr/local/QT/E4.6.3-x86/bin:$PATH
LD_LIBRARY_PATH=/usr/local/QT/E4.6.3-x86/lib:$LD_LIBRARY_PATH
(2)QT/E4.6.3-arm环境变量设置
QTEDIR=/usr/local/QT/E4.6.3-arm
PATH=/usr/local/QT/E4.6.3-arm/bin:$PATH
LD_LIBRARY_PATH=/usr/local/QT/E4.6.3-arm/lib:$LD_LIBRARY_PATH
至此QT/E开发环境的建立全部成功。
第五章 KTV点播系统设计
5.1 SQLite数据库
数据库几乎是每个较大的软件所必须应用的,而在Qt中也使用QtSql模块实现了对数据库的完美支持。
5.1.1 SQLite数据库简介
SQLite顾名思议是以SQL为基础的数据库软件,SQL是一套强大的数据库语言,主要概念是由数据库、资料表(table)、查询指令(queries)等单元组成的关联性数据库。因为SQL的查询功能强大,语法一致而入门容易,因此成为现今主流数据库的标准语言。
5.1.2 SQLite数据库的操作
启动sqlite3程序,仅仅需要敲入带有SQLite数据库名字的"sqlite3"命令即可。如果文件不存在,则创建一个新的(数据库)文件。然后sqlite3程序将提示你输入SQL。敲入SQL语句(以分号“;”结束),敲回车键之后,SQL语句就会执行。现在在Linux的终端下建立KTV音乐点播系统所需的数据库。
sqlite> create table song(歌名 vchar,歌手 vchar);
sqlite> create table playlist(歌名 vchar,歌手 vchar);
sqlite> insert into song values('逍遥叹','胡歌');
如表5.1所示,表song中存放了我们KTV点播系统所需的歌曲名称以及对应的歌手名称等信息,表playlist则为空,作用是为了我们的系统运行后存放用户所点播的歌曲信息。这些数据都存放在ktv.db文件中(如表5.2 所示为数据字典),程序运行后就可以通过相应的SQL语言来操作这个数据库文件,达到数据的读取和存放的目的。
表5.1 song和 playlist数据表模型
序号
歌名
歌手
1
逍遥叹
胡歌
表5.2数据字典
字段名
类型
功能
序号
Int
系统编号
歌名
vchar
查询关键字
歌手
vchar
歌手姓名
5.1.3 Qt程序中对SQLite的操作
在使用QT编程中同样可以使用QT的机制来操作SQLite数据库,以下QT的语句就实现了同前面在命令行中操作一样的效果:
static bool createConnection()
{
//创建数据库链接函数
QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("ktv.db");
if (!db.open()) return false;
QSqlQuery query;
query.exec(QObject::tr("create table song(歌名 vchar,歌手 vchar)"));
… …
return true;
}
其中QSqlDatabase类实现了数据库连接的操作,QSqlQuery类用来执行SQL语句。
5.2 使用Qt Creator 进行系统开发
5.2.1 熟悉Qt Creator IDE
Qt应用程序除了使用手工编写代码的方式外,还可以用过Qt Creator来完成,Qt Creator的功能十分强大,而且还提供了大量可供编程使用的组件。如图5.1所示是在Linux环境下打开后的第一屏显示的主界面,通过这个界面我们可以对Qt Creator的开发环境有一个大概的了解,下面我们就使用它来开发我们的KTV点播系统。
图5.1 Qt Creator主界面
5.2.2 使用Qt Creator 建立工程
打开Qt Creator,然后在点击File菜单选中子菜单项中的第一个New File or Project进行创建工程,工程文件以及其他代码文件都放在了你所指定的路径下。
5.2.3 设计界面
使用Qt Creator完成工程的创建后首先是设计界面,如图5.2所示为系统的界面,界面中包括了Table View、Push Button、Line Edit、Lable等部件。
图5.2 系统主界面
5.2.4 程序代码的编写
程序中用到了SQLite数据库,所以首先需要创建一个关于数据库的创建和链接的头文件,文件名为database.h,然后将源文件修改为以下内容:
static bool createConnection()
{
//创建数据库链接函数
QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("ktv.db");
if (!db.open()) return false;
QSqlQuery query;
query.exec(QObject::tr("create table song(歌名 vchar,歌手 vchar)"));
… …
return true;
}
内容修改完成后,打开工程文件在文件的最后添加一行关于使用数据库的声明,内容如下:
QT +=sql
最后是对程序的构造以及功能的实现做工作,这一步是最麻烦也是最费时间的一步,首先是编写构造函数、然后是析构函数、最后各个信号与槽的链接以及实现代码的编写,至此代码的初步编写工作完成。
5.2.5 程序调试以及修改
界面设计、代码编写完成后,就需要对程序进行功能调试以及修改,这一步也是非常的费时间中间可能还会牵扯到一些技术难题,所以在这一步一定要仔细认真,如图5.3所示为系统运行后的主界面。
图5.3 系统运行后的主界面
5.2.6 KTV点播系统的功能测试
打开主界面后,点击你想要听的歌曲(这里我们选择逍遥叹)系统就会自动将歌曲添加到已选列表内并且开始自动播放,如图5.4所示正在播放所选的歌曲。
图5.4 播放选择的歌曲
如果我们不想K当前的歌曲,就可以点击关闭播放按钮关闭当前的播放,然后我们还可以删除已选列表中的歌曲重新添加,这里我们删除逍遥叹并重新添加喜欢的歌曲,然后单击播放列表按钮就开始了播放,我们就可以享受K歌带来的乐趣了,如图5.5所示。
图5.5 播放列表中的歌曲
用户添加的列表可以循环播放,直到用户删除重新添加。另外在播放的过程中用户如果想更换列表中的其他歌曲只需要双击想要听的歌曲即可,这里我们将歌曲更改为守护者,如图5.6所示。
图5.6 更改正在播放的歌曲
最后还有一个重要的功能就是可以实现手工输入歌曲名实现查找,这个功能能够方便用户快速找到喜欢的歌曲,不在寻找中浪费时间,而是把更多的时间用到欣赏歌曲上,比如这里我们想要听星月神话,我们就可以在输入歌曲名的后面的文本框中输入星月神话,然后点击查找,如图5.7所示。
图5.7 系统的查找功能
这样我们就可以将查找到的歌曲加入已选列表播放了,最后需要说明的是在我们的系统运行过程中MV的视屏就可以通过双击播放器的标题栏进入全屏欣赏模式。最后如果我们想关闭系统就可以直接点击主界面上的推出按钮就可以快速的退出系统了,我上面的测试只是程序大概的运行情况以及各种功能的介绍,同时我们的程序功能测试也完成了。虽然我们的系统功能很简单而且界面也不怎么美观,同时也是本着操作简单、方便相结合的原则而设计的。但是我们会不断的去努力,去学习,同时通过参加这次大赛让我们每一个参赛队员都对嵌入式有了一个新的认识,并且同时也学到了很多东西,在此非常的感谢博创公司给我们提供的这一个交流学习的平台,同时我们也要感谢我们的指导老师每天辛苦的陪着我们给我们指导、帮助以及支持。
5.3 MPlayer播放器
5.3.1 MPlayer简介
MPlayer是Linux上的电影播放器,它的功能十分强大,能够播放众多格式的文件,在X86 PC机上运行很稳定,也可以把它移植到非X86CPU上的嵌入式系统中来。
5.3.2 MPlayer播放器的架构
MPlayer播放器分为4层:输入层、分流层、解码层、输出层。输入层( input layer) :该层包含读取媒体文件模块,该模块将媒体文件的媒体数据按流的方式读入,并存放于数据缓冲区,通过解析文件头来判断该数据流属于何种音频、视频格式的文件。MPlayer的逻辑结构图分流层:包含分流器功能模块,该模块MPlayer逻辑结构分为通过分析文件头来判断音频和视频在该段数据中的位置,然后对其进行音、视频分离,存入各自的缓冲区。同时,提取时间戳( PTS, P
展开阅读全文