2016-05-07 7 views
0
Imports NAudio 
Imports System.IO 
Imports NAudio.Utils 

Public Class Form1 
    Private waveSource As Wave.WaveIn = Nothing 
    Private waveFile As Wave.WaveFileWriter = Nothing 
    Private waveFileWriter As Wave.WaveFileWriter 
    Dim ms As MemoryStream 

    Private Sub waveSource_DataAvailable(ByVal sender As Object, ByVal e As Wave.WaveInEventArgs) 
     waveFileWriter.Write(e.Buffer, 0, e.BytesRecorded) 
     waveFileWriter.Flush() 
    End Sub 

    Private Sub waveSource_RecordingStopped(ByVal sender As Object, ByVal e As Wave.StoppedEventArgs) 
     Dim fs As FileStream = File.Create(Environment.CurrentDirectory & "\test.wav") 
     ms.Seek(0, SeekOrigin.Begin) 
     ms.CopyTo(fs) 
    End Sub 

    Private Sub startBTN_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles startBTN.Click 
     ms = New MemoryStream() 

     waveFileWriter = New Wave.WaveFileWriter(New IgnoreDisposeStream(ms), waveSource.WaveFormat) 
     waveSource.StartRecording() 
    End Sub 

    Private Sub stopBTN_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles stopBTN.Click 
     waveSource.StopRecording() 
    End Sub 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     waveSource = New Wave.WaveIn 

     AddHandler waveSource.DataAvailable, AddressOf waveSource_DataAvailable 
     AddHandler waveSource.RecordingStopped, AddressOf waveSource_RecordingStopped 
    End Sub 
End Class 

При переводе кода со следующего сообщения это исключает исключение «Bad Device ID».Как записать звук из динамиков?

Naudio Recording and playing audio

У меня нет никаких записывающих устройств (или WaveIn). Вот почему?

ответ

1

Да. NAudio - с открытым исходным кодом. Вы можете отладить его и открыть для себя.

Исследуйте захват WASAPI. Я не знаю, будет ли это работать, но это следующий шаг.

1

C# how to record general audio from output device (speaker) with NAudio API

Private waveSource As Wave.WasapiLoopbackCapture = Nothing 

Изменение Wave.WaveIn к Wave.WasapiLoopbackCapture решить мою проблему. Конечно, с моим кодом все еще есть проблема (помните). Остановка остановки останавливает захват, но не записывает файл. Только до тех пор, пока вы не выйдете из приложения, приложение сохраняет .wav на диск. Я могу понять это самостоятельно.

+0

Я вижу, что вы открываете файл и не закрываете его ... – zeromus