Interchange里的初中英语教材录音的录音

常见的歌曲文件格式有哪些?_百度知道
常见的歌曲文件格式有哪些?
首先,歌曲文件格式也是音频格式的一种,是指要在计算机内播放或是处理音频文件,是对声音文件进行数、模转换的过程。其次,常见的格式包括CD格式、WAVE(*.WAV)、AIFF、MP3、MPEG-4、MIDI、WMA、RealAudio、VQF、OggVorbis、AAC、APE等
其他类似问题
13人觉得有用
为您推荐:
提问者采纳
18左右。我们用装有FraunhoferIISMpeg Lyaer3的 MP3编码器(现在效果最好的编码器)MusicMatchJukebox6,新版本的WindowsMediaPlayer7,用*。MID文件格式由MIDI继承而来、CCITTALAW等多种压缩算法。但是树大招风,几乎所有的音频编辑软件都“认识”WAV格式。WMA这种格式在录制时可以对音质进行调节,Real公司正推出用于网络广播的、风头强劲,在大多数的音频编辑软件中也都支持它们这几种常见的音乐格式。这种内置了版权保护技术可以限制播放时间和播放次数甚至于播放的机器等等://www。 常见的格式有WMA?当然是CD了:天籁之音 当今世界上音质最好的音频格式是什么。在大多数播放软件的“打开文件类型”中,也能用电脑里的各种播放软件来重放:流行的风尚 MP3格式诞生于八十年代的德国。 WMA:无损的音乐 是微软公司开发的一种声音文件格式.vqf文件的软件,所以不论CD音乐的长短,制成*,MIDI允许数字合成器和其他设备交换数据.0作了详细的介绍,令带宽较富裕的听众获得较好的音质.mp3格式来储存,然后在告诉声卡如何再现音乐的一组指令,这种格式还是风靡一时。CD光盘可以在CD唱机中播放。*,MIDI,相同长度的音乐文件。 RealAudio流动的旋律 RealAudio主要适用于在网络上的在线音乐欣赏.mp1&#47。因此要讲音频格式,但是由于宣传不力,16位量化位数,第39期《电脑报》也对RealPlayer9。一个CD音频文件是一个*:有RA(RealAudio)。“*。根据压缩质量和编码处理的不同分为3层,支持多种音频位数,CD自然是打头阵的先锋。现在real的的文件格式主要有这么几种.0更是增加了直接把CD光盘转换为WMA声音格式的功能.mp3,在电脑上看到的“*、RMX(RealAudioSecured),这就是CD音轨了,现在大多数的用户仍然在使用56Kbps或更低速率的Modem,所谓的MP3也就是指的是MPEG标准中的音频部分。MID文件并不是一段录制好的声音,在新出品的操作系统WindowsXP中.0,也就是MPEG音频层.com" target="_blank">http。现在最新的版本是RealPlayer9,可以用64Kbps或更低的采样频率节省空间,它和日本YAMAHA公司开发的VQF格式一样,音质要强于MP3格式,MID文件主要用于原始乐器作品。今天,也正在瓜分Real打下的天下.wav文件的1&#47。采用缺省的CBR(固定采样频率)技术可以以固定的频率采样一首歌曲;“*。同时雅马哈也提供从*,WMA的另一个优点是内容提供商可以通过DRM(DigitalcentersManagement)方案如Windows Media centersManager7加入防拷贝保护,而是记录声音的信息,RealAudioG2),更远胜于RA格式.1K的采样频率,但是在微软的大规模推广下已经是得到了越来越多站点的承认和大力支持,作为主流音频格式的地位难以被撼动.0在128Kbps的频率下编码一首3分钟的歌曲,这只是一个索引信息,不过产生的MP3文件可能在某些播放器上无法播放,它的核心是减少数据流量但保持音质的方法来达到更高的压缩比.mid文件、RM(RealMedia,音质好的可与CD媲美,适合在网络上在线播放.com提供了歌曲的Real格式的试听版本,是以减少数据流量但保持音质的方法来达到比MP3压缩率更高的目的,看到了吧,MP3:不能直接的复制CD格式的*.1K的采样频率.wav文件转换到*:MPEG音频文件的压缩是一种有损压缩.mp3格式的发展提供了良好的条件,后台强硬,MPEG3音频编码具有10.emusic,而Windows操作系统和WindowsMediaPlayer的无缝捆绑让你只要安装了windows操作系统就可以直接播放WMA音乐,用于保存WINDOWS平台的音频信息资源,在网络广播方面.秒.mid格式的最大用处是在电脑作曲领域,标准格式的WAV文件和CD格式一样。 MP3,一般只有*,因为CD音轨可以说是近似无损的、达到CD音质的格式;所以在它问世之初还没有什么别的音频格式可以与之匹敌:1的高压缩率;“*,这种格式难有用武之地,都可以看到*。推荐大家使用这种方法,也是44,可以说技术上也是很先进的.WAV”格式支持MSADPCM。有的下载站点会提示你根据你的Modem速率选择最佳的Real文件,WMA是默认的编码格式。这些格式的特点是可以随网络带宽的不同而改变声音的质量,可以说是基本上无损抓音频,更方便的是不用象MP3那样需要安装额外的播放器,流行歌曲的业余表演://www,所以典型的回放并非最好的音质,游戏音轨以及电子贺卡等。我们把VBR的级别设定成为与前面的CBR文件的音质基本一样.cda格式;10,被WINDOWS平台及其应用程序所支持,16位量化位数.82MB的MP3文件,音质好,生成的VBRMP3文件为2,几乎所有的音频格式都感受到了WMA格式的压力,分别对应“*。注意:作曲家的最爱 经常玩音乐的人应该常听到MIDI(Musical InstrumentDigitalInterface)这个词CD格式,也可以通过声卡的MIDI口把外接音序器演奏的乐曲输入电脑里,同时基本保持低音频部分不失真。直到现在,在保证大多数人听到流畅声音的前提下:最具实力的敌人 WMA (Windows MediaAudio)格式是来自于微软的重量级选手。标准CD格式也就是44.cda文件”都是44字节长,速率88K&#47.9MB,还有更多。 VQF。虽然现在网络上还不是很流行。 MIDI,说白了也就是谁都可以用.vqf可以用雅马哈的播放器播放。*;秒,压缩率较高的可用于网络广播。 MP3格式压缩音乐的采样频率有很多种。许多音乐网站如<a href="http,这对被盗版搅得焦头乱额的音乐公司来说可是一个福音。*.cda文件到硬盘上播放.vqf.mid文件重放的效果完全依赖声卡的档次。 近来随着网络带宽的普遍改善,大家知道Netscape的遭遇,并不是真正的包含声音信息。 这里顺便提一下由苹果公司开发的AIFF(Audio InterchangeFileFormat)格式和为UNIX系统开发的AU格式:1~12.mp3”这3种声音文件,因此它的声音基本上是忠于原声的、采样频率和声道,CD是你的首选。因此,得到2,在网络音乐领域中直逼*,但是牺牲了声音文件中12KHz到16KHz高音频这部分的质量来换取文件的尺寸,它符合 PIFFResource Interchange FileFormat文件规范。它会让你感受到天籁之音。同一格式,这个转换过程如果光盘驱动器质量过关而且EAC的参数设置得当的话:末日黄花 雅马哈公司另一种格式是*,MP3音乐的版权问题也一直是找不到办法解决,因此如果你如果是一个音响发烧友的话。由于其文件尺寸小.mp2”&#47,而音质要次于CD格式或WAV格式的声音文件。*.mid文件可以用作曲软件写出,作为微软抢占网络音乐的开路先锋可以说是技术领先,因为MP3没有版权保护技术,另外WMA还支持音频流(Stream)技术,WMA的压缩率一般都可以达到1。需要提醒大家注意的地方是。这样一个MIDI文件每存1分钟的音乐只用大约5~10KB,这里不再赘述.cda文件,也可以用320Kbps的标准达到极高的音质。 WAV,因而为*,它们都和和WAV非常相像,它就会提醒你下载一个免费的升级包。如果你的RealPlayer软件不能处理这种格式,需要使用象EAC这样的抓音轨软件把CD格式的文件转换成WAV,速率88K&#47,现在“狼”又来了,WAV格式的声音文件质量和CD相差无几,而VBR(可变采样频率)则可以在音乐“忙”的时候加大采样的频率获取更高的音质,也是目前PC机上广为流行的声音文件格式
文件格式的相关知识
其他1条回答
mp3 rm wma
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁语音文件夹都有哪些名字_百度知道
语音文件夹都有哪些名字
放语音文件的那个是什么名字有金鹏A689的最好看一下,区分大小写。没有的也可以把你知道的手机上的语音文件夹发上来,我试一下
我有更好的答案
CD格式:天籁之音
当今世界上音质最好的音频格式是什么?当然是CD了。因此要讲音频格式,CD自然是打头阵的先锋。在大多数播放软件的“打开文件类型”中,都可以看到*.cda格式,这就是CD音轨了。标准CD格式也就是44.1K的采样频率,速率88K/秒,16位量化位数,因为CD音轨可以说是近似无损的,因此它的声音基本上是忠于原声的,因此如果你如果是一个音响发烧友的话,CD是你的首选。它会让你感受到天籁之音。CD光盘可以在CD唱机中播放,也能用电脑里的各种播放软件来重放。一个CD音频文件是一个*.cda文件,这只是一个索引信息,并不是真正的包含声音信息,所以不论CD音乐的长短,在电脑上看到的“*.cda文件”都是44字节长。注意:不能直接的复制CD格式的*.cda文件到硬盘上播放,需要使用象EAC这样的抓音轨软...
音乐文件夹是music(通常都是MP3格式)影音文件夹是audio(通常都是3GP格式)
其他类似问题
为您推荐:
文件夹的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁&& 这是我很早以前的大学毕业设计,忽然间找到贴出来以纪念自己的纯真年代...但是因为CSDN不给面子所以导致短短的一篇文章贴了足足7次..他老提时说文章超过了64K,老大,拜托,那是算上了里面的图片大小吧...:-(
&& 本文简单介绍了声卡的工作原理&,&录音的原理以及数字音频的基本知识并且利用&Windows&提供的&Waveform
Aduio APIs&以及&Multimedia File I/O APIs&实现一个Windows&环境下的麦克风录音以及将录音文件保存成&.wav&文件的简单系统&.
&&Waveform Aduio APIs, Multimedia File I/O APIs,waveInXXX,
mmioXXX,&麦克风&,&录音&,&波形文件&,VC6&#43;&#43;
&&要深入的了解麦克风录音的实现我们必须了解声卡的工作原理&,麦克风录音的原理以及了解相关的编程接口,下面我们将慢慢道来…
1.&声卡的工作原理
声卡的工作原理其实很简单&,我们知道,麦克风和喇叭所用的都是模拟信号,而电脑所能处理的都是数字信号,两者不能混用,声卡的作用就是实现两者的转换。从结构上分,声卡可分为模数转换电路和数模转换电路两部分,模数转换电路负责将麦克风等声音输入设备采到的模拟声音信号转换为电脑能处理的数字信号,而数模转换电路负责将电脑使用的数字声音信号转换为喇叭等设备能使用的模拟信号,就这么简单&。
上图就是一块典型的声卡&,&Mic&插口&用于连接麦克风&,&通过它可以录制外界的声音
2.&数字音频基础知识
&&麦克风录音的过程其实就是将模拟信号转化成数字信号的过程&,&其中涉及的一些概念如下&:
&1.&采样率&(Sampling Rate)
&&&&采样率指声卡在一秒之中对声音&(&波形&)&作记录的次数&,&根据研究声音播出时的质量常常只能达到采样率的一半&,&因此必须采取双倍的采样率才能将声音标准重现&.&也就是只要采样率大于原始信号频率的两倍以上即可减低错误&,&达到和原始声音差不多的质量&.&人的听力大概是&20KHZ,&所以高品质的采样率应为其两倍以上&.
&&&&当声音来源为音乐时&,&因为它所横跨的频率变化极为宽广&,&通常以&44.1KHZ&的频率为&CD&音乐采样率的标准&.&但是若以语言为主由于人说话的语音大概是&10KHZ,&因此加倍采样&,&只取&22KHZ&即可&,&采样率越高所记录下来的音质就越清晰&,&当然&,&越高的采样所记录下的文件就越大&.
&&2.&采样位
&&&&解析度决定了采样的音波是否能保持原来的形状&,&越接近原型则需解析度越高&,&若以&8&位来采样的话其能表达的组合种类是&2&的&8&次方&,&即&256,&表示用&8&位的采样大小能分辨出&256&个层次的声音&,&若用&16&位来采样&,&则能分辨的差异将高达&2&的&16&次方&,&为&65536,&其精度自然大为提高&.16&位&,8&位采样的差别在于动态范围的宽窄&,&动态范围宽广&,音量起伏的大小变化就能够更精细的被记录下来&,&如此一来不论是细微的声音或是强烈的动感震撼&,&都可以表现的淋漓尽致&,&而&CD&音质的采样规&#26684;正式&16&位采样的规&#26684;&.
&&3.&量化误差&(Quantization error)
&&&&&&&在采样的过程中&,&不断连续变化的模拟信号要用数字化的数&#20540;来表示&,&这样的过程就会发生所谓的量化误差&(Quantization error).&所谓的量化误差指的是实际的信号的振幅&(smplitude)&和数字化之后所的数字之间的差异&.&如果用将数字信号还原成模拟信号的角度看&,&量化误差就是失真&(Distortion).&我们可以用增加采样大小的方式来降低量化误差&,也就是更多的位&(bits)&来表示一个采样信号&,&这样可以提高精度&.
&4.&量化&(Quantization),&线性量化法&(Linear quantization)&和非线性量化法&(Nonlinear
quantization)
&&&&&&&所谓的量化&(Quantization)&就是将模拟信号所代表的连续范围分成一段一段的区间&(Interval),&每一段区间我们定义一个数字化的&#20540;&.&区间的数目是跟采样大小有关&,&举例来说&,&有一种最简单的量化法称为&”&线性量化法&”(Linear quantization),&这种量化法采用等距离的间隔空间&,&架设一个讯号它的最大&#20540;是&5.0,&采样大小为&3&位&,&则每个量化区间就时&5.0/2^3,&也就是&0.625&单位&.&另外一种相反的量化方法就是&”&非线性量化法&”(Nonlinear
quantization),&这种量化法采用不同的间隔空间&.&以&”&对数量化法&”(Logarithm quantization)&为例&.&低振幅范围的量化区间就比高振幅的范围的区间较为接近&,&用这种量化的法产生的结果就是在低振幅时我们会得到佳好的效果&.&通常如果使用同样的采样大小&,非线性量化法会比线性量化法得到更好的声音品质&.&但是如果是要对声音做滤波&(filtered)&或一些运算的时候&,&使用线性量化法会比较容易处理&.
&5.&声音强度
&&&&&&&&&波形振幅的平方.两个声音强度上的差常以分贝&(db)&为单位来度量&,计算公式如下:
&&&&20*log(A1/A2)&分贝&,&A1,A2&为两个声音的振幅&.
a.&如果采样大小为&8&位&,则采样的动态范围为&20*log(256)&分贝&=48
b.&如果样本大小为&16&位&,则采样动态范围为&20*log(65536)&大约是&96&分贝&,接近了人听觉极限和痛苦极限,是再线音乐的理想范围,&windows&同时支持&8&位和&16&位的采样大小&.
&6.&音频编码方法
&&&&&&目前已经发展了许多音频编码的方法用以减少存储量或是传输的时间&,&以下所列为两种较普遍的编码方法&:
&&&a.PCM(Pulse code modulation);
脉冲编码调制&,即对波形按照固定周期频率采样。为了保证采样后数据质量,采样频率必须是样本声音最高频率的两倍,这就是&Nyquist&频率&.
&&&b.ADPCM(Adaptive delta pulse modulation).
3.&RIFF&文件结构和&WAVE&文件&#26684;式&
  &Windows&支持两种&RIFF(Resource Interchange File Format,&&资源交互文件&#26684;式&&)&&#26684;式的音频文件:&MIDI&的&RMID&文件和波形音频文件&#26684;式&WAVE&文件,其中在计算机领域最常用的数字化声音文件&#26684;式是后者,它是微软专门为&Windows&系统定义的波形文件&#26684;式(&Waveform Audio&),由于其扩展名为&&*.wav&&,因而该类文件也被称为WAVE&文件。&为了突出重点,有的放矢,本文涉及到的声音文件所指的就是&WAVE&文件。常见的&WAVE&语音文件主要有两种,分别对应于单声道(&11.025KHz&采样率、&8Bit&的采样&#20540;)和双声道(&44.1KHz&采样率、&16Bit&的采样&#20540;)。这里的采样率是指声音信号在进行&&&模→数&&&转换过程中单位时间内采样的次数。采样&#20540;是指每一次采样周期内声音模拟信号的积分&#20540;。对于单声道声音文件,采样数据为八位的短整数(&short
int 00H-FFH&);而对于双声道立体声声音文件,每次采样数据为一个&16&位的整数(&int&),高八位和低八位分别代表左右两个声道。&WAVE&文件数据块包含以脉冲编码调制(&PCM&)&#26684;式表示的样本。在进行声音编程处理以前,首先让我们来了解一下&RIFF&文件和&WAVE&文件&#26684;式。&
  &RIFF&文件结构可以看作是树状结构,其基本构成是称为&&&块&&&(&Chunk&)的单元,每个块有&&&标志符&&&、&&&数据大小&&&及&&&数据&&&所组成,块的结构如图&2&所示:
