c# - Get decibels of 1 second of audio file using naudio -
i wanna calculate decibels of 1 second of .wav file using naudio. code:
wavefilereader reader = new wavefilereader(@"c:\users\admin\desktop\result.wav"); int bytespermillisecond = reader.waveformat.averagebytespersecond / 1000; //byte[] buffer = new byte[reader.length]; //int read = reader.read(buffer, 0, (int)reader.length); timespan time = new timespan(0, 0, 1); int bytespersecond = (int)time.totalmilliseconds * bytespermillisecond; byte[] onesecondbuffer = new byte[bytespersecond]; int read = reader.read(onesecondbuffer, 0, bytespersecond); short sample16bit = bitconverter.toint16(onesecondbuffer, 1); double volume = math.abs(sample16bit / 32768.0); double decibels = 20 * math.log10(volume); this line:
short sample16bit = bitconverter.toint16(onesecondbuffer, 1); returns 0. doing wrong?
i've resolved task way. piece of code, may people:
var silencedict = new dictionary<int, bool>(); using (naudio.wave.audiofilereader wave = new naudio.wave.audiofilereader(filepath)) { var samplespersecond = wave.waveformat.samplerate * wave.waveformat.channels; var readbuffer = new float[samplespersecond]; int samplesread; int = 1; { samplesread = wave.read(readbuffer, 0, samplespersecond); if (samplesread == 0) break; var max = readbuffer.take(samplesread).max(); if ((int)(max * 100) != 0) silencedict.add(i, false); else silencedict.add(i, true); i++; } while (samplesread > 0);
Comments
Post a Comment