VB课设MP3设计报告.docx
- 文档编号:9327639
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:55
- 大小:311.88KB
VB课设MP3设计报告.docx
《VB课设MP3设计报告.docx》由会员分享,可在线阅读,更多相关《VB课设MP3设计报告.docx(55页珍藏版)》请在冰豆网上搜索。
VB课设MP3设计报告
福建工程学院
VB课程设计
课题:
具有记忆功能的MP3播放器
班级:
电气1102
学号:
姓名:
同组组员:
指导老师:
黄旭红、;林挺钊、林丽
日期:
2014.5.30
一、设计的目的与要求
MP3播放器为多媒体播放器中的一大类,各类可在window上运行的MP3播放器软件也很多。
试开发一个具有记忆功能的MP3播放器软件,要求如下:
1.菜单式的人机界面。
2.该MP3播放器要具有如下功能:
(1)可手动添加、删除MP3文件;
(2)可打开、播放、暂停、停止;
(3)可以载入上一次播放列表;
(4)可以调节声音大小;
(5)可以循环播放。
二、准备工作
在开始做课程设计项目前,应回顾或复习的相关内容;需要的VB集成开发环境软件,以及项目牵涉到的哪些原理。
三、系统分析与项目的实现步骤
3.1、对于MP3播放器设计的个人分析、想法
3.1、对于MP3播放器设计的个人分析、想法
1.用过菜单编辑器编辑菜单式的人机界面,可设置弹出式菜单
2.使用MMC控件实现歌曲播放、暂停、停止
3.使用通用对话框实现打开
4.通过数据库记录歌曲全路径,再运行程序使加载到listbox,用listbox的相关属性和命令来实现对歌曲的添加删除,循环播放,可添加清除功能清除所有歌曲以及随机播放功能
5.声音的调节通过使用API函数来实现,可以扩展设置静音
系统的功能结构
1.用过菜单编辑器编辑菜单式的人机界面,可设置弹出式菜单,有添加删除清除三个项目
2.利用mci命令,api函数实现歌曲播放、暂停、停止,歌曲播放进度等操作
3.使用通用对话框实现打开文件功能,打开后自动
4.通过mic命令获取mp3文件的位置,通过两个listbox控件,一个隐藏的加载mp3文件全路径,一个显示的保存歌曲名和演唱者(通过对mp3文件获取信息和路径的相关处理得到歌曲名,演唱者)。
两个list的数据一一对应。
用于使得循环播放添加删除功能得以实现
5.声音的调节通过使用用mci命令来实现,可以扩展设置静音,主要利用按钮给出调节声音的指令
3.4.1设计涉及的一些基本知识介绍
1.MP3文件格式简介
MovingPictureExpertsGroupAudioLayerIII(MPEG-1AudioLayer3,动态图像专家压缩标准音频层面3),经常称为MP3,是当今较流行的一种数字音频编码和有损压缩格式,它设计用来大幅度地降低音频数据量,而对于大多数用户的听觉感受来说,重放的音质与最初的不压缩音频相比没有明显的下降。
它是在1991年,由位于德国埃尔朗根的研究组织Fraunhofer-Gesellschaft的一组工程师发明和标准化的。
MP3是一个数据压缩格式。
它舍弃脉冲编码调制(PCM)音频数据中,对人类听觉不重要的数据(类似于JPEG是一个有损图像压缩),从而达到了压缩成小得多的文件大小。
MP3中使用了许多技术,其中包括心理声学,以确定音频的哪一部分可以丢弃。
MP3音频可以按照不同的比特率进行压缩,提供了权衡数据大小和音质之间的依据。
(1)、MP3文件结构
MP3文件大体分为三部分:
TAG_V2(ID3V2),Frame,TAG_V1(ID3V1)
(2)ID3V2
包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量。
(3)Frame
一系列的帧,个数由文件大小和帧长决定
每个FRAME的长度可能不固定,也可能固定,由位率bitrate决定
每个FRAME又分为帧头和数据实体两部分
帧头记录了mp3的位率,采样率,版本等信息,每个帧之间相互独立
(4)ID3V1
包含了作者,作曲,专辑等信息,长度为128BYTE。
(5). MP3帧格式
(6)帧头格式
帧头长4字节(若Protectionbit为1,则还要帧头最后添加16bits的校验位),对于固定位率的MP3文件,所有帧的帧头格式一样其数据结构如下:
typedefFrameHeader{
unsignedintsync:
11; //同步信息
unsignedintversion:
2; //版本
unsignedintlayer:
2; //层
unsignedinterrorprotection:
1; //CRC校验
unsignedintbitrate_index:
4; //位率
unsignedintsampling_frequency:
2; //采样频率
unsignedintpadding:
1; //帧长调节
unsignedintprivate:
1; //保留字
unsignedintmode:
2; //声道模式
unsignedintmodeextension:
2; //扩充模式
unsignedintcopyright:
1; //版权
unsignedintoriginal:
1; //原版标志
unsignedintemphasis:
2; //强调模式
}HEADER,*LPHEADER;
(7)MP3帧长取决于位率和频率,计算公式为:
.mpeg1.0 layer1:
帧长=(48000*bitrate)/sampling_freq+padding
layer2&3:
帧长=(144000*bitrate)/sampling_freq+padding
.mpeg2.0 layer1:
帧长=(24000*bitrate)/sampling_freq+padding
layer2&3:
帧长=(72000*bitrate)/sampling_freq+padding
2.API函数
操作系统除了协调应用程序的执行、内存分配、系统资源管理外,同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务是一个函数),可以帮肋应用程序达到开启视窗、描绘图形、使用周边设备的目的,由于这些函数服务的对象是应用程序(Application),所以称之为ApplicationProgrammingInterface,简称API函数。
3.MCI简介
MCI(MediaControlInterface,媒体控制接口)向Windows程序提供了在高层次上控制媒体设备接口的能力。
程序不必关心具体设备,就可以对激光唱机(CD)、视盘机、波形音频设备、视频播放设备和MIDI设备等媒体设备进行控制。
对于程序员来说,可以把MCI理解为设备面板上的一排按键,通过选择不同的按键(发送不同的MCI命令)可以让设备完成各种功能,而不必关心设备内部实现。
比如,对于play,视盘机和CD机有不同的反应(一个是播放视频,一个播放音频),而对用户来说却只需要按同一按钮。
应用程序通过向MCI发送命令来控制媒体设备。
MCI命令接口分命令字符串和命令消息两种,两者具有相同的功能。
命令字符串具有使用简单的特点,但是它的执行效率不如命令消息。
所有的MCI命令字符串都是通过多媒体API函数mciSendString传递给MCI的,该函数的声明为:
MCIERRORmciSendString(
LPCTSTRlpszCommand, //MCI命令字符串
LPTSTR lpszReturnString, //存放反馈信息的缓冲区
UINT cchReturn, //缓冲区的长度
HANDLE hwndCallback //回调窗口的句柄,一般为NULL
);//若成功则返回0,否则返回错误码。
该函数返回的错误码可以用mciGetErrorString函数进行分析,该函数的声明为:
BOOLmciGetErrorString(
DWORD fdwError, //函数mciSendString返回的错误码
LPTSTRlpszErrorText,//接收描述错误的字符串的缓冲区
UINT cchErrorText //缓冲区的长度
);
下面是使用mciSendString函数的一个简单例子:
charbuf[50];
MCIERRORmciError;
mciError=mciSendString("opencdaudio",buf,strlen(buf),NULL);
if(mciError)
{
mciGetErrorString(mciError,buf,strlen(buf));
AfxMessageBox(buf);
return;
}
opencdaudio命令打开CD播放器,如果出错(如驱动器内没有CD)则返回错误码,此时可以用mciGetErrorString函数取得错误信息字符串。
MCI命令
使用MCI设备一般包括打开、使用和关闭三个过程,常用的MCI命令有:
open 打开设备
close 关闭设备
play 开始设备播放
stop 停止设备的播放或记录
record 开始记录
save 保存设备内容
pause 暂停设备的播放或记录
resume 恢复暂停播放或记录的设备
seek 改变媒体的当前位置
capacility 查询设备能力
info 查询设备的信息
status 查询设备状态信息
MCI的大部分命令可以控制不同的媒体设备,但其中record和save命令并不是所有MCI设备都可以使用。
MCI命令的使用是很随意的,只要先打开,最后关闭,中间可以随意调用各种命令。
4、模块的使用
VB有3种类型的模块:
窗体模块,标准模块,类模块。
没一个模块都和一个文件相联系,3种模块对应着3中不同类型的文件。
窗体模块存放在扩展名为frm的文件中,标准模块存放在扩展名为bas的文件中,类模块存放在扩展名为cls的文件中。
三类模块说明如下:
1。
简单的程序只有一个模块,这时的程序的代码都存放在这个窗体模块中。
窗体模块是大多数vb程序的基础。
2。
对于复杂的程序可以增加窗体。
为了避免重复,可以将多个窗体都要用到的共同代码集中起来,存放在一个独立的模块中,这个独立的模块成为标准模块。
多个标准模块还可以构成一个模块库。
在标准模块的声名的public变量和常量是在整个工程有效的全局变量和常量。
3。
类模块是面向对象编程的基础。
用户可以使用类模块创建含有属性和方法的自己的对象。
窗体也是一种类模块,是一种可以显示窗体的模块,并且可以把控件拖放到窗体上。
一般的类模块和标准模块都没有可见的用户界面(窗体)。
4。
标准模块中数据的存活期和工程的存活期相同。
类模块中数据的存活期和类的对的存活期相同,随着该类对象的创建而创建,随着该类对象的消失而消失。
5。
当变量在标准模块中声名为public时,他在工程中的任何地方都是可见的(有效的)。
当变量在类模块中声明为public时,在模块外访问该变量是受到限制的,只能访问那些有引用的变量。
3.4.2、MP3播放器的设计原理
不使用控件,直接调用API的函数播放音乐,通过API函数的调用,执行MCI命令,实现播放,暂停,停止,等基本功能,通过添加类模块来实现相应的类模块的信息,在窗体或其他模块中通过定义可以引用,使用类的属性和方法。
通过创建一个文件来保存播放列表的信息,来实现,下一次打开时可以具有记忆功能。
3.4.3、MP3播放器的设计流程图
1.清除
可以将歌曲列表清空
程序如下
PrivateSubcls_Click()
DimiAsInteger,lastAsInteger
objPlay.StopMP3
last=lstPlay.ListCount-1
Fori=0Tolast
lstPlay.ListIndex=last-i
DelMP3
Nexti
EndSub
2.上一首,下一首
程序如下:
PrivateSubcmdPrev_Click()'上一首
IflPlayIndex=0Then'正在播放的是第1首
lstPlay.ListIndex=lstPlay.ListCount-1'选中最后一首
Else'否则向前一首
lstPlay.ListIndex=lPlayIndex-1'
EndIf
MP3Play
EndSub
PrivateSubcmdNext_Click()'下一首
IflPlayIndex=lstPlay.ListCount-1Then'播放的是最后一首
lstPlay.ListIndex=0'选中第1首
Else'播放的是位于中间的文件
lstPlay.ListIndex=lPlayIndex+1'播放下一曲
EndIf
MP3Play'播放MP3
EndSub
3.静音
'api函数声明,用于控制音量
PrivateDeclareFunctionSendMessageLib"user32.dll"Alias"SendMessageA"(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,ByVallParamAsLong)AsLong
PrivateSubCommand1_Click()
'音量增大
SendMessagehwnd,793,197266,655360
EndSub
PrivateSubCommand2_Click()
'音量减小
SendMessagehwnd,793,197266,589824
EndSub
PrivateSubImage2_Click()
'静音
SendMessagehwnd,793,2100912,524288
Image2.Visible=False
Image1.Visible=True
EndSub
PrivateSubImage1_Click()
'静音
SendMessagehwnd,793,2100912,524288
Image2.Visible=True
Image1.Visible=False
EndSub
PrivateSubImage2_Click()‘'静音
SendMessagehwnd,793,2100912,524288
Image2.Visible=False
Image1.Visible=True
EndSub
在类模块的声明部分编写以下代码,对类内部要调用的API函数进行声明
PrivateDeclareFunctionmciSendStringLib"winmm.dll"Alias"mciSendStringA"_
(ByVallpstrCommandAsString,ByVallpstrReturnStringAsString,_
ByValuReturnLengthAsLong,ByValhwndCallbackAsLong)AsLong
PrivateDeclareFunctionmciGetErrorStringLib"winmm.dll"Alias_
"mciGetErrorStringA"(ByValdwErrorAsLong,_
ByVallpstrBufferAsString,ByValuLengthAsLong)AsLong
PrivateDeclareFunctionGetShortPathNameLib"kernel32"Alias_
"GetShortPathNameA"(ByVallpszLongPathAsString,_
ByVallpszShortPathAsString,ByValcchBufferAsLong)AsLong
下面是在类模块中定义需要使用的变量
Dimm_FilenameAsString'MP3文件名
Dimm_isOpenAsBoolean'打开标志
Dimm_isPlayAsBoolean'播放标志
Dimm_isPausedAsBoolean'暂停标志
Dimm_sAliasAsString'别名
Dimm_strTitleAsString
Dimm_strAuthorAsString
Dimm_isHasTagAsBoolean'是否有TAG标志变量
ConstsRetAsString="OK"'成功返回值
在类代码中反复执行下面打开MP3文件的操作,根据传入的打开参数的不同,使用不同的打开文件模式而且根据打开文件操作的执行结果不同,分别返回不同的打开文件的结果
PrivateFunctionGetFirstFrame()AsLong
DimbHead
(1)AsByte,lCountAsLong
IfOpenHeaderFile(m_Filename)<>sRetThen'打开MP3文件
ExitFunction
EndIf
ForlCount=1To6000
Get#iFileNo,lCount,bHead(0)'读取文件头
IfbHead(0)=255Then'若找到值为255的字节
Get#iFileNo,lCount+1,bHead
(1)'读取下一个字节
IfbHead
(1)=250OrbHead
(1)=251Then'若为250或251
m_lFirstFrame=lCount'返回文件位置
ExitFunction'退出循环
EndIf
EndIf
Next
CloseHeaderFile
EndFunction
编写OpenMP3函数,发送MCI命令打开需要播放的MP3文件。
该函数定义为Public使其成为类的方法,可供其他模块调用类的功能。
PublicFunctionOpenMP3()AsString'打开MP3
DimsBufferAsString,sFileAsString,lRetAsLong
OnErrorGoToerr
DefBUFsBuffer'定义缓冲区
GetShortPathNamem_Filename,sBuffer,Len(sBuffer)'获取文件名
CheckBUFsBuffer
IfsBuffer=""Then'缓冲区为空
GoToerr
Else
sFile=sBuffer'获取文件名
EndIf
lRet=mciSendString("OPEN"&sFile&"TYPEMPEGVideoALIAS"&m_sAlias,0,0,0)'发送MCI打开指定
IflRetThen'MCI指令失败
OpenMP3=GetMCIError(lRet)'返回错误信息
ExitFunction'退出函数
Else
mciSendString"SET"&m_sAlias&"TIMEFORMATTMSF",0,0,0'发送MCI指令
m_isOpen=True'设置打开标志变真
m_isPlay=False'设置播放标志为假
m_isPaused=False'设置暂停标志为假面具
EndIf
OpenMP3=sRet'返回成功字符串
ExitFunction'退出函数
err:
OpenMP3="打开MP3文件出错!
"
EndFunction
编写CloseMP3函数,发送MCI命令关闭真在播放的MP3文件。
该函数定义为Public使其成为类的方法,可供其他模块调用类的功能。
PublicFunctionCloseMP3()AsString'关闭MP3文件
DimlRetAsLong
OnErrorGoToerr
lRet=mciSendString("CLOSE"&m_sAlias,0,0,0)'发送MCI指令
IflRetThen'MCI指令出错
CloseMP3=GetMCIError(lRet)'返回错误信息
ExitFunction'退出函数
Else
m_isOpen=False'打开标志为假
m_isPlay=False'播放标志为假
m_isPaused=False'暂停标志为假
EndIf
CloseMP3=sRet'返回成功字符串
ExitFunction'退出函数
err:
CloseMP3="关闭MP3文件出错!
"
EndFunction
编写PlayMP3函数,发送MCI命令播放指定的MP3文件。
该函数定义为Public使其成为类的方法,可供其他模块调用类的功能。
PublicFunctionPlayMP3(lPosAsLong)AsString'播放MP3
DimlRetAsLong
OnErrorGoToerr
Ifm_isPausedThenlPos=GetPosition
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB MP3 设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)