3

我正在使用 NAudio 库将音频录制到 WAV 文件中。我希望能够在示例数据到达时将 ProgressBar 更新为音频电平/音量的值。

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);
     }
}
4

2 回答 2

2

对于 Windows 窗体示例,请查看 NAudioDemo 源代码,特别是AudioPlaybackPanel该类,它使用 aMeteringSampleProvider并订阅其StreamVolume事件来设置自定义音量计控件(包含在 NAudio 中)的属性

对于 WPF 示例,请查看使用类似技术的voicerecorder.codeplex.com ,并且本文中描述了音量计量。

于 2012-09-24T21:55:22.423 回答
-1

我写了一个控件,你想控制的一切都可以在这里找到。

与 NAudio 一起使用足以将设备定义为:

Private NAudio.CoreAudioApi.MMDevice device;

那么在任何时候你都知道以下值的音频电平值:

掌握 :

device.AudioMeterInformation.MasterPeakValue;

剩下 :

device.AudioMeterInformation.PeakValues[0];

正确的 :

device.AudioMeterInformation.PeakValues[1];
于 2012-11-03T10:02:42.390 回答