Как записать звук с помощью C#/WPF?

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

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

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

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


person paxdiablo    schedule 12.09.2010    source источник
comment
возможный дубликат записи голоса (winmm.dll) с использованием C#.net   -  person Hans Passant    schedule 12.09.2010


Ответы (4)


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

person Darin Dimitrov    schedule 12.09.2010
comment
Ссылка: stackoverflow.com/questions /838190/ Требуется указание авторства. - person Hans Passant; 12.09.2010
comment
Отлично работает, спасибо. Я искал это слишком долго. - person mechanicum; 23.01.2013
comment
Просто примечание: в наши дни вы можете использовать пакет NAudio NuGet, чтобы сделать такие вещи намного проще. - person Roy T.; 25.11.2015
comment
как записать аудио и видео в один файл, теперь я могу записывать видео и аудио в отдельный файл. пожалуйста, помогите мне - person Pranesh Janarthanan; 14.05.2016

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

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

:)

person Shamim    schedule 20.11.2012

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

person CodesInChaos    schedule 12.09.2010

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

person unkown    schedule 21.03.2015