Smarter relative volume computation

This commit is contained in:
edr
2020-04-22 21:42:31 +02:00
parent 471e4ead82
commit 10f2d0a253
4 changed files with 45 additions and 35 deletions

View File

@@ -0,0 +1,15 @@
package protect.babymonitor;
import android.media.AudioFormat;
public class AudioCodecDefines {
public static final int FREQUENCY = 11025;
public static final int ENCODING = AudioFormat.ENCODING_PCM_16BIT;
public static final int CHANNEL_CONFIGURATION_IN = AudioFormat.CHANNEL_IN_MONO;
public static final int CHANNEL_CONFIGURATION_OUT = AudioFormat.CHANNEL_OUT_MONO;
private AudioCodecDefines() {
throw new IllegalStateException("Do not instantiate!");
}
}

View File

@@ -44,9 +44,9 @@ public class ListenActivity extends Activity
NotificationManagerCompat _mNotifyMgr; NotificationManagerCompat _mNotifyMgr;
Thread _listenThread; Thread _listenThread;
private final int frequency = 11025; private final int frequency = AudioCodecDefines.FREQUENCY;
private final int channelConfiguration = AudioFormat.CHANNEL_OUT_MONO; private final int channelConfiguration = AudioCodecDefines.CHANNEL_CONFIGURATION_OUT;
private final int audioEncoding = AudioFormat.ENCODING_PCM_16BIT; private final int audioEncoding = AudioCodecDefines.ENCODING;
private final int bufferSize = AudioTrack.getMinBufferSize(frequency, channelConfiguration, audioEncoding); private final int bufferSize = AudioTrack.getMinBufferSize(frequency, channelConfiguration, audioEncoding);
private final int byteBufferSize = bufferSize*2; private final int byteBufferSize = bufferSize*2;

View File

@@ -59,9 +59,9 @@ public class MonitorActivity extends Activity {
} }
}); });
final int frequency = 11025; final int frequency = AudioCodecDefines.FREQUENCY;
final int channelConfiguration = AudioFormat.CHANNEL_IN_MONO; final int channelConfiguration = AudioCodecDefines.CHANNEL_CONFIGURATION_IN;
final int audioEncoding = AudioFormat.ENCODING_PCM_16BIT; final int audioEncoding = AudioCodecDefines.ENCODING;
final int bufferSize = AudioRecord.getMinBufferSize(frequency, channelConfiguration, audioEncoding); final int bufferSize = AudioRecord.getMinBufferSize(frequency, channelConfiguration, audioEncoding);
final AudioRecord audioRecord = new AudioRecord( final AudioRecord audioRecord = new AudioRecord(

View File

@@ -35,7 +35,7 @@ public class VolumeView extends View {
private void init() { private void init() {
volume = 0; volume = 0;
maxVolume = 0; maxVolume = 0.25;
paint = new Paint(); paint = new Paint();
volumeHistory = new LinkedList<>(); volumeHistory = new LinkedList<>();
paint.setColor(Color.rgb(255, 127, 0)); paint.setColor(Color.rgb(255, 127, 0));
@@ -44,8 +44,8 @@ public class VolumeView extends View {
public void onAudioData(byte[] data) { public void onAudioData(byte[] data) {
double sum = 0; double sum = 0;
for (int i = 0; i < data.length; i++) { for (int i = 0; i < data.length; i++) {
double rel = data[i] / (double)32767f; double rel = data[i] / ((double)128);
sum+=Math.pow(rel, 4); sum += Math.pow(rel, 2);
} }
volume = sum / data.length; volume = sum / data.length;
if (volume > maxVolume) { if (volume > maxVolume) {
@@ -62,12 +62,9 @@ public class VolumeView extends View {
protected void onDraw(Canvas canvas) { protected void onDraw(Canvas canvas) {
int height = canvas.getHeight(); int height = canvas.getHeight();
int width = canvas.getWidth(); int width = canvas.getWidth();
Log.d("VOLUME_VIEW", "height: " + height +" width: "+ width);
double relativeBrightness = 0; double relativeBrightness = 0;
if (maxVolume > 0) { double normalizedVolume = volume / maxVolume;
double normalizedVolume = volume / (float) maxVolume;
relativeBrightness = Math.max(0.3, normalizedVolume); relativeBrightness = Math.max(0.3, normalizedVolume);
}
int blue; int blue;
int rest; int rest;
if (relativeBrightness > 0.5) { if (relativeBrightness > 0.5) {
@@ -79,7 +76,6 @@ public class VolumeView extends View {
} }
int rgb = Color.rgb(rest, rest, blue); int rgb = Color.rgb(rest, rest, blue);
canvas.drawColor(rgb); canvas.drawColor(rgb);
if (maxVolume > 0) {
double margins = height * 0.1; double margins = height * 0.1;
double graphHeight = height - 2*margins; double graphHeight = height - 2*margins;
int leftMost = Math.max(0, volumeHistory.size() - width); int leftMost = Math.max(0, volumeHistory.size() - width);
@@ -100,7 +96,6 @@ public class VolumeView extends View {
yPrev = yNext; yPrev = yNext;
} }
}
} }
} }