在 C# 中的时间延迟后自行停止录音机(使用 NAudio)
我正在 C# 中使用 NAudio 录制音频,我需要删除使用的停止按钮,并在一段时间延迟后自行停止录制。
记录事件的代码是
private void cmbRecord_Click(object sender, EventArgs e)
{
outputFilename = "file address";
waveInStream = new WaveIn(44100,2);
writer = new WaveFileWriter(outputFilename, waveInStream.WaveFormat);
waveInStream.DataAvailable += new EventHandler<WaveInEventArgs>(waveInStream_DataAvailable);
waveInStream.StartRecording();
// Just controling the objects on the screen.
cmbRecord.Enabled = false;
cmbStop.Enabled = true;
}
void waveInStream_DataAvailable(object sender, WaveInEventArgs e)
{
writer.WriteData(e.Buffer, 0, e.BytesRecorded);
int secondsRecorded = (int)(writer.Length / writer.WaveFormat.AverageBytesPerSecond);
}
给出停止按钮,因为
private void cmbStop_Click(object sender, EventArgs e)
{
waveInStream.StopRecording();
waveInStream.Dispose();
waveInStream = null;
writer.Close();
writer = null;
cmbRecord.Enabled = true;
cmbStop.Enabled = false;
}
我需要在 cmbRecord_Click 事件内自动停止记录。 提前致谢。
I am making an audio recorded using NAudio in C# and i need to remove the stop button used and simply stop the recording on its own after some time delay.
The code for the record event is
private void cmbRecord_Click(object sender, EventArgs e)
{
outputFilename = "file address";
waveInStream = new WaveIn(44100,2);
writer = new WaveFileWriter(outputFilename, waveInStream.WaveFormat);
waveInStream.DataAvailable += new EventHandler<WaveInEventArgs>(waveInStream_DataAvailable);
waveInStream.StartRecording();
// Just controling the objects on the screen.
cmbRecord.Enabled = false;
cmbStop.Enabled = true;
}
void waveInStream_DataAvailable(object sender, WaveInEventArgs e)
{
writer.WriteData(e.Buffer, 0, e.BytesRecorded);
int secondsRecorded = (int)(writer.Length / writer.WaveFormat.AverageBytesPerSecond);
}
The stop button is given as
private void cmbStop_Click(object sender, EventArgs e)
{
waveInStream.StopRecording();
waveInStream.Dispose();
waveInStream = null;
writer.Close();
writer = null;
cmbRecord.Enabled = true;
cmbStop.Enabled = false;
}
I need to stop the recording automatically inside the cmbRecord_Click event.
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用 计时器,设置
Interval
并将cmbStop_Click
事件中的代码复制到计时器的OnTick
事件中。在mbRecord_Click
事件中启用计时器并 & 中禁用计时器记得在
cmbStop_Click
事件编辑:创建一个新计时器并设置其值
//将此行放入您的表单类级别
//将这两个放入您的表单
InitializeComponent()
之后的构造函数;在 mbRecord_Click 事件中启用计时器
1 秒后停止录制。
use a Timer, set the
Interval
and copy the code incmbStop_Click
event over to timer'sOnTick
event. Enable the timer in thembRecord_Click
event and & remember to disable the timer incmbStop_Click
eventEdit:
Create a new timer and set its value
//put this line in your form class level
//put these two into your form constructor just after
InitializeComponent()
;Enable the timer in the mbRecord_Click event
Stop recording after 1 second..
您可能需要记住一件事 - 在调用
StopRecording
之后(或期间,具体取决于回调),将会有一个DataAvailable
回调使用的模型),因此您可能需要延迟关闭 WaveFileWriter,直到编写完所有内容。查看 VoiceRecorder 示例使用 NAudio 并在 60 秒后停止录制的项目。我在 这篇文章如何自动停止录制。
One thing you may want to bear in mind - there will be a
DataAvailable
callback after the call toStopRecording
(or during, depending on the callback model used), so you might want to delay closing the WaveFileWriter until you have written everything.Have a look at the VoiceRecorder sample project which uses NAudio and stops recording after 60 seconds. I explain in this article how recording is automatically stopped.