基于qt的音频管理系统的设计与实现_第1页
基于qt的音频管理系统的设计与实现_第2页
基于qt的音频管理系统的设计与实现_第3页
基于qt的音频管理系统的设计与实现_第4页
基于qt的音频管理系统的设计与实现_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于QT的音频管理系统的设计与实现摘要随着互联网的的发展,PC机已经不能满足终端用户对音频的需要。虽然目前有各种各样的计算机操作系统,如WINDOWS,LINUX,UNIX,MACOS等以及各种移动开发平台,如ANDROID,BLACKBERRYOS,IOS,WINDOWSMOBILE,WINDOWSPHONE,PALM等,不同的操作系统需要不同的系统软件来开发对应的应用程序。同样的功能,却要开发多次,这给程序员带来了冗余的工作量。本文以QT为基础,对音频管理系统的实际设计情况进行了需求分析,利用软件工程的开发流程及面向对象的思想,构建了音频管理系统的总体框架,为最终音频管理系统的实现提供了理论依据。测试结果表明,基于QT的音频管理系统可以在WIN7的QT52中运行,也可以在UBUNTU的QT52中运行,代码只需做微小的调整,减轻程序员的代码量,节省开发成本,为未来的开发提供一个重要的参考。关键词QT;音频管理系统;设计;实现DESIGNANDIMPLEMENTATIONOFAUDIOMANAGEMENTSYSTEMBASEDONQTABSTRACTWITHTHEDEVELOPMENTOFTHEINTERNET,THEPCHASBEENUNABLETOMEETTHENEEDSOFTHEAUDIOTERMINALUSERDESPITEVARIOUSOFCOMPUTEROPERATINGSYSTEM,SUCHASWINDOWS,LINUX,UNIX,MACOSETC,ANDVARIOUSOFMOBILEDEVELOPMENTPLATFORM,SUCHASANDROID,BLACKBERRY,OS,IOS,WINDOWSMOBILE,WINDOWSPHONE,PALMETC,DIFFERENTOPERATINGSYSTEMSREQUIREDIFFERENTSOFTWARESYSTEMSTODEVELOPTHECORRESPONDINGAPPLICATIONTHESAMEFUNCTIONNEEDSTODEVELOPSEVERALTIMES,WHICHBRINGSREDUNDANTWORKFORTHEPROGRAMMERTHISPAPER,BASEDONTHEQT,CARRYINGONTHEDEMANDANALYSISOFTHEACTUALDESIGNOFTHEAUDIOMANAGEMENTSYSTEM,USINGTHEDEVELOPMENTPROCESSOFSOFTWAREENGINEERINGANDOBJECTORIENTEDIDEA,CONSTRUCTINGTHEGENERALFRAMEWORKOFAUDIOMANAGEMENTSYSTEM,ANDPROVIDESATHEORETICALBASISFORTHEIMPLEMENTATIONOFTHEFINALAUDIOMANAGEMENTSYSTEMFINALLYTHETESTRESULTSSHOWTHATQTAUDIOMANAGEMENTSYSTEMCANRUNINWIN7BASEDONTHEQT52ANDITCANALSORUNONUBUNTUQT52,THECODEONLYMINORADJUSTMENTS,REDUCINGTHEAMOUNTOFCODEPROGRAMMERS,SAVINGDEVELOPMENTCOSTS,PROVIDINGANIMPORTANTREFERENCEFORFUTUREDEVELOPMENTKEYWORDSQTAUDIOMANAGEMENTSYSTEMDESIGNIMPLEMENTATION目录摘要IABSTRACTII1绪论111开发背景112系统目标113基于QT程序的音频管理系统的设计的必要性12关键技术介绍321音频编码的简单概念3211采样率和采样大小3212有损和无损3213音频压缩技术3214频率和采样率3215流特征422音频编码4221PCM编码4222WAV4223MP34224OGG编码5225MP3PRO编码5226ACC格式523音频解析5231MP3文件解析5232WMA文件解析7233OGG文件的解析824QT的事件模型8241事件的概念9242事件的创建9243事件的交付9244事件循环模型9245自定义事件1025QT核心机制信号与槽10251信号10252槽11253信号与槽的关联113需求分析1231需求概述1232系统用例图1233系统关键领域类134系统设计1441系统介绍1442主要功能1443系统总体模块14431系统总体模块介绍14432系统层次图1544系统界面模块介绍15441主页面15442以演唱者分类,显示演唱者所对应的歌曲名16443以专辑名称分类,显示该专辑所对应的歌曲名16444播放列表17445播放控制相关按钮17446播放进度条17447打开按钮1745系统功能模块划分17451音频文件管理18452播放控制18453播放列表1946系统开发环境195系统实现2051树形结构显示20511主要相关代码及说明20512关键技术应用中问题的解决2252播放列表22521主要相关代码及说明22522功能实现2653读取MP3音频文件26531主要相关代码26532写代码时的思路依据2954播放控制29541主要相关功能的部分代码29542媒体对象状态的简单介绍3455播放进度条34551主要相关功能的部分代码346系统测试3761测试的意义3762测试方法3763测试过程3764单元测试3865测试总结38参考文献40致谢41外文原文42外文翻译551绪论11开发背景QT是1991年奇趣科技(TROLLTECH)开发的一个跨平台的C图形用户界面应用程序框架3,9。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。QT很容易扩展,并且允许真正地组件编程。2012年,QT被DIGIA收购,之后发布QT51、52版本,提供QTFORANDROIDALPHA、QTFORIOS。QT的优势在于,良好的可移植性,可支持大多数操作系统,如MICROSOFTWINDOWS7,LINUX,SOLARIS,SUNOS,HPUX,DIGITALUNIXOSF/1,TRU64,IRIX,FREEBSD,BSD/OS,SCO,AIX,OS390,QNX等等;面向对象,QT良好的封装机制使得QT模块化程度非常高,代码可重用性较好,很方便用户开发丰富的API,QT包含250个以上的C类,并且有相应的帮助文档;支持2D3D图形渲染,支持XML。QT针对嵌入式环境推出了QTEMBEEDED产品,QTEMBEDDED具有跨平台的特点,省掉了不少移植软件的功夫,用模块化设计,有弹性,QTEMBEDDED最小可以缩到800KB左右,最多可以长到3MB(FORINTELX86),使得QTEMBEDDED更适合在嵌入式环境下生存1,58,1011。基于QT跨平台的图形用户界面应用程序框架,用的是C开发语言。C语言简洁灵活,运算符的数据结构丰富、具有结构化控制语句、程序执行效率高,而且同时具有高级语言与汇编语言的优点,与其它语言相比,C语言具有可以直接访问物理地址的优点,与汇编语言相比又具有良好的可读性的可移植性。总得来说,C语言的主要特点表现在两个方面,一是尽量兼容C,二是支持面向对象的方法。它操持了C的简洁、高效的接近汇编语言等特点,对C的类型系统进行了改革的扩充,因此C比C更安全,C的编译系统能检查出更多的类型错误。另外,由于C语言的广泛使用,因而极大的促进了C的普及和推广。C语言最有意义的方面是支持面向对象的特征。虽然与C的兼容使得C具有双重特点,但他在概念上完全与C不同,更具面向对象的特征。智能家居等将是一个发展的趋势,嵌入式产品也必将走入千家万户。而目前PC机的音频管理软件占用的磁盘空间以及内存较大所以基于QT的音频管理系统的设计与实现有很重要的意义。基于这种形式的把握,也基于对这种技术的学习与理解,我选择了这个课题。对音频解码技术进行研究,有助于理解其内在的原理,能够帮助我们更好的实现代码功能。12系统目标系统开发的总任务是设计并实现一个音频管理系统。通过本系统可以添加音频文件,以演唱者管理音频文件,以专辑管理音频文件2,4。你可以有一个播放列表,方便用户知道系统中有哪些音乐文件。当然了有播放列表,就要有播放功能。选中歌曲,用户可以点击播放按钮,播放音乐文件。当然有相应的控制功能,上一曲,下一曲。基本的音量控制,音量的高低调节,静音功能。13基于QT程序的音频管理系统的设计的必要性随着计算机技术、电子技术和通信技术的迅猛发展,嵌入式系统已经成为最热门、最有前途的IT应用领域之一,成为通讯和消费产品的共同发展方向。它广泛应用于人们在工作生活的各个方面,几乎包括了所有的电器设备。在嵌入式技术快速发展的同时,嵌入式音频设备已然成为当今人类生活中的热点。对于这些音乐文件的管理也将成为程序员考虑的重点。各种设备中的操作系统的种类不同,程序员在开发的时候总是要做重复的工作,不能把工作的重点放在设计上。基于QT的平台正好给大家提供了一个这样的平台。代码不需要太多的改动,就可以运行在各种操作系统上。而且QT是基于模块的设计思想,只需要加载你所需要的模块,符合嵌入式定制性强,模块简单的特点。所以基于QT的音频管理系统非常的设计与实现非常必要。本系统主要基于QT跨平台的图形用户界面应用程序框架,用的是C开发语言,当前的计算机硬件配置也完全能满足开发的需求,因此在技术上是绝对可行的。软件方面由于目前单机模式相对发展成熟,故软件的开发平台成熟可行,它们速度快、容量大、可靠性能高、价格低,完全能满足系统的需求。2关键技术介绍21音频编码的简单概念211采样率和采样大小声音其实是一种能量波,因此也有频率和振幅的特征,频率对应于时间轴线,振幅对应于电平轴线。波是无限光滑的,弦线可以看成由无数点组成,由于存储空间是相对有限的,数字编码过程中,必须对弦线的点进行采样。采样的过程就是抽取某点的频率值,很显然,在一秒中内抽取的点越多,获取得频率信息更丰富,为了复原波形,一次振动中,必须有2个点的采样,人耳能够感觉到的最高频率为20KHZ,因此要满足人耳的听觉要求,则需要至少每秒进行40K次采样,用40KHZ表达,这个40KHZ就是采样率。采样率和采样大小的值越大,记录的波形更接近原始信号。212有损和无损根据采样率和采样大小可以得知,相对自然界的信号,音频编码最多只能做到无限接近,至少目前的技术只能这样了,相对自然界的信号,任何数字音频编码方案都是有损的,因为无法完全还原。在计算机应用中,能够达到最高保真水平的就是PCM编码,被广泛用于素材保存及音乐欣赏,CD、DVD以及我们常见的WAV文件中均有应用。因此,PCM约定俗成了无损编码,因为PCM代表了数字音频中最佳的保真水准,并不意味着PCM就能够确保信号绝对保真,PCM也只能做到最大程度的无限接近。我们而习惯性的把MP3列入有损音频编码范畴,是相对PCM编码的。213音频压缩技术PCM音频流的码率,采样率值采样大小值声道数BPS。一个采样率为441KHZ,采样大小为16BIT,双声道的PCM编码的WAV文件,它的数据速率则为441K16214112KBPS。我们常说128K的MP3,对应的WAV的参数,就是这个14112KBPS,这个参数也被称为数据带宽,它和ADSL中的带宽是一个概念。将码率除以8,就可以得到这个WAV的数据速率,即1764KB/S。这表示存储一秒钟采样率为441KHZ,采样大小为16BIT,双声道的PCM编码的音频信号,需要1764KB的空间,1分钟则约为1034M,这对大部分用户是不可接受的,尤其是喜欢在电脑上听音乐的朋友,要降低磁盘占用,只有2种方法,降低采样指标或者压缩。降低指标是不可取的,各种音频压缩编码所达到的音质和压缩比都不一样。214频率和采样率采样率表示了每秒对原始信号采样的次数,我们常见到的音频文件采样率多为441KHZ,假设我们有2段正弦波信号,分别为20HZ和20KHZ,长度均为一秒钟,以对应我们能听到的最低频和最高频,分别对这两段信号进行40KHZ的采样,结果是20HZ的信号每次振动被采样了40K/202000次,而20K的信号每次振动只有2次采样。显然,在相同的采样率下,记录低频的信息远比高频的详细。这也是CD数码声不够真实的原因,CD的441KHZ采样也无法保证高频信号被较好记录。要较好的记录高频信号,看来需要更高的采样率,在捕捉CD音轨的时候使用48KHZ的采样率,这是不可取的这其实对音质没有任何好处,对抓轨软件来说,保持和CD提供的441KHZ一样的采样率才是最佳音质的保证之一,而不是去提高它。较高的采样率只有相对模拟信号的时候才有用,如果被采样的信号是数字的,不要去尝试提高采样率。215流特征随着网络的发展,人们对在线收听音乐提出了要求,因此也要求音频文件能够一边读一边播放,而不需要把这个文件全部读出后然后回放,这样就可以做到不用下载就可以实现收听了。也可以做到一边编码一边播放,正是这种特征,可以实现在线的直播,架设自己的数字广播电台成为了现实。22音频编码221PCM编码PCM脉冲编码调制是PULSECODEMODULATION的缩写。我们不需要关心PCM最终编码采用的是什么计算方式,我们只需要知道PCM编码的音频流的优点和缺点就可以了。PCM编码的最大的优点就是音质好,最大的缺点就是体积大。我们常见的AUDIOCD就采用了PCM编码,一张光盘的容量只能容纳72分钟的音乐信息。222WAV这是一种古老的音频文件格式,由微软开发。WAV是一种文件格式,符合RIFFRESOURCEINTERCHANGEFILEFORMAT规范。所有的WAV都有一个文件头,这个文件头包含了音频流的编码参数。WAV对音频流的编码没有硬性规定,除了PCM之外,还有几乎所有支持ACM规范的编码都可以为WAV的音频流进行编码。WAV可以使用多种音频编码来压缩其音频流,不过我们常见的都是音频流被PCM编码处理的WAV,但这不表示WAV只能使用PCM编码,MP3编码同样也可以运用在WAV中,只要安装好了相应的DECODE,就可以欣赏这些WAV了。在WINDOWS平台下,基于PCM编码的WAV是被支持得最好的音频格式,所有音频软件都能完美支持,由于本身可以达到较高的音质的要求,因此,WAV也是音乐编辑创作的首选格式,适合保存音乐素材。因此,基于PCM编码的WAV被作为了一种中介的格式,常常使用在其他编码的相互转换之中,例如MP3转换成WMA。223MP3MP3作为目前最为普及的音频压缩格式,为大家所大量接受,各种与MP3相关的软件产品层出不穷,而且更多的硬件产品也开始支持MP3,我们能够买到的VCD/DVD播放机都很多都能够支持MP3,还有更多的便携的MP3播放器等等,虽然几大音乐商极其反感这种开放的格式,但也无法阻止这种音频压缩的格式的生存与流传。MP3发展已经有10个年头了,他是MPEGMPEGMOVINGPICTUREEXPERTSGROUPAUDIOLAYER3的简称,是MPEG1的衍生编码方案,1993年由德国FRAUNHOFERIIS研究院和汤姆生公司合作发展成功。MP3可以做到121的惊人压缩比并保持基本可听的音质,在当年硬盘天价的日子里,MP3迅速被用户接受,随着网络的普及,MP3被数以亿计的用户接受。MP3编码技术的发布之初其实是非常不完善的,由于缺乏对声音和人耳听觉的研究,早期的MP3编码器几乎全是以粗暴方式来编码,音质破坏严重。随着新技术的不断导入,MP3编码技术一次一次的被改良,其中有2次重大技术上的改进。224OGG编码OGGVORBIS的音频编码,OGG是一个庞大的多媒体开发计划的项目名称,将涉及视频音频等方面的编码开发。整个OGG项目计划的目的就是向任何人提供完全免费多媒体编码方案。OGG的信念就是OPEN,FREE,VORBIS。这几个个词汇成为了OGG项目中音频编码的正式命名。目前VORBIS已经开发成功,并且开发出了编码器。OGGVORBIS是高质量的音频编码方案,官方数据显示OGGVORBIS可以在相对较低的数据速率下实现比MP3更好的音质。OGGVORBIS这种编码也远比90年代开发成功的MP3先进,她可以支持多个声道,这意味着OGGVORBIS在SACD、DTSCD、DVDAUDIO抓轨软件的支持下,可以对所有的声道进行编码,而不是MP3只能编码2个声道。多声道音乐的兴起,给音乐欣赏带来了革命性的变化,尤其在欣赏交响时,会带来更多临场感。这场革命性的变化是MP3无法适应的。和MP3一样,OGGVORBIS是一种灵活开放的音频编码,能够在编码方案已经固定下来后还能对音质进行明显的调节和新算法的改良。因此,它的声音质量将会越来越好,和MP3相似,OGGVORBIS更像一个音频编码框架,可以不断导入新技术逐步完善。和MP3一样,OGG也支持VBR。225MP3PRO编码MP3PRO并不是一种全新的格式,完全是基于传统MP3编码技术的一种改良,本身最大的技术亮点就在于SBR(SPECTRALBANDREPLICATION频段复制),这是一种新的音频编码增强算法。它提供了改善低位率情况下音频和语音编码的性能的可能。这种方法可在指定的位率下增加音频的带宽或改善编码效率。SBR最大的优势就是在低数据速率下实现非常高效的编码,与传统的编码技术不同的是,SBR更像是一种后处理技术,因此解码器的算法的优劣直接影响到音质的好坏。高频实际上是由解码器(播放器)产生的,SBR编码的数据更像是一种产生高频的命令集,或者称为指导性的信号源。MP3PRO其实是一种MP3信号流和SBR信号流的混合数据流编码。SBR技术可以改善低数据流量下的高频音质,改善程度约为30,这种改善可以让64KBPS的MP3达到128KBPS的MP3的音质水平。226ACC格式AAC(高级音频编码技术,ADAVANCEDAUDIOCODING)是杜比实验室为音乐社区提供的技术。AAC号称最大能容纳48通道的音轨,采样率达96KHZ,并且在320KBPS的数据速率下能为51声道音乐提供相当于ITUR广播的品质。和MP3比起来,它的音质比较好,它能够节省大余额30的存储空间与带宽。它是遵循MPEG2的规格所开发的技术。23音频解析231MP3文件解析MP3的文件格式称为ID3,一般是位于一个MP3文件的开头或末尾的若干字节内,附加了关于该MP3的歌手,标题,专辑名称,年代,风格等信息,该信息就被称为ID3信息,ID3信息分为两个版本,V1和V2版。其中V1版的ID3在MP3文件的末尾128字节,以TAG三个字符开头,后面跟上歌曲信息。其中流派一共定义了79种。V2版一般位于MP3的开头,可以存储歌词,该专辑的图片等大容量的信息。ID3V2一共有4个版本,但流行的播放软件一般只支持第3版,即ID3V23。由于ID3V1记录在MP3文件的末尾,ID3V2就只好记录在MP3文件的首部了。也正是由于这个原因,对ID3V2的操作比ID3V1要慢。而且ID3V2结构比ID3V1的结构要复杂得多,但比前者全面且可以伸缩和扩展。ID3V1比较简单,它是存放在MP3文件的末尾,用16进制的编辑器打开一个MP3文件,查看其末尾的128个顺序存放字节,数据结构定义如下CHARHEADER3/标签头必须是“TAG“否则认为没有标签/CHARTITLE30/标题/CHARARTIST30/作者/CHARALBUM30/专集/CHARYEAR4/出品年代/CHARCOMMENT30/备注/CHARGENRE/类型/ID3V1的各项信息都是顺序存放,没有任何标识将其分开,比如标题信息不足30个字节,则使用0补足,否则将造成信息错误。GENRE使用原码表示,对照表如下/STANDARDGENRES/0“BLUES“1“CLASSICROCK“2“COUNTRY“3“DANCE“4“DISCO“5“FUNK“6“GRUNGE“7“HIPHOP“8“JAZZ“9“METAL“10“NEWAGE“11“OLDIES“12“OTHER“13“POP“14“R15“RAP“16“REGGAE“17“ROCK“18“TECHNO“19“INDUSTRIAL“20“ALTERNATIVE“21“SKA“22“DEATHMETAL“23“PRANKS“24“SOUNDTRACK“25“EUROTECHNO“26“AMBIENT“27“TRIPHOP“28“VOCAL“29“JAZZFUNK“30“FUSION“31“TRANCE“32“CLASSICAL“33“INSTRUMENTAL“34“ACID“35“HOUSE“36“GAME“37“SOUNDCLIP“38“GOSPEL“39“NOISE“40“ALTERNROCK“41“BASS“42“SOUL“43“PUNK“44“SPACE“45“MEDITATIVE“46“INSTRUMENTALPOP“47“INSTRUMENTALROCK“48“ETHNIC“49“GOTHIC“50“DARKWAVE“51“TECHNOINDUSTRIAL“52“ELECTRONIC“53“POPFOLK“54“EURODANCE“55“DREAM“56“SOUTHERNROCK“57“COMEDY“58“CULT“59“GANGSTA“60“TOP40“61“CHRISTIANRAP“62“POP/FUNK“63“JUNGLE“64“NATIVEAMERICAN“65“CABARET“66“NEWWAVE“67“PSYCHADELIC“68“RAVE“69“SHOWTUNES“70“TRAILER“71“LOFI“72“TRIBAL“73“ACIDPUNK“74“ACIDJAZZ“75“POLKA“76“RETRO“77“MUSICAL“78“ROCK79“HARDROCK“/EXTENDEDGENRES/80“FOLK“81“FOLKROCK“82“NATIONALFOLK“83“SWING“84“FASTFUSION“85“BEBOB“86“LATIN“87“REVIVAL“88“CELTIC“89“BLUEGRASS“90“AVANTGARDE“91“GOTHICROCK“92“PROGESSIVEROCK“93“PSYCHEDELICROCK“94“SYMPHONICROCK“95“SLOWROCK“96“BIGBAND“97“CHORUS“98“EASYLISTENING“99“ACOUSTIC“100“HUMOUR“101“SPEECH“102“CHANSON“103“OPERA“104“CHAMBERMUSIC“105“SONATA“106“SYMPHONY“107“BOOTYBASS“108“PRIMUS“109“PORNGROOVE“110“SATIRE“111“SLOWJAM“112“CLUB“113“TANGO“114“SAMBA“115“FOLKLORE“116“BALLAD“117“POWERBALLAD“118“RHYTHMICSOUL“119“FREESTYLE“120“DUET“121“PUNKROCK“122“DRUMSOLO“123“ACAPELLA“124“EUROHOUSE“125“DANCEHALL“126“GOA“127“DRUM128“CLUBHOUSE“129“HARDCORE“130“TERROR“131“INDIE“132“BRITPOP“133“NEGERPUNK“134“POLSKPUNK“135“BEAT“136“CHRISTIANGANGSTARAP“137“HEAVYMETAL“138“BLACKMETAL“139“CROSSOVER“140“CONTEMPORARYCHRISTIAN“141“CHRISTIANROCK“142“MERENGUE“143“SALSA“144“TRASHMETAL“145“ANIME“146“JPOP“147“SYNTHPOP“每个ID3V23的标签都由一个标签头和若干个标签帧或一个扩展标签头组成。关于曲目的信息如标题、作者等都存放在不同的标签帧中,扩展标签头和标签帧并不是必要的,但每个标签至少要有一个标签帧。标签头和标签帧一起顺序存放在MP3文件的首部。标签头在文件的首部顺序记录10个字节的ID3V23的头部。在文件的首部顺序记录10个字节的ID3V23的头部。数据结构如下CHARHEADER3/必须为“ID3“否则认为标签不存在/CHARVER/版本号ID3V23就记录03,ID3V24就记录04/CHARREVISION/副版本号此版本记录为00/CHARFLAG/存放标志的字节,这个版本只定义了三位,稍后详细解说/CHARSIZE4/标签大小,包括标签帧和扩展标签头。(不包括标签头的10个字节)/232WMA文件解析每一个WMA文件,它的头16个字节是固定的,为十六进制的“3026B2758E66CF11A6D900AA0062CE6C”,用来标识这个是否为WMA文件。接下来的8个字节为一个整数,表示整个WMA文件头部的大小,这个头部里面包含了TAG信息等所有非音频信息,头部后面的是音频信息。也就是说从文件开始偏移量为31开始,里面存放了很多帧,有我们需要的标准TAG信息,扩展TAG信息,WMA文件控制信息等等。每个帧不是等长的,但是帧头是固定的24个字节,其中前16字节是用来标识这个帧的名字,后8个字节是用来表示这个帧(包括帧头)的大小。这一点和MP3文件的ID3V2信息比较像。TAG信息分别保存在两个帧里,分别为标准TAG帧和扩展TAG帧。标准TAG帧只包含歌曲标题,艺术家,版权,备注四个内容。它的帧名是十六进制的“3326B2758E66CF11A6D900AA0062CE6C”,在24个字节的帧头后紧跟着5个分别为2个字节的整数,分别表示歌曲标题,艺术家,版权,备注,未知信息的大小,未知信息大部分情况下是不使用的,即它的大小为0的。在这10个字节后,这五个信息的内容就按顺序存放了。记住,在WMA文件里,所有的文字都是按UNICODE宽字符的编码方式储存的,而且每个字符串后面都有一个0X000X00结束字符的。扩展TAG帧里面包含的信息的个数是不确定的,每个信息也是按照像帧一样的方式组织起来的。扩展TAG帧的帧名是十六进制的“40A4D0D207E3D21197F000A0C95EA850”,在24字节的帧头HEADFLAG16,HEADSIZE8后先有一个两个字节的整数表示这个帧里一共有的扩展信息个数(EXNO)。紧接着是扩展信息。每一个扩展信息包含扩展信息名字大小(2字节)和对应的内容。先有一个两个字节的整数来表示扩展名字信息的大小,接着是扩展信息名称,然后有一个两个字节的整数标志(FLAG)。然后又是一个两个字节的整数,表示值的大小。接着就是这个值。当扩展信息名字为WMFSDKVERSION时,这个值表示的是这个WMA文件的版本;当扩展信息名字为WM/ALBUMTITLE时,这个值代表的就是专辑名;当扩展信息名字为WM/GENRE时,这个值代表的就是流派。很容易从扩展信息的名字看出这个值的用途。这些扩展信息的名字和值几乎都是用UNICODE的字符串来存储的,到现在为止只发现对下面两个情况例外。标志FLAG,只对WM/TRACKNUMBER和WM/TRACK这两个扩展信息名字有用,当FLAG为3的时候后面的值是以4个字节的整数的形式表示,当FLAG为0的时候,曲目信息是以普通的字符串形式表示的。WMA格式有一个帧全部都是0,相当于缓冲区。如果写入的歌名比原来长的话,就减少缓冲区大小,歌名短就增加缓冲区。这样就可以保持文件头的大小不变,每次更新的话只需要重写文件头,不需要重写音频数据。这6个字节其中前面4个字节为总标签帧数。233OGG文件的解析“OGG”意指一种文件格式,可以纳入各式各样自由和开放源代码的编解码器,包含音效、视频、文字(像字幕)与元数据的处理。在OGG的多媒体框架下,THEORA提供有损的图像层面,而通常用音乐导向的VORBIS编解码器作为音效层面。针对语音设计的压缩编解码器SPEEX和无损的音效压缩编解码器FLAC与OGGPCM也可能作为音效层面使用。OGG文件的组织形式,OGG是以页(PAGE)为单位将逻辑流组织链接起来,每个页都有PAGEHEADER和PAGEDATA。OGGPAGE页结构,每个页之间相互独立,都包含了各自应有的信息,页的大小是可变的,通常为4K8KB,最大值不能超过65307BYTES(2725525525565307)。OGG页头部结构,页标识ASCII字符,0X4FO0X67G0X67G0X53S,4个字节大小,它标识着一个页的开始。其作用是分离OGG封装格式还原媒体编码时识别新页的作用;版本ID一般当前版本默认为0,1个字节;HEADER_TYPE标识当前的页的类型,1个字节;GRANULE_POSITION媒体编码相关的参数信息,8个字节,对于音频流来说,它存储着到本页为止逻辑流在PCM输出中采样码的数目,可以由它来算得时间戳。对于视频流来说,它存储着到本页为止视频帧编码的数目。若此值为1,那表示截止到本页,逻辑流的PACKET未结束;SERIAL_NUMBER当前页中的流的ID,4个字节,它是区分本页所属逻辑流与其他逻辑流的序号,我们可以通过这个值来划分流。小端。PAGE_SEGUENCE本页在逻辑流的序号,4个字节。OGG解码器能据此识别有无页丢失;CRC_CBECKSUM循环冗余校验码校验和,4个字节,包含页的32BITCRC校验和(包括头部零CRC校验和页数据校验),它的产生多项式为0X04C11DB7;NUM_SEGMENTS给定本页在SEGMENT_TABLE域中出现的SEGEMENT个数,1个字节。其最大值为255页最大物理尺寸为65307BYTES,小于64KB;SEGMENT_TABLE从字面看它就是一个表,表示着每个SEGMENT的长度,取值范围是0255。由SEGMENT可以得到PACKET的值,每个PACKET的大小是以最后一个不等于255的SEGMENT结束的,从页头中的SEGMENT_TABLE可以得到每个PACKET长度。24QT的事件模型QT中的事件模型十分重要。241事件的概念应用程序对象将系统消息接收为QT事件。应用程序可以按照不同的粒度对事件加以监控、过滤并做出响应。在QT中,事件是指从QEVENT继承的对象。QT将事件发送给每个QOBJECT对象,这样对象便可对事件做出响应。也就是说,QT的事件处理机制主要是基于QEVENT类来实现的,QEVENT类是其他事件类的基类。当一个事件产生时,QT就会构造一个QEVENT子类的实例来表述该事件,然后将该事件发送到相应的对象上进行处理。编程人员可以对应用程序级别和对象级别中的事件进行监控和过滤。242事件的创建大多数事件是由窗口系统生成的,它们负责向应用程序通知相关的用户操作,例如按键、鼠标单击或者重新调整窗口大小。也可以从编程角度来模拟这类事件。在QT中大约有50多种事件类型,最常见的事件类型是报告鼠标活动、按键、重绘请求以及窗口处理操作。编程人员也可以添加自己的活动行为,类似于内建事件的事件类型。通常,接收方如果只知道按键了或者松开鼠标按钮了,这是不够的。例如,它还必须知道按的是哪个键,松开的是哪个鼠标按钮以及鼠标所在位置。每一QEVENT子类均提供事件类型的相关附加信息,因此每个事件处理器均可利用此信息采取相应处理。243事件的交付QT通过调用虚函数QOBJECTEVENT来交付事件。出于方便起见,QOBJECTEVENT会将大多数常见的事件类型转发给专门的处理函数,例如QWIDGETMOUSERELEASEEVENT和QWIDGETKEYPRESSEVENT。开发人员在编写自己的控件时,或者对现有控件进行定制时,可以轻松地重新实现这些处理函数。有些事件会立即发送,而另一些事件则需要排队等候,当控制权返回至QT事件循环时才会开始分发。QT使用排队来优化特定类型的事件。例如,QT会将多个PAINT事件压缩成一个事件,以便达到最大速度。通常,一个对象需要查看另一对象的事件,以便可以对事件做出响应或阻塞事件。这可以通过调用被监控对象的QOBJECTINSTALLEVENTFILTER函数来实现。实施监控对象的QOBJECTEVENTFILTER虚函数会在受监控的对象在接收事件之前被调用。另外,如果在应用程序的QAPPLICATION唯一实例中安装一个过滤器,则也可以过滤应用程序的全部事件。系统先调用这类过滤器,然后再调用任何窗体特定的过滤器。开发人员甚至还可以重新实现事件调度程序QAPPLICATIONNOTIFY,对整个事件交付过程进行全面控制。244事件循环模型QT通过调用虚函数QOBJECTEVENT来交付事件。处于方便起见,QOBJECTEVENT会将大多数的事件类型转发给专门的处理函数例如QWIDGETMOUSERELEASEEVENT和QWIDGETKEYPRESSEVENT。开发人员在编写自己的控件时,或者对现有控件进行定制时,可以轻松地重新实现这些处理函数。有些事件会立即发送,而另一些事件则需要排队等候,当控制权返回至QT事件循环时才会开始分发。QT使用排队来优化特定类型的事件。例如,QT会将多个PAINT事件压缩成一个事件,以便达到最大速度。通常,一个对象需要查看另一对象的事件,以便可以对事件做出响应或阻塞事件。这可以通过调用被监控对象的QOBJECTINSTALLEVENTFILTER函数来实现。实施监控对象的QOBJECTEVENTFILTER虚函数会在受监控的对象在接收事件之前被调用。另外,如果在应用程序的QAPPLICATION唯一实例中安装一个过滤器,则也可以过滤应用程序的全部事件。系统先调用这类过滤器,然后再调用任何窗体特定的过滤器。开发人员甚至还可以重新实现事件调度程序QAPPLICATIONNOTIFY,对整个事件交付过程进行全面控制。245自定义事件一般有下列5种方式可以用来处理和过滤事件,每种方式都有其使用条件和使用范围。重载PAINTEVENT、MOUSEPRESSEVENT等时间处理器EVENTHANDLER重新实现像MOUSEPRESSEVENT,KEYPRESSEVENT和PAINTEVENT这样的EVENTHANGDER是目前处理EVENT所采用的最常见的方法。重载QCOREAPPLICATIONNOTIFY函数这种方式能够对事件处理进行完全控制。也就是说,当你需要在事件处理器EVENTHANDLER之前得到所有事件的话,就可以采用这个方法,但是这样一来,因为只有一个NOTIFY函数,所以每次只能有一个子类被激活。这与事件过滤器不同,因为后者可以有任意数目并且同时存在。在QCOREAPPLICATIONINSTANCE()上安装时间过滤器这样就可以处理所有部件上的所有事件,这和重载QCOREAPPLICATIONNOTIFY函数的效果是类似的。一旦一个EVENTFILTER被注册到QAPP,程序里发到其它对象的事件发到其它的EVENTFILTER之前,都要首先发到这个EVENTFILETER上。重载QOBJECTEVENT函数通过重新实现的EVENT函数,在事件到达特定部件的事件过滤器前处理TAB事件。需要注意的是,当重新实现某个子类的EVENT,需要调用基类的EVENT来处理不准备显示处理的情况。在选定对象上安装事件过滤器该对象继承自QOBJECT,这样就可以处理处理TAB和SHIFTTAB以外的所有事件。当对象用INSTALLEVENTFILTER注册之后,所有发送到该对象的事件都会经过监测它的EVENTFILTER()注册之后,所有发到该对象的事件都会先经过监测它的EVENTFILTER。如果该OBJECT同时安装了多个EVENTFILTER,那么这些FILTER会按照“后进先出”的规则依次被激活,及顺序是从最后安装的开始,到第一个被安装的为止。25QT核心机制信号与槽信号和槽机制是QT的核心机制之一,要掌握QT编程就需要对信号和槽有所了解。信号和槽是一种高级接口,它们被应用于对象之间的通信,它们是QT的核心特性,也是QT不同于其它同类工具包的重要地方之一。在我们所了解的其它GUI工具包中,窗口小部件WIDGET都有一个回调函数用于响应它们触发的动作,这个回调函数通常是一个指向某个函数的指针。在QT中用信号和槽取代了上述机制。251信号当对象的状态发生改变时,信号被某一个对象发射。只有定义过这个信号的类或者其派生类能够发射这个信号。当一个信号被发射时,与其相关联的槽将被执行,就像一个普通的函数调用一样。信号槽机制独立于任何GUI事件循环。只有当所有的槽正确返回以后,发射函数才返回。如果存在多个槽与某个信号相关联,那么,当这个信号被发射时,这些槽将会一个接一个地被执行,但是它们执行的顺序将会是不确定的,并且不能指定它们执行的顺序。信号的声明是在头文件中进行的,并且MOC工具会注意不要将信号定义在实现文件中。QT用SIGNALS关键字标识信号声明区,随后可声明自己的信号。252槽槽是普通的C成员函数,可以被正常调用,不同之处是它们可以与信号(SIGNAL)相关联。当与其关联的信号被发射时,这个槽就会被调用。槽可以有参数,但槽的参数不能有缺省值。槽也和普通成员函数一样有访问权限。槽的访问权限决定了谁可以和它相连。通常,槽也分为三种类型,即PUBLICSLOTS、PRIVATESLOTS和PROTECTEDSLOTS。PUBLICSLOTS在这个代码区段内声明的槽意味着任何对象都可将信号与之相连接。这对于组件编程来说非常有用你生成了许多对象,它们互相并不知道,把它们的信号和槽连接起来,这样信息就可以正确地传递,并且就像一个小孩子喜欢玩耍的铁路轨道上的火车模型,把它打开然后让它跑起来。PROTECTEDSLOTS在这个代码区段内声明的槽意味着当前类及其子类可以将信号与之相关联。这些槽只是类的实现的一部分,而不是它和外界的接口。PRIVATESLOTS在这个代码区段内声明的槽意味着只有类自己可以将信号与之相关联。这就是说这些槽和这个类是非常紧密的,甚至它的子类都没有获得连接权利这样的信任。通常,我们使用PUBLIC和PRIVATE声明槽是比较常见的,建议尽量不要使用PROTECTED关键字来修饰槽的属性。此外,槽也能够声明为虚函数。槽的声明也是在头文件中进行的。253信号与槽的关联槽和普通的C成员函数几乎是一样的,可以是虚函数;可以被重载;可以是公有的、保护的或是私有的,并且也可以被其它C成员函数直接调用;还有,它们的参数可以是任意类型。唯一不同的是槽还可以和信号连接在一起,在这种情况下,每当发射这个信号的时候,就会自动调用这个槽。一个信号可以连接多个槽;多个信号可以连接同一个槽;一个信号可以与另外一个信号相连接;连接可以被移除;信号成功连接到槽(或者连接到另外一个信号),它们的参数必须具有相同的顺序和相同的类型,如果信号的参数比它所连接的槽的参数多,那么多余的参数将会被简单的忽略掉。3需求分析31需求概述在需求分析阶段,我们采用UML建模,目的是捕捉系统的所有功能需求加以描述,同时建立模型,分析并提取所开发系统的各种可以模块化的功能以及描述它们的联系。音频管理系统的基本需求如下它是一个音频管理单机系统,打开一个文件加入到播放列表的同时将这些音乐文件分类。以演唱者分类,并且以演唱者作为树根节点,分列加入这个演唱者的歌曲。以专辑名称分类,以专辑名称作为树根节点,分列加入这个专辑的歌曲。加入到播放列表的歌曲可以实现基本的播放功能。播放/暂停功能。双击歌曲,可以播放歌曲。上一首/下一首。按播放列表歌曲的加入顺序,播放当前歌曲的上一曲和下一曲。停止。当前歌曲可以停止。播放进度条。播放进度条可以显示当前歌曲总的播放时间以及当前已播放的时间。拉动进度条可以实现快进功能。静音。点击声音的图标,点击按钮,实现静音。拉动音量滚动条,可以实现音量的控制。32系统用例图在本系统中,通过分析,可以确定只有一种角色,就是用户。这个角色执行的功能,也就是系统做需求分析时所定义的功能。系统用例图如图31所示。图31系统用例图33系统关键领域类本系统是按照功能划分实现的。根据系统的功能,列出系统中特定领域类。本系统中,通过系统用例分析可以发现,本系统主要有以下关键领域类,树形显示(歌手,专辑名称)类,播放列表类,播放控制类。系统中的一个功能亮点是管理。打开一个本地文件,加入到播放列表的同时对当前歌曲文件进行解析,以演唱者作为分类显示歌曲名,以树型显示比较清晰,可以达到管理的功能。同理,以专辑名称作为分类显示歌曲名也需要同样的方法。树形显示类抽象出来,可以节省代码,有利于功能的扩展。系统中的另外一个功能就是播放。播放控制,播放列表都用类抽象出来,把这些功能组合在一起,代码看起来更加的整齐,按照低耦合的标准,方便扩展。4系统设计41系统介绍用QT设计实现音频管理系统在我所接触到的资料中并不多见。本系统中实现了以演唱者分类管理歌曲名,以专辑名称分类管理歌曲名,音乐文件的播放,暂停,停止,上一首,下一首,静音,音量控制,播放进度。本系统是运用可视化编程工具QT开发的,界面美观大方,系统运行稳定。本系统可以运行于各种装有QT52版本的系统中。42主要功能本系统的功能划分如下以演唱者分类管理音乐文件系统可以根据打开的文件自动按照演唱者分类加入该演唱者对应的歌曲名。以专辑名称分类管理音乐文件系统可以根据打开的文件自动按照专辑名称分类加入该专辑对应的歌曲名。播放/暂停功能。双击播放列表,可以播放文件。选中播放列表中显示的歌曲名,单机播放按钮,也可以播放音频文件。停止功能。点击停止播放按钮,可以停止播放。上一首。点击上一首按钮,可以播放上一首歌曲。下一首。点击下一首按钮,可以播放下一首歌曲。静音。点击音量图标,实现静音功能。音量控制。拖动音量滑动条,实现音量控制。播放进度条功能。拖动播放进度条,实现快进。43系统总体模块431系统总体模块介绍系统按照两个模块来划分。系统界面模块和系统功能模块。系统界面模块就按照界面布局来介绍,艺术家以及其对应的音频文件显示,专辑名以及对应的音频文件显示,播放列表。每个艺术家都作为一个节点,艺术家的歌曲作为其子节点。每张专辑也可以作为一个节点,专辑的歌曲作为其子节点。这样用户可以清晰的看出本地系统中的音频文件。从系统中查找到的音频文件加入到播放列表中,双击播放列表中的歌曲名称可以播放音频文件。这三个小的模块都用于显示读取到的音频文件名称。尤其是系统的管理功能可以得到体现。此外还有打开按钮,播放控制以及播放进度条。系统功能模块按照功能划分音频文件管理功能,音频播放控制,播放列表,播放进度。432系统层次图44系统界面模块介绍441主页面系统只有一个页面。主页面要显示本地系统的相应信息。主页面中对各类信息按类型显示。主页面显示播放控制条,播放进度条,还有播放列表,分类显示框。最上面是播放进度条。播放进度条的右侧是播放的总时间和当前播放时间。中间这一层放置的是打开文件的按钮。打开文件按钮的右侧是播放

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论