DirectX编程:[初级]C# 中利用 DirectSound 录音 转
2008-10-27 11:45
393 查看
DirectX编程:[初级]C# 中利用 DirectSound 录音
花了一阵子,把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
Tag标签: C#,DirectX,DirectSound,录音,.NET
花了一阵子,把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
Tag标签: C#,DirectX,DirectSound,录音,.NET
相关文章推荐
- DirectX编程:[初级]C# 中利用 DirectSound 录音
- DirectX编程:[初级]C# 中利用 DirectSound 录音
- DirectX编程:[初级]C# 中利用 DirectSound 录音
- DirectX编程:[初级]C# 中利用 DirectSound 录音
- DirectX编程:[初级]C# 中利用 DirectSound 录音
- DirectX编程:[初级]C#中利用DirectSound播放WAV格式声音[最少只要4句话]
- DirectX编程:[初级]C# 中利用 DirectSound 录音
- DirectX编程:[初级]C# 中利用 DirectSound 录音
- DirectX编程:C#中利用Socket实现网络语音通信[初级版本]
- DirectX编程:[初级]C#中利用DirectSound播放WAV格式声音[最少只要4句话]
- DirectX编程:[初级]C#中利用DirectSound播放WAV格式声音[最少只要4句话]
- DirectX编程:C#中利用Socket实现网络语音通信[初级版本]
- DirectX初级编程:C#利用DirectSound播放WAV文件[最少只要4句话]
- C# 中利用 DirectSound 录音
- DirectX编程:利用 DirectSound 录音
- DirectX初级编程:C#利用DirectSound播放WAV文件[最少只要4句话]
- C#利用winmm.dll中的mciSendString方法录音
- 教你如何利用初级C#语言更改银行存款!!!!
- C# 开发DirectX.DirectSound录音在Win10兼容解决方法
- [摘]C#用DirectSound录音