Май 26, 2013 - Уроки 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 500
Запись опубликована в 12:50
а как сделать, чтобы видно было видно спектр звукового файла
Не могу ответить на такой вопрос.
Преобразование Фурье
а есть ли воможность сохранить записанный файл на диск? И куда он сохраняется сейчас?
Сохраняется в папку с экзешником.
Добрый день!
Что-то непонятно с этим примером, установку частоты дискретизации вижу, установку количества каналов вижу, а где разрядность? Мне вот надо писать 4 канала, 24 бита 192 кГц Это как, слабо?
Добрый день.
Думаютут сможете найти что-нибудь.
А можно ли записывать звук с отдельной программы, или со звуковухи?
Думаю надо посмотреть документацию к NAudio
А можно как-то на лету прослушивать через динамики то, что записывается с помощью этой библиотеки?