使用 NAudio 暂停录音
Pause recording using NAudio
我正在使用 NAudio 和 Visual Basic 开发简单的录音机。我正在使用 .NET 4.0 和 Visual Studio 2013 社区。 是否可以暂停音频录制然后继续录制?
这是我录制音频的代码:
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;
}
}
"StopRecording" 然后重新启动它对我来说效果更好(我使用的是 .net 2.0,我的 NAudio 版本比你旧)。
就我而言,我想录制多个视频并并行录制单个 audio.Then 将视频串联到一个文件中并将其与音频文件合并。
音频和视频不同步。音频比视频长(先有视频,后有音频)
之后我使用了提到的技巧。意味着当视频捕获停止并且新的视频捕获准备开始时,我使用
暂停了录音
yourWaveIn.DataAvailable -= OndataAvailable;
同样,音频和视频不是同步的,而是以不同的方式。音频比视频短得多(音频先出现,然后是视频)。
当我改用 "stopping" 时,结果很好。
我不知道为什么,但似乎断开 "OndataAvailable()" 与它的 eventHandler 的连接导致丢失一些包(导致较短的音频文件)并且 "StopRecording" 没有那个问题。
希望我的经验对某人有用。
我正在使用 NAudio 和 Visual Basic 开发简单的录音机。我正在使用 .NET 4.0 和 Visual Studio 2013 社区。 是否可以暂停音频录制然后继续录制?
这是我录制音频的代码:
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;
}
}
"StopRecording" 然后重新启动它对我来说效果更好(我使用的是 .net 2.0,我的 NAudio 版本比你旧)。
就我而言,我想录制多个视频并并行录制单个 audio.Then 将视频串联到一个文件中并将其与音频文件合并。
音频和视频不同步。音频比视频长(先有视频,后有音频)
之后我使用了提到的技巧。意味着当视频捕获停止并且新的视频捕获准备开始时,我使用
yourWaveIn.DataAvailable -= OndataAvailable;
同样,音频和视频不是同步的,而是以不同的方式。音频比视频短得多(音频先出现,然后是视频)。
当我改用 "stopping" 时,结果很好。
我不知道为什么,但似乎断开 "OndataAvailable()" 与它的 eventHandler 的连接导致丢失一些包(导致较短的音频文件)并且 "StopRecording" 没有那个问题。
希望我的经验对某人有用。