package com.garethevans.church.opensongtablet;
import android.app.Activity;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
public class PopUpSoundLevelMeterFragment extends DialogFragment {
private AudioRecord audio;
int bufferSize;
static PopUpSoundLevelMeterFragment newInstance() {
PopUpSoundLevelMeterFragment frag;
frag = new PopUpSoundLevelMeterFragment();
return frag;
}
TextView dBTextView;
Handler mHandlerStart;
ImageView level_1;
ImageView level_2;
ImageView level_3;
ImageView level_4;
ImageView level_5;
ImageView level_6;
ImageView level_7;
ImageView level_8;
ImageView level_9;
ImageView level_10;
SeekBar maxvolrange;
TextView volval;
Button dBClose;
TextView averagevol;
Button resetaverage;
int totalvols = 0;
int counts = 0;
float avvol = 0.0f;
Runnable r = new Runnable() {
@Override
public void run() {
sampleSound();
}
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
getDialog().setTitle(getActivity().getResources().getString(R.string.volume));
View V = inflater.inflate(R.layout.popup_soundlevelmeter, container, false);
dBTextView = (TextView) V.findViewById(R.id.dBTextView);
level_1 = (ImageView) V.findViewById(R.id.level_1);
level_2 = (ImageView) V.findViewById(R.id.level_2);
level_3 = (ImageView) V.findViewById(R.id.level_3);
level_4 = (ImageView) V.findViewById(R.id.level_4);
level_5 = (ImageView) V.findViewById(R.id.level_5);
level_6 = (ImageView) V.findViewById(R.id.level_6);
level_7 = (ImageView) V.findViewById(R.id.level_7);
level_8 = (ImageView) V.findViewById(R.id.level_8);
level_9 = (ImageView) V.findViewById(R.id.level_9);
level_10 = (ImageView) V.findViewById(R.id.level_10);
dBClose = (Button) V.findViewById(R.id.dBClose);
dBClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
averagevol = (TextView) V.findViewById(R.id.averagevol);
resetaverage = (Button) V.findViewById(R.id.resetaverage);
resetaverage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
totalvols = 0;
counts = 0;
avvol = 0.0f;
}
});
volval = (TextView) V.findViewById(R.id.volval);
maxvolrange = (SeekBar) V.findViewById(R.id.maxvolrange);
maxvolrange.setMax(7);
int myprogress;
String mytext;
switch (FullscreenActivity.maxvolrange) {
case 50:
myprogress = 0;
mytext = "0 - 50";
break;
case 100:
myprogress = 1;
mytext = "0 - 100";
break;
case 200:
myprogress = 2;
mytext = "0 - 200";
break;
case 400:
myprogress = 3;
mytext = "0 - 400";
break;
case 600:
myprogress = 4;
mytext = "0 - 600";
break;
case 1000:
myprogress = 5;
mytext = "0 - 1000";
break;
case 2000:
myprogress = 6;
mytext = "0 - 2000";
break;
case 3000:
myprogress = 7;
mytext = "0 - 3000";
break;
default:
myprogress = 2;
mytext = "0 - 200";
break;
}
maxvolrange.setProgress(myprogress);
volval.setText(mytext);
maxvolrange.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
//volval.setText(progress);
int volrangechosen;
String text;
switch (progress) {
case 0:
volrangechosen = 50;
text = "0 - 50";
break;
case 1:
volrangechosen = 100;
text = "0 - 100";
break;
case 2:
volrangechosen = 200;
text = "0 - 200";
break;
case 3:
volrangechosen = 400;
text = "0 - 400";
break;
case 4:
volrangechosen = 600;
text = "0 - 600";
break;
case 5:
volrangechosen = 1000;
text = "0 - 1000";
break;
case 6:
volrangechosen = 2000;
text = "0 - 2000";
break;
case 7:
volrangechosen = 3000;
text = "0 - 3000";
break;
default:
volrangechosen = 100;
text = "0-100";
break;
}
FullscreenActivity.maxvolrange = volrangechosen;
volval.setText(text);
Preferences.savePreferences();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
});
if (audio!=null) {
audio=null;
}
int sampleRate = 44100;
try {
bufferSize = AudioRecord.getMinBufferSize(sampleRate, AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT);
audio = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleRate,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT, bufferSize);
} catch (Exception e) {
android.util.Log.e("TrackingFlow", "Exception", e);
}
try {
audio.startRecording();
mHandlerStart = new Handler();
mHandlerStart.postDelayed(r, 50);
} catch (Exception e) {
e.printStackTrace();
}
return V;
}
@Override
public void onDismiss(final DialogInterface dialog) {
super.onDismiss(dialog);
try {
audio.stop();
audio.release();
audio = null;
} catch (Exception e) {
e.printStackTrace();
}
final Activity activity = getActivity();
if (activity instanceof DialogInterface.OnDismissListener) {
((DialogInterface.OnDismissListener) activity).onDismiss(dialog);
}
}
public void sampleSound() {
short[] buffer = new short[bufferSize];
int bufferReadResult;
if (audio != null) {
// Sense the voice...
bufferReadResult = audio.read(buffer, 0, bufferSize);
double sumLevel = 0;
for (int i = 0; i < bufferReadResult; i++) {
sumLevel += buffer[i];
}
double lastLevel = Math.abs((sumLevel / bufferReadResult));
int vol = (int) Math.round(lastLevel);
totalvols += vol;
counts ++;
avvol = (float) totalvols/(float) counts;
avvol = Math.round(avvol);
String text = vol + "";
dBTextView.setText(text);
String text2 = (int)avvol+"";
averagevol.setText(text2);
// Turn the appropriate level lights on or off
// Assume the highest value is 170
if (vol>(0.9*(float)FullscreenActivity.maxvolrange)) {
// All 10 levels on
level_1.setVisibility(View.VISIBLE);
level_2.setVisibility(View.VISIBLE);
level_3.setVisibility(View.VISIBLE);
level_4.setVisibility(View.VISIBLE);
level_5.setVisibility(View.VISIBLE);
level_6.setVisibility(View.VISIBLE);
level_7.setVisibility(View.VISIBLE);
level_8.setVisibility(View.VISIBLE);
level_9.setVisibility(View.VISIBLE);
level_10.setVisibility(View.VISIBLE);
} else if (vol>(0.8*(float)FullscreenActivity.maxvolrange)) {
// 9 levels on
level_1.setVisibility(View.VISIBLE);
level_2.setVisibility(View.VISIBLE);
level_3.setVisibility(View.VISIBLE);
level_4.setVisibility(View.VISIBLE);
level_5.setVisibility(View.VISIBLE);
level_6.setVisibility(View.VISIBLE);
level_7.setVisibility(View.VISIBLE);
level_8.setVisibility(View.VISIBLE);
level_9.setVisibility(View.VISIBLE);
level_10.setVisibility(View.INVISIBLE);
} else if (vol>(0.7*(float)FullscreenActivity.maxvolrange)) {
// 8 levels on
level_1.setVisibility(View.VISIBLE);
level_2.setVisibility(View.VISIBLE);
level_3.setVisibility(View.VISIBLE);
level_4.setVisibility(View.VISIBLE);
level_5.setVisibility(View.VISIBLE);
level_6.setVisibility(View.VISIBLE);
level_7.setVisibility(View.VISIBLE);
level_8.setVisibility(View.VISIBLE);
level_9.setVisibility(View.INVISIBLE);
level_10.setVisibility(View.INVISIBLE);
} else if (vol>(0.6*(float)FullscreenActivity.maxvolrange)) {
// 7 levels on
level_1.setVisibility(View.VISIBLE);
level_2.setVisibility(View.VISIBLE);
level_3.setVisibility(View.VISIBLE);
level_4.setVisibility(View.VISIBLE);
level_5.setVisibility(View.VISIBLE);
level_6.setVisibility(View.VISIBLE);
level_7.setVisibility(View.VISIBLE);
level_8.setVisibility(View.INVISIBLE);
level_9.setVisibility(View.INVISIBLE);
level_10.setVisibility(View.INVISIBLE);
} else if (vol>(0.5*(float)FullscreenActivity.maxvolrange)) {
// 6 levels on
level_1.setVisibility(View.VISIBLE);
level_2.setVisibility(View.VISIBLE);
level_3.setVisibility(View.VISIBLE);
level_4.setVisibility(View.VISIBLE);
level_5.setVisibility(View.VISIBLE);
level_6.setVisibility(View.VISIBLE);
level_7.setVisibility(View.INVISIBLE);
level_8.setVisibility(View.INVISIBLE);
level_9.setVisibility(View.INVISIBLE);
level_10.setVisibility(View.INVISIBLE);
} else if (vol>(0.4*(float)FullscreenActivity.maxvolrange)) {
// 5 levels on
level_1.setVisibility(View.VISIBLE);
level_2.setVisibility(View.VISIBLE);
level_3.setVisibility(View.VISIBLE);
level_4.setVisibility(View.VISIBLE);
level_5.setVisibility(View.VISIBLE);
level_6.setVisibility(View.INVISIBLE);
level_7.setVisibility(View.INVISIBLE);
level_8.setVisibility(View.INVISIBLE);
level_9.setVisibility(View.INVISIBLE);
level_10.setVisibility(View.INVISIBLE);
} else if (vol>(0.3*(float)FullscreenActivity.maxvolrange)) {
// 4 levels on
level_1.setVisibility(View.VISIBLE);
level_2.setVisibility(View.VISIBLE);
level_3.setVisibility(View.VISIBLE);
level_4.setVisibility(View.VISIBLE);
level_5.setVisibility(View.INVISIBLE);
level_6.setVisibility(View.INVISIBLE);
level_7.setVisibility(View.INVISIBLE);
level_8.setVisibility(View.INVISIBLE);
level_9.setVisibility(View.INVISIBLE);
level_10.setVisibility(View.INVISIBLE);
} else if (vol>(0.2*(float)FullscreenActivity.maxvolrange)) {
// 3 levels on
level_1.setVisibility(View.VISIBLE);
level_2.setVisibility(View.VISIBLE);
level_3.setVisibility(View.VISIBLE);
level_4.setVisibility(View.INVISIBLE);
level_5.setVisibility(View.INVISIBLE);
level_6.setVisibility(View.INVISIBLE);
level_7.setVisibility(View.INVISIBLE);
level_8.setVisibility(View.INVISIBLE);
level_9.setVisibility(View.INVISIBLE);
level_10.setVisibility(View.INVISIBLE);
} else if (vol>(0.1*(float)FullscreenActivity.maxvolrange)) {
// 2 levels on
level_1.setVisibility(View.VISIBLE);
level_2.setVisibility(View.VISIBLE);
level_3.setVisibility(View.INVISIBLE);
level_4.setVisibility(View.INVISIBLE);
level_5.setVisibility(View.INVISIBLE);
level_6.setVisibility(View.INVISIBLE);
level_7.setVisibility(View.INVISIBLE);
level_8.setVisibility(View.INVISIBLE);
level_9.setVisibility(View.INVISIBLE);
level_10.setVisibility(View.INVISIBLE);
} else {
// 1 levels on
level_1.setVisibility(View.VISIBLE);
level_2.setVisibility(View.INVISIBLE);
level_3.setVisibility(View.INVISIBLE);
level_4.setVisibility(View.INVISIBLE);
level_5.setVisibility(View.INVISIBLE);
level_6.setVisibility(View.INVISIBLE);
level_7.setVisibility(View.INVISIBLE);
level_8.setVisibility(View.INVISIBLE);
level_9.setVisibility(View.INVISIBLE);
level_10.setVisibility(View.INVISIBLE);
}
mHandlerStart.removeCallbacks(r);
mHandlerStart.post(r);
//mHandlerStart.postDelayed(r,50);
}
}
}