我正在使用Naudio Library制作录音程序。 现在要记录我必须按下记录按钮而不是保存按钮。 我想让节目一直录制并自动保存录制的音频。 谢谢你的帮助。 这是一些代码。 开始录音:
NAudio.Wave.WaveIn sourceStream = null;
NAudio.Wave.WaveFileWriter waveWriter = null;
private void SRecording_Click(object sender, EventArgs e)
{
if (sourceList.SelectedItems.Count == 0) return;
SaveFileDialog save = new SaveFileDialog();
save.Filter = "Wave File (*.wav)|*.wav;";
string wavoutputpath = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
wavoutputpath += "\\Speech.wav";
save.FileName = wavoutputpath;
int deviceNumber = sourceList.SelectedItems[0].Index;
sourceStream = new NAudio.Wave.WaveIn();
sourceStream.DeviceNumber = deviceNumber;
sourceStream.WaveFormat = new NAudio.Wave.WaveFormat(44100, NAudio.Wave.WaveIn.GetCapabilities(deviceNumber).Channels);
sourceStream.DataAvailable += new EventHandler<NAudio.Wave.WaveInEventArgs>(sourceStream_DataAvailable);
waveWriter = new NAudio.Wave.WaveFileWriter(save.FileName, sourceStream.WaveFormat);
sourceStream.StartRecording();
}
private void sourceStream_DataAvailable(object sender, NAudio.Wave.WaveInEventArgs e)
{
if (waveWriter == null) return;
waveWriter.WriteData(e.Buffer, 0, e.BytesRecorded);
waveWriter.Flush();
}
停止录制:
if (sourceStream != null)
{
sourceStream.StopRecording();
sourceStream.Dispose();
sourceStream = null;
}
if (waveWriter != null)
{
waveWriter.Dispose();
waveWriter = null;
}
答案 0 :(得分:3)
如果你想要它只是在没有音频时停止录音,你可以检查是否已经通过了一定数量的“静音”样本。在WaveIn.DataAvailable
事件处理程序中,您可以通过查看e.Buffer
中的字节来检查每个示例。假设您正在16 bit
录制,每2 bytes
个形成一个样本。您可以将其转换为Int16
进行检查。此外,当音频再次可用时开始录制,您可以检查样本值,如果超过阈值,您可以开始编写。
答案 1 :(得分:0)
@Jester有一个很好的答案,只是没有代码可以帮助不了解如何实现此目标的其他人。
音频不是我的专业领域,但是,这是我想出的:
int threshold = <SETYOURTHRESHOLD>;
int value = Math.Abs(BitConverter.ToInt16(e.Buffer, (e.BytesRecorded - 2)));
if (value < threshold)
sourceStream.StopRecording();
所有内容:
public void sourceStream_DataAvailable(object sender, WaveInEventArgs e)
方法。
当然,这仅仅是一个开始,需要更多的工作才能将其变成运行良好的机器!