Android Open Source - rfcx-guardian-android Audio Core






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.audio;
/*from   w  ww. j a  v a  2 s  .  c  o m*/
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import net.sourceforge.javaFlacEncoder.FLAC_FileEncoder;

import org.rfcx.guardian.RfcxGuardian;
import org.rfcx.guardian.database.AudioDb;
import org.rfcx.guardian.intentservice.AudioEncodeIntentService;
import org.rfcx.guardian.utility.FileUtils;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import android.util.Log;


public class AudioCore {

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

  public String captureDir = null;
  public String flacDir = null;
  public String aacDir = null;
  public String wavDir = null;
  private String[] audioDirectories = new String[] {null, null, null, null};
  
  // encode straight to AAC/M4A (lossy, constant bitrate)...
  // ...or don't, and encode asynchronously after
  // (*may* eventually support various lossy formats for post-encoding)
  private boolean encodeOnCapture = true;
  
  public boolean purgeAudioAssetsOnStart = true;
  
  public final static int CAPTURE_SAMPLE_RATE_HZ = 8000;
  public final int CAPTURE_LOOP_PERIOD_SECS = 300;
  public final int aacEncodingBitRate = 16384;
  
  public void encodeCaptureAudio(String fileName, String encodedFormat, String dbRowEntryDate, AudioDb audioDb) {
    File wavFile = new File(wavDir+"/"+fileName+".wav");
    String encodedFilePath = wavDir.substring(0,wavDir.lastIndexOf("/"))+"/"+encodedFormat+"/"+fileName+"."+encodedFormat;
    File encodedFile = new File(encodedFilePath);
    try {
      if (encodedFormat == "flac") {
        FLAC_FileEncoder ffe = new FLAC_FileEncoder();
        ffe.adjustAudioConfig(CAPTURE_SAMPLE_RATE_HZ, 16, 1);
        ffe.encode(wavFile, encodedFile);
      }
    } catch(Exception e) {
      Log.e(TAG,(e!=null) ? (e.getMessage() +" ||| "+ TextUtils.join(" | ", e.getStackTrace())) : NULL_EXC);
    } finally {
      if (wavFile.exists()) {
        wavFile.delete();
        audioDb.dbCaptured.clearCapturedBefore(audioDb.dateTimeUtils.getDateFromString(dbRowEntryDate));
      }
      if (encodedFile.exists()) {
        String digest = (new FileUtils()).sha1Hash(encodedFilePath);
        audioDb.dbEncoded.insert(fileName, encodedFormat, digest);
      }
    }
  }
  
  public void initializeAudioCapture(RfcxGuardian app) {
    initializeAudioDirectories(app);
    if (app.audioCore.purgeAudioAssetsOnStart) {
      app.audioCore.purgeAllAudioAssets(app.audioDb);
    }
  }
  
  private void initializeAudioDirectories(RfcxGuardian app) {
    String filesDir = app.getApplicationContext().getFilesDir().toString();
    this.captureDir = filesDir+"/capture"; this.audioDirectories[0] = this.captureDir;
    this.wavDir = filesDir+"/wav"; this.audioDirectories[1] = this.wavDir;
    this.flacDir = filesDir+"/flac"; this.audioDirectories[2] = this.flacDir;
    this.aacDir = filesDir+"/m4a"; this.audioDirectories[3] = this.aacDir;
    
    for (String audioDir : this.audioDirectories) { (new File(audioDir)).mkdirs(); }
  }
  
  public void cleanupCaptureDirectory() {
    for (File file : (new File(this.captureDir)).listFiles()) {
      try { file.delete(); } catch (Exception e) { Log.e(TAG,(e!=null) ? (e.getMessage() +" ||| "+ TextUtils.join(" | ", e.getStackTrace())) : NULL_EXC); }
    }
  }
  
  public void purgeEncodedAssetsUpTo(AudioDb audioDb, Date purgeUpTo) {    
    List<String[]> encodedAudioEntries = audioDb.dbEncoded.getAllEncoded();
    for (String[] encodedAudioEntry : encodedAudioEntries) {
      try {
        (new File(this.wavDir.substring(0,this.wavDir.lastIndexOf("/"))+"/"+encodedAudioEntry[2]+"/"+encodedAudioEntry[1]+"."+encodedAudioEntry[2])).delete();
      } catch (Exception e) {
        Log.e(TAG,(e!=null) ? (e.getMessage() +" ||| "+ TextUtils.join(" | ", e.getStackTrace())) : NULL_EXC);
      }
    }
    audioDb.dbCaptured.clearCapturedBefore(purgeUpTo);
    audioDb.dbEncoded.clearEncodedBefore(purgeUpTo);
  }
  
  public void purgeAllAudioAssets(AudioDb audioDb) {
    Log.d(TAG, "Purging all existing audio assets...");
    try {
      for (String audioDir : this.audioDirectories) {
        if (!audioDir.equals(captureDir)) { //with this, we can purge audio assets on-the-fly, even during capture
          for (File file : (new File(audioDir)).listFiles()) { file.delete(); }
        }
      }
    } catch (Exception e) {
      Log.e(TAG,(e!=null) ? (e.getMessage() +" ||| "+ TextUtils.join(" | ", e.getStackTrace())) : NULL_EXC);
    }
    audioDb.dbCaptured.clearCapturedBefore(new Date());
    audioDb.dbEncoded.clearEncodedBefore(new Date());
  }
  
  public void queueAudioCaptureFollowUp(Context context) {
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    PendingIntent audioEncodeIntentService = PendingIntent.getService(context, -1, new Intent(context, AudioEncodeIntentService.class), PendingIntent.FLAG_UPDATE_CURRENT);
    alarmManager.set(AlarmManager.RTC, System.currentTimeMillis(), audioEncodeIntentService);
  }
  
  public boolean mayEncodeOnCapture() {
    return this.encodeOnCapture;
  }
  
  public void setEncodeOnCapture(boolean trueFalse) {
    this.encodeOnCapture = trueFalse;
  }
}




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