27 lines
681 B
Java
27 lines
681 B
Java
package de.winniepat.voiceChatInteraction;
|
|
|
|
public class AudioUtils {
|
|
public static double calculateAudioLevel(short[] samples) {
|
|
double rms = 0D; // root mean square (RMS) amplitude
|
|
|
|
for (int i = 0; i < samples.length; i++) {
|
|
double sample = (double) samples[i] / (double) Short.MAX_VALUE;
|
|
rms += sample * sample;
|
|
}
|
|
|
|
int sampleCount = samples.length / 2;
|
|
|
|
rms = (sampleCount == 0) ? 0 : Math.sqrt(rms / sampleCount);
|
|
|
|
double db;
|
|
|
|
if (rms > 0D) {
|
|
db = Math.min(Math.max(20D * Math.log10(rms), -127D), 0D);
|
|
} else {
|
|
db = -127D;
|
|
}
|
|
|
|
return db;
|
|
}
|
|
}
|