Android Open Source - rfcx-guardian-android Audio Capture Service






From Project

Back to project page rfcx-guardian-android.

License

The source code is released under:

Apache License

If you think the Android project rfcx-guardian-android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package org.rfcx.guardian.service;
//from  www  . j a  v a 2 s  . com
import java.io.File;
import java.io.IOException;
import java.util.Calendar;

import org.rfcx.guardian.RfcxGuardian;
import org.rfcx.guardian.audio.AudioCore;
import org.rfcx.guardian.utility.ExtAudioRecorderModified;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.IBinder;
import android.text.TextUtils;
import android.util.Log;

public class AudioCaptureService extends Service {

  private static final String TAG = AudioCaptureService.class.getSimpleName();
  private static final String NULL_EXC = "Exception thrown, but exception itself is null.";

  private boolean runFlag = false;
  private AudioCapture audioCapture;

  private RfcxGuardian app = null;
  private Context context = null;
  MediaRecorder mediaRecorder = null;
    ExtAudioRecorderModified audioRecorder = null;
  
  private int captureSampleRate;
  
  private int encodingBitRate;
  private String fileExtension;
  
  private long[] captureTimeStamps = {0,0};
  
  @Override
  public IBinder onBind(Intent intent) {
    return null;
  }

  @Override
  public void onCreate() {
    super.onCreate();
    this.audioCapture = new AudioCapture();
  }

  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
    super.onStartCommand(intent, flags, startId);
    this.runFlag = true;
    
    app = (RfcxGuardian) getApplication();
    context = app.getApplicationContext();
    
    app.audioCore.initializeAudioCapture(app);
    
    if (app.verboseLog) Log.d(TAG, "Starting service: "+TAG);
    
    app.isRunning_AudioCapture = true;
    try {
      this.audioCapture.start();
    } catch (IllegalThreadStateException e) {
      Log.e(TAG,(e!=null) ? (e.getMessage() +" ||| "+ TextUtils.join(" | ", e.getStackTrace())) : NULL_EXC);
    }
    return START_STICKY;
  }

  @Override
  public void onDestroy() {
    super.onDestroy();
    this.runFlag = false;
    app.isRunning_AudioCapture = false;
    this.audioCapture.interrupt();
    this.audioCapture = null;
  }

  private class AudioCapture extends Thread {

    public AudioCapture() {
      super("AudioCaptureService-AudioCapture");
    }

    @Override
    public void run() {
      AudioCaptureService audioCaptureService = AudioCaptureService.this;
      app = (RfcxGuardian) getApplication();
      AudioCore audioCore = app.audioCore;
      app.audioCore.cleanupCaptureDirectory();
      captureSampleRate = audioCore.CAPTURE_SAMPLE_RATE_HZ;
      encodingBitRate = audioCore.aacEncodingBitRate;
      fileExtension = (app.audioCore.mayEncodeOnCapture()) ? "m4a" : "wav";
      try {
        while (audioCaptureService.runFlag) {
          try {
            captureLoopStart();
                processCompletedCaptureFile();
                Thread.sleep(audioCore.CAPTURE_LOOP_PERIOD_SECS*1000);
            captureLoopEnd();
            Log.d(TAG,"End: "+Calendar.getInstance().getTimeInMillis());
          } catch (Exception e) {
            Log.e(TAG,(e!=null) ? (e.getMessage() +" ||| "+ TextUtils.join(" | ", e.getStackTrace())) : NULL_EXC);
            audioCaptureService.runFlag = false;
            app.isRunning_AudioCapture = false;
          }
        }
        if (app.verboseLog) Log.d(TAG, "Stopping service: "+TAG);
        captureLoopEnd();
        
      } catch (Exception e) {
        Log.e(TAG,(e!=null) ? (e.getMessage() +" ||| "+ TextUtils.join(" | ", e.getStackTrace())) : NULL_EXC);
        audioCaptureService.runFlag = false;
        app.isRunning_AudioCapture = false;
      }
    }
  }
  
  private void captureLoopStart() throws IllegalStateException, IOException {
    long timeStamp = Calendar.getInstance().getTimeInMillis();
    String filePath = app.audioCore.captureDir+"/"+timeStamp+"."+fileExtension;
    if (app.audioCore.mayEncodeOnCapture()) {
      mediaRecorder = setAacCaptureRecorder();
      mediaRecorder.setOutputFile(filePath);
          mediaRecorder.prepare();
          mediaRecorder.start();
    } else {
      audioRecorder = ExtAudioRecorderModified.getInstance();
      audioRecorder.setOutputFile(filePath);
          audioRecorder.prepare();
          audioRecorder.start();
    }
        captureTimeStamps[0] = captureTimeStamps[1];
        captureTimeStamps[1] = timeStamp;
  }
  
  private void captureLoopEnd() {
    if (app.audioCore.mayEncodeOnCapture()) {
      mediaRecorder.stop();
      mediaRecorder.release();
    } else {
      audioRecorder.stop();
      audioRecorder.release();
    }
  }
  
  private MediaRecorder setAacCaptureRecorder() {
    MediaRecorder mediaRecorder = new MediaRecorder();
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
        mediaRecorder.setAudioSamplingRate(captureSampleRate);
        mediaRecorder.setAudioEncodingBitRate(encodingBitRate);
        mediaRecorder.setAudioChannels(1);
        return mediaRecorder;
  }
  
  private void processCompletedCaptureFile() {
    File completedCapture = new File(app.audioCore.captureDir+"/"+captureTimeStamps[0]+"."+fileExtension);
    if (completedCapture.exists()) {
      completedCapture.renameTo(new File(
          ((app.audioCore.mayEncodeOnCapture()) ? app.audioCore.aacDir : app.audioCore.wavDir)
          +"/"+captureTimeStamps[0]+"."+fileExtension));
          app.audioDb.dbCaptured.insert(captureTimeStamps[0]+"", fileExtension, "-");
      if (app.verboseLog) Log.d(TAG, "Capture file created ("+app.audioCore.CAPTURE_LOOP_PERIOD_SECS+"s): "+captureTimeStamps[0]+"."+fileExtension);
          app.audioCore.queueAudioCaptureFollowUp(context);
    }
  }

}




