- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
微型计算机接口技术大作业
微型计算机接口大作业
——DirectX录音程序的实现
学院: 软件学院
专业: 网络安全
姓名:
学号:
2011年6月11日星期六
程序简介
该程序使用DirectX提供的DirectSound来,控制音频驱动程序的各种接口,来录制和储存WAV音频文件。
使用接口举例
DirectSound中Capture捕获器对象来获取音频捕捉设备
DirectSound中的CaptureBuffer捕获缓存储存由音频捕获设备捕获的数据。
DirectSound中Notify消息通知对象对象来对缓冲区进行记录和界限 。
DirectSound中的WaveFormat设定录音的格式。
WAV文件的二进制形式
WAV文件头格式:
虚拟地址 数据长度 类型 描述
00H ?4? char ?RIFF标志?04H?4 long?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 ?数据块的调整数(按字节算的),其值为通道数×每样本的数据位值/8。播放软件需要一次处理多个该值大小的字节数据,以便将其值用于缓冲区的调整。?22H?2? ?每样本的数据位数,表示每个声道中各个样本的数据位数。如果有多个声道,对每个声道而言,样本大小都一样。?24H?4? char ? 数据标记符"data"?28H?4? long?int? 语音数据的长度?缓冲区是存放音频数据的地方,并且它还提供了我们两个指针:读指针和捕捉指针。它们的位置按照相对于缓冲区起始位置的偏移量计算。读指针位于当前已经被完全捕捉到缓冲区的数据末尾。捕捉指针位于当前将要从硬件中复制的数据块的末尾。如果你想从缓冲区中读取数据,则只能从已经完全写入缓冲区的数据中读取,也就是说我们只能从偏移量小于读指针的地方读取。
时间相同的音频文件,WAVE文件会比其它格式的音频文件大得多,这是因为WAVE文件没有对数据进行压缩。如果录音的时候,不限制缓冲区大小,那么你录制很短的时间可能就会占用很多内存,说不定不过多久,你的G内存就不够用了。因此我们必须对缓冲区的大小进行限制,而且当缓冲区满了之后,还可以重新从缓冲区起始处开始,用新的数据覆盖旧的数据。丢失旧的数据,那就得在旧的数据被覆盖之前,将它转移到其它地方。微软提供了“通知”。在缓冲区中的某些位置处设置通知,当读指针到达通知位置的时候,就会触发相应的事件执行转移操作。
程序代码
上述主要在RecordSound类中
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.IO;
// 对DirectSound的支持
using Microsoft.DirectX;
using Microsoft.DirectX.DirectSound;
namespace _001
{
class SoundRecord
{
public const int cNotifyNum = 16; // 缓冲队列的数目
private int mNextCaptureOffset = 0; // 该次录音缓冲区的起始点
private int mSampleCount = 0; // 录制的样本数目
private int mNotifySize = 0; // 每次通知大小?
private int mBufferSize = 0; // 缓冲队列大小
private string mFileName = string.Empty; // 文件名?
private FileStream mWaveFile = null; // 文件流
private Binar
您可能关注的文档
最近下载
- 【社会层面】社会主义核心价值观.ppt VIP
- 回话有招高情商回话术书本.doc VIP
- 【社会层面】社会主义核心价值观精品课件.ppt VIP
- 沪教8AUnit6Ancientstories more practice-The story of 100,000 arrows 公开课优质课教案教学设计.doc
- 小学《科学》新教材培训研讨会:技术与工程领域总体介绍.pptx
- 2024年中考英语复习 并列复合句 讲义学案(解析版).pdf VIP
- 血常规结果解释ppt课件.pptx VIP
- 第16课 课件 2022-2023学年高中新经典日本语基础教程第二册.pptx VIP
- 软件工程专业生涯发展展示.pptx
- 成人脑室外引流护理——中华护理学会团体标准解读.pptx
文档评论(0)