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)。这就是原因吗?
发布于 2016-05-07 23:33:10
是。NAudio是开源的。您可以对其进行调试,自己发现这一点。
调查WASAPI捕获。我不知道这是否会奏效,但这是下一步。
发布于 2016-05-08 03:42:51
C# how to record general audio from output device ( speaker ) with NAudio API
Private waveSource As Wave.WasapiLoopbackCapture = Nothing
把Wave.WaveIn
改成Wave.WasapiLoopbackCapture
解决了我的问题。当然,我的代码仍然存在问题(请注意)。点击stop会停止捕获,但不会写入文件。只有当您强制退出应用程序时,.wav才会保存到磁盘。我可以自己解决这个问题。
发布于 2018-08-14 04:50:10
在Private Sub waveSource_RecordingStopped
中添加以下代码,即可在不关闭应用程序的情况下查看.wav
:
fs.Dispose()
https://stackoverflow.com/questions/37085109
复制相似问题