块的标志符(&4BYTES&)
数据大小&(&4BYTES&)
&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&图&2&
  从上图可以看出,其中&&&标志符&&&为&4&个字符所组成的代码,如&&RIFF&&,&&LIST&&等,指定块的标志&ID&;数据大小用来指定块的数据域大小,它的尺寸也为&4&个字符;数据用来描述具体的声音信号,它可以由若干个子块构成,一般情况下块与块是平行的,不能相互嵌套,但是有两种类型的块可以嵌套子块,他们是&&RIFF&&或&&LIST&&标志的块,其中RIFF&块的级别最高,它可以包括&LIST&块。另外,&RIFF&块和&LIST&块与其他块不同,&RIFF&块的数据总是以一个指定文件中数据存储&#26684;式的四个字符码(称为&#26684;式类型)开始,如WAVE&文件有一个&&WAVE&&的&#26684;式类型。&LIST&块的数据总是以一个指定列表内容的&4&个字符码(称为列表类型)开始,例如扩展名为&&.AVI&&的视频文件就有一个&&strl&&的列表类型。&RIFF&和&LIST&的块结构如下:
RIFF/LIST&标志符
数据&1&大小
&#26684;式&/&列表类型
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&图&3&
  &WAVE&文件是非常简单的一种&RIFF&文件,它的&#26684;式类型为&&WAVE&&。&RIFF&块包含两个子块,这两个子块的&ID&分别是&&fmt&&和&&data&,&其中&&fmt&&子块由结构PCMWAVEFORMAT&所组成,其子块的大小就是&sizeofof(PCMWAVEFORMAT),&数据组成就是&PCMWAVEFORMAT&结构中的数据。&WAVE&文件的结构如下图&4&所示:
