2013-02-11 129 views
1

我正在实现一个简单的记录,播放可以播放和录制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音频采样值。

+0

有在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

+0

或[在Visual C++中更改主卷](http://www.codeproject.com/Tips/233484/Change-Master-Volume-in-Visual-Cplusplus) – sees 2013-02-12 11:08:18

回答

0

我通过打开两个设备(一个用于录制/播放(track1)和一个获取关卡(waveLevel)来监视关卡。下面是在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的水平我用的是waveLevel设备

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

感谢您的建议。我最终使用NAudio来完成我的任务。阅读所有代码并找出正确的方法。对于Windows 7和Windows 8都可以(在专业版,企业版,家庭高级版,等等版本中进行检查) – sees 2013-05-22 04:20:48