var waveIn = new NAudio.Wave.WaveInEvent();
waveIn.DeviceNumber = 0;
waveIn.WaveFormat = new NAudio.Wave.WaveFormat(16000, 1);
waveIn.DataAvailable += WaveIn_DataAvailable;
waveIn.StartRecording();
private void WaveIn_DataAvailable(object sender, WaveInEventArgs e)
{
//if (isRecording)
//{
// writer.Write(args.Buffer, 0, args.BytesRecorded);
//}
float max = 0;
// interpret as 16 bit audio
for (int index = 0; index < e.BytesRecorded; index += 2)
{
short sample = (short)((e.Buffer[index + 1] << 8) |
e.Buffer[index + 0]);
// to floating point
var sample32 = sample / 32768f;
// absolute value
if (sample32 < 0) sample32 = -sample32;
// is this the max value?
if (sample32 > max) max = sample32;
}
float level = 100 * max;
this.Invoke(new Action(
delegate ()
{
progressBar1.Value = Convert.ToInt32(level);
}));
}
max는 0.0~1.0의 실수값이다.
참고
https://github.com/naudio/NAudio/blob/master/Docs/RecordingLevelMeter.md
'프로그래밍 > C#' 카테고리의 다른 글
[C#] 자연스러운 정렬(natural sort) 사용하기 (0) | 2020.09.16 |
---|---|
[C#] Selenium IEDRIVER이 작동하지 않을때 해결법 (0) | 2020.03.23 |
[C#] 음성인식 검색기 만들기 0편. 구상 (0) | 2020.03.23 |
[C#] Selenium 프로그램 종료 후 종료되게 하기와 Close,Quit, Dispose 차이 알아보기 (0) | 2020.03.21 |
[C#] 구글 API를 이용한 마이크 음성인식 (0) | 2020.03.20 |