Smarter relative volume computation
This commit is contained in:
15
app/src/main/java/protect/babymonitor/AudioCodecDefines.java
Normal file
15
app/src/main/java/protect/babymonitor/AudioCodecDefines.java
Normal 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!");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user