Как мне записать звук с помощью C # / WPF? - PullRequest
4 голосов
/ 12 сентября 2010

У меня есть приложение, в которое я хочу добавить возможность импортировать небольшие аудио фрагменты непосредственно с какого-либо микрофонного устройства.

Я уже разрешаю импорт изображений, и это нормально работает с дисковыми файлами и камерами, поскольку камеры волшебным образом становятся дисковыми устройствами, когда вы их подключаете, поэтому метод импорта файлов работает для обоих.

Однако звук немного отличается. Я уже разрешил импортировать аудиофайлы с диска, но я хочу добавить возможность прямой записи с микрофона в файл на диске или в буфер в памяти.

Предоставляет ли C # / WPF простой способ сделать это? Какой хороший способ добавить эту функциональность?

Ответы [ 4 ]

19 голосов
/ 12 сентября 2010

Вероятно, проще всего использовать функцию 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).

Вы также можете найти эту статью CodeProject полезной.

3 голосов
/ 20 ноября 2012

это может помочь.Он будет использовать открытый проект NAuodio ...

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

:)

1 голос
/ 12 сентября 2010

Я использую эту библиотеку: http://www.codeproject.com/KB/cs/Streaming_wave_audio.aspx В основном из-за простого API.Но мне не очень нравится этот код.Например, он исправляет свои буферы в памяти в течение долгого времени вместо того, чтобы распределять неуправляемые буферы.

0 голосов
/ 21 марта 2015

Функция mciSendString записывает только звук микрофона.если микрофон не подключен, он ничего не будет записывать.

...