标志符(&RIFF&)
&#26684;式类型(&&WAVE&&)
Sizeof(PCMWAVEFORMAT)
PCMWAVEFORMAT
声音数据大小
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&图&4&
  &PCMWAVEFORMAT&结构定义如下:
typedef struct
&&&&&WAVEFORMAT&&&&&&&&&//&波形&#26684;式&,&前面已经提过了&;&
&&&&&WORD wBitsPerS// WAVE&文件的采样大小;&
}PCMWAVEFORMAT
&&data&子块包含WAVE文件的数字化波形声音数据,其存放&#26684;式依赖于&fmt&子块中wFormatTag成员指定的&#26684;式种类,在多声道WAVE文件中,样本是交替出现的。如16bit的单声道WAVE文件和双声道WAVE文件的数据采样&#26684;式分别如图5所示:
  16位单声道:
  &16&位双声道:
采样一&……
&&&&&&&&&&&&&&&             &图&5
4.&硬件抽象层&(&HAL,&Hardware Abstraction&Layer&)
&&&&&HAL&是一个可加载的核心模块&(HAL.dll)&,它为运行在&Windows NT&架构&(&包括&WindowsNT4.0,Windows2000,WindowsXP)&上&的硬件平台提供低级接口&,&HAL隐藏各种与硬件有关的细节&,例如:&I/O&接口&,中断控制器,声卡…这样的话如果用户需要访问声卡硬件的话只能通过该声卡的驱动程序来实现,声卡驱动程序再调用&HAL中的相应例程来实现&,下图显示了&HAL&,声卡驱动程序,&Waveform Audio APIs&,我们的麦克录音程序之间的关系:
5.&Waveform Audio
&&&&&Waveform Audio APIs&是&Microsoft&提供给广大&Win32&程序员用来给自己的应用程序添加声音支持的一套强大的&API,&它提供的功能如下&:
&&&&&&&&&1.&打开&/&关闭&/&查询声音设备&;
&&&&&&&&2.&播放波形文件&;
&&&&&&&&3.&设置播放速度&;
&&&&&&&&&4.&播放进度控制&;
&&&&&&&&&5.&录音&;
&&&&&&&&&6.&得到当前的播放位置&;
&&&&&&&&7.&调节音量&.
下面简单介绍一下这套&API&提供的主要函数&:
打开录音设备函数
&&&&&&&&&&&&MMRESULT waveInOpen(
&&&&&&&&&&& LPHWAVEIN phwi,&&&&&&&&&&&&&&&&&//&输入设备句柄
&&&&&&&&&&&&UINT uDeviceID,&&&&&&&&&&&&&&&&&& //&输入设备&ID
&&&&&&&&&&&&LPWAVEFORMATEX pwfx,&&&&&& //&录音&#26684;式指针
&&&&&&&&&&&&DWORD dwCallback,&&&&&&&&&&&&&&//&处理&MM_WIM_***&消息的回调函数或窗&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&口句柄,线程&ID
&&&&&&&&&&& DWORD dwCallbackInstance,&
&&&&&&&&&&& DWORD fdwOpen&&&&&&&&&&&&&&&&& //&处理消息方式的符号位
&&&&&&&&&&);
为录音设备准备缓存函数
&&&&&&&&&&&&&&MMRESULT waveInPrepareHeader(& HWAVEIN hwi,&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&LPWAVEHDR pwh,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&UINT bwh );&
给输入设备增加一个缓存
&&&&&&&&&&&&&&MMRESULT waveInAddBuffer(& HWAVEIN hwi,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&LPWAVEHDR pwh,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&UINT cbwh );&
&&&&&&&&&&&&&&MMRESULT waveInStart(& HWAVEIN hwi& );&
&&&&&&&&&&&&&&MMRESULT waveInUnprepareHeader( HWAVEIN hwi,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&LPWAVEHDR pwh,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&UINT cbwh);&
&&&&&&&&&&&&&&MMRESULT waveInReset( HWAVEIN hwi );&
关闭录音设备
&&&&&&&&&&&&&&MMRESULT waveInClose( HWAVEIN hwi );&
Wave_audio&数据&#26684;式
&&&&&&&&&&&&&&typedef struct {
&&&&&&&&&&&&&&&&&&&WORD& wFormatT //&数据&#26684;式,一般为&WAVE_FORMAT_PCM&即
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&脉冲编码
&&&&&&&&&&&&&&&&&& WORD& nC&&&&&//&声道
&&&&&&&&&&&&&&&&&& DWORD nSamplesPerS&&&//&采样频率
&&&&&&&&&&&&&&&&&& DWORD nAvgBytesPerS&&//&每秒数据量
&&&&&&&&&&&&&&&&&& WORD& nBlockA
&&&&&&&&&&&&&&&&&& WORD& wBitsPerS&&&&&//&样本大小
&&&&&&&&&&&&&&&&&& WORD& cbS
&&&&&&&&&&&&} WAVEFORMATEX;&
waveform-audio&缓存&#26684;式 
&&&&&&&&&&&&&typedef struct {
&&&&&&&&&&&&&&&&&& LPSTR& lpD&&&&&&&&&&&&&&&&&&&&//&内存指针
&&&&&&&&&&&&&&&&&&&DWORD& dwBufferL&&&&//&长度
&&&&&&&&&&&&&&&&&&&DWORD& dwBytesR //&已录音的字节长度
&&&&&&&&&&&&&&&&&&&DWORD& dwU
&&&&&&&&&&&&&&&&&&&DWORD& dwF
&&&&&&&&&&&&&&&&&&&DWORD& dwL&&&&&&&&&&&&&&//&循环次数
&&&&&&&&&&&&&&&&&&&struct wavehdr_tag * lpN
&&&&&&&&&&&&&&&&&&&DWORD&
&&&&&&&&&&&&&} WAVEHDR;&
相关消息 
&&&&&&&&&&&&&MM_WIM_OPEN:&打开设备时消息,在此期间我们可以进行一些初始化工作
&&&&&&&&&&&&&MM_WIM_DATA:&当缓存已满或者停止录音时的消息,处理这个消息可以对
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&缓存进行重新分配,实现不限长度录音
&&&&&&&&&&&&&MM_WIM_CLOSE&:关闭录音设备时的消息。
5. Multimedia File I/O
&&&&&&&Multimedia File I/O APIs&是&Microsoft&提供的另外一套强大的针对媒体文件&I/O&的&API,&我们知道许多像&MediaPlay,RealOne&这样的多媒体程序对媒体文件的读写性能要求很高&,&它们几乎要求实时的将磁盘上的媒体文件以流的形式读入&,&但是对于一般的文件&I/O&形式如图&1:
1.文件从磁盘上被读入操作系统的File I/O的
&&&&2.&然后拷贝到应用程序自己的&buffer&中&;
&&&&3.&应用程序这时候才能读取文件内容&.
&&&&&&&&上述的过程对于多媒体应用程序来说是低效的而且浪费宝贵的内存资源,如果文件和大的话势必还要采取分段读取等机制,&Multimedia File I/O&采取了一种直接存取机制&(&如图&2),&使得应用程序可以直接读取操作系统的&File I/O buffer,&大大提高了效率&.&后面我们会利用此套&API&实现录音文件的存储&.
6.&麦克录音系统简介
&&&本文实现的麦克录音系统将具备以下功能&:
&&&&&&1.&录制用户通过麦克风发出的声音&;
&&&&&&&&&&&&&&&&这将利用到&Waveform APIs,&流程如下&:
&&&&&&&&&&&&&&&&&&&&&a.&打开录音设备&waveInO
&&&&&&&&&&&&&&&&&&&&&b.&准备&wave&数据头&waveInPrepareH
&&&&&&&&&&&&&&&&&&&&&c.&准备数据块&waveInAddB
&&&&&&&&&&&&&&&&&&&&&d.&开始录音&waveInS
&&&&&&&&&&&&&&&&&&&&&e.&停止录音&(waveInReset);
&&&&&&&&&&&&&&&&&&&&&f.&关闭录音设备&(waveInClose);
&&&&&&&&&&&&&&&&&&&&&g.&当开始录音后当&buffer&已满时&,&将收到&MM_WIM_DATA&消息&,&处理该
&&&&&&&&&&&&&&&&&&&&&&&&消息可以保存已录好数据&.
&&&&&&&2.&根据用户的声音强弱动态显示声音波形&;
&&&&&&&&&&&&这主要通过&GDI&函数来实现&.
&&&&&&3.&将用户通过麦克风发出的声音录制成&wav&文件保存&.
&&&&&&&&&&&&这将利用到&Multimedia file I/O APIs.
&&&&&&&&&&&&&&&&&a&.调用&mminoOpen&函数来打开&WAVE&文件&,&获取&HMMIO&类型的文件句柄&;&
  &&&&&&&&&&&&b&.根据&WAVE&文件的结构&,&调用&mmioRead&、&mmioWrite&和&mmioSeek&函数实现文件的读、写和定位操作&;&
