Vb.net 使用NAudio暂停录制

Vb.net 使用NAudio暂停录制,vb.net,naudio,Vb.net,Naudio,我正在使用NAudio和Visual Basic制作简单的录音机。我正在使用.NET4.0和VisualStudio2013社区是否可以暂停音频录制,然后继续录制? 这是我录制音频的代码: Dim micWaveIn As IWaveIn Dim micFileWriter As WaveFileWriter Dim tempFolderPath As String = IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "recordi

我正在使用NAudio和Visual Basic制作简单的录音机。我正在使用.NET4.0和VisualStudio2013社区是否可以暂停音频录制,然后继续录制?

这是我录制音频的代码:

Dim micWaveIn As IWaveIn
Dim micFileWriter As WaveFileWriter
Dim tempFolderPath As String = IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "recordings")

Private Sub cmdStartRecord_Click(sender As Object, e As EventArgs) Handles cmdStartRecord.Click
    Dim micDevice = DirectCast(cboInputDevice.SelectedItem, MMDevice)
    micDevice.AudioEndpointVolume.Mute = False
    micWaveIn = New WasapiCapture(micDevice)

    AddHandler micWaveIn.DataAvailable, AddressOf MIC_AudioDataAvailable
    AddHandler micWaveIn.RecordingStopped, AddressOf MIC_AudioStopRecording

    Dim filePath As String = IO.Path.Combine(tempFolderPath, "mic_record.wav")
    micFileWriter = New WaveFileWriter(filePath, micWaveIn.WaveFormat)

    micWaveIn.StartRecording()
End Sub

Private Sub cmdStopRecord_Click(sender As Object, e As EventArgs) Handles cmdStopRecord.Click
    If micWaveIn IsNot Nothing Then
        micWaveIn.StopRecording()

        RemoveHandler micWaveIn.DataAvailable, AddressOf MIC_AudioDataAvailable
        RemoveHandler micWaveIn.RecordingStopped, AddressOf MIC_AudioStopRecording

        micWaveIn.Dispose()
        micWaveIn = Nothing
    End If
    If micFileWriter IsNot Nothing Then
        micFileWriter.Dispose()
        micFileWriter = Nothing
    End If
End Sub

Private Sub MIC_AudioDataAvailable(sender As Object, e As WaveInEventArgs)
    If micFileWriter IsNot Nothing Then
        micFileWriter.Write(e.Buffer, 0, e.BytesRecorded)
    End If
End Sub

Private Sub MIC_AudioStopRecording(sender As Object, e As StoppedEventArgs)
    If e.Exception IsNot Nothing Then
        MsgBox("Error while recording.", vbExclamation, "Error.")
    End If
End Sub
我目前正在考虑以下代码:

Private Sub MIC_AudioDataAvailable(sender As Object, e As WaveInEventArgs)
    If micFileWriter IsNot Nothing Then
        If isRecording Then
            micFileWriter.Write(e.Buffer, 0, e.BytesRecorded)
        End If
    End If
End Sub

但是输出的音频不能在我的电脑中播放。有什么建议吗?

是的,你可以暂停并继续使用此代码重新编码。我在C#中使用了此代码,但你可以将其转换为VB

        void pauserecording()
        {
            if (ispaused == false)
            {
                _wavein.DataAvailable -= OndataAvailable;
                ispaused = true;
            }
        }
        void resumerecording()
        {
            if (ispaused == true)
            {
                _wavein.DataAvailable += OndataAvailable;
                ispaused = false;
            }
        }
“停止录制”,然后重新开始录制对我来说效果更好(我使用的是.net 2.0,我的NAudio版本比您的版本旧)。

在我的例子中,我想录制多个视频,同时录制一个音频。然后将视频连接到一个文件中,并将其与音频文件合并。
音频和视频不同步。音频比视频长(首先是视频,然后是音频)

在那之后,我使用了上面提到的技巧。意味着当一个视频捕获停止并且新的视频捕获准备开始时,我使用

yourWaveIn.DataAvailable -= OndataAvailable;

同样,音频和视频不是syn,而是以不同的方式。音频比视频短得多(音频先出现,然后是视频)。

当我改用“停止”时,效果非常好。

我不知道为什么,但似乎断开“OndataAvailable()”与它的eventHandler的连接会导致一些包丢失(导致音频文件变短),“StopRecording”没有这个问题。

希望我的经验对别人有用