微型计算机接口技术大作业

微型计算机接口技术大作业

ID:38714650

大小:238.00 KB

页数:11页

时间:2019-06-18

微型计算机接口技术大作业_第1页
微型计算机接口技术大作业_第2页
微型计算机接口技术大作业_第3页
微型计算机接口技术大作业_第4页
微型计算机接口技术大作业_第5页
资源描述:

《微型计算机接口技术大作业》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、微型计算机接口大作业——DirectX录音程序的实现学院:软件学院专业:网络安全姓名:学号:2011年6月11日星期六程序简介该程序使用DirectX提供的DirectSound来,控制音频驱动程序的各种接口,来录制和储存WAV音频文件。使用接口举例DirectSound中Capture捕获器对象来获取音频捕捉设备DirectSound中的CaptureBuffer捕获缓存储存由音频捕获设备捕获的数据。DirectSound中Notify消息通知对象对象来对缓冲区进行记录和界限。DirectSound中的WaveFormat设定录音的格式。WAV文件的二进制形式WA

2、V文件头格式:虚拟地址数据长度类型描述00H 4 char "RIFF"标志 04H 4long int 文件长度 08H 4 char "WAVE"标志 0CH 4 char "fmt"标志 10H 4   过渡字节(不定) 14H 2 int 格式类别(10H为PCM形式的声音数据) 16H 2 int 通道数,单声道为1,双声道为2 18H 2 int 采样率(每秒样本数),表示每个通道的播放速度, 1CH 4 long int 波形音频数据传送速率,其值为通道数×每秒数据位数×每样 本的数据位数/8。播放软件利用此值可以估计缓冲区的大小。 20H 2 int

3、 数据块的调整数(按字节算的),其值为通道数×每样本的数据位值/8。播放软件需要一次处理多个该值大小的字节数据,以便将其值用于缓冲区的调整。 22H 2   每样本的数据位数,表示每个声道中各个样本的数据位数。如果有多个声道,对每个声道而言,样本大小都一样。 24H 4 char 数据标记符"data" 28H 4 long int 语音数据的长度 缓冲区指针缓冲区是存放音频数据的地方,并且它还提供了我们两个指针:读指针和捕捉指针。它们的位置按照相对于缓冲区起始位置的偏移量计算。读指针位于当前已经被完全捕捉到缓冲区的数据末尾。捕捉指针位于当前将要从硬件中复制的数据块

4、的末尾。如果你想从缓冲区中读取数据,则只能从已经完全写入缓冲区的数据中读取,也就是说我们只能从偏移量小于读指针的地方读取。缓冲区通知时间相同的音频文件,WAVE文件会比其它格式的音频文件大得多,这是因为WAVE文件没有对数据进行压缩。如果录音的时候,不限制缓冲区大小,那么你录制很短的时间可能就会占用很多内存,说不定不过多久,你的2G内存就不够用了。因此我们必须对缓冲区的大小进行限制,而且当缓冲区满了之后,还可以重新从缓冲区起始处开始,用新的数据覆盖旧的数据。为保证不丢失旧的数据,那就得在旧的数据被覆盖之前,将它转移到其它地方。微软提供了“通知”的方法。在缓冲区中的某

5、些位置处设置通知,当读指针到达通知位置的时候,就会触发相应的事件执行转移操作。捕获流程程序代码上述主要在RecordSound类中usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Threading;usingSystem.IO;//对DirectSound的支持usingMicrosoft.DirectX;usingMicrosoft.DirectX.DirectSound;namespace_001{classSou

6、ndRecord{publicconstintcNotifyNum=16;//缓冲队列的数目privateintmNextCaptureOffset=0;//该次录音缓冲区的起始点privateintmSampleCount=0;//录制的样本数目privateintmNotifySize=0;//每次通知大小?privateintmBufferSize=0;//缓冲队列大小privatestringmFileName=string.Empty;//文件名?privateFileStreammWaveFile=null;//文件流privateBinaryWrite

7、rmWriter=null;//写文件privateCapturemCapDev=null;//音频捕捉设备privateCaptureBuffermRecBuffer=null;//缓冲区对象privateNotifymNotify=null;//消息通知对象privateWaveFormatmWavFormat;//录音的格式privateThreadmNotifyThread=null;//处理缓冲区消息的线程privateAutoResetEventmNotificationEvent=null;//通知事件t///

///构造函数,设定

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。