&&  &&&&&&&&&&&c&.调用&mmioClose&函数来关闭&WAVE&文件&.&&
7.&麦克录音系统的实现&(MicDemo)&&&
下面是该系统的界面&:
&对于录音来说最重要的就是CSoundIn类,下面就是该类的定义:
&namespace&&perdubug&&{&&&//&&prevent&the&name-space&pollution&&
&class&&CSoundIn&&
&public&:&&&&
&&&&&&&&&&&&&&&&BOOL&&&&&__initMic();&&//&&get&the&best&wave&format&supported&by&your&sound&card
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&&and&then&i&will&use&the&format&to&capture&sound.&
&&&&&&&&&&&&&&&&&void&&&&&&__closeMic();
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&BOOL&&&&&__openMic();&&//&&open&device&and&begin&to&capture&with&the&best&format(when&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&&invoke&__initMic&function&then&you&will&get&the&best&format
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&&supported&by&host's&sound&card
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&//&
&&&&&&&&&&&&&&&&&//&&if&your&want&to&capture&sound&and&export&into&a&wav&file&please&invoke&this&function
&&&&&&&&&&&&&&&&&//&&to&tell&me&the&full&path&then&i&will&create&the&wav&file.
&&&&&&&&&&&&&&&&&//
&&&&&&&&&&&&&&&&&void&&&&&&__createOutputWaveFile(&const&&TCHAR&&*&&lpszFileName);
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&//&&if&you&invoke&any&member&function&return&error/false&please
&&&&&&&&&&&&&&&&&//&&use&this&function&to&get&the&result&
&&&&&&&&&&&&&&&&DWORD&&&&__getLastError();
&&&&&&&&&&&&&&&&&//&
&&&&&&&&&&&&&&&&&//&&when&the&capture&buffer&is&filled&please&invoke&this&function&to&'add&buffer'(Actually
&&&&&&&&&&&&&&&&&//&&you&should&create&two-circular&buffers,when&1st&buffer&is&filled&then&switch&to&2st,1st
&&&&&&&&&&&&&&&&&//&&buffer&will&be&wrote&into&wav&file.
&&&&&&&&&&&&&&&&&//
&&&&&&&&&&&&&&&&&void&&AddBuffer();
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&virtual&&&~&CSoundIn();
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&friend&CSoundIn&&&&&theSoundCapture();
&private&:
&&&&&&&&&&&&&&&&BOOL&&GetBestWaveFormat(WAVEFORMATEX&&&&&waveFormatEx);
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&//&&because&sound&card&is&one&and&only&so&i&must&limit&the&number&of&CSoundIn&object,
&&&&&&&&&&&&&&&&&//&&but&how&to&limit&the&class&object&nums?maybe&put&constructor&into&private&scope&is
&&&&&&&&&&&&&&&&&//&&a&good&idea,:-)&
&&&&&&&&&&&&&&&&CSoundIn();&&&&&&&&&&
&private&:
&&&&&&&&&&&&&&&&WAVEINCAPS&&&&&&&&&&&&&&&&&&&&m_WaveInDevC
&&&&&&&&&&&&&&&&HWAVEIN&&&&&&&&&&&&&&&&&&&&&&&&&&&&m_WaveIn;
&&&&&&&&&&&&&&&&WAVEHDR&&&&&&&&&&&&&&&&&&&&&&&&&&&m_WaveH
&&&&&&&&&&&&&&&&WAVEFORMATEX&&&&&&&&&&&&m_WaveF&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&UINT&&&&m_WaveInSampleR
&&&&&&&&&&&&&&&&&int&&&&&&&&&&m_NbMaxS
&&&&&&&&&&&&&&&&UINT&&&&m_SizeR
&&&&&&&&&&&&&&&&DWORD&&&m_dwLastE
&&&&&&&&&&&&&&&&&enum&&&{&MAX_SIZE_INPUT_BUFFER&&=&&&1&&&*&&&2&&&*&&&1024&&}&;&&//&&samples&*&voie&*&size_samples&
&&&&&&&&&&&&&&&&SHORT&&InputBuffer[MAX_SIZE_INPUT_BUFFER];&&&&//&&used&for&int&FFT,many&GUI&application&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&&want&to&display&sound&peak&so..&
&&&&&&&&&&&&&&&&BOOL&&&m_bTerminateT&&&&&&&&&&&&&&&&&&&&//&&&to&'kill'&waveCallback&function&
&&&&&&&&&&&&&&&&BOOL&&&m_bImportToWaveF
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&CWaveFile&&&&&&&m_waveF
}&&&//&&end&namespace&perdubug&
对于将录音保存在WAV文件的工作主要是由CwaveFile类来完成.下面是该类的定义:
&//&&Encapsulates&reading&or&writing&sound&data&to&or&from&a&wave&file
&//&-----------------------------------------------------------------------------&
&class&&CWaveFile
&&&&WAVEFORMATEX&*&&m_&&&&&&&&&//&&Pointer&to&WAVEFORMATEX&structure&
&&&&HMMIO&&&&&&&&&&&&&&m_&&&&&&&&&&&&&&&//&&MM&I/O&handle&for&the&WAVE&
&&&&MMCKINFO&&&&&&m_&&&&&&&&&&&&&&&&&&&&&&&//&&Multimedia&RIFF&chunk&
&&&&MMCKINFO&&&&&&m_ckR&&&&&&&&&&&&&&&&//&&Use&in&opening&a&WAVE&file&
&&&&DWORD&&&&&&&&&&&&&m_dwS&&&&&&&&&&&&&&//&&The&size&of&the&wave&file&
&&&&MMIOINFO&&&&&&&m_mmioinfoO
&&&&DWORD&&&&&&&&&&&&&m_dwF
&&&&BOOL&&&&&&&&&&&&&&&&&m_bIsReadingFromM
&&&&BYTE&*&&&&&&&&&&&&&&&&m_pbD
&&&&BYTE&*&&&&&&&&&&&&&&&&m_pbDataC
&&&&ULONG&&&&&&&&&&&&&&m_ulDataS
&&&&CHAR&*&&&&&&&&&&&&&&&m_pResourceB&&&&
&protected&:
&&&&HRESULT&ReadMMIO();
&&&&HRESULT&WriteMMIO(&WAVEFORMATEX&&*&pwfxDest&);
&&&&CWaveFile();
&&&&&~&CWaveFile();
&&&&HRESULT&Open(&LPCTSTR&strFileName,&WAVEFORMATEX&*&&pwfx,&DWORD&dwFlags&);
&&&&HRESULT&OpenFromMemory(&BYTE&*&&pbData,&ULONG&ulDataSize,&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&WAVEFORMATEX&*&&pwfx,&DWORD&dwFlags&);
&&&&HRESULT&Close();
&&&&HRESULT&Read(&BYTE&*&&pBuffer,&DWORD&dwSizeToRead,&DWORD&*&&pdwSizeRead&);
&&&&HRESULT&Write(&UINT&nSizeToWrite,&BYTE&*&&pbData,&UINT&*&&pnSizeWrote&);
&&&&DWORD&&&GetSize();
&&&&HRESULT&ResetFile();
&&&&WAVEFORMATEX&*&&GetFormat()&&{&&return&&m_&}&;
&我们有了这两个强有力的类的支持就可以开始我们的编程工作了….
&&&&1&.用VC6&&#43;&#43;&建立一个MFC基于对话框的工程:MicD
&&&&2&.添加我们的两个类CSoundIn,CwaveF&&&&&&&&
&&&&3&.当我们点击开始(Start)按钮的时候我们就要开始录音了…
&&&&&&&&&&void&&CMicDemoDlg::OnStart()&
&&&&&&&&&{
&&&&&&&&&&&&&&&&m_btnStart.EnableWindow(FALSE);&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&if&(theSoundCapture().__initMic())
&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&m_filePath.SetWindowText(_T(&&&yangchen.wav.&&&));&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&theSoundCapture().__createOutputWaveFile(_T(&&&yangchen.wav&&&));&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&if&(&!&theSoundCapture().__openMic())
&&&&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&::MessageBox(&this&-&&m_hWnd,_T(&&&Can&not&open&microphone!&&&),&_T(&&&Error&&&),MB_OK&|&MB_ICONERROR);
&&&&&&&&&&&&&&&&&&&&&&&&&&return&;
&&&&&&&&&&&&&&&&&&&&&&}&
&&&&&&&&&&&&&&&&}&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&m_btnStop.EnableWindow(TRUE);
&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&//&&设置定时器是为了画波形用的&&&&&&&
&&&&&&&&&&&&&&&&&SetTimer(&1&,&&200&&&/*&start&slow&*/&,&NULL);
&&&&&&&&&&&}&
&&&&&4&.在定时器的回调函数中画波形.
&&&&&&&&&&&&void&&CMicDemoDlg::OnTimer(UINT&nIDEvent)&
&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&if&(nIDEvent&&==&&&1&)
&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&static&&&const&&&int&&xCon&&=&&&13&;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&static&&&const&&&int&&yCon&&=&&&13&;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&static&&&const&&&int&&wCon&&=&&&623&;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&static&&&const&&&int&&hCon&&=&&&80&;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&CClientDC&dc(&this&);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&CBitmap&&&B
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&CBitmap&&*&&pbmOld&&=&&NULL;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&CDC&&&&&&&&&dcM
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&dcMem.CreateCompatibleDC(&&&dc);&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Bitmap.CreateCompatibleBitmap(&&&dc,wCon,hCon);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&pbmOld&&=&&dcMem.SelectObject(&&&Bitmap);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&dcMem.PatBlt(&0&,&0&,wCon,hCon,&WHITENESS);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&dcMem.MoveTo(&0&,hCon&/&2&);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&&display&incomming&signal--key&idea!
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&for&(&int&&x&&=&0&&;&x&&&&&wC&x&&#43;&#43;&)&&&//&&display&Input&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&dcMem.LineTo(x,(hCon&&&&&&&1&)&&-&&(theSoundCapture().InputBuffer[x]&&&&&&&7&));
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&dc.BitBlt(xCon,yCon,wCon,hCon,&&&dcMem,&&0&,&&0&,&SRCCOPY);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&dcMem.SelectObject(pbmOld);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&dcMem.DeleteDC();&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&}&
&&&&&&&&&&&&&&&&&&&else&
&&&&&&&&&&&&&&&&&&&&&&&&&CDialog::OnTimer(nIDEvent);
&&&&&&&&&&&&}&
&&&&&&&5&.点击停止(Stop)按钮的时候停止录音和写WAV文件
&&&&&&&&&&&&&&&&&&&void&&CMicDemoDlg::OnStop()&
&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&m_btnStop.EnableWindow(FALSE);&
&&&&&&&&&&&&&&&&&&&&&&&&theSoundCapture().__closeMic();&
&&&&&&&&&&&&&&&&&&&&&&&&m_btnStart.EnableWindow(TRUE);
&&&&&&&&&&&&&&&&&}&
看完整段代码你可能会很奇怪怎么在CmicDemoDlg中居然都没有定义一个CSoundIn对象&??&呵呵,原因很简单,因为设备的独占性所以在一个时刻只能有一个CSoundIn对象存在(因为CSoundIn对象需要占据录音设备),所以我们必须限制程序员生成CSoundIn对象的数量,怎么限制呢&?&那就是把CSoundIn的构造函数放在private区域里面:
&&&&&&private&:
&&&&&&&&&&&&&&&&BOOL&&GetBestWaveFormat(WAVEFORMATEX&&&&&waveFormatEx);
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&//&&because&sound&card&is&one&and&only&so&i&must&limit&the&number&of&CSoundIn&object,
&&&&&&&&&&&&&&&&&//&&but&how&to&limit&the&class&object&nums?maybe&put&constructor&into&private&scope&is
&&&&&&&&&&&&&&&&&//&&a&good&idea,:-)&
&&&&&&&&CSoundIn();&&&&&&&&&&
这样的话就根本无法声明一个CSoundIn对象,不信你试一下在你的代码中写上:
&&&&&CSoundIn&&soundInO
&能编译通过吗&?&肯定是不能,那如何调用CSoundIn的成员函数呢&?&答案是通过一个全局函数:
&&&&&&&&&&&&&&&//&&global&function,:-(
&&&&&&&&&&&&&&&//&&client&can&only&through&this&function&to&use&CSoundIn&object&
&&&&&&&&&&&&&&CSoundIn&&&&&theSoundCapture()
&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&static&&CSoundIn&p;
&&&&&&&&&&&&&&&&&&&&&&return&&p;
&&&&&&&&&&&&&&&}&
&&这时候你应该明白了为什么上面的代码中调用CSoundIn的成员函数的时候都是用theSoundCapture来做的原因了吧.&
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1994536次
积分:26640
积分:26640
排名:第115名
原创:259篇
转载:2100篇
评论:204条
(9)(39)(8)(58)(4)(13)(8)(16)(82)(74)(85)(9)(28)(5)(11)(13)(2)(2)(6)(9)(33)(8)(15)(3)(4)(1)(1)(8)(61)(10)(5)(1)(3)(40)(44)(21)(19)(11)(1)(1)(1)(1)(3)(14)(48)(48)(2)(14)(53)(12)(12)(17)(9)(25)(15)(17)(9)(18)(18)(2)(6)(1)(14)(8)(12)(23)(26)(14)(2)(13)(17)(53)(13)(2)(6)(5)(15)(10)(19)(14)(15)(5)(14)(28)(15)(17)(22)(3)(18)(9)(10)(13)(21)(22)(110)(78)(81)(21)(23)(42)(3)(5)(19)(16)(31)(1)(7)(14)(9)(12)(27)(30)(10)(19)(12)(6)(13)(17)(18)(23)(28)(19)(12)(5)(3)(5)(5)(5)(21)(11)(39)}

我要回帖

更多关于 初中英语教材录音 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信