基于.Net C#的声音波形显示

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:zhangfei0960
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:Wav文件包含文件头和数据块,记录了声音的波形。.Net C#开发环境提供了文件流和流的读写器等操作类,可以方便地实现对wav文件的解析从而得到声音的波形数据,再利用Graphics类的各种图形绘制方法将波形数据绘制成曲线。
  关键词:wav;波形;C#;Graphics
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)22-5454-02
  Sound Wave Shape Showing by .Net C#
  QIN Dan
  (Computer Science School of Yangtze University,Jingzhou 434023,China)
  Abstract: Wav file includes header and data block, recording the wave shape of the sound. .Net C# provides some file accessing class such as FileStream and StreamReader, so that it is easily to get sound data from wave. At last, the wave shape of the sound can be drawed by using the methods of Graphics class.
  Key words: wav; wave shape; C#; Graphics
  图形化的声波波形以最直观的方式将声音的物理特性展现给人们,波形的外观包含了频率,响度等信息,进一步解析声波还能得到声音的频谱信息。对波形的研究甚至可以了解人发音的声母和韵母,从而为语音识别提供支持[1]。波形显示本质上是以图形化的方式还原声音文件所记录的声音采样信号。.NET平台的C#编程环境提供了GDI 技术,极大地便利了图形化编程。
  1声音文件的结构
  声音文件记录声音信息,理论上任何可以还原声音的文件都可以作为波形显示的信息源。声音的记录方式有多种,最简单而又最能保持声音本色的方法是直接记录波形,如wav文件。只要采样率足够高,该格式记录的声音文件能够十分接近原声,能获得非常高的音质[2],其缺点是文件体积较大。为了文件体积较小,人们又推出mp3、ra等格式的文件,其特点是采用了压缩技术,其代价是声音的品质有所下降。还有一类声音文件采用音色库和发声指令的手段还原声音,如midi文件,它只是模仿各类乐器的演奏效果而不是记录声音,更重要的是它不能发出人声,因此其使用受到极大限制。
  由于wav文件直接记录波形,便于各类应用程序解析声音信息,该文用它来展示使用.Net C#从wav文件中获取波形并绘制声波。wav文件格式是RIFF文件格式的一种。wav文件分文件头和数据块两部分,文件头又分为RIFF/WAV文件标识和声音数据格式两部分[3]。
  wav文件的编码方式主要有PCM (PulseCode Modulation脉冲编码调制)和ADPCM (Adaptive Different ial Pulse Code Modulation自适应差分脉冲编码调制)两种。使用PCM脉冲编码调制的采样文件,其文件头为4字节,但有时wav文件头中会增加fact块,此时其文件头可达58字节。而ADPCM编码的采样文件,若其包含有fact块,则其文件头可达90字节。wav文件头记录的主要信息包括采样频率、采样精度和声道数。采样频率越高音质越接近原声,采样频率通常有11025hz、22050hz、44100hz、48000hz四种。采样精度数值越大分辨率越高。声道数包括单通道和双通道两种,前者只能让一个喇叭发音,后者则能让两个喇叭发音从而产生立体声效果。
  2利用.net的C#绘制声波波形
  Visual Studio 2005是微软推出的.Net开发平台。C#语言是随着.net架构一起设计出来的一种全新开发语言,特别适于用户界面设计。.Net C#语言在图形处理方面提供了GDI 技术,使用Graphics类封装诸多的图形绘制方法,能绘制直线、曲线、多边形、椭圆,甚至还能将文字作为图形输出[4],以便于产生特效,还提供了图像的翻转、扭曲以及像素操作等丰富功能,为图形图像编程提供全方位的支持,最大程度地减少了对底层API的直接调用,提高了编程效率。
  2.1读取WAV文件
  C#提供了一系列静态和非静态的文件操作类支持文件的创建、复制、删除和读写操作。为了实现文件的随机读取,.NET C#提供了FileStream文件流以记录文件的操作位置。利用静态类File的Open()等方法可以返回一个指向硬盘上特定文件的文件流实例。再利用文件流实例作为参数初始化一个流的读写器对象,由流的读写器最终实现对文件的读写操作,其操作可以指定每次读写若干字节,十分灵活方便。流的读写器又分为二进制读写器和文本读写器,前者空间利用率高,而后者所写的文件便于阅读,二者各有所长。该文采用后者。
  FileStream fs = File.Open("C:a.txt");
  StreamReader sr = new StreamReader(fs);
  char[] temp = new char[36];sr.Read(temp,0,36); //从文件中读36个字节到字符数组temp
  2.2生成Graphics对象
  C#的图形操作方法多封装于Graphics类中,使用这些方法必须先生成一个该类的实例。通常有三种方式得到一个实例。编程者应根据场合灵活地选择下述方式以达到功能和性能目标。
  1,用静态方法FromHwnd或者FromImage
  Bitmap Bm = new Bitmap("C:myPic.bmp”);
  Graphics g = Graphics.FromImage(Bm );
  2,某些控件的CreatGraphics方法
  Graphics g = pannel1.CreatGraphics();
  3,从绘图事件的参数e中获取
  Graphics g = e.Graphics;
  2.3 Graphics提供的线条绘制方法
  波形是一种不规则曲线,wav文件记录了波形上的各点数值,各点之间的横坐标间距由采样频率决定,各点的取值范围和精度由采样精度决定。波形绘制原理是用直线依次连接波形上相邻各个点。由于采样频率非常高,所以本来是由一些直线依次相连所构成的折线就在屏幕上形成了光滑细腻的曲线。Graphics类的DrawLine()方法绘制直线,该方法的一种重载形式需要三个参数:画笔,用以定义线条的颜色和样式;之后两个参数是起点和终点,其坐标是相对于相关绘图控件的位置,而非屏幕原点。
  Point p1 = new Point( 10, 20 );
  Point p2 = new Point( 90, 150 );
  Pen pen1 = new Pen( Color.Blue, 10 ); //其中10表示线条宽度。
  e.Graphics.DrawLine( pen1, p1, p2 ); // e是来自Paint事件的参数。
  3运行的结果及遇到的问题
  利用.Net C#的图形功能和文件操作类,再根据wav文件的格式构造合适的数据结构,能很顺利的读取wav文件,并以图形化的方式显示其波形。图1显示的是某单通道16位wav文件中一段约9毫秒长度的声音波形。
  
  图1
  图形编程常遇到的问题是控件上所绘制的图形在程序的切换过程中被破坏或丢失。其原因在于应用程序的前后台切换将导致窗体的paint()方法被调用,该方法将重绘控件表面,这样,原先通过代码绘制在控件表面的图形就在重绘控件外观的过程中消失了。解决之道在于利用Bitmap对象充当一个内存缓冲区,以该对象为参数,用Graphics类的FromImage()方法得到一个Graphics实例。通过该实例绘制的图形就保存于内存缓冲区中。然后在窗体的paint()方法中通过控件的DrawImage()方法将缓冲区中的图形画在控件表面。这样不仅解决了图形丢失问题,还会有很好的性能表现。
  参考文献:
  [1]赵文博,张生,孙国强,等. WAV音频分句的算法设计[J].微计算机信,2011(27):204-205.
  [2]黄煜,陈克安,郑文.声样本质量及其在声品质评价中的应用[J].电声基础,2008(32): 40-43.
  [3]李敏.音频文件格式wave的转换[J].电脑知识与技术,2005(8):73-75.
  [4]郑宇军. C#面向对象程序设计教程[M].北京:人民邮电出版社,2009:316-319.
其他文献
在颗粒流软件PFC2D的基础上,采用新的建模方法建立了层状岩体数值试样,并通过直剪试验验证了新方法的优越性。开展了不同层理倾角下的岩体单轴压缩试验的数值模拟,对层状岩体
针对传统的农产品质量特性波动溯源方法一直存在溯源不准确、效率低的问题,提出基于数据挖掘的农产品质量特性波动溯源方法。依据农产品质量特性之间的关系,将质量特性间的波
唐朝社会历史近三百年(618-907),处于中国封建社会的鼎盛时期。国家局势稳定,社会经济发展,文教事业繁荣,对当时亚洲各国以及宋元以后的历史发展,都产生了极为深远的影响。引
目的:探讨丹参川芎嗪治疗糖尿病合并冠心病的临床效果。方法:将2011年12月至2012年9月在我院接受治疗的100例糖尿病合并冠心病患者分为观察组与对照组各50例,分别采取常规治疗
目的:探讨中医护理在老年膝骨关节炎患者中的应用效果。方法:选取80例在我院就诊的膝骨关节炎患者,随机分为观察组(常规护理)和对照组(常规护理+中医护理)各40例。结果:观察
跳远运动支撑期间,下肢动作的准确性可使运动员最大程度避免受伤,且决定着运动员跳远成绩,因此需要对支撑期间下肢动作轨迹进行预测,以达到改善动作准确性的目的。传统方法预测动作轨迹时,一般采用光流估计法或变分方法;但这两种方法较为繁琐,且预测误差较大。为此,提出一种新的跳远运动支撑期间下肢动作轨迹预测方法,将跳远运动简化成运动员骨架的运动,获取三维人体骨架模型,通过未标定的多幅跳远运动支撑期间下肢动作图
该文主要讲述了有关企业信息化管理系统的基本概念,以及相对于传统的管理方式的优越性,还讲述了一些信息化管理系统所用到的开发技术以及系统开发和功能划分方面的内容,中间穿插
通过岩心观察、薄片鉴定、图像分析和扫描电镜等分析手段,对珠江口盆地文昌C油田退积型扇三角洲沉积储层特征和物性影响因素进行了深入研究。研究结果表明:研究区岩性较粗,成
在分析校园信息集成的特性及需求的基础上结合Web服务技术和面向服务架构的思想,提出了整体规划并简要阐述了如何采用Web服务技术来实现整个方案。
针对海上油田多轮次调剖后,调剖效果逐渐变差的问题,研制了一种成胶时间及强度可控的二次交联凝胶体系。通过改变交联剂合成过程中冰醋酸与已二酸的摩尔比,调控凝胶体系不同