这是我用它来录制音频文件中的代码:使用记录波形文件(n音讯)
internal class AudioRecorder
{
public WaveIn waveSource = null;
public WaveFileWriter waveFile = null;
public string RECORDING_PATH;
public AudioRecorder(string fileName)
{
RECORDING_PATH = fileName;
}
public void Start()
{
waveSource = new WaveIn();
waveSource.WaveFormat = new WaveFormat(44100, 1);
waveSource.DeviceNumber = 0;
waveSource.DataAvailable += new EventHandler<WaveInEventArgs>(waveSource_DataAvailable);
waveSource.RecordingStopped += new EventHandler<StoppedEventArgs>(waveSource_RecordingStopped);
waveFile = new WaveFileWriter(RECORDING_PATH, waveSource.WaveFormat);
System.Timers.Timer t = new System.Timers.Timer(30000);
t.Elapsed += new ElapsedEventHandler(Stop);
waveSource.StartRecording();
t.Start();
}
private void Stop(object sender, ElapsedEventArgs args)
{
waveSource.StopRecording();
}
private void waveSource_DataAvailable(object sender, WaveInEventArgs e)
{
if (waveFile != null)
{
waveFile.Write(e.Buffer, 0, e.BytesRecorded);
waveFile.Flush();
}
}
private void waveSource_RecordingStopped(object sender, StoppedEventArgs e)
{
if (waveSource != null)
{
waveSource.Dispose();
waveSource = null;
}
if (waveFile != null)
{
waveFile.Dispose();
waveFile = null;
}
}
}
在main方法我做的:
AudioRecorder r = new AudioRecorder(dialog.FileName);
r.Start();
FileInfo file = new FileInfo(r.RECORDING_PATH);
// Do somehting with the recorded audio //
的问题是,当我做r.Start()
线程不会阻塞并继续运行。所以我得到一个损坏的文件错误。当我尝试使用Thread.Sleep
等线程等待记录结束时,此时AudioRecorder
代码无法正常工作(即录制从未结束)。
关于我应该怎么做的任何想法等待录音完成,以便我可以安全地使用录制的文件?
音频录制现在已成功完成并且没有损坏。但是,它没有记录它应该的长度(即30秒)。我得到的是1秒的白噪声。 – Cemre
Windows消息泵需要运行才能执行引发的事件。这个黑客工程,但你最好提出一个事件RecordingComplete或类似的东西... – rene