本节将在CWave类的基础上设计一个具有播放、录音和保存功能的波形音频媒体播放器。
1. 创建应用程序框架
选择File菜单下的New命令,在新建工程对话框中选择MFC AppWizard(exe)新建一个工程,工程名称取为Waver,单击OK进入下一步。
在向导首页STEP 1对话框中,设置应用程序类型为基于对话框类型(Dialog based),单击“Finish”按钮完成工程设置。
2. 设计应用程序界面
在工作区(Work Space)窗口单击资源视图标签(Resource View),在Dialog(对话框)一栏中打开主对话框(ID号为IDD_WAVER_DIALOG),删除“OK”及“Cancel”按钮和文本,并在对话框中添加控件。添加控件后的对话框如图7-8所示。
图7-8 波形音频播放器
对话框设计完成后,对话框中控件的属性设置见表7-9。
表7-9 Waver对话框控件的属性设置表
对话框控件与成员变量的映射见表7-10。
表7-10 Waver对话框控件变量的映射
同样在工作区(Work Space)窗口单击资源视图标签(Resource View),在对话框Dialog一栏中新建一个对话框,取名为“信息显示”。并设置其ID标识为IDD_DISPLAY,删除“OK”及“Cancel”按钮和文本,并在对话框中添加控件。添加控件后的对话框如图7-9所示。
对话框设计完成后,对话框中控件的属性设置见表7-11。
图7-9 信息显示窗口
表7-11 信息显示对话框控件的属性设置表
然后为IDD_DISPLAY对话框添加一个新类。通过资源视图窗口,打开IDD_DISPLAY对话框,同时按CTRL+W键,将弹出Class Wizard对话框,选择“Creat a new class”,在选了OK按钮后,在接下来弹出的对话框中,创建一个新类CDisplayDlg,该类的父类为CDialog类。Visual C++集成开发环境把CDisplayDlg类的声明存放在DisplayDlg.h文件中,类函数的实现存放在DisplayDlg.cpp文件中。信息显示对话框控件变量的映射见表7-12。
表7-12 信息显示对话框控件变量的映射
对话框设计完成后,向对话框中的每一个按钮添加消息响应函数,见表7-13。
表7-13 消息响应函数列表
3. 完成应用程序设计
下面完成整个应用程序的功能实现。
首先,在工作区(Work Space)窗口单击文件视窗(FileView)标签,切换到文件,在工程标识上单击鼠标右键,在快捷菜单中选择“Add Files to Project…”菜单项,把CWave类的声明文件“WaveAudio.h”和实现文件“WaveAudio.cpp”添加到工程中。
然后,在选择工程(Project)菜单下的设置(Setting)菜单项,打开工程设置对话框,把“winmm.lib”加入工程。
这之后,需要在“WaverDlg.h”文件头添加#include“WaveAudio.h”语句,在“WaverDlg.cpp”文件中添加#include“DisplayDlg.h”语句。以便在“WaverDlg.cpp”中使用“WaveAudio.h”中定义的CWave类和IDD_DISPLAY所对应的对话框。
然后,在“WaverDlg.h”中定义的CWaverDlg类声明中添加如下成员变量:
下面是音频播放器程序的功能实现过程。
(1)初始化对话框OnInitdialog()函数。
OnInitdialog()函数需要完成在主对话框(Waver)创建后的初始化工作。在创建对话框时,系统会发送WM_INITDIALOG消息给对话框,在对话框显示之前,m_Wave对象没有有效值,应通过函数禁止对对话框中的“播放”、“保存”按钮的操作。
CWaverDlg::OnInitDialog()函数见程序清单7-42。(www.xing528.com)
程序清单7-42 CWaverDlg::OnInitDialog函数
(2)打开按钮消息响应函数。
OnOpen()函数的功能是打开一个波形音频文件。在程序的开始,调用类CFileDialog对象fileDlg的DoModal()成员函数,当该代码执行时会弹出一个打开文件的对话框,在该对话框中可以选择需要打开的文件,并通过调用fileDlg的GetPathName()成员函数将打开的文件的路径和名称赋给m_Wave.m_Path。得到文件后,调用m_Wave.Open()实现打开操作。如果打开成功,则在状态编辑框中显示“文件已经正确打开”的信息,并激活“播放”按钮。打开波形音频文件的函数见程序清单7-43。
程序清单7-43 CWaverDlg::OnOpen函数
(3)播放按钮消息的响应函数。
OnPlay()函数用于播放音频文件。当文件被正确打开后,播放音频显得非常的简单,调用m_Wave.Play()就可以完成所有的操作。当然,作为一个应用程序,需要考虑到意外情况。在播放时,通过静态文本告诉用户当前的音频播放状态。播放音频文件的OnPlay()函数见程序清单7-44。
程序清单7-44 CWaverDlg::OnPlay函数
(4)录音按钮消息响应函数。
录音函数OnRecord()用来录制波形音频文件。在禁止“播放”、“打开”按钮后,调用m_Wave.Record()即可完成工作。录音函数OnRecord()见程序清单7-45。
程序清单7-45 CWaverDlg::OnRecord函数
(5)保存按钮消息响应函数。
保存函数OnSave()将音频设备中录制下来的声音信息保存到文件。同样使用CFileDialog类来获得用户输入的保存文件名。需要注意的是,必须使用FileDlg.m_ofn.lpstrDefExt=“wav”;语句设定文件的扩展名为“wav”。该消息函数响应时,会弹出一个另存为对话框,在该对话框中可输入你所需要创建的新波形文件,用来保存录音结果。保存函数OnSave()见程序清单7-46。
程序清单7-46 CWaverDlg::OnSave函数
(6)停止音频播放函数。
停止音频播放函数OnStop()用来停止当前的播放。其主要功能是通过调用m_Wave对象的Stop()成员函数来实现的,在该函数调用之前,程序作了一些辅助工作,如显示状态信息等。CWaverDlg::OnStop()函数详见程序清单7-47。
程序清单7-47 CWaverDlg::OnStop函数
(7)信息查询函数。
信息查询函数OnInfo()用来查询并显示音频文件的基本信息。该函数使用了CDisplayDlg对话框用来显示查询之后得到的音频信息。查询的范围包括文件名、声道数、采样率、音频文件的长度(用时间衡量)和量化位数。查询的方式为分别调用m_Wave对象的查询成员函数。CWaverDlg::OnInfo()函数详见程序清单7-48。
程序清单7-48 CWaverDlg::OnInfo函数
4. 运行程序得到结果
代码添加结束后,保存所作的工作,然后编译,运行该工程。编译连接成功后,我们就可以得到一个播放波形音频的播放器。运行结果如图7-10~图7-12所示。
图7-10 波形音频播放器播放界面
图7-11 波形音频播放器录音界面
图7-12 波形音频播放器属性查询界面
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。