我正在实现一个简单的记录,播放可以播放和录制WAV文件的应用程序。
的要求如下:在Windows 7中录制时获取麦克风声音级别
1)Windows 7中的Visual Studio 2010(或2012),C#
2)录制,播放与规范信息的Wav文件:采样率22050,单声道,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),I也希望使用mciSendString。我发现以下命令(状态):
string command = "status MyRec level ";
long mci_ret = mciSendString(command, "", 0, 0);
但我不知道从上面的命令获取音量,任何人都可以告诉我的方式?
参考:从mciSendString状态命令()在微软的文档中发现: http://msdn.microsoft.com/en-us/library/windows/desktop/dd798683%28v=vs.85%29.aspx
它说: 级别:返回当前PCM音频采样值。
有在CodeProject上[Vista的核心音频API主音量控制(HTTP一些伟大的articales://www.codeproject。 com/Articles/18520/Vista-Core-Audio-API-Master-Volume-Control?fid = 410669&fr = 126#xx0xx) – sees 2013-02-12 11:06:48
或[在Visual C++中更改主卷](http://www.codeproject.com/Tips/233484/Change-Master-Volume-in-Visual-Cplusplus) – sees 2013-02-12 11:08:18