Java Source Code List

net.sourceforge.javaFlacEncoder.ArrayRecycler.java
net.sourceforge.javaFlacEncoder.BlockEncodeRequest.java
net.sourceforge.javaFlacEncoder.BlockThreadManager.java
net.sourceforge.javaFlacEncoder.CRC16.java
net.sourceforge.javaFlacEncoder.CRC8.java
net.sourceforge.javaFlacEncoder.ChannelData.java
net.sourceforge.javaFlacEncoder.EncodedElement_32.java
net.sourceforge.javaFlacEncoder.EncodedElement.java
net.sourceforge.javaFlacEncoder.EncodingConfiguration.java
net.sourceforge.javaFlacEncoder.FLACEncoder.java
net.sourceforge.javaFlacEncoder.FLACFileOutputStream.java
net.sourceforge.javaFlacEncoder.FLACOutputStream.java
net.sourceforge.javaFlacEncoder.FLACStreamController.java
net.sourceforge.javaFlacEncoder.FLACStreamIdentifier.java
net.sourceforge.javaFlacEncoder.FLACStreamOutputStream.java
net.sourceforge.javaFlacEncoder.FLAC_ConsoleFileEncoder.java
net.sourceforge.javaFlacEncoder.FLAC_FileEncoder.java
net.sourceforge.javaFlacEncoder.FLAC_MD5.java
net.sourceforge.javaFlacEncoder.FrameHeader.java
net.sourceforge.javaFlacEncoder.FrameThread.java
net.sourceforge.javaFlacEncoder.Frame.java
net.sourceforge.javaFlacEncoder.LPC.java
net.sourceforge.javaFlacEncoder.MetadataBlockHeader.java
net.sourceforge.javaFlacEncoder.MetadataBlockStreamInfo.java
net.sourceforge.javaFlacEncoder.RiceEncoder.java
net.sourceforge.javaFlacEncoder.StreamConfiguration.java
net.sourceforge.javaFlacEncoder.Subframe_Constant.java
net.sourceforge.javaFlacEncoder.Subframe_Fixed.java
net.sourceforge.javaFlacEncoder.Subframe_LPC.java
net.sourceforge.javaFlacEncoder.Subframe_Verbatim.java
net.sourceforge.javaFlacEncoder.Subframe.java
net.sourceforge.javaFlacEncoder.UTF8Modified.java
org.rfcx.guardian.RfcxGuardianPrefs.java
org.rfcx.guardian.RfcxGuardian.java
org.rfcx.guardian.activity.MainActivity.java
org.rfcx.guardian.activity.PrefsActivity.java
org.rfcx.guardian.api.ApiCore.java
org.rfcx.guardian.audio.AudioCore.java
org.rfcx.guardian.database.AlertDb.java
org.rfcx.guardian.database.AudioDb.java
org.rfcx.guardian.database.DeviceStateDb.java
org.rfcx.guardian.database.SmsDb.java
org.rfcx.guardian.device.AirplaneMode.java
org.rfcx.guardian.device.CpuUsage.java
org.rfcx.guardian.device.DeviceState.java
org.rfcx.guardian.intentservice.ApiCheckInTriggerIntentService.java
org.rfcx.guardian.intentservice.AudioEncodeIntentService.java
org.rfcx.guardian.intentservice.ServiceMonitorIntentService.java
org.rfcx.guardian.receiver.AirplaneModeReceiver.java
org.rfcx.guardian.receiver.BootReceiver.java
org.rfcx.guardian.receiver.ConnectivityReceiver.java
org.rfcx.guardian.receiver.SmsReceiver.java
org.rfcx.guardian.service.ApiCheckInService.java
org.rfcx.guardian.service.AudioCaptureService.java
org.rfcx.guardian.service.CarrierCodeService.java
org.rfcx.guardian.service.DeviceStateService.java
org.rfcx.guardian.telecom.CarrierInteraction.java
org.rfcx.guardian.utility.DateTimeUtils.java
org.rfcx.guardian.utility.DeviceGuid.java
org.rfcx.guardian.utility.ExtAudioRecorderModified.java
org.rfcx.guardian.utility.FileUtils.java
org.rfcx.guardian.utility.HttpGet.java
org.rfcx.guardian.utility.HttpPostMultipart.java
org.rfcx.guardian.utility.TimeOfDay.java