用于NAudio录音的音频电平表

时间:2012-09-23 21:43:37

标签: c# audio volume

我正在使用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);
     }
}

2 个答案:

答案 0 :(得分:2)

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

对于WPF示例,请查看使用类似技术的voicerecorder.codeplex.com,并在this article中介绍了音量测量。

答案 1 :(得分:0)

我写了一个控件,可以找到你想要控制的所有内容here

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

Private NAudio.CoreAudioApi.MMDevice device;

然后在任何时候您都知道以下值的音频电平值:

主人:

device.AudioMeterInformation.MasterPeakValue;

左:

device.AudioMeterInformation.PeakValues[0];

右:

device.AudioMeterInformation.PeakValues[1];