在C#获取麦克风输入的声音的波形图

怎么获取声音波动的频率,在网上找来一些这方面的资料:

DirectX的 DirectSound 

http://zhidao.baidu.com/question/448587955.html

http://www.cnblogs.com/stg609/category/158848.html

http://download.csdn.net/download/trbbadboy/4368201

(资料如上,具体我也不懂,哈哈。)

------------------------------------------------------------------------

Draw Curve in Real Time  C#波形曲线实时绘制

一个绘制声音波形的开源项目,可以用于波形曲线的实时绘制。

http://www.codesoso.com/code/Curve_RealTime.aspx

------------------------------------------------------------------------

下面的是论坛的讨论,可以看看大家都回答以及给出的解决方案

http://bbs.csdn.net/topics/300126667

------------------------------------------------------------------------

项目实例:

http://wenku.baidu.com/view/56519645b307e87101f69675.html

------------------------------------------------------------------------

下面的给出一个开源的项目:

http://www.dreamincode.net/forums/topic/38890-activex-with-c%23/

http://www.codeproject.com/Articles/15328/C-Voice-and-Tone-Alert-Generator

转载于:https://www.cnblogs.com/mq0036/p/4253953.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取麦克风声音频率需要使用音频处理的知识,可以通过以下步骤实现: 1. 使用C#中的NAudio库来获取麦克风的音频流。 2. 将音频流转换成音频数据,可以使用NAudio库提供的WaveBuffer类。 3. 对音频数据进行快速傅里叶变换(FFT),可以使用NAudio库提供的FFT类。 4. 获取音频数据的频谱信息,可以通过FFT计算得到。 5. 根据频谱信息计算出音频的频率。 以下是获取麦克风声音频率的代码示例: ```csharp using NAudio.Wave; using System.Numerics; //创建一个录音机对象 var recorder = new WaveInEvent(); //设置录音机的参数 recorder.WaveFormat = new WaveFormat(44100, 1); //开启录音机 recorder.StartRecording(); //定义一个缓冲区,用于存储音频数据 byte[] buffer = new byte[recorder.WaveFormat.BlockAlign]; while (true) { //读取录音机中的音频数据 recorder.Read(buffer, 0, buffer.Length); //将音频数据转换成WaveBuffer对象 var waveBuffer = new WaveBuffer(buffer); //对音频数据进行FFT变换 var fft = new FFT(); Complex[] result = fft.Transform(waveBuffer.FloatBuffer); //获取音频数据的频谱信息 float[] spectrum = new float[result.Length]; for (int i = 0; i < result.Length; i++) { spectrum[i] = (float)(result[i].Magnitude); } //计算音频的频率 float maxFrequency = 0; float maxAmplitude = 0; for (int i = 0; i < spectrum.Length; i++) { float amplitude = spectrum[i]; if (amplitude > maxAmplitude) { maxFrequency = (float)i / (float)spectrum.Length * recorder.WaveFormat.SampleRate; maxAmplitude = amplitude; } } //输出音频的频率 Console.WriteLine("Frequency: " + maxFrequency); } ``` 需要注意的是,以上代码只是一个简单的示例,实际应用中还需要进行优化,例如对音频数据进行预处理、滤波等,以提高频率计算的准确性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值