收藏 分销(赏)

基于Visual-C--的音频编辑系统.doc

上传人:仙人****88 文档编号:9464374 上传时间:2025-03-27 格式:DOC 页数:32 大小:360KB
下载 相关 举报
基于Visual-C--的音频编辑系统.doc_第1页
第1页 / 共32页
基于Visual-C--的音频编辑系统.doc_第2页
第2页 / 共32页
点击查看更多>>
资源描述
摘要 本文主要介绍音频处理的实现以及它有那些功能和这些功能实现的流程图。在这里对音频的处理就是对语音的处理,对语音的处理是建立在数字音频的基础之上的,也就是对采样点进行处理。对音频处理系统是在VISUAL C++ 6.0的平台上开发的,主要是用消息映射函数响应各种功能操作,主要是完成文件的打开文件,新建文件,保存文件,播放,剪切,粘贴,拷贝,放大,缩小,鼠标双击,拖动,单击操作等。在消息映射函数中根据流程图编写各种操作代码并不断的调试,最后实现程序处理音频的功能。 在VISUAL C++ 6.0的平台上,采用上述方法来编辑音频处理软件。最后系统调试成功,并且能够对语音进行上述功能的操作,达到一定的处理效果。 关键词:音频,语音处理,信号采样,VISUAL C++ 6.0, Abstract The achievement of sound processing, the functions of the software, and process chart of achieving these functions are mainly introduced in this article. The audio processing is just the sound processing, here. Digital audio is the basic of the audio processing. This process is also like dealing with samples. Developing the audio processing system was based on Visual 6.0 platform. The functions of mapped message were responsed for varieties of operations, such as opening the file, saving the file and creating the file, playing, clipping the wave and pasting the wave, making the wave larger or smaller, mouse double clicks, and click, mouse moving. Then depended on the process chart edit the code for varieties of operations to achieve the foundations of the system in the mapped message functions and debugged the code. At last the foundations of audio processing have achieved. On the Visual 6.0 platform, edited the audio processing system with the method which referred above. Last, the system has finished and can deal with the wave files. And the effect was also achieved. . Keywords:Audio, Voice processing, Signal sample, Visual 6.0 platform 目录 摘要 I ABSTRACT II 第1章课题介绍 1 1.1音频处理技术的背景状况 1 1.2音频技术的相关概念 3 1.2.1 模拟音频和数字音频 3 1.2.2 数字音频的采样和量化 3 1.2.3 数字音频的文件格式 3 第2章 音频处理实现的原理及方法 4 2.1 VISUAL C++平台的介绍 4 2.2 VISUAL C++语言的介绍 4 2.3音频处理系统的具体实现的原理 5 2.4波形编辑系统的编辑方法 6 2.4.1 初始CWAVEVIEW类。 6 2.4.2 文件打开操作 6 2.4.3 文件保存操作 7 2.4.4 播放操作 7 2.4.5 新建文件操作 9 2.4.6 波形暂停操作 10 2.4.7 波形播放停止操作 10 2.4.8 波形录制操作 11 2.4.9 波形剪切操作 11 2.4.10 波形拷贝操作 12 2.4.11 粘贴波形操作流程图 13 2.4.12 波形放大操作 14 2.4.13 波形缩小操作 15 2.4.14 显示全部波形操作 15 2.4.15 显示左边波形操作 15 2.4.16 显示右边波形操作 16 2.4.17 鼠标左键弹起操作 16 2.4.18 波形合成操作 17 2.4.19 鼠标左键单击操作 17 2.4.20 鼠标移动操作 18 第3章,实验结果 20 3.1打开波形文件 20 3.2 波形剪切 21 3.3 波形粘贴 22 3.4波形放大 23 3.5波形合成文件打开 25 第4章 结束语 26 致 谢 27 参考文献 28 IV 第1章课题介绍 当今世界,人们在工作之余,也越来越注重生活娱乐。电脑的普及和多媒体技术的进步,为人们的休闲娱乐提供了条件。而音频处理技术是多媒体技术不可获缺的一项。在这里主要介绍音频处理系统这个课题的背景,意义,研究现状及一些概念。 1.1音频处理技术的背景状况 自从多媒体技术诞生以来,到80年代开始,已经成为关注的热点。多媒体技术也已经渗入了各个领域,得到越来越多的运用,如教育(形象教学、模拟展示)包括电子教案、形象教学、模拟交互过程、网络多媒体教学、仿真工艺过程;商业广告(特技合成、大型演示)包括影视商业广告、公共招贴广告、大型显示屏广告、平面印刷广告;影视娱乐业(电影特技、变形效果):电视/电影/卡通混编特技、演艺界MTV特技制作、三维成像模拟特技、仿真游戏、赌博游戏;医疗(远程诊断、远程手术)包括网络多媒体技术、网络远程诊断、网络远程操作(手术),还有旅游(景点介绍):风光重现、风土人情介绍、服务项目及人工智能模拟(生物、人类智能模拟):生物形态模拟、生物智能模拟、人类行为智能模拟。 多媒体计算机技术中一种重要的媒体来自音频,包括语音,音响和音乐。音频的作用是直接通过讲话表达信息,制造某种效果和气氛,演奏音乐等。如今播放器,音频处理系统也是多种多样。大部分电脑都装有一、两播放软件,而且软件的功能也越来越完善。然而功能的完善和加强也以增大容量为代价。 音频技术主要包括数字化,语音处理,合成及识别等方面 。但是原始音频数据一般需要进行编辑加工才能使用,通过编辑可以实现各种声音的混合以及消除或降低声音中的畸变等。一般的音频编辑软件都可以设置声音音量,渐强渐弱处理及多通道的混合等常用功能。 因为音频技术运用如此广泛,所以就有研究的必要了,这也就是意义所在。 国内外研究音频技术很广泛,也制定了许多标准,如MPEG2,MPEG4,MPEG7。 我国对音频技术也做了相关规定,如AVS标准,即数字音视频编解码技术标准,是《信息技术 先进音视频编码》系列标准的简称。它标准包括系统、视频、音频等三个主要标准和一致性测试等支撑标准。其中“第三部分:音频”采用主流技术框架,是一套性能比国际标准或类似方案更好的音频编码方案,代表了音频编码领域的最新进展。而且我国还有具有自主知识产权的广晟数码数字音频编解码算法。它是可以同时支持立体声和多声道环绕声的数字音频编解码技术。 国外在这方面做了很多研究。在语音编码标准方面 ,国际电信联盟(ITU)主要负责研究和制定与通信相关的标准。其中用于固定网络电话业务使用的语音编码标准如ITU-T G.711等主要在ITU-T SG 15完成,并广泛应用于全球的电话通信系统之中。由于随着Internet网络及其应用的快速发展,在2005到2008究期内,ITU-T将工作转移到主要负责研究和制定多媒体通信系统、终端标准的SG 16中进行。在欧洲、北美、中国和日本的电话网络中通用的语音编码器是8位对数量化器(相应于64Kb/s的比特率)。该量化器所采用的技术在1972年由CCITT(ITU-T的前身)标准化为G.711。在1983年,CCIT规定了32Kb/s的语音编码标准G.721这个编码器价格虽低但却提供了高质量的语音。在欧洲,TCH-HS是欧洲电信标准研究所(ETSI)的一部分。在北美是由电信工业联盟(TIA),这项工作负责执行。在日本,由无线系统开发和研究中心(称为RCR)组织这些标准化的工作。此外,国际海事卫星协会(Inmarsat)是管理地球上同步通信卫星的组织,也已经制定了一系列的卫星电话应用标准。 在音频编码标准方面,主要由ISO的MPEG组来完成。MPEG1是世界上第一个高保真音频数据压缩标准。MPEG2音频编码标准采用的就是MUSICAM环绕声方案,它是MPEG2音频编码的核心,是基于人耳听觉感知特性的子带编码算法。MPEG2规定了两种音频压缩编码算法,一种称为MPEG2后向兼容多声道音频编码标准,简称MPEG 2BC;另一种是称为高级音频编码标准。MPEG4的目标是提供未来的交互多媒体应用,它具有高度的灵活性和可扩展性。与以前的音频标准相比,MPEG4增加了许多新的关于合成内容及场景描述等领域的工作。 经过多年的努力,业界在语音编码和音频编码领域取得了很多重要的进展。AMR从NB发展到WB,再到最新的WB+,现正在进行全频带的扩展工作;G.729已发展到G.729.1,目前也在启动全频带的扩展工作;G.722.1也已发展到G.722.1 Annex E,已经完成了全频带的扩展。ITU-T SG 16组正在研究和制定可变速率的语音编码标准。变速率的语音编码将是近期语音编码发展的一个趋势。随着以IPTV业务为代表的信息检索业务的开展,适合于在IP网络上传输的音频信号编码技术,用于制作、检索和存储音频信息的技术将成为发展的方向。 1.2音频技术的相关概念 1.2.1 模拟音频和数字音频 声音是空气分子的振动在人耳产生的感觉,并通过人的听觉神经把所得到的信息传输到大脑。对声音的记录,最初是一摸仪信号的形式进行录制的,后来金国发展使用数字的形式进行记录。 声音是机械振动在弹性介质中的传播,震动越强,声音越大。而模拟音频技术就是用模拟电压的幅度来表示声音的强弱,把代表声音波形的电信号录制到适当的每体上。 经过几十年的发展,随着计算机的出现,人们开始使用计算机上的存储色被来记录声音,因此记录的所有信息也都是数字来表示的。数字音频的特点是保真度好,动态范围大。 模拟音频在时间上连续的,而数字音频是一个数据序列,在时间上是断续的。数字音频是把采样得到的表示声音强弱的模拟电压用数字表示。正是由于数字音频的出现,我们才十分容易对声音进行平滑修等处理。 1.2.2 数字音频的采样和量化 采样:按一定的时间间隔(T)取值,得到X(Nt)。当然采样频率必须高于模拟信号中最高频率的两倍。常用的采样频率有:8KHz,11.025 KHz,22.05 KHz,16 KHz,37.8 KHz,44.1 KHz,48 KHz。人的听觉的上限是20KHz,所以一般采用44.1 KHz作为高质量声音的标准采样频率。在采样是还涉及到声道书。声道数是指一次采样所记录的声音波形的个数。 量化:就是把样值转化成有限个幅度值构成的集合,先将整个幅度划分为有限个小幅度的集合,把落入某个阶距内的样值归为一类,并赋予相同的量化值。量化精度取决与采样的精度。 1.2.3 数字音频的文件格式 在多媒体中,存储声音信息的文件格式主要有:WAV文件、MIDI文件、VOC文件、AIF文件、SNO文件、RMI文件等。我们最常见到和使用的是WAV文件和MIDI文件两种。 第2章 音频处理实现的原理及方法 2.1 VISUAL C++平台的介绍 Visual C++是Microsoft公司与93年推出的一个可视化集成开发环境。自1998年Microsoft公司脱出功能完善的Visual C++6.0后,越来越多的程序员选用Visual C++作为软件开发工具使用Visual C++编程,首先要熟悉Visual C++集成开发环境,Visual C++集成开发环境有很多工具和向导组成。 Visual C++是一个功能强大的可视化软件开发工具,它不仅仅是一个C++编译器,还是一个基于Windows操作系统的集成开发环境。Visual C++有许多组件,包括编辑器、编译器、调试器和程序向导AppWizard 、类向导ClassWizard等。这些组件通过一个名为Developer Studio的组件集成为一个和谐的开发环境。 Visual C++中源程序采用C\C++语言编写,它支持面向对象程序设计,并能够使用功能强大的微软基础类库MFC。由于Windows操作系统的时常垄断地位,利用Visual C++开发出来的软件具有稳定性好、可移植强的特点。 利用Visual C++可以编制各种类型的Windows应用程序,从简单的单文档、多文档和对话程序到复杂的组合截面程序。Visual C++6.0源代码编辑器功能强大,使用非常方便。它提供了语句自动完成功能,编辑输入源程序是能自动显示当前对象的成员变量和成员函数,并表明函数的参数类型。Visual C++6.0的编译器增加了新的编译参数,改进了对ANSI C++标准的支持,并采用Windows的代码优化技术,使生成的目标代码更精练,程序运行的速度更快。程序调试器功Debug能更强大,它提供了诊断映射机制、无须重便宜的调试和实时调试等功能。Visual C++6.0的联机帮助系统MSDN Library既能与集成开发环境有机合在一起,是程序员可以随时查询需要的帮助信息和技术文档,有能脱离集成开发环境而独立地运行,并且用户可以通过因特网获取实时的帮助信息和实例。Visual C++6.0通过Visual Studio还为用户提供很多实用工具,如Spy++查看器、ActiveX Contron Test Container控件测试容器,Register Control控件注册程序等。 2.2 Visual C++语言的介绍 在绘制波形时会用到CDC类、MCI 、WIN32多媒体API和涉及到颜色的定义。 Windows的CDC的成员函数的很多。在这里我只介绍几种 GetSafeHdc 返回输出设备环境 SetAttribDC 设置属性设备环境 ReleaseAttribDC 释放属性设备环境 GetBKColor 得到当前背景颜色 SetBKColor 设置当前背景颜色 SetBKMode 设置当前背景模式 TextOut 用当前字体在指定位置出写一个字符串 Win32 API的多媒体部分是从Windows3.1开始支持的多媒体的延续,它包括MCI(媒体控制界面)、音频输出、多媒体文件I\O和多媒体记时器。MCI被定义为控制所有线性回放媒体,并有再如、暂停、播放、记录、停止和恢复等功能。Win32多媒体API是在mmsystem.h和Win32 系统DLL中定义繁荣,而minmm.lib是mmsystem.h的输入库。minmm.lib依赖于可安装的每个实际的多媒体设备的用户模式设备驱动程序,对多媒体驱动程序来说,主要导出函数是DriverProc,它本身是32位的DLL。 PC机上显示的图象是由有一个个像素组成的,每个像素都有自己的属性。PC的显示系统中,像素的颜色是基于RGB模型的。 2.3音频处理系统的具体实现的原理 首先由MFC单文档应用程序自动完成工程框架。 其次定义三个类,CWaveFile类, CWavePlay类,CWaveView类用来完成音频处理的功能。 CWaveFile类:对音频文件进行打开、插入波形数据到声道中、存取、裁剪、粘贴、删除,保存等操作。在这个类中要加入TWave结构,TWaveFileHeadStruct结构。其中TWave结构是用来记录波形所需的声道数和波形数据。TWaveFileHeadStruct结构是波形头文件结构,用来记录波形的长度和格式以及文件长度。其中CWaveFile类中还要包含math.h头文件,因为要用到三角函数计算包络和波形幅度。 对波形进行播放、暂停、停止的操作。它包括波形输出和波形录制。所以它有得到波形此时的输出和记录的点、把波形数据输入到内存,打开输出设备和录制设备等功能函数。因为涉及到对多媒体的控制,所以要用到mmsystem.h头文件。 上面两个类都是为CWaveView类服务的,因为所有的操作都在视图类中。 CWaveView类:对鼠标的操作,以及波形播放控制、波形显示控制、波形编辑控制、以及和外界文件交换接口。这个类是用来完成用户的各种操作的。在这个类中要定义TMarkStruck结构,TShowRange结构。TMarkStruck结构的参数用来表示Mar区域中波形中实际位置。TShowRange结构是用来保存波形的显示区域,它的参数显示波形中的实际位置。因为在操作中要用到鼠标,所以包含的对鼠标的消息映射函数,用来对鼠标的操作做出反应。因为要对波形进行操作,所以要包含对波形改变做出反映的消息影射函数。定义一个CWaveFile类的对象,因为在波形显示控制、外界文件交换接口和波形编辑控制中要用到CWaveFile类的成员函数。在类中定义一个CWavePlay类的对象,因为在波形播放控制当中要调用CWavePlay类的成员函数。 波形播放控制包括播放波形播放,停止播放,暂停播放,播放或录制完成。语音波形编辑控制包括剪切波形,拷贝波形,粘贴波形,清除剪切板波形,语音波形显示控制包括放大显示波形,缩小显示波形,显示全部波形,显示左边波形,显示右边波形。在语音波形显示控制中要用到波形绘制函数,创建位图,绘制背景,画线提示当前播放位置。在合成控制是要用到SetFilesDlg类,这个类用来引入合成时要用到的波形文件,它是一个对话框类。 2.4波形编辑系统的编辑方法 2.4.1 初始CWaveView类。 背景颜色为黑色,当前位置为白色,中线为蓝色,波形包络为绿色。垂直范围未30000,显示范围为0,波形长度为一个客户区大小。不能播放和录制等。 2.4.2 文件打开操作 在菜单“文件”项中打开类向导,选择COMMAND项,在编辑有关打开代码。首先要得文件名,文件长度和波形数据,填充波形头文件,在放入声道中,显示波形。流程图如图2-1所示 调用框架视图的文件打开函数 调用波形视图类的文件打开函数 调用波形文件的文件打开函数,得到文件名和长度,波形文件数据 填充波形文件头,记录波形信息 得到声道数,声道长度,把数据填入声道 显示波形,然后完成各种操作,最后保存文件 图2-1 文件打开操作的流程图 2.4.3 文件保存操作 文件保存工作主要是用来完成保存波形数据和文件长度。首先在菜单栏中的“保存”项中打开类向导,选择COMMAND,然后编辑代码。流程图如图2-2所示 判断文件是否打开 调用波形视图类的文件保存函数 保存文件长度和写入波形数据 调用波形文件类的文件保存函数 返回失败 否 是 图2-2 文件保存操作流程图 2.4.4 播放操作 用来完成波形文件的播放。在工具栏编辑器栏中编辑按钮,并确定ID,在类向导中选择COMMAND,并编辑代码。首先调用播放函数,确定波形是否显示,得到波形数据。然后在得到播放开始点和结束点,打开播放设备,把数据放入内存,然后就播放。流程图如图2-3所示 调用框架视图的播放波形函数 调用波形视图的播放波形函数 指向声道数据 左,右声道是否显示波形 是否得到声道数据 得到开始点和结束点以及显示波形长度 调用波形播放类的打开函数,确定播放格式,打开播放设备,使bopen为真 调用波形播放类的播放数据函数,把数据和头文件读入内存, 画线表示当前播放的位置,并设定时间 返回失败 返回失败 否 是 否 是 图2-3 文件播放操作 2.4.5 新建文件操作 文件新建操作是重新建立一个波形文件。在菜单栏的文件下的“新建”项,打开类向导,选择COMMAND,然后编写代码。首先要确定文件名的合法性,再新建波形,用新的波形数据填充文件头,然后再把数据放入声道,如果文件新建成功,就设置标志,重画波形。流程图如图2-4所示 调用框架视图类的新建文件函数 调用波形视图类的新建文件函数 调用波形文件类的新建波形函数 判断文件名是否合法 开辟缓冲区,设置文件头信息 判断数据是否填充到声道 判断波形新建是否成功 设置波形显示范围和标志 发送波形已改变的消息 返回失败 返回失败 返回失败 否 是 否 是 否 是 图2-4 文件新建操作流程图 2.4.6 波形暂停操作 播放暂停操作是当你按下暂停按钮后,停止播放文件。它首先判断文件是否在播放中,如果在播放中就调用暂停函数。然后在判断是否还在播放,然后就使播放为假,暂停为真。如果已经暂停了,就使播放为真,暂停为假。流程图如图2-5 所示 调用框架视图类的暂停播放函数 调用波形视图类的暂停播放函数 调用波形播放类的暂停播放函数 判断是否在播放 判断是否在播放中 判断是否暂停了 波形播放重新开始,并且使暂停为假 波形播放暂停,使暂停为真 返回 返回 否 是 否 是 否 是 图2-5 波形暂停操作流程图 2.4.7 波止形播放停操作 首先判断波形有没有正在录制,如果是就停止录制,保存录制的位置,波形采样点和长度,把波形长度设置为录制波形的长度,然后把新的波形放入声道,重新设置波形头文件信息并重画波形。如果正在播放就停止播放,使播放为假,并关闭波形。流程图如图2-6所示 调用框架视图类的播放停止函数 调用播放视图类的播放停止函数 判断是否正在录制波形 判断是否正在播放 得到正在录制的位置,然后停止录制,关闭波形 得到录制的采样点,并用它设置波形长度,并把波形数据填入声道 发送波形已改变的消息,并更新窗口 停止播放波形,关闭波形输出 返回 否 否 是 是 图2-6播放停止操作的流程图 2.4.8 波形录制操作 在这里波形是不能录制的。虽然有录制函数,但最后的结果是得不到的,因为返回的是失败。流程图如图2-7所示 调用框架视图的波形录制函数 调用波形试图的波形录制函数 返回失败 图2-7 波形录制操作的流程图 2.4.9 波形剪切操作 确定要剪切的范围,然后调用试图类的剪切函数,判断波形是否放入剪切板了,如果不是,返回。如果是得到剪切的范围和显示的范围。再判断起始位置是否大于波形长度,是就什么也不做,不是,就判断结束位置是否大于波形长度,是就把整个波形剪切掉。仍旧不是,把后面的波形往前移动,再设置波形长度和波形头文件信息。流程图如图2-8所示 调用框架视图类和波形视图类的波形剪切函数 波形是否保存到剪切板中 得到要剪切的波形范围, 调用波形文件的剪切函数,并得到波形长度 判断起始位置是否大于波形长度 结束位置是否大于波形长度 把后面的波形移到前面,从新设置波形长度和波形头文件信息 剪切掉整个波形 返回 不变 否 是 是 否 是 否 图2-8 波形剪切操作流程图 2.4.10 波形拷贝操作 得到要拷贝波形的长度和波形范围。然后判断结束点是否大于波形长度,如果是就把结束点确定在波形结束点,然后得到拷贝波形长度,并琐定内存,判断内存是否足够大,如果够大,就把波形数据放入内存。清空剪切板中原来的内容,把新数据放入剪切板。并关闭剪切板。流程图如图2-9所示 调用框架视图类和波形视图类的波形拷贝函数 获得要拷贝的波形范围和波形长度 结束点是否大于波形长度 得到拷贝波形长度开辟并锁住内存 内存是否足够大 得到波形数据并放入内存 清空剪切板并打开它,放入拷贝过来的数据,然后关闭剪切板 把结束点定位在波形末尾 返回 是 否 是 否 图2-9 波形拷贝操作的流程图 2.4.11 粘贴波形操作流程图 首先打开剪切杆,注册剪切板并得到剪切板中的数据。然后得到要的开始点和结束点,长度和原始波形的长度,剪切掉所选定的区域,调用波形粘贴函数。判断粘贴的开始点是否超过的波形长度,如果是就只插入开始点减去长度的那部分。然后重新设置所显示的范围和标志。把区域的结束点重新赋值。然后设置新的波形长度和显示范围。分配内存,把要粘贴波形数据写入内存,然后把整个波形数据写入声道,再把整个波形长度转化为采样点,释放内存,设置新的区域结束点和波形结束点,然后重画波形。流程图如图2-10所示 调用视图类的波形粘贴函数 剪切板是否打开 注册剪切板并得到剪切板数的数据 得到粘贴标志的长度,波形原始长度 剪切掉选定区域 调用波形文件的粘贴函数粘贴波形 设置新的开始点和结束点,波形长度 分配内存,存入剪切板的波形数据 新的波形数据放入声道 设置新的结束点和显示结束点,设置新的波形显示区域并显示 返回失败 否 是 图2-10 波形粘贴操作的流程图 2.4.12 波形放大操作 选中要放大波形的区域,并把它设置为要显示的区域,设置显示区域。然后再得到客户区,设置客户区的水平单位长和要显示的长度,最后把选种的波形区域放在整个客户区,重新设置标志区,并重画波形。流程图如图2-11所示 图类的波形放大函数 设置要放大的区域,把放大区域设置为显示区域 得到客户区,把要放大的波形放入客户区 图2-11 波形放大操作流程图 2.4.13 波形缩小操作 选中要缩小波形的区域并得到缩小波形的显示范围和长度及整个波形长度,减小这段波形的所占水平客户区长度,然后重画波形。流程图如图2-12所示 调用图类的波形缩小函数 得到波形显示范围和波形长度,得到波形水平显示规模 缩小这段波形的水平显示长度,计算得到波形显示长度,并放入客户区 调用画波形函数 图2-12 波形缩小操作的流程 2.4.14 显示全部波形操作 调用框架试图的显示全部波形函数 得到客户区,把显示波形放入客户区 设置波形显示区域为全波长,得到显示区域 调用波形试图的显示全部波形函数 调用画波形函数 得到整个波形长度,并把整个波形都设置为要显示,然后得到波形的显示范围和客户区,设置客户区的水平单位长,并把整个波形放在客户区。流程图如图2-13所示。 图2-13 全部波形显示操作的流程图 2.4.15 显示左边波形操作 设置每一次后退的进度。判断 要显示的开始点是否大于后退进度。如果不是可,则开始点和结束点都减去后退进度。如果是则结束点为原来的结束点减去开始点。开始点为0。然后得到客户区,把波形显示在客户区,并重画波形。流程图如图2-14所示 调用试图的显示左边波形函数 设置后退的进度 设置显示范围,得到客户区,把要显示的波形放入客户区 调用画波形函数 图2-14 显示左边波形操作的流程图 2.4.16 显示右边波形操作 和显示左边波形操作类似,不同的是一个是后退,一个是波形向前移动 。首先要得到要显示波形的区域,然后再设置每次前进的进度。判断结束点前进后是否超过整个波长。如果超过了新的开始点为波形长度减去结束点后加上原来的开始点。结束点则为波形结束点。如果不是则结束点和开始点都加上前进进度。然后设置显示范围,并得到客户区,显示波形。 2.4.17 鼠标左键弹起操作 释放鼠标捕获 调用波形视图类的左键弹起函数 去掉标志,重新设置标志区 调用视图类鼠标左键弹起函数 鼠标左键弹起操作与鼠标左键按下操作相对应。首先先释放鼠标捕获功能,去掉标志,然后重新设置标志区,最后调用它的基类视图类鼠标左键弹起函数。流程图如2-15所示 图2-15 鼠标左键弹起操作的流程图 2.4.18 波形合成操作 SetFilesDlg是一个对话框类,它的用途是打开要合成的文件。具体操作是,首先建立SetFilesDlg对象,弹出对话框。得到要合成的波形文件名。建立四个波形文件对象,打开波形文件。得到每个文件的长度和波形数据。计算所有文件加起来的总长度。并为它分配内存,把数据放入内存。调用新建波形函数,录制波形,然后把新的波形数据放入声道中。设置显示长度,并放入客户区,重画波形。流程图如图2-16所示 调用框架试图的波形合成函数 建立SetFilesDlg对象,弹出对话框 得到合成用的文件名 建立四个波形文件对象,打开波形文件,得到长度,数据 计算文件总长度,分配内存,把数据放入内存。 调用新建波形函数,录制波形,然后在把新波形数据填入声道。 设置波形选中区和显示长度,重画波形 图2-16 波形合成操作的流程图 2.4.19 鼠标左键单击操作 鼠标左键单击一是为了确定现在要播放的波形位置;二是为了鼠标移动做好准备工作。 使鼠标能捕获所在的位置功能开启。然后得到波形要显示区域,波形水平单位长度,并得到鼠标现在的位置,更新当前播放位置在鼠标所在的位置。最后更新鼠标点中的区域。重新设置标志,并更新窗口,调用视图类鼠标左键单击函数。流程图如2-17所示 调用波形视图的鼠标单击函数 捕获鼠标 得到波形显示区域,波形水平单位长,计算鼠标现在位置 更新当前播放位置的客户区 更新鼠标点中区 设置标志,并更新窗口,调用视图类鼠标单击函数 图2-17 鼠标左键单击操作的流程图 2.4.20 鼠标移动操作 鼠标移动是一个很重要的操作。它涉及到波形的选择区域。因为粘贴,剪切,拷贝,放大等操作都要用到鼠标移动操作。它设计的步骤是首先要判断鼠标左键是否被按下,如果没有,什么也不做。如果已经被按下了,则得到客户区和原来的标志区。判断选中区的开始点是否小于结束点,如果不是,则开始点赋值给原始标志区的右边,结束点赋值给原标志区的左边。如果是把开始点赋值给原标志区的右边,结束点赋值给原标志区的左边。然后确定选中区的结束点,设置选中区。然后判断选中区的开始点是否小于结束点。如果是把开始点赋值给标志区左边,结束点赋值给标志区的右边。如果不是,则把结束点赋值给标志区左边,开始点赋值给标志区右边。然后原来的标志区和现在的标志区比较得到绘图区。然后更新窗口,重画波形。流程图如图2-18所示 得到波形显示区域 得到客户区和原来的标志区 鼠标左键是否被按下 确定选中区的结束点,设置选中区 原始标志区和现在的标志区比较来得到绘画区的范围 确定鼠标移动所选中的区域。 确定现在的标志区 窗口更新 不做任何操作 否 是 图2-18 鼠标移动操作的流程图 第3章,实验结果 3.1打开波形文件 在没有打开文件前,界面上客户区背景是黑色的,中间有一条蓝线。文件打开后为黑色背景,绿色的波形。如图3-1、3-2所示 图3-1 文件打开前的界面 图3-2 文件打开后的截面 3.2 波形剪切 在波形剪切前,显示完整的波形,黑色背景,绿色波形。选定剪切区域后,白色背景,红色波形。按下工具栏的剪切后,原来的区域被剪切掉了,剪切地方留下了一条黄线。后面的波形往前移动。然后把剪切后的波形重新画在客户区。如图3-3、3-4所示 图3-3波形剪切前 图3-4 波形剪切后 3.3 波形粘贴 波形粘贴前,显示原来波形的样子,然后选中拷贝区域后,波形为红色。背景为白色,按下拷贝按钮。然后选中要粘贴区域,按下粘贴按钮,拷贝过来的波形就放入了粘贴区域。如图3-5、3-6、3-7所示 图3-5 波形粘贴前 图3-6 选中粘贴的波形 图3-7 波形粘贴后 3.4波形放大 波形放大前,显示原来完整的的波形。然后选中要放大的区域,按下放大按钮,被选中的波形就放到了整个客户区,波形比起原来的波形,水平范围要大。如图3-8、3-9、3-10所示 图3-8 波形放大前 图3-9 要放大的区域 图3-10 放大后的波形 3.5波形合成文件打开 按下菜单栏下的频分复用下的“合成”,跳出文件合成对话框,选择要合成的文件。如图3-11。但是遗憾的是合成功能不能正常运行,无法合成新的波形。 图3-11 波形合成 第4章 结束语 能够正常的完成功能,并达到一定效果。但是因为缺少录制的功能使合成操作失了。还有点不人意的是缩小操作只有在进行了放大操作后才能正常进行和没有进行界面的美化工作,以至于界面并不漂亮。另外一点是通过调用Windows API函数将图形绘制到屏幕上,速度可能很慢。原因是在于普通的Windows API要接受系统的严格管理,而操作系统又是一个多任务系统,它把各种任务分成等级。所以假如发出一个GDI绘制命令,实际上告诉操作系统等你忙完其他大事后,请通知驱动程序让硬件绘制一下图。因此时实响应性很差,也因此可能会造成速度跟不上,电脑卡住了。在有些项目比如游戏,时实要求性很高的应用场合就不能用这种方法了。 解决办法是使用DirectX 。因为在需要速度方面,剥夺了操作系统的控制权。它通过使用一种COM特殊函数库,直
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服