您的位置:首页 > 编程语言 > C#

DirectX编程:[初级]C# 中利用 DirectSound 录音

2014-04-25 14:18 405 查看
花了一阵子,把DirectX安装后自带的帮助文件中的那部分关于DirectSound录音这块给看完了,顺便把那部分翻译成了中文,有些地方可能翻译的不是很通顺,不过总体上还是能看得懂的。查看中文翻译,建议大家在进行学习前可以先去看看。
期间也看了些别人的相关文章,感觉有点思路后就开始动手了,很高兴最后能顺利通过测试。不过我这个功能很简单,也不完善,只是最基本的可以录音。还待以后深入学习。

开发平台:VS.NET 2005 ,Windows XP SP2 ,DirectX SDK(June 2008)下载页面
必须的硬件设备:麦克风、声卡(集成或独立均可)、音响(能播放声音就行)

首先,我们来温故下声卡和声音的基础知识。

[摘自网络] 声音其实是一种能量波,因此也有频率和振幅的特征,频率对应于时间轴线,振幅对应于电平轴线。波是无限光滑的,弦线其实由无数点组成,由于存储空间是相对有限的,数字编码过程中,必须对弦线的点进行采样。采样的过程就是抽取某点的频率值,很显然,在一秒中内抽取得点越多,获取得频率信息更丰富,为了复原波形,一次振动中,必须有2个点的采样,人耳能够感觉到的最高频率为20kHz,因此要满足人耳的听觉要求,则需要至少每秒进行40k次采样,用40kHz表达,这个40kHz就是采样率。我们常见的CD,采样率为44.1kHz。光有频率信息是不够的,我们还必须获得该频率的能量值并量化,用于表示信号强度。量化值为2的整数次幂,我们常见的CD位16bit的采样大小,即2的16次方。

结束捕捉
private void stoprec()
{
capturebuffer.Stop();//调用缓冲区的停止方法。停止采集声音
if (notifyevent != null)
notifyevent.Set();//关闭通知
notifythread.Abort();//结束线程
RecordCapturedData();//将缓冲区最后一部分数据写入到文件中

//写WAV文件尾
mWriter.Seek(4, SeekOrigin.Begin);
mWriter.Write((int)(iSampleSize + 36)); // 写文件长度
mWriter.Seek(40, SeekOrigin.Begin);
mWriter.Write(iSampleSize); // 写数据长度
mWriter.Close();
fsWav.Close();
mWriter = null;
fsWav = null;

}

这样, 基本就完成了。但是并没有进行完善。这个还待日后改善。

感叹呀~~写这篇,真得好不容易,感觉卡得就像个...。

参考:http://blog.donews.com/uplook/archive/2005/12/14/657145.aspx
/content/3573091.html

转自:/article/4779132.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: