使用C#.net录制语音记录(winmm.dll)

Muh*_*nan 5 c# activex

我的要求是构建一个可以录制语音(通过麦克风)并将磁盘.wav文件保存为桌面和Web应用程序的实用程序.对于特定的用户,所以我选择了activeX技术,因为我没有找到任何其他更好的方法(可能你知道,可以指导我...将非常欢迎)

我使用winmm.dll(又名媒体控制界面(MCI)),它工作得很好,但在特定的计算机上,如我在Vista上运行它,它工作正常,在WIN Server 2008但在Windows 2003和XP上它不工作.只是工作有任何先决条件..需要在那里或我应该做什么使其适用于其他风格的Windows.

如果some1推荐使用一些示例代码来记录/保存/播放示例,我不介意使用DirectSound :)

Jef*_*uel 5

我会用DirectShow来捕获音频.由于您在问题中添加了C#标记,因此我建议使用DirectShow.NET库.确保您还下载了示例并查看Capture文件夹中的PlayCap和CapWMV示例.您可能还想查看CodeProject上的音频捕获文章.

至于为什么某些操作系统版本正在运行,您是否已在这些系统上确认音频输入与其他程序一起使用?您是否允许用户选择音频设备或仅使用默认音频设备?您收到错误消息还是没有音频?根据此论坛,请确保将文件名用双引号括起来.


Muh*_*nan 5

实际上没有错误,没有异常,甚至没有输出我正在创建的wav文件,而它在vista和2k8上工作正常但不是之前的版本.

m使用默认声卡未明确设置任何声卡

使用以下代码

[DllImport("winmm.dll", EntryPoint = "mciSendStringA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern int mciSendString(string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback);
Run Code Online (Sandbox Code Playgroud)

记录

mciSendString("open new Type waveaudio Alias recsound", "", 0, 0);
mciSendString("record recsound", "", 0, 0);
Run Code Online (Sandbox Code Playgroud)

停下来保存

mciSendString(@"save recsound " + OuputFolderName + FileName + ".wav", "", 0, 0);
mciSendString("close recsound ", "", 0, 0);
Run Code Online (Sandbox Code Playgroud)