首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从扬声器录制音频?

如何从扬声器录制音频?
EN

Stack Overflow用户
提问于 2016-05-07 14:03:51
回答 3查看 633关注 0票数 0
代码语言:javascript
复制
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)。这就是原因吗?

EN

回答 3

Stack Overflow用户

发布于 2016-05-07 23:33:10

是。NAudio是开源的。您可以对其进行调试,自己发现这一点。

调查WASAPI捕获。我不知道这是否会奏效,但这是下一步。

票数 1
EN

Stack Overflow用户

发布于 2016-05-08 03:42:51

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

代码语言:javascript
复制
    Private waveSource As Wave.WasapiLoopbackCapture = Nothing

Wave.WaveIn改成Wave.WasapiLoopbackCapture解决了我的问题。当然,我的代码仍然存在问题(请注意)。点击stop会停止捕获,但不会写入文件。只有当您强制退出应用程序时,.wav才会保存到磁盘。我可以自己解决这个问题。

票数 1
EN

Stack Overflow用户

发布于 2018-08-14 04:50:10

Private Sub waveSource_RecordingStopped中添加以下代码,即可在不关闭应用程序的情况下查看.wav

代码语言:javascript
复制
fs.Dispose()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37085109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档