如何使用 C#/WPF 录制音频?

Posted

技术标签:

【中文标题】如何使用 C#/WPF 录制音频?【英文标题】:How do I record audio with C#/WPF? 【发布时间】:2010-09-12 08:57:08 【问题描述】:

我有一个应用程序,我想添加直接从某种麦克风设备导入小型音频 sn-ps 的功能。

我已经允许导入图片,这适用于磁盘文件和相机,因为相机在您附加它们时会神奇地变成磁盘设备,因此文件导入方法适用于两者。

但音频略有不同。我已经允许从磁盘导入音频文件,但我想添加直接从麦克风录制到磁盘文件或内存缓冲区的功能。

C#/WPF 是否提供了一种简单的方法来做到这一点?添加此功能的好方法是什么?

【问题讨论】:

voice record (winmm.dll) using C#.net 的可能重复项 【参考方案1】:

可能最简单的就是使用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 库(有一个sample 称为PlayCap)。

您可能还会发现这个CodeProject article 很有用。

【讨论】:

链接:***.com/questions/838190/… 此处需要注明出处。 效果很好,谢谢。我一直在寻找这个太久了。 请注意:现在您可以使用 NAudio NuGet 包更轻松地完成此类工作。 如何将音频和视频录制到一个文件中,现在我可以将视频和音频录制到单独的文件中。请帮帮我【参考方案2】:

这可能会有所帮助。它将使用开源的 NAuodio 项目...

http://channel9.msdn.com/coding4fun/articles/NET-Voice-Recorder

:)

【讨论】:

【参考方案3】:

我正在使用这个库: http://www.codeproject.com/KB/cs/Streaming_wave_audio.aspx 主要是因为简单的api。但我不太喜欢这段代码。例如,它在内存中修复它的缓冲区很长一段时间,而不是分配非托管缓冲区。

【讨论】:

【参考方案4】:

mciSendString 函数只记录麦克风声音。如果没有连接麦克风,它将不会记录任何内容。

【讨论】:

以上是关于如何使用 C#/WPF 录制音频?的主要内容,如果未能解决你的问题,请参考以下文章

如何延迟音频播放以与 FFT 同步

如何使用openAL将实时音频输入从麦克风录制到文件中? (里面有C++代码)

如何使用附加模式将音频录制到现有的音频文件中?

使用音频会话录制时如何减少录制噪音?

如何使用混响效果保存录制的音频

如何使用 sox 从命令行录制音频