我正在使用 NAudio 库将音频录制到 WAV 文件。我希望能够在示例数据到达时将进度条更新为音频电平/音量的值。
public WaveIn Recorder_NAudio;
public WaveFileWriter Writer_NAudio;
public void record()
{
Recorder_NAudio = new WaveIn();
Recorder_NAudio.WaveFormat = new NAudio.Wave.WaveFormat(sampleRate, 1);
Writer_NAudio = new WaveFileWriter(File.Open(tempPath, FileMode.Create), Recorder_NAudio.WaveFormat);
Recorder_NAudio.DataAvailable += new EventHandler<WaveInEventArgs>(Recorder2_DataAvailable);
Recorder_NAudio.StartRecording();
}
void Recorder2_DataAvailable(object sender, WaveInEventArgs e)
{
if (Writer_NAudio != null) if (Writer_NAudio.CanWrite)
{
Writer_NAudio.WriteData(e.Buffer, 0, e.BytesRecorded);
// I need help to create this function
ProgressBar1.value = GetVolumeFromBytes(e.buffer);
}
}
有关 Windows 窗体的示例,请查看 NAudioDemo 源代码,特别是 AudioPlaybackPanel
类,该类使用 MeteringSampleProvider
并订阅其 StreamVolume
事件来设置自定义音量计控件的属性(包含在 NAudio 中)
有关 WPF 示例,请查看使用类似技术的 voicerecorder.codeplex.com,本文介绍了卷计量。
我写了一个控件,可以在此处找到您想要控制的所有操作。
与 NAudio 一起使用足以将设备定义为:
Private NAudio.CoreAudioApi.MMDevice device;
然后,您可以随时知道以下值的音频电平值:
主人:
device.AudioMeterInformation.MasterPeakValue;
左:
device.AudioMeterInformation.PeakValues[0];
右:
device.AudioMeterInformation.PeakValues[1];