Май 26, 2013 -
Уроки Visual Basic.NET
10 комментариев
Уроки Visual Basic.NET
10 комментариев Запись звука с микрофона
Очередной пример, как записать звук с микрофона и воспроизвести его.
Будем использовать для записи звука библиотеку NAudio.dll, она дает более чистый звук, без помех, в отличии от Winmm.dll
Скачать NAudio.dllСкачиваем и распаковываем.
Создаем новый проект->Проект->Добавить ссылку->Обзор->Находим у себя на компьютере скачанную библиотеку NAudio.dll и нажимаем "Ок".
На форму кидаем две кнопки:
Первая кнопка - "Начать запись"
Вторая кнопка - "Прослушать запись"
Приступим к коду:
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
Звуковой файл сохранится в папке с приложением.










Метки:
Евгений
Просмотров: 13 510
Запись опубликована в 12:50
а как сделать, чтобы видно было видно спектр звукового файла
Не могу ответить на такой вопрос.
Преобразование Фурье
а есть ли воможность сохранить записанный файл на диск? И куда он сохраняется сейчас?
Сохраняется в папку с экзешником.
Добрый день!
Что-то непонятно с этим примером, установку частоты дискретизации вижу, установку количества каналов вижу, а где разрядность? Мне вот надо писать 4 канала, 24 бита 192 кГц Это как, слабо?
Добрый день.
Думаю сможете найти что-нибудь.
А можно ли записывать звук с отдельной программы, или со звуковухи?
Думаю надо посмотреть документацию к NAudio
А можно как-то на лету прослушивать через динамики то, что записывается с помощью этой библиотеки?