4242import io .pslab .models .SensorDataBlock ;
4343import io .pslab .models .SoundData ;
4444import io .pslab .others .AudioJack ;
45+ import io .pslab .others .CSVDataLine ;
4546import io .pslab .others .CSVLogger ;
4647import io .pslab .others .CustomSnackBar ;
4748
5354public class SoundMeterDataFragment extends Fragment {
5455
5556 public static final String TAG = "SoundMeterFragment" ;
57+ private static final CSVDataLine CSV_HEADER =
58+ new CSVDataLine ()
59+ .add ("Timestamp" )
60+ .add ("DateTime" )
61+ .add ("Readings" )
62+ .add ("Latitude" )
63+ .add ("Longitude" );
5664 @ BindView (R .id .sound_max )
5765 TextView statMax ;
5866 @ BindView (R .id .sound_min )
@@ -102,7 +110,7 @@ public static void setParameters() {
102110 /**
103111 * TODO: Parameters yet to be determined
104112 */
105- Log .i (TAG ,"parameters yet to be determined" );
113+ Log .i (TAG , "parameters yet to be determined" );
106114 }
107115
108116 /**********************************************************************************************
@@ -112,15 +120,15 @@ public static void setParameters() {
112120 @ Override
113121 public void onCreate (@ Nullable Bundle savedInstanceState ) {
114122 super .onCreate (savedInstanceState );
115- soundMeter = (SoundMeterActivity )getActivity ();
123+ soundMeter = (SoundMeterActivity ) getActivity ();
116124 }
117125
118126 @ Override
119127 public View onCreateView (LayoutInflater inflater , ViewGroup container ,
120128 Bundle savedInstanceState ) {
121129 // Inflate the layout for this fragment
122130 rootView = inflater .inflate (R .layout .fragment_sound_meter_data , container , false );
123- unbinder = ButterKnife .bind (this ,rootView );
131+ unbinder = ButterKnife .bind (this , rootView );
124132 setupInstruments ();
125133 return rootView ;
126134 }
@@ -179,11 +187,11 @@ private void startRecording() {
179187 audioJack = new AudioJack ("input" );
180188 recordStartTime = System .currentTimeMillis ();
181189 chartQ = new ArrayDeque <>();
182- bgThreadHandler .post (()-> {
183- while (isRecording ) {
190+ bgThreadHandler .post (() -> {
191+ while (isRecording ) {
184192 short [] buffer = audioJack .read ();
185193 Bundle bundle = new Bundle ();
186- bundle .putShortArray ("buffer" ,buffer );
194+ bundle .putShortArray ("buffer" , buffer );
187195 Message msg = new Message ();
188196 msg .setData (bundle );
189197 uiHandler .sendMessage (msg );
@@ -205,23 +213,23 @@ private void stopRecording() {
205213 *********************************************************************************************
206214 */
207215 private void startBackgroundThread () {
208- Log .i (TAG ,"starting background thread" );
216+ Log .i (TAG , "starting background thread" );
209217 bgThread = new HandlerThread ("Audio Recorder Thread" );
210218 bgThread .start ();
211219 bgThreadHandler = new Handler (bgThread .getLooper ());
212220 uiHandler = new UIHandler (this );
213- Log .i (TAG ,"background Thread started" );
221+ Log .i (TAG , "background Thread started" );
214222 }
215223
216224 private void stopBackgroundThread () {
217- Log .i (TAG ,"stopping background thread" );
218- if (bgThread != null ) {
225+ Log .i (TAG , "stopping background thread" );
226+ if (bgThread != null ) {
219227 bgThread .quitSafely ();
220228 bgThread = null ;
221229 }
222230 bgThreadHandler = null ;
223231 uiHandler = null ;
224- Log .i (TAG ,"Background Thread Stopped" );
232+ Log .i (TAG , "Background Thread Stopped" );
225233 }
226234
227235 /**********************************************************************************************
@@ -231,36 +239,36 @@ private void stopBackgroundThread() {
231239 private void updateMeter (short [] buffer ) {
232240 double sqrsum = 0.0 ;
233241 for (int i = 0 ; i < buffer .length ; ++i ) {
234- sqrsum += Math .pow (buffer [i ],2 );
242+ sqrsum += Math .pow (buffer [i ], 2 );
235243 }
236- double rmsamp = Math .sqrt ((sqrsum / buffer .length ));
237-
238- maxRmsAmp = Math .max (rmsamp ,maxRmsAmp );
239- minRmsAmp = Math .min (rmsamp ,minRmsAmp );
240- rmsSum = (count < Integer .MAX_VALUE )? (rmsSum + rmsamp ): rmsamp ;
241- count = (count < Integer .MAX_VALUE )? (count + 1 ): 1 ;
242- double avgRmsAmp = rmsSum / count ;
243-
244- double loudness = rmsamp > 0 ? (10 * Math .log10 (rmsamp / 1d )): 1 ;
245- double maxLoudness = maxRmsAmp > 0 ? (10 * Math .log10 (maxRmsAmp / 1d )): 1 ;
246- double minLoudness = minRmsAmp > 0 ? (10 * Math .log10 (minRmsAmp / 1d )): 1 ;
247- double avgLoudness = avgRmsAmp > 0 ? (10 * Math .log10 (avgRmsAmp / 1d )): 1 ;
248-
249- decibelMeter .setSpeedAt ((float )loudness );
250- statMax .setText (String .format (Locale .getDefault (), PSLabSensor .SOUNDMETER_DATA_FORMAT ,maxLoudness ));
251- statMin .setText (String .format (Locale .getDefault (), PSLabSensor .SOUNDMETER_DATA_FORMAT ,minLoudness ));
252- statMean .setText (String .format (Locale .getDefault (), PSLabSensor .SOUNDMETER_DATA_FORMAT ,avgLoudness ));
253- writeLog (System .currentTimeMillis (),(float )loudness );
244+ double rmsamp = Math .sqrt ((sqrsum / buffer .length ));
245+
246+ maxRmsAmp = Math .max (rmsamp , maxRmsAmp );
247+ minRmsAmp = Math .min (rmsamp , minRmsAmp );
248+ rmsSum = (count < Integer .MAX_VALUE ) ? (rmsSum + rmsamp ) : rmsamp ;
249+ count = (count < Integer .MAX_VALUE ) ? (count + 1 ) : 1 ;
250+ double avgRmsAmp = rmsSum / count ;
251+
252+ double loudness = rmsamp > 0 ? (10 * Math .log10 (rmsamp / 1d )) : 1 ;
253+ double maxLoudness = maxRmsAmp > 0 ? (10 * Math .log10 (maxRmsAmp / 1d )) : 1 ;
254+ double minLoudness = minRmsAmp > 0 ? (10 * Math .log10 (minRmsAmp / 1d )) : 1 ;
255+ double avgLoudness = avgRmsAmp > 0 ? (10 * Math .log10 (avgRmsAmp / 1d )) : 1 ;
256+
257+ decibelMeter .setSpeedAt ((float ) loudness );
258+ statMax .setText (String .format (Locale .getDefault (), PSLabSensor .SOUNDMETER_DATA_FORMAT , maxLoudness ));
259+ statMin .setText (String .format (Locale .getDefault (), PSLabSensor .SOUNDMETER_DATA_FORMAT , minLoudness ));
260+ statMean .setText (String .format (Locale .getDefault (), PSLabSensor .SOUNDMETER_DATA_FORMAT , avgLoudness ));
261+ writeLog (System .currentTimeMillis (), (float ) loudness );
254262 }
255263
256264 private void updateChart (short [] buffer ) {
257265 for (int i = 0 ; i < buffer .length ; ++i ) {
258- float x = (System .currentTimeMillis () - recordStartTime )/ 1000f ;
259- float y = buffer [i ]/ 1000f ;
260- if (chartQ .size ()>= buffer .length )
266+ float x = (System .currentTimeMillis () - recordStartTime ) / 1000f ;
267+ float y = buffer [i ] / 1000f ;
268+ if (chartQ .size () >= buffer .length )
261269 chartQ .removeFirst ();
262- chartQ .addLast (new Entry (x ,y ));
263- Log .i (TAG ,"x : " + x + " " + "y : " + y );
270+ chartQ .addLast (new Entry (x , y ));
271+ Log .i (TAG , "x : " + x + " " + "y : " + y );
264272 }
265273 List <Entry > entries = new ArrayList <>(chartQ );
266274 LineDataSet dataSet = new LineDataSet (entries , "Amplitude" );
@@ -277,8 +285,8 @@ private void updateChart(short[] buffer) {
277285 * Method to play data which was previously recorded
278286 */
279287 public void playData () {
280- CustomSnackBar .showSnackBar (getActivity ().findViewById (android .R .id .content ),getString (R .string .in_progress ),
281- null ,null ,Snackbar .LENGTH_SHORT );
288+ CustomSnackBar .showSnackBar (getActivity ().findViewById (android .R .id .content ), getString (R .string .in_progress ),
289+ null , null , Snackbar .LENGTH_SHORT );
282290 /**
283291 * TODO: To be implemented
284292 */
@@ -290,7 +298,7 @@ public void playData() {
290298 */
291299 public void stopData () {
292300 CustomSnackBar .showSnackBar (getActivity ().findViewById (android .R .id .content ), getString (R .string .in_progress ),
293- null ,null ,Snackbar .LENGTH_SHORT );
301+ null , null , Snackbar .LENGTH_SHORT );
294302 /**
295303 * TODO: To be implemented
296304 */
@@ -306,21 +314,31 @@ private void writeLog(long timestamp, float dB) {
306314 if (soundMeter .writeHeaderToFile ) {
307315 soundMeter .csvLogger .prepareLogFile ();
308316 soundMeter .csvLogger .writeMetaData (getResources ().getString (R .string .lux_meter ));
309- soundMeter .csvLogger .writeCSVFile ("Timestamp,DateTime,Readings,Latitude,Longitude" );
317+ soundMeter .csvLogger .writeCSVFile (CSV_HEADER );
310318 block = timestamp ;
311319 soundMeter .recordSensorDataBlockID (new SensorDataBlock (timestamp , soundMeter .getSensorName ()));
312320 soundMeter .writeHeaderToFile = !soundMeter .writeHeaderToFile ;
313321 }
314322 if (soundMeter .addLocation && soundMeter .gpsLogger .isGPSEnabled ()) {
315323 String dateTime = CSVLogger .FILE_NAME_FORMAT .format (new Date (timestamp ));
316324 Location location = soundMeter .gpsLogger .getDeviceLocation ();
317- soundMeter .csvLogger .writeCSVFile (timestamp + "," + dateTime + ","
318- + dB + "," + location .getLatitude () + "," + location .getLongitude ());
325+ soundMeter .csvLogger .writeCSVFile (
326+ new CSVDataLine ()
327+ .add (timestamp )
328+ .add (dateTime )
329+ .add (dB )
330+ .add (location .getLatitude ())
331+ .add (location .getLongitude ()));
319332 soundData = new SoundData (timestamp , block , dB , location .getLatitude (), location .getLongitude ());
320333 } else {
321334 String dateTime = CSVLogger .FILE_NAME_FORMAT .format (new Date (timestamp ));
322- soundMeter .csvLogger .writeCSVFile (timestamp + "," + dateTime + ","
323- + dB + ",0.0,0.0" );
335+ soundMeter .csvLogger .writeCSVFile (
336+ new CSVDataLine ()
337+ .add (timestamp )
338+ .add (dateTime )
339+ .add (dB )
340+ .add (0.0 )
341+ .add (0.0 ));
324342 soundData = new SoundData (timestamp , block , dB , 0.0 , 0.0 );
325343 }
326344 soundMeter .recordSensorData (soundData );
@@ -332,41 +350,45 @@ private void writeLog(long timestamp, float dB) {
332350 public void saveGraph () {
333351 soundMeter .csvLogger .prepareLogFile ();
334352 soundMeter .csvLogger .writeMetaData (getResources ().getString (R .string .lux_meter ));
335- soundMeter .csvLogger .writeCSVFile ("Timestamp,DateTime,Readings,Latitude,Longitude" );
353+ soundMeter .csvLogger .writeCSVFile (CSV_HEADER );
336354 for (SoundData soundData : soundMeter .recordedSoundData ) {
337- soundMeter .csvLogger .writeCSVFile (soundData .getTime () + ","
338- + CSVLogger .FILE_NAME_FORMAT .format (new Date (soundData .getTime ())) + ","
339- + soundData .getdB () + ","
340- + soundData .getLat () + ","
341- + soundData .getLon ());
355+ soundMeter .csvLogger .writeCSVFile (
356+ new CSVDataLine ()
357+ .add (soundData .getTime ())
358+ .add (CSVLogger .FILE_NAME_FORMAT .format (new Date (soundData .getTime ())))
359+ .add (soundData .getdB ())
360+ .add (soundData .getLat ())
361+ .add (soundData .getLon ()));
342362 }
343363 View view = rootView .findViewById (R .id .soundmeter_linearlayout );
344364 view .setDrawingCacheEnabled (true );
345365 Bitmap b = view .getDrawingCache ();
346366 try {
347367 b .compress (Bitmap .CompressFormat .JPEG , 100 , new FileOutputStream (Environment .getExternalStorageDirectory ().getAbsolutePath () +
348368 File .separator + CSV_DIRECTORY + File .separator + soundMeter .getSensorName () +
349- File .separator + CSVLogger .FILE_NAME_FORMAT .format (new Date ()) + "_graph.jpg" ));
369+ File .separator + CSVLogger .FILE_NAME_FORMAT .format (new Date ()) + "_graph.jpg" ));
350370 } catch (FileNotFoundException e ) {
351371 e .printStackTrace ();
352372 }
353373 }
354374
355375 private static class UIHandler extends Handler {
356376 private SoundMeterDataFragment soundMeterDataFragment ;
377+
357378 UIHandler (SoundMeterDataFragment fragment ) {
358379 this .soundMeterDataFragment = fragment ;
359380 }
381+
360382 @ Override
361383 public void handleMessage (Message msg ) { //handle the message passed by the background thread which is recording the audio
362- if (soundMeterDataFragment .isResumed ()) {
384+ if (soundMeterDataFragment .isResumed ()) {
363385 short [] buffer = msg .getData ().getShortArray ("buffer" );
364386 soundMeterDataFragment .updateMeter (buffer );
365387 /**
366388 * TODO: smooth animation for the graph required
367389 */
368390 soundMeterDataFragment .updateChart (buffer );
369- Log .i (TAG ,"handling message " + buffer .length + buffer [0 ]);
391+ Log .i (TAG , "handling message " + buffer .length + buffer [0 ]);
370392 }
371393 }
372394 }
0 commit comments