/* * Copyright (C) 2009 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.mediaframeworktest.functional.audio; import com.android.mediaframeworktest.MediaFrameworkTest; import com.android.mediaframeworktest.MediaNames; import android.media.AudioFormat; import android.media.AudioManager; import android.media.AudioTrack; import android.test.ActivityInstrumentationTestCase2; import android.util.Log; import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.MediumTest; import android.test.suitebuilder.annotation.Suppress; /** * Junit / Instrumentation test case for the media AudioTrack api */ public class MediaAudioTrackTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> { private String TAG = "MediaAudioTrackTest"; public MediaAudioTrackTest() { super("com.android.mediaframeworktest", MediaFrameworkTest.class); } @Override protected void setUp() throws Exception { super.setUp(); } @Override protected void tearDown() throws Exception { super.tearDown(); } private static void assumeTrue(String message, boolean cond) { assertTrue("(assume)"+message, cond); } private void log(String testName, String message) { Log.v(TAG, "["+testName+"] "+message); } private void loge(String testName, String message) { Log.e(TAG, "["+testName+"] "+message); } //----------------------------------------------------------------- // private class to hold test reslts public class TestResults { public boolean mResult = false; public String mResultLog = ""; public TestResults(boolean b, String s) { mResult = b; mResultLog = s; } } //----------------------------------------------------------------- // generic test methods public TestResults constructorTestMultiSampleRate( // parameters tested by this method int _inTest_streamType, int _inTest_mode, int _inTest_config, int _inTest_format, // parameter-dependent expected results int _expected_stateForMode) { int[] testSampleRates = {8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000}; String failedRates = "Failure for rate(s): "; boolean localRes, finalRes = true; for (int i = 0 ; i < testSampleRates.length ; i++) { //Log.v("MediaAudioTrackTest", "[ constructorTestMultiSampleRate ] testing "+ testSampleRates[i]); AudioTrack track = null; try { track = new AudioTrack( _inTest_streamType, testSampleRates[i], _inTest_config, _inTest_format, AudioTrack.getMinBufferSize(testSampleRates[i], _inTest_config, _inTest_format), _inTest_mode); } catch(IllegalArgumentException iae) { Log.e("MediaAudioTrackTest", "[ constructorTestMultiSampleRate ] exception at SR " + testSampleRates[i]+": \n" + iae); localRes = false; } if (track != null) { localRes = (track.getState() == _expected_stateForMode); track.release(); } else { localRes = false; } if (!localRes) { //log the error for the test runner failedRates += Integer.toString(testSampleRates[i]) + "Hz "; //log the error for logcat log("constructorTestMultiSampleRate", "failed to construct " +"AudioTrack(streamType="+_inTest_streamType +", sampleRateInHz=" + testSampleRates[i] +", channelConfig=" + _inTest_config +", audioFormat=" + _inTest_format +", bufferSizeInBytes=" + AudioTrack.getMinBufferSize(testSampleRates[i], _inTest_config, AudioFormat.ENCODING_PCM_16BIT) +", mode="+ _inTest_mode ); //mark test as failed finalRes = false; } } return new TestResults(finalRes, failedRates); } //----------------------------------------------------------------- // AUDIOTRACK TESTS: //---------------------------------- //----------------------------------------------------------------- // AudioTrack constructor and AudioTrack.getMinBufferSize(...) for 16bit PCM //---------------------------------- //Test case 1: constructor for streaming AudioTrack, mono, 16bit at misc valid sample rates @LargeTest public void testConstructorMono16MusicStream() throws Exception { TestResults res = constructorTestMultiSampleRate( AudioManager.STREAM_MUSIC, AudioTrack.MODE_STREAM, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, AudioTrack.STATE_INITIALIZED); assertTrue("testConstructorMono16MusicStream: " + res.mResultLog, res.mResult); } //Test case 2: constructor for streaming AudioTrack, stereo, 16bit at misc valid sample rates @LargeTest public void testConstructorStereo16MusicStream() throws Exception { TestResults res = constructorTestMultiSampleRate( AudioManager.STREAM_MUSIC, AudioTrack.MODE_STREAM, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT, AudioTrack.STATE_INITIALIZED); assertTrue("testConstructorStereo16MusicStream: " + res.mResultLog, res.mResult); } //Test case 3: constructor for static AudioTrack, mono, 16bit at misc valid sample rates @LargeTest public void testConstructorMono16MusicStatic() throws Exception { TestResults res = constructorTestMultiSampleRate( AudioManager.STREAM_MUSIC, AudioTrack.MODE_STATIC, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, AudioTrack.STATE_NO_STATIC_DATA); assertTrue("testConstructorMono16MusicStatic: " + res.mResultLog, res.mResult); } //Test case 4: constructor for static AudioTrack, stereo, 16bit at misc valid sample rates @LargeTest public void testConstructorStereo16MusicStatic() throws Exception { TestResults res = constructorTestMultiSampleRate( AudioManager.STREAM_MUSIC, AudioTrack.MODE_STATIC, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT, AudioTrack.STATE_NO_STATIC_DATA); assertTrue("testConstructorStereo16MusicStatic: " + res.mResultLog, res.mResult); } //----------------------------------------------------------------- // AudioTrack constructor and AudioTrack.getMinBufferSize(...) for 8bit PCM //---------------------------------- //Test case 1: constructor for streaming AudioTrack, mono, 8bit at misc valid sample rates @LargeTest public void testConstructorMono8MusicStream() throws Exception { TestResults res = constructorTestMultiSampleRate( AudioManager.STREAM_MUSIC, AudioTrack.MODE_STREAM, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_8BIT, AudioTrack.STATE_INITIALIZED); assertTrue("testConstructorMono8MusicStream: " + res.mResultLog, res.mResult); } //Test case 2: constructor for streaming AudioTrack, stereo, 8bit at misc valid sample rates @LargeTest public void testConstructorStereo8MusicStream() throws Exception { TestResults res = constructorTestMultiSampleRate( AudioManager.STREAM_MUSIC, AudioTrack.MODE_STREAM, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_8BIT, AudioTrack.STATE_INITIALIZED); assertTrue("testConstructorStereo8MusicStream: " + res.mResultLog, res.mResult); } //Test case 3: constructor for static AudioTrack, mono, 8bit at misc valid sample rates @LargeTest public void testConstructorMono8MusicStatic() throws Exception { TestResults res = constructorTestMultiSampleRate( AudioManager.STREAM_MUSIC, AudioTrack.MODE_STATIC, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_8BIT, AudioTrack.STATE_NO_STATIC_DATA); assertTrue("testConstructorMono8MusicStatic: " + res.mResultLog, res.mResult); } //Test case 4: constructor for static AudioTrack, stereo, 8bit at misc valid sample rates @LargeTest public void testConstructorStereo8MusicStatic() throws Exception { TestResults res = constructorTestMultiSampleRate( AudioManager.STREAM_MUSIC, AudioTrack.MODE_STATIC, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_8BIT, AudioTrack.STATE_NO_STATIC_DATA); assertTrue("testConstructorStereo8MusicStatic: " + res.mResultLog, res.mResult); } //----------------------------------------------------------------- // AudioTrack constructor for all stream types //---------------------------------- //Test case 1: constructor for all stream types @LargeTest public void testConstructorStreamType() throws Exception { // constants for test final int TYPE_TEST_SR = 22050; final int TYPE_TEST_CONF = AudioFormat.CHANNEL_OUT_STEREO; final int TYPE_TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TYPE_TEST_MODE = AudioTrack.MODE_STREAM; final int[] STREAM_TYPES = { AudioManager.STREAM_ALARM, AudioManager.STREAM_BLUETOOTH_SCO, AudioManager.STREAM_MUSIC, AudioManager.STREAM_NOTIFICATION, AudioManager.STREAM_RING, AudioManager.STREAM_SYSTEM, AudioManager.STREAM_VOICE_CALL, AudioManager.STREAM_DTMF, }; final String[] STREAM_NAMES = { "STREAM_ALARM", "STREAM_BLUETOOTH_SCO", "STREAM_MUSIC", "STREAM_NOTIFICATION", "STREAM_RING", "STREAM_SYSTEM", "STREAM_VOICE_CALL", "STREAM_DTMF" }; boolean localTestRes = true; AudioTrack track = null; // test: loop constructor on all stream types for (int i = 0 ; i < STREAM_TYPES.length ; i++) { try { //-------- initialization -------------- track = new AudioTrack(STREAM_TYPES[i], TYPE_TEST_SR, TYPE_TEST_CONF, TYPE_TEST_FORMAT, AudioTrack.getMinBufferSize(TYPE_TEST_SR, TYPE_TEST_CONF, TYPE_TEST_FORMAT), TYPE_TEST_MODE); } catch (IllegalArgumentException iae) { loge("testConstructorStreamType", "exception for stream type " + STREAM_NAMES[i] + ": "+ iae); localTestRes = false; } //-------- test -------------- if (track != null) { if (track.getState() != AudioTrack.STATE_INITIALIZED) { localTestRes = false; Log.e("MediaAudioTrackTest", "[ testConstructorStreamType ] failed for stream type "+STREAM_NAMES[i]); } //-------- tear down -------------- track.release(); } else { localTestRes = false; } } assertTrue("testConstructorStreamType", localTestRes); } //----------------------------------------------------------------- // Playback head position //---------------------------------- //Test case 1: getPlaybackHeadPosition() at 0 after initialization @LargeTest public void testPlaybackHeadPositionAfterInit() throws Exception { // constants for test final String TEST_NAME = "testPlaybackHeadPositionAfterInit"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_STEREO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT), TEST_MODE); //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); assertTrue(TEST_NAME, track.getPlaybackHeadPosition() == 0); //-------- tear down -------------- track.release(); } //Test case 2: getPlaybackHeadPosition() increases after play() @LargeTest public void testPlaybackHeadPositionIncrease() throws Exception { // constants for test final String TEST_NAME = "testPlaybackHeadPositionIncrease"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_STEREO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize/2]; //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); track.write(data, 0, data.length); track.write(data, 0, data.length); track.play(); Thread.sleep(100); log(TEST_NAME, "position ="+ track.getPlaybackHeadPosition()); assertTrue(TEST_NAME, track.getPlaybackHeadPosition() > 0); //-------- tear down -------------- track.release(); } //Test case 3: getPlaybackHeadPosition() is 0 after flush(); @LargeTest public void testPlaybackHeadPositionAfterFlush() throws Exception { // constants for test final String TEST_NAME = "testPlaybackHeadPositionAfterFlush"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_STEREO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize/2]; //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); track.write(data, 0, data.length); track.write(data, 0, data.length); track.play(); Thread.sleep(100); track.stop(); track.flush(); log(TEST_NAME, "position ="+ track.getPlaybackHeadPosition()); assertTrue(TEST_NAME, track.getPlaybackHeadPosition() == 0); //-------- tear down -------------- track.release(); } //Test case 3: getPlaybackHeadPosition() is 0 after stop(); @LargeTest public void testPlaybackHeadPositionAfterStop() throws Exception { // constants for test final String TEST_NAME = "testPlaybackHeadPositionAfterStop"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_STEREO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize/2]; //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); track.write(data, 0, data.length); track.write(data, 0, data.length); track.play(); Thread.sleep(100); track.stop(); Thread.sleep(100); // TODO: what is a sensible value? int pos = track.getPlaybackHeadPosition(); log(TEST_NAME, "position ="+ pos); assertTrue(TEST_NAME, pos == 0); //-------- tear down -------------- track.release(); } //Test case 4: getPlaybackHeadPosition() is > 0 after play(); pause(); @LargeTest public void testPlaybackHeadPositionAfterPause() throws Exception { // constants for test final String TEST_NAME = "testPlaybackHeadPositionAfterPause"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_STEREO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize/2]; //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); track.write(data, 0, data.length); track.write(data, 0, data.length); track.play(); Thread.sleep(100); track.pause(); int pos = track.getPlaybackHeadPosition(); log(TEST_NAME, "position ="+ pos); assertTrue(TEST_NAME, pos > 0); //-------- tear down -------------- track.release(); } //----------------------------------------------------------------- // Playback properties //---------------------------------- //Test case 1: setStereoVolume() with max volume returns SUCCESS @LargeTest public void testSetStereoVolumeMax() throws Exception { // constants for test final String TEST_NAME = "testSetStereoVolumeMax"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_STEREO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize/2]; //-------- test -------------- track.write(data, 0, data.length); track.write(data, 0, data.length); track.play(); float maxVol = AudioTrack.getMaxVolume(); assertTrue(TEST_NAME, track.setStereoVolume(maxVol, maxVol) == AudioTrack.SUCCESS); //-------- tear down -------------- track.release(); } //Test case 2: setStereoVolume() with min volume returns SUCCESS @LargeTest public void testSetStereoVolumeMin() throws Exception { // constants for test final String TEST_NAME = "testSetStereoVolumeMin"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_STEREO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize/2]; //-------- test -------------- track.write(data, 0, data.length); track.write(data, 0, data.length); track.play(); float minVol = AudioTrack.getMinVolume(); assertTrue(TEST_NAME, track.setStereoVolume(minVol, minVol) == AudioTrack.SUCCESS); //-------- tear down -------------- track.release(); } //Test case 3: setStereoVolume() with mid volume returns SUCCESS @LargeTest public void testSetStereoVolumeMid() throws Exception { // constants for test final String TEST_NAME = "testSetStereoVolumeMid"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_STEREO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize/2]; //-------- test -------------- track.write(data, 0, data.length); track.write(data, 0, data.length); track.play(); float midVol = (AudioTrack.getMaxVolume() - AudioTrack.getMinVolume()) / 2; assertTrue(TEST_NAME, track.setStereoVolume(midVol, midVol) == AudioTrack.SUCCESS); //-------- tear down -------------- track.release(); } //Test case 4: setPlaybackRate() with half the content rate returns SUCCESS @LargeTest public void testSetPlaybackRate() throws Exception { // constants for test final String TEST_NAME = "testSetPlaybackRate"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_STEREO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize/2]; //-------- test -------------- track.write(data, 0, data.length); track.write(data, 0, data.length); assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); track.play(); assertTrue(TEST_NAME, track.setPlaybackRate((int)(TEST_SR/2)) == AudioTrack.SUCCESS); //-------- tear down -------------- track.release(); } //Test case 5: setPlaybackRate(0) returns bad value error @LargeTest public void testSetPlaybackRateZero() throws Exception { // constants for test final String TEST_NAME = "testSetPlaybackRateZero"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_STEREO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, minBuffSize, TEST_MODE); //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); assertTrue(TEST_NAME, track.setPlaybackRate(0) == AudioTrack.ERROR_BAD_VALUE); //-------- tear down -------------- track.release(); } //Test case 6: setPlaybackRate() accepts values twice the output sample rate @LargeTest public void testSetPlaybackRateTwiceOutputSR() throws Exception { // constants for test final String TEST_NAME = "testSetPlaybackRateTwiceOutputSR"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_STEREO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize/2]; int outputSR = AudioTrack.getNativeOutputSampleRate(TEST_STREAM_TYPE); //-------- test -------------- track.write(data, 0, data.length); track.write(data, 0, data.length); assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); track.play(); assertTrue(TEST_NAME, track.setPlaybackRate(2*outputSR) == AudioTrack.SUCCESS); //-------- tear down -------------- track.release(); } //Test case 7: setPlaybackRate() and retrieve value, should be the same for half the content SR @LargeTest public void testSetGetPlaybackRate() throws Exception { // constants for test final String TEST_NAME = "testSetGetPlaybackRate"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_STEREO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize/2]; //-------- test -------------- track.write(data, 0, data.length); track.write(data, 0, data.length); assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); track.play(); track.setPlaybackRate((int)(TEST_SR/2)); assertTrue(TEST_NAME, track.getPlaybackRate() == (int)(TEST_SR/2)); //-------- tear down -------------- track.release(); } //Test case 8: setPlaybackRate() invalid operation if track not initialized @LargeTest public void testSetPlaybackRateUninit() throws Exception { // constants for test final String TEST_NAME = "testSetPlaybackRateUninit"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STATIC; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, minBuffSize, TEST_MODE); //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_NO_STATIC_DATA); assertTrue(TEST_NAME, track.setPlaybackRate(TEST_SR/2) == AudioTrack.ERROR_INVALID_OPERATION); //-------- tear down -------------- track.release(); } //----------------------------------------------------------------- // Playback progress //---------------------------------- //Test case 1: setPlaybackHeadPosition() on playing track @LargeTest public void testSetPlaybackHeadPositionPlaying() throws Exception { // constants for test final String TEST_NAME = "testSetPlaybackHeadPositionPlaying"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 2*minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize]; //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); track.write(data, 0, data.length); track.write(data, 0, data.length); track.play(); assertTrue(TEST_NAME, track.setPlaybackHeadPosition(10) == AudioTrack.ERROR_INVALID_OPERATION); //-------- tear down -------------- track.release(); } //Test case 2: setPlaybackHeadPosition() on stopped track @LargeTest public void testSetPlaybackHeadPositionStopped() throws Exception { // constants for test final String TEST_NAME = "testSetPlaybackHeadPositionStopped"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 2*minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize]; //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); track.write(data, 0, data.length); track.write(data, 0, data.length); track.play(); track.stop(); assumeTrue(TEST_NAME, track.getPlayState() == AudioTrack.PLAYSTATE_STOPPED); assertTrue(TEST_NAME, track.setPlaybackHeadPosition(10) == AudioTrack.SUCCESS); //-------- tear down -------------- track.release(); } //Test case 3: setPlaybackHeadPosition() on paused track @LargeTest public void testSetPlaybackHeadPositionPaused() throws Exception { // constants for test final String TEST_NAME = "testSetPlaybackHeadPositionPaused"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 2*minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize]; //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); track.write(data, 0, data.length); track.write(data, 0, data.length); track.play(); track.pause(); assumeTrue(TEST_NAME, track.getPlayState() == AudioTrack.PLAYSTATE_PAUSED); assertTrue(TEST_NAME, track.setPlaybackHeadPosition(10) == AudioTrack.SUCCESS); //-------- tear down -------------- track.release(); } //Test case 4: setPlaybackHeadPosition() beyond what has been written @LargeTest public void testSetPlaybackHeadPositionTooFar() throws Exception { // constants for test final String TEST_NAME = "testSetPlaybackHeadPositionTooFar"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 2*minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize]; // make up a frame index that's beyond what has been written: go from buffer size to frame // count (given the audio track properties), and add 77. int frameIndexTooFar = (2*minBuffSize/2) + 77; //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); track.write(data, 0, data.length); track.write(data, 0, data.length); track.play(); track.stop(); assumeTrue(TEST_NAME, track.getPlayState() == AudioTrack.PLAYSTATE_STOPPED); assertTrue(TEST_NAME, track.setPlaybackHeadPosition(frameIndexTooFar) == AudioTrack.ERROR_BAD_VALUE); //-------- tear down -------------- track.release(); } //Test case 5: setLoopPoints() fails for MODE_STREAM @LargeTest public void testSetLoopPointsStream() throws Exception { // constants for test final String TEST_NAME = "testSetLoopPointsStream"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 2*minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize]; //-------- test -------------- track.write(data, 0, data.length); assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); assertTrue(TEST_NAME, track.setLoopPoints(2, 50, 2) == AudioTrack.ERROR_INVALID_OPERATION); //-------- tear down -------------- track.release(); } //Test case 6: setLoopPoints() fails start > end @LargeTest public void testSetLoopPointsStartAfterEnd() throws Exception { // constants for test final String TEST_NAME = "testSetLoopPointsStartAfterEnd"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STATIC; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize]; //-------- test -------------- track.write(data, 0, data.length); assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); assertTrue(TEST_NAME, track.setLoopPoints(50, 0, 2) == AudioTrack.ERROR_BAD_VALUE); //-------- tear down -------------- track.release(); } //Test case 6: setLoopPoints() success @LargeTest public void testSetLoopPointsSuccess() throws Exception { // constants for test final String TEST_NAME = "testSetLoopPointsSuccess"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STATIC; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize]; //-------- test -------------- track.write(data, 0, data.length); assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); assertTrue(TEST_NAME, track.setLoopPoints(0, 50, 2) == AudioTrack.SUCCESS); //-------- tear down -------------- track.release(); } //Test case 7: setLoopPoints() fails with loop length bigger than content @LargeTest public void testSetLoopPointsLoopTooLong() throws Exception { // constants for test final String TEST_NAME = "testSetLoopPointsLoopTooLong"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STATIC; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize]; int dataSizeInFrames = minBuffSize/2; //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_NO_STATIC_DATA); track.write(data, 0, data.length); assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); assertTrue(TEST_NAME, track.setLoopPoints(10, dataSizeInFrames+20, 2) == AudioTrack.ERROR_BAD_VALUE); //-------- tear down -------------- track.release(); } //Test case 8: setLoopPoints() fails with start beyond what can be written for the track @LargeTest public void testSetLoopPointsStartTooFar() throws Exception { // constants for test final String TEST_NAME = "testSetLoopPointsStartTooFar"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STATIC; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize]; int dataSizeInFrames = minBuffSize/2;//16bit data //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_NO_STATIC_DATA); track.write(data, 0, data.length); assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); assertTrue(TEST_NAME, track.setLoopPoints(dataSizeInFrames+20, dataSizeInFrames+50, 2) == AudioTrack.ERROR_BAD_VALUE); //-------- tear down -------------- track.release(); } //Test case 9: setLoopPoints() fails with end beyond what can be written for the track @LargeTest public void testSetLoopPointsEndTooFar() throws Exception { // constants for test final String TEST_NAME = "testSetLoopPointsEndTooFar"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STATIC; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize]; int dataSizeInFrames = minBuffSize/2;//16bit data //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_NO_STATIC_DATA); track.write(data, 0, data.length); assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); assertTrue(TEST_NAME, track.setLoopPoints(dataSizeInFrames-10, dataSizeInFrames+50, 2) == AudioTrack.ERROR_BAD_VALUE); //-------- tear down -------------- track.release(); } //----------------------------------------------------------------- // Audio data supply //---------------------------------- //Test case 1: write() fails when supplying less data (bytes) than declared @LargeTest public void testWriteByteOffsetTooBig() throws Exception { // constants for test final String TEST_NAME = "testWriteByteOffsetTooBig"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 2*minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize]; //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); assertTrue(TEST_NAME, track.write(data, 10, data.length) == AudioTrack.ERROR_BAD_VALUE); //-------- tear down -------------- track.release(); } //Test case 2: write() fails when supplying less data (shorts) than declared @LargeTest public void testWriteShortOffsetTooBig() throws Exception { // constants for test final String TEST_NAME = "testWriteShortOffsetTooBig"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 2*minBuffSize, TEST_MODE); short data[] = new short[minBuffSize/2]; //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); assertTrue(TEST_NAME, track.write(data, 10, data.length) == AudioTrack.ERROR_BAD_VALUE); //-------- tear down -------------- track.release(); } //Test case 3: write() fails when supplying less data (bytes) than declared @LargeTest public void testWriteByteSizeTooBig() throws Exception { // constants for test final String TEST_NAME = "testWriteByteSizeTooBig"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 2*minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize]; //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); assertTrue(TEST_NAME, track.write(data, 0, data.length + 10) == AudioTrack.ERROR_BAD_VALUE); //-------- tear down -------------- track.release(); } //Test case 4: write() fails when supplying less data (shorts) than declared @LargeTest public void testWriteShortSizeTooBig() throws Exception { // constants for test final String TEST_NAME = "testWriteShortSizeTooBig"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 2*minBuffSize, TEST_MODE); short data[] = new short[minBuffSize/2]; //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); assertTrue(TEST_NAME, track.write(data, 0, data.length + 10) == AudioTrack.ERROR_BAD_VALUE); //-------- tear down -------------- track.release(); } //Test case 5: write() fails with negative offset @LargeTest public void testWriteByteNegativeOffset() throws Exception { // constants for test final String TEST_NAME = "testWriteByteNegativeOffset"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 2*minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize]; //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); assertTrue(TEST_NAME, track.write(data, -10, data.length - 10) == AudioTrack.ERROR_BAD_VALUE); //-------- tear down -------------- track.release(); } //Test case 6: write() fails with negative offset @LargeTest public void testWriteShortNegativeOffset() throws Exception { // constants for test final String TEST_NAME = "testWriteShortNegativeOffset"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 2*minBuffSize, TEST_MODE); short data[] = new short[minBuffSize/2]; //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); assertTrue(TEST_NAME, track.write(data, -10, data.length - 10) == AudioTrack.ERROR_BAD_VALUE); //-------- tear down -------------- track.release(); } //Test case 7: write() fails with negative size @LargeTest public void testWriteByteNegativeSize() throws Exception { // constants for test final String TEST_NAME = "testWriteByteNegativeSize"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 2*minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize]; //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); assertTrue(TEST_NAME, track.write(data, 0, -10) == AudioTrack.ERROR_BAD_VALUE); //-------- tear down -------------- track.release(); } //Test case 8: write() fails with negative size @LargeTest public void testWriteShortNegativeSize() throws Exception { // constants for test final String TEST_NAME = "testWriteShortNegativeSize"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 2*minBuffSize, TEST_MODE); short data[] = new short[minBuffSize/2]; //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); assertTrue(TEST_NAME, track.write(data, 0, -10) == AudioTrack.ERROR_BAD_VALUE); //-------- tear down -------------- track.release(); } //Test case 9: write() succeeds and returns the size that was written for 16bit @LargeTest public void testWriteByte() throws Exception { // constants for test final String TEST_NAME = "testWriteByte"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 2*minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize]; //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); assertTrue(TEST_NAME, track.write(data, 0, data.length) == data.length); //-------- tear down -------------- track.release(); } //Test case 10: write() succeeds and returns the size that was written for 16bit @LargeTest public void testWriteShort() throws Exception { // constants for test final String TEST_NAME = "testWriteShort"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 2*minBuffSize, TEST_MODE); short data[] = new short[minBuffSize/2]; //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); assertTrue(TEST_NAME, track.write(data, 0, data.length) == data.length); //-------- tear down -------------- track.release(); } //Test case 11: write() succeeds and returns the size that was written for 8bit @LargeTest public void testWriteByte8bit() throws Exception { // constants for test final String TEST_NAME = "testWriteByte8bit"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_8BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 2*minBuffSize, TEST_MODE); byte data[] = new byte[minBuffSize]; //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); assertTrue(TEST_NAME, track.write(data, 0, data.length) == data.length); //-------- tear down -------------- track.release(); } //Test case 12: write() succeeds and returns the size that was written for 8bit @LargeTest public void testWriteShort8bit() throws Exception { // constants for test final String TEST_NAME = "testWriteShort8bit"; final int TEST_SR = 22050; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_8BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization -------------- int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT); AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 2*minBuffSize, TEST_MODE); short data[] = new short[minBuffSize/2]; //-------- test -------------- assumeTrue(TEST_NAME, track.getState() == AudioTrack.STATE_INITIALIZED); assertTrue(TEST_NAME, track.write(data, 0, data.length) == data.length); //-------- tear down -------------- track.release(); } //----------------------------------------------------------------- // Getters //---------------------------------- //Test case 1: getMinBufferSize() return ERROR_BAD_VALUE if SR < 4000 @LargeTest public void testGetMinBufferSizeTooLowSR() throws Exception { // constant for test final String TEST_NAME = "testGetMinBufferSizeTooLowSR"; final int TEST_SR = 3999; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_8BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization & test -------------- assertTrue(TEST_NAME, AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT) == AudioTrack.ERROR_BAD_VALUE); } //Test case 2: getMinBufferSize() return ERROR_BAD_VALUE if SR > 48000 @LargeTest public void testGetMinBufferSizeTooHighSR() throws Exception { // constant for testg final String TEST_NAME = "testGetMinBufferSizeTooHighSR"; final int TEST_SR = 48001; final int TEST_CONF = AudioFormat.CHANNEL_OUT_MONO; final int TEST_FORMAT = AudioFormat.ENCODING_PCM_8BIT; final int TEST_MODE = AudioTrack.MODE_STREAM; final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC; //-------- initialization & test -------------- assertTrue(TEST_NAME, AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT) == AudioTrack.ERROR_BAD_VALUE); } }