release AudioTrack after each play
- Otherwise, resource leak happens in audioflinger which causes allocation failure when all tests are run.
- may be the cause for 5939203

Change-Id: I22420aa7effe610c372103ff29df5b1289ec3c08
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/audioquality/Utils.java b/apps/CtsVerifier/src/com/android/cts/verifier/audioquality/Utils.java
index 704b1df..f2019c2 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/audioquality/Utils.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/audioquality/Utils.java
@@ -316,17 +316,17 @@
         return data.length / AudioQualityVerifierActivity.BYTES_PER_SAMPLE;
     }
 
-    public static void playRawFile(String filename) {
+    public static AudioTrack playRawFile(String filename) {
         byte[] data = readFile(filename);
         if (data == null) {
             Log.e(TAG, "Cannot read " + filename);
-            return;
+            return null;
         }
-        playRaw(data);
+        return playRaw(data);
     }
 
-    public static void playStim(Context context, int stimNum) {
-        Utils.playRaw(getStim(context, stimNum));
+    public static AudioTrack playStim(Context context, int stimNum) {
+        return Utils.playRaw(getStim(context, stimNum));
     }
 
     public static byte[] getStim(Context context, int stimNum) {
@@ -337,13 +337,15 @@
         return AudioAssets.getPinkNoise(context, ampl, duration);
     }
 
-    public static void playRaw(byte[] data) {
+    public static AudioTrack playRaw(byte[] data) {
         Log.i(TAG, "Playing " + data.length + " bytes of pre-recorded audio");
         AudioTrack at = new AudioTrack(AudioQualityVerifierActivity.PLAYBACK_STREAM, AudioQualityVerifierActivity.SAMPLE_RATE,
                 AudioFormat.CHANNEL_OUT_MONO, AudioQualityVerifierActivity.AUDIO_FORMAT,
                 data.length, AudioTrack.MODE_STREAM);
         writeAudio(at, data);
         at.play();
+
+        return at;
     }
 
     /**
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/audioquality/experiments/LoopbackExperiment.java b/apps/CtsVerifier/src/com/android/cts/verifier/audioquality/experiments/LoopbackExperiment.java
index 16039cb..109fdfe 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/audioquality/experiments/LoopbackExperiment.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/audioquality/experiments/LoopbackExperiment.java
@@ -24,6 +24,7 @@
 import android.content.Context;
 import android.media.AudioFormat;
 import android.media.AudioRecord;
+import android.media.AudioTrack;
 import android.media.MediaRecorder;
 import android.util.Log;
 
@@ -72,13 +73,15 @@
         mRecorder.start();
         Utils.delay(END_DELAY_MS);
 
-        Utils.playRaw(playbackData);
+        AudioTrack track = Utils.playRaw(playbackData);
 
         int timeout = duration + 2 * END_DELAY_MS;
         try {
             mRecorder.join(timeout);
         } catch (InterruptedException e) {}
 
+        track.stop();
+        track.release();
         return recordedData;
     }