Запись звука с микрофона

Очередной пример, как записать звук с микрофона и воспроизвести его.

Будем использовать для записи звука библиотеку NAudio.dll, она дает более чистый звук, без помех, в отличии от Winmm.dll

Скачать NAudio.dll

Скачиваем и распаковываем.

Создаем новый проект->Проект->Добавить ссылку->Обзор->Находим у себя на компьютере скачанную библиотеку NAudio.dll и нажимаем "Ок".

AddDll Запись звука с микрофона

AddDll2 Запись звука с микрофона

На форму кидаем две кнопки:

Первая кнопка - "Начать запись"

Вторая кнопка - "Прослушать запись"

Приступим к коду:

Imports NAudio.Wave
Imports NAudio.FileFormats
Imports NAudio.CoreAudioApi
Public Class Form1
    'Поток для записи
    Dim Wave As WaveIn
    'Класс для записи в файл
    Dim Writer As WaveFileWriter
    'Имя файла для записи
    Dim FileName As String = "Mic.wav"
    'Проверяем идет ли запись
    Dim Record As Boolean = False
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Button2.Enabled = False
    End Sub
    'Получение данных из входного буфера 
    Private Sub Wave_DataAvailable(ByVal sender As Object, ByVal e As WaveInEventArgs)
        If (Me.InvokeRequired) Then
            Me.BeginInvoke(New EventHandler(Of WaveInEventArgs)(AddressOf Wave_DataAvailable), sender, e)
        Else
            'Записываем данные из буфера в файл
            Writer.Write(e.Buffer, 0, e.BytesRecorded)
        End If
    End Sub
    'Начать запись/Остановить запись
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If Record = True Then
            'Останавливаем запись
            Wave.StopRecording()
            Button2.Enabled = True
            sender.Text = "Начать запись"
            Record = False
        Else
            'Новый поток для записи
            Wave = New WaveIn
            'Дефолтное устройство для записи (если оно имеется)
            Wave.DeviceNumber = 0
            'Прикрепляем к событию DataAvailable обработчик, возникающий при наличии записываемых данных
            AddHandler Wave.DataAvailable, AddressOf Wave_DataAvailable
            'Прикрепляем обработчик завершения записи
            AddHandler Wave.RecordingStopped, AddressOf Wave_RecordingStopped
            'Формат wav-файла - принимает параметры - частоту дискретизации и количество каналов(здесь mono)
            Wave.WaveFormat = New WaveFormat(8000, 1)
            'Инициализируем объект WaveFileWriter
            Writer = New WaveFileWriter(FileName, Wave.WaveFormat)
            'Начинаем записывать
            Wave.StartRecording()
            Button1.Text = "Остановить запись"
            Button2.Enabled = False
            Record = True
        End If
    End Sub
    'Окончание записи
    Private Sub Wave_RecordingStopped(ByVal sender As Object, ByVal e As EventArgs)
        If (Me.InvokeRequired) Then
            Me.BeginInvoke(New EventHandler(AddressOf Wave_RecordingStopped), sender, e)
        Else
            Wave.Dispose()
            Wave = Nothing
            Writer.Close()
            Writer = Nothing
        End If
        Record = False
    End Sub
    'Проигрываем записаный файл
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        My.Computer.Audio.Play(IO.Directory.GetCurrentDirectory & "\" & FileName)
    End Sub
End Class

RecordNAudio Запись звука с микрофона

Звуковой файл сохранится в папке с приложением.

Оригинальная статья

Документация по NAudio

Скачать исходник

  Метки:
  Евгений
  Просмотров: 13 500
  Запись опубликована в 12:50

10 комментариев

  • а как сделать, чтобы видно было видно спектр звукового файла

  • а есть ли воможность сохранить записанный файл на диск? И куда он сохраняется сейчас?

  • Добрый день!
    Что-то непонятно с этим примером, установку частоты дискретизации вижу, установку количества каналов вижу, а где разрядность? Мне вот надо писать 4 канала, 24 бита 192 кГц Это как, слабо?

  • А можно ли записывать звук с отдельной программы, или со звуковухи?

  • А можно как-то на лету прослушивать через динамики то, что записывается с помощью этой библиотеки?

Есть что сказать? Тогда действуй!