如何使用麦克风获取c#中的音量/幅度或“响度”

时间:2014-01-06 08:43:36

标签: c#

我一直在寻找答案很长一段时间,但我得到的每一个解决方案似乎都太复杂了,不管我想做什么,或者也许没有“更容易”的方法。

我想要做的只是使用我的系统麦克风来获取房间内的音量或响度(或其他任何声音)。然后根据该音量,我想调整我的系统音量,以便系统的声音总是“听起来相同”(相同的响度),无论火车经过还是飞机飞过。

如何将我的房间中的响度或音量调到C#应用程序中以使用它来改变我的系统音量?

我正在使用C#和带内置麦克风的笔记本电脑。

2 个答案:

答案 0 :(得分:1)

  1. 最好使用库来读取麦克风的输入。 NAudio可能是最好的。

  2. 通过确定麦克风增益来校准输入。 [@ MSalters使用的评论]

  3. 每秒迭代记忆在记忆中的波形,然后:平方振幅(获得能量),平均平方值并取平方根。 (或日志,转换为dB) [@ MSalters使用的评论]

  4. 根据它,设置系统卷with WinAPI

答案 1 :(得分:0)

using NAudio.Wave;

    public IWaveIn waveIn;

    public void StartRecording()
    {
        if (waveIn != null) return;
        waveIn = new WaveIn { WaveFormat = new WaveFormat(8000, 1) };
        waveIn.DataAvailable += waveIn_DataAvailable;
        //waveIn.RecordingStopped += OnRecordingStopped;
        waveIn.StartRecording();
    }

    public void StopRecording()
    {
        waveIn.StopRecording();
        waveIn.Dispose();
    }`

    private void waveIn_DataAvailable(object sender, WaveInEventArgs e)
    {
        int sum = 0;
        for (int i = 0; i < 8; i++)
        {
            sum += Math.Abs(BitConverter.ToInt16(e.Buffer, 200 * i));
        }
        sum /= 8;
        if (sum > 6000)
        {
            Debug.WriteLine("WOW");
        }
    }