C# 在Windows 7中录制时获取麦克风音量

C# 在Windows 7中录制时获取麦克风音量,c#,windows-7,winmm,mcisendstring,C#,Windows 7,Winmm,Mcisendstring,我正在实现一个简单的录制、播放应用程序,可以播放和录制WAV文件。 要求如下: 1) Windows 7、Visual studio 2010(或2012)、C# 2) 录制、播放带有规格信息的Wav文件:samplerate 22050、mono、bitspersample 16 3) 录制时可以显示微音级 对于1)和2),我可以使用lib(winmm.dll)和mciSendString(),如下所示 [DllImport("winmm.dll")] private static ext

我正在实现一个简单的录制、播放应用程序,可以播放和录制WAV文件。
要求如下:

1) Windows 7、Visual studio 2010(或2012)、C#
2) 录制、播放带有规格信息的Wav文件:samplerate 22050、mono、bitspersample 16
3) 录制时可以显示微音级

对于1)和2),我可以使用lib(winmm.dll)和mciSendString(),如下所示

[DllImport("winmm.dll")]  
private static extern long mciSendString(string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback);

// Open file to play
public void open(string file)
{
    string command = "open \"" + file + "\" type waveaudio  alias MyWav";
    mciSendString(command, null, 0, 0);
}

// Start playing
public void play()
{
    string command = "play MyWav";
    mciSendString(command, null, 0, 0);
}

// Stop playing
public void stop()
{
    string command = "stop MyWav";
    mciSendString(command, null, 0, 0);

    command = "close MyWav";
    mciSendString(command, null, 0, 0);
}

// Start recording
public void record()
{
   string command = "open new Type waveaudio Alias MyRec";
    mciSendString(command, "", 0, 0);

    command = "set capture time format ms bitspersample 16 channels 1 samplespersec 22050 alignment 4";
    mciSendString(command, "", 0, 0);

    command = "record MyRec";
    mciSendString(command, "", 0, 0);
}

// Stop recording
public void stoprec()
{
    string fileName = @"""D:\Rec1.wav""";

    string command = "stop MyRec";
    mciSendString(command, "", 0, 0);

    command = @"save MyRec " + fileName;

    Debug.WriteLine(command);
    mciSendString(command, "", 0, 0);

    command = "close MyRec";
    mciSendString(command, "", 0, 0);
}
对于3),我还想使用mciSendString。我找到了以下命令(状态):

但我不知道如何从上面的命令中获取音量,有人能告诉我怎么走吗

Ref:mciSendString()中的status命令可在Microsoft文档中找到:
它说:
电平:返回当前PCM音频采样值。

我通过打开两个设备来监控电平,一个用于录制/播放(track1),另一个用于获取电平(Wavel)。下面是在foxpro

* OPEN WAVE DEVICE FOR LEVEL READINGS 
= mciSendString("open new type waveaudio alias waveLevel", '0&', 0, 0) 

* START RECORDING
= mciSendString("open new type waveaudio alias track1", '0&', 0, 0)
然后,为了获得track1的级别,我使用了Wavelvel设备

= mciSendString("status waveLevel level", @cBuff, LEN(cBuff) ,0)

codeproject中有一些很棒的文章,或者感谢您的建议。我最终用NAudio来完成我的任务。阅读所有代码并找出正确的方法。Windows 7和8都可以(在一些版本中,如Professional、Enterprise、Home Premium等,都可以使用)
= mciSendString("status waveLevel level", @cBuff, LEN(cBuff) ,0)