First prototype for volume visualization
This commit is contained in:
58
app/src/main/java/protect/babymonitor/VolumeView.java
Normal file
58
app/src/main/java/protect/babymonitor/VolumeView.java
Normal file
@@ -0,0 +1,58 @@
|
||||
package protect.babymonitor;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
|
||||
public class VolumeView extends View {
|
||||
private double volume = 0;
|
||||
private double maxVolume = 0;
|
||||
|
||||
public VolumeView(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public VolumeView(Context context, @Nullable AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public VolumeView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
}
|
||||
|
||||
public void onAudioData(byte[] data) {
|
||||
double sum = 0;
|
||||
for (int i = 0; i < data.length; i++) {
|
||||
double rel = Math.abs(data[i]) / (double)32767f;
|
||||
sum+=rel;
|
||||
}
|
||||
volume = sum/data.length;
|
||||
if (volume > maxVolume) {
|
||||
maxVolume = volume;
|
||||
}
|
||||
invalidate();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
double relativeBrightness = 0;
|
||||
if (maxVolume > 0) {
|
||||
relativeBrightness = volume / (float) maxVolume;
|
||||
relativeBrightness = Math.max(0.2, relativeBrightness );
|
||||
}
|
||||
int blue;
|
||||
int rest;
|
||||
if (relativeBrightness > 0.5) {
|
||||
blue = 255;
|
||||
rest = (int) (2 * 255 * (relativeBrightness - 0.5));
|
||||
} else {
|
||||
blue = (int) (2 * 255 * relativeBrightness);
|
||||
rest = 0;
|
||||
}
|
||||
int rgb = Color.rgb(rest, rest, blue);
|
||||
canvas.drawColor(rgb);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user