C#,VB.NET内录-录制声卡发出的声音信号,不是麦克风信号

发布于:2025-08-19 ⋅ 阅读:(12) ⋅ 点赞:(0)

VB.NET中实现录制声卡输出(内录)功能,需要使用音频 API,因为没有内置的简单函数可以直接实现这个功能。最常用的方法是使用 NAudio 库,这是一个开源的.NET 音频处理库,能够方便地实现内录功能。

以下是使用 NAudio 实现内录的示例代码:

VB.NET 声卡内录示例

Public Class AudioLoopbackRecorder '录制设备(内录)
    Private waveIn As WasapiLoopbackCapture
    Private writer As WaveFileWriter
    Private outputFilePath As String
    Private waveFormat As WaveFormat
    Public Sub New()

        ' 初始化循环录制设备(内录)
        waveIn = New WasapiLoopbackCapture()

        ' 设置音频格式(通常使用默认格式)
        waveFormat = waveIn.WaveFormat



        ' 注册数据可用事件
        AddHandler waveIn.DataAvailable, AddressOf WaveIn_DataAvailable
        AddHandler waveIn.RecordingStopped, AddressOf WaveIn_RecordingStopped
    End Sub
    Function SetSavePath(outputPath As String) As Boolean
        outputFilePath = outputPath
        ' 创建音频文件写入器
        writer = New WaveFileWriter(outputFilePath, WaveFormat)
    End Function


    ' 开始录制
    Public Sub StartRecording()
        If waveIn IsNot Nothing AndAlso Not waveIn.CaptureState = CaptureState.Capturing Then
            waveIn.StartRecording()
        End If
    End Sub

    ' 停止录制
    Public Sub StopRecording()
        If waveIn IsNot Nothing AndAlso waveIn.CaptureState = CaptureState.Capturing Then
            waveIn.StopRecording()
        End If
    End Sub

    ' 处理音频数据
    Private Sub WaveIn_DataAvailable(sender As Object, e As WaveInEventArgs)
        If writer IsNot Nothing Then
            writer.Write(e.Buffer, 0, e.BytesRecorded)
            writer.Flush()
        End If
    End Sub

    ' 录制停止时清理资源
    Private Sub WaveIn_RecordingStopped(sender As Object, e As StoppedEventArgs)
        If writer IsNot Nothing Then
            writer.Dispose()
            writer = Nothing
        End If

        If waveIn IsNot Nothing Then
            waveIn.Dispose()
            waveIn = Nothing
        End If
    End Sub
End Class 'AudioLoopbackRecorder

使用说明:

  1. 首先需要安装 NAudio 库,可以通过 NuGet 包管理器安装:

    Install-Package NAudio
    
  2. 代码说明:

    • 使用WasapiLoopbackCapture类实现声卡内录,这是 NAudio 中专门用于捕获系统输出音频的类
    • WaveFileWriter用于将捕获的音频数据写入 WAV 文件
    • 提供了StartRecordingStopRecording方法控制录制过程
  3. 注意事项:

    • 确保应用程序有写入目标文件夹的权限
    • 某些系统可能需要管理员权限才能进行内录
    • 录制的是系统所有输出的混合音频,包括扬声器、耳机等输出的声音

这种方法比直接使用 Windows API 简单得多,NAudio 库封装了复杂的音频处理细节,让内录功能的实现变得相对简单。


网站公告

今日签到

点亮在社区的每一天
去签到