我有一个应用程序,我想添加直接从某种麦克风设备导入小型音频片段的功能。
我已经允许导入图片,这对磁盘文件和摄像头没问题,因为当你附加它们时,摄像机会神奇地变成磁盘设备,所以文件导入方法适用于两者。
然而,音频略有不同。我已经允许从磁盘导入音频文件,但我想添加从麦克风直接录制到磁盘文件或内存缓冲区的功能。
C#/ WPF提供了一种简单的方法吗?添加此功能的好方法是什么?
答案 0 :(得分:18)
最简单的方法是使用mciSendString功能:
public class Program
{
[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);
static void Main(string[] args)
{
mciSendString("open new Type waveaudio Alias recsound", "", 0, 0);
mciSendString("record recsound", "", 0, 0);
Console.WriteLine("recording, press Enter to stop and save ...");
Console.ReadLine();
mciSendString("save recsound c:\\work\\result.wav", "", 0, 0);
mciSendString("close recsound ", "", 0, 0);
}
}
另一种选择是使用DirectShowNet库(有一个名为PlayCap
的{{3}}。
您可能还会发现此sample有用。
答案 1 :(得分:3)
答案 2 :(得分:1)
我正在使用这个库: http://www.codeproject.com/KB/cs/Streaming_wave_audio.aspx 主要是由于简单的api。但我不太喜欢这段代码。例如,它将缓冲区内的缓冲区长时间修复,而不是分配非托管缓冲区。
答案 3 :(得分:0)
mciSendString函数仅记录麦克风声音。如果没有连接麦克风,它将不记录任何内容。