我目前正在尝试通过WasapiCapture和WaveWriter (CSCore包)录制音频,想在用户停止通话后停止录制。有人能帮我吗?
我想到的是,我可能会创建一个RecordingVolumeHandler,当音量低于某个阈值1到2秒时就会触发。我该怎么做呢?有没有办法从当前正在录制的音频输入中获取音量?
下面的代码是我用来启动和停止录制的两个函数。
private WasapiCapture capture;
private WaveWriter writer;
private void startRecording()
{
capture = new WasapiCapture();
capture.Initialize();
writer = new WaveWriter("file.wav", capture.WaveFormat);
capture.DataAvailable += (s, capData) =>
{
writer.Write(capData.Data, capData.Offset, capData.ByteCount);
};
capture.Start();
}
private void stopRecording()
{
if (writer != null && capture != null)
{
capture.Stop();
writer.Dispose();
capture.Dispose();
}
}提前谢谢你!
发布于 2017-07-21 20:46:59
您可以添加Timer计数静默时间。当它到期时-停止录制。我还没有测试过这段代码。定时器可能不会重置,但思路应该是清晰的。
private WasapiCapture capture;
private WaveWriter writer;
private Timer silenceTimer;
public Constructor()
{
silenceTimer = new Timer();
silenceTimer.Interval = 5000; // 5 seconds
silenceTimer.Elapsed +=SilenceTimerElapsed;
}
private void SilenceTimerElapsed(object sender, ElapsedEventArgs e)
{
silenceTimer.Stop();
stopRecording();
}
private void startRecording()
{
capture = new WasapiCapture();
capture.Initialize();
writer = new WaveWriter("file.wav", capture.WaveFormat);
capture.DataAvailable += (s, capData) =>
{
writer.Write(capData.Data, capData.Offset, capData.ByteCount);
silenceTimer.Stop();
silenceTimer.Start(); // Resetting timer
};
silenceTimer.Start();
capture.Start();
}
private void stopRecording()
{
if (writer != null && capture != null)
{
capture.Stop();
writer.Dispose();
capture.Dispose();
}
}https://stackoverflow.com/questions/45237950
复制相似问题