blob: 22a92610d15522ce7c1ab095778a87adc51a7ff2 [file] [log] [blame]
/*
* Copyright (C) 2008 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 android.core;
import android.media.MediaPlayer;
import com.android.internal.sound.midi.AndroidSequencer;
import com.android.internal.sound.sampled.AndroidClip;
import junit.framework.Assert;
import junit.framework.TestCase;
import java.io.File;
import javax.sound.midi.MidiDevice;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.Line;
public class SoundTest extends TestCase {
public static String TAG = "SoundTest";
// Regression test for #000000: Completion of MIDI file doesn't fire
// corresponding event.
// private boolean eventReceived = false;
//
// public void testMidiFileCompletion() {
// try {
// MediaPlayer player = new MediaPlayer();
//
// player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
// public void onCompletion(MediaPlayer player) {
// eventReceived = true;
// }
// });
//
// player.setDataSource("/system/sounds/test.mid");
// player.prepare();
// player.start();
// Thread.sleep(20000);
// assertFalse("Player must be stopped", player.isPlaying());
// assertTrue("Completion event must have been received", eventReceived);
//
// } catch (Exception ex) {
// throw new RuntimeException(ex);
// }
// }
// Regression test for #872614: General javax.sound weirdness.
public void testMidiSupport() {
try {
Sequencer sequencer = MidiSystem.getSequencer();
Assert.assertTrue("AndroidSequencer must exist", sequencer instanceof AndroidSequencer);
MidiDevice.Info info = sequencer.getDeviceInfo();
Assert.assertNotNull("Device info must exist", info);
Sequence sequence = MidiSystem.getSequence(new File("/system/sounds/test.mid"));
Assert.assertNotNull("Sequence must exist", sequence);
Assert.assertFalse("Sequencer must not be open", sequencer.isOpen());
sequencer.open();
Assert.assertTrue("Sequencer must be open", sequencer.isOpen());
Assert.assertNull("Sequencer must not have Sequence", sequencer.getSequence());
sequencer.setSequence(sequence);
Assert.assertNotNull("Sequencer must have Sequence", sequencer.getSequence());
Assert.assertFalse("Sequencer must not be running", sequencer.isRunning());
sequencer.start();
Thread.sleep(1000);
Assert.assertTrue("Sequencer must be running (after 1 second)", sequencer.isRunning());
Thread.sleep(3000);
Assert.assertTrue("Sequencer must be running", sequencer.isRunning());
sequencer.stop();
Thread.sleep(1000);
Assert.assertFalse("Sequencer must not be running (after 1 second)", sequencer.isRunning());
sequencer.close();
Assert.assertFalse("Sequencer must not be open", sequencer.isOpen());
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
// Regression test for #872614: General javax.sound weirdness.
public void testSampledSupport() {
try {
Clip clip = AudioSystem.getClip();
Assert.assertTrue("AndroidClip must exist", clip instanceof AndroidClip);
Line.Info info = clip.getLineInfo();
Assert.assertNotNull("Line info must exist", info);
AudioInputStream stream = AudioSystem.getAudioInputStream(new File("/system/media/audio/ringtones/ringer.ogg"));
Assert.assertNotNull("AudioInputStream must exist", stream);
Assert.assertFalse("Clip must not be open", clip.isOpen());
clip.open(stream);
Assert.assertTrue("Clip must be open", clip.isOpen());
Assert.assertFalse("Clip must not be running", clip.isRunning());
clip.start();
Thread.sleep(1000);
Assert.assertTrue("Clip must be running (after 1 second)", clip.isRunning());
Thread.sleep(2000);
Assert.assertTrue("Clip must be running", clip.isRunning());
clip.stop();
Thread.sleep(1000);
Assert.assertFalse("Clip must not be running (after 1 second)", clip.isRunning());
clip.close();
Assert.assertFalse("Clip must not be open", clip.isOpen());
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
}