blob: 46d6da18d587dce340c020a1abd65f544052eadf [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.harmony.sound.tests.javax.sound.sampled;
import java.io.File;
import java.net.URL;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Line;
import javax.sound.sampled.Mixer;
import junit.framework.TestCase;
/**
*
* Dummy sound provider located in soundProvider.jar is used for testing.
* Provider sources are provided at the comments at the end of this file.
*
*/
public class AudioSystemTest extends TestCase {
public void testAudioFile() throws Exception {
boolean ok;
assertTrue(AudioSystem.getAudioFileFormat(new URL("file:./myFile.txt")) != null);
AudioFileFormat.Type[] types = AudioSystem.getAudioFileTypes();
ok = false;
for (int i = 0; i < types.length; i++) {
if (types[i].getExtension().equals("txt")) {
ok = true;
break;
}
}
assertTrue(ok);
}
public void testMixer() throws Exception {
boolean ok;
Mixer.Info[] minfos = AudioSystem.getMixerInfo();
assertTrue(minfos.length > 0);
assertEquals("NAME", minfos[0].getName());
assertEquals("VERSION", minfos[0].getVersion());
assertTrue(AudioSystem.getMixer(null) != null);
Mixer mix = AudioSystem.getMixer(minfos[0]);
assertEquals("org.apache.harmony.sound.testProvider.MyMixer",
mix.getClass().getName());
Line.Info[] mli = mix.getSourceLineInfo();
assertEquals(4, mli.length);
Line.Info[] infos = AudioSystem.getSourceLineInfo(mli[0]);
ok = false;
for (int i = 0; i < infos.length; i++) {
if (infos[i].getLineClass().getName().equals(
"org.apache.harmony.sound.testProvider.myClip")) {
ok = true;
break;
}
}
assertTrue(ok);
infos = AudioSystem.getTargetLineInfo(mli[0]);
ok = false;
for (int i = 0; i < infos.length; i++) {
if (infos[i].getLineClass().getName().equals(
"org.apache.harmony.sound.testProvider.myClip")) {
ok = true;
break;
}
}
assertTrue(ok);
}
public void testAudioInputStream() throws Exception {
AudioInputStream stream = AudioSystem.getAudioInputStream(new File(
"myFile.txt"));
assertTrue(stream != null);
// no exception expected
AudioSystem.write(stream, new AudioFileFormat.Type("TXT", "txt"),
System.out);
assertEquals(AudioSystem.getAudioInputStream(
AudioFormat.Encoding.PCM_UNSIGNED, stream), stream);
}
// see TestFormatConversionProvider
public void testFormatConversion() throws Exception {
boolean ok;
AudioFormat af_source = new AudioFormat(
AudioFormat.Encoding.PCM_UNSIGNED, 1f, 2, 3, 4, 5f, true);
AudioFormat.Encoding[] aafe = AudioSystem
.getTargetEncodings(AudioFormat.Encoding.PCM_UNSIGNED);
ok = false;
for (int i = 0; i < aafe.length; i++) {
// contains PCM_SIGNED (see TestFormatConversionProvider)
if (aafe[i].equals(AudioFormat.Encoding.PCM_SIGNED)) {
ok = true;
break;
}
}
assertTrue(ok);
assertTrue(AudioSystem.isConversionSupported(
AudioFormat.Encoding.PCM_SIGNED, af_source));
AudioFormat[] aaf = AudioSystem.getTargetFormats(
AudioFormat.Encoding.PCM_UNSIGNED, af_source);
ok = false;
for (int i = 0; i < aaf.length; i++) {
if (aaf[i].getSampleRate() == 10f
&& aaf[i].getSampleSizeInBits() == 2
&& aaf[i].getChannels() == 30
&& aaf[i].getFrameSize() == 40
&& aaf[i].getFrameRate() == 50f) {
ok = true;
break;
}
}
assertTrue(ok);
}
public void testGetLine() throws Exception {
assertEquals("org.apache.harmony.sound.testProvider.myClip",
AudioSystem.getLine(
new Line.Info(javax.sound.sampled.Clip.class)).getClass()
.getName());
assertEquals("org.apache.harmony.sound.testProvider.mySourceDataLine",
AudioSystem.getLine(
new Line.Info(javax.sound.sampled.SourceDataLine.class))
.getClass().getName());
assertEquals("org.apache.harmony.sound.testProvider.myTargetDataLine",
AudioSystem.getLine(
new Line.Info(javax.sound.sampled.TargetDataLine.class))
.getClass().getName());
assertEquals("org.apache.harmony.sound.testProvider.myPort",
AudioSystem.getLine(
new Line.Info(javax.sound.sampled.Port.class)).getClass()
.getName());
assertEquals("org.apache.harmony.sound.testProvider.myClip",
AudioSystem.getClip().getClass().getName());
}
}
// SOUND PROVIDER SOURCES:
//
// META-INF/services/ files:
// file META-INF/services/javax.sound.sampled.spi:
//org.apache.harmony.sound.testProvider.TestAudioFileWriter
//
// file META-INF/services/javax.sound.sampled.spi:
//org.apache.harmony.sound.testProvider.TestFormatConversionProvider
//
// file META-INF/services/javax.sound.sampled.spi:
//org.apache.harmony.sound.testProvider.TestMixerProvider
//
// file META-INF/services/javax.sound.sampled.spi.AudioFileReader:
//org.apache.harmony.sound.testProvider.TestAudioFileReader
//
//Source files:
//
//TestAudioFileReader.java
//
//package org.apache.harmony.sound.testProvider;
//
//import javax.sound.sampled.*;
//import javax.sound.sampled.spi.*;
//import java.util.*;
//import java.io.*;
//import java.net.*;
//
//public class TestAudioFileReader extends AudioFileReader {
// static AudioFileFormat aff;
// static AudioFormat af;
//
// static {
// AudioFormat.Encoding enc = AudioFormat.Encoding.PCM_UNSIGNED;
// AudioFileFormat.Type type = new AudioFileFormat.Type("TXT", "txt");
// af = new AudioFormat(enc , 1f, 2, 3, 4, 5f, true);
// aff = new AudioFileFormat(type , af, 10);
// }
//
// public TestAudioFileReader() {
// super();
// };
//
// public AudioFileFormat getAudioFileFormat(InputStream stream) throws UnsupportedAudioFileException, IOException {
// return aff;
// }
//
// public AudioFileFormat getAudioFileFormat(URL url) throws UnsupportedAudioFileException, IOException {
// return aff;
// }
// public AudioFileFormat getAudioFileFormat(File file) throws UnsupportedAudioFileException, IOException {
// return aff;
// }
// public AudioInputStream getAudioInputStream(InputStream stream) throws UnsupportedAudioFileException, IOException {
// InputStream is = new ByteArrayInputStream(new byte[1001]);
// return new AudioInputStream(is, af, 10);
// }
// public AudioInputStream getAudioInputStream(URL url) throws UnsupportedAudioFileException, IOException {
// InputStream is = new ByteArrayInputStream(new byte[1001]);
// return new AudioInputStream(is, af, 10);
// }
// public AudioInputStream getAudioInputStream(File file)
// throws UnsupportedAudioFileException,IOException {
// InputStream is = new ByteArrayInputStream(new byte[1001]);
// return new AudioInputStream(is, af, 10);
// }
//}
//
//TestAudioFileWriter.java
//
//package org.apache.harmony.sound.testProvider;
//
//import javax.sound.sampled.*;
//import javax.sound.sampled.spi.*;
//import java.util.*;
//import java.io.*;
//import java.net.*;
//
//public class TestAudioFileWriter extends AudioFileWriter {
//
// static AudioFileFormat aff;
// static AudioFormat af;
// static AudioFileFormat.Type type;
//
// static {
// AudioFormat.Encoding enc = AudioFormat.Encoding.PCM_UNSIGNED;
// type = new AudioFileFormat.Type("TXT", "txt");
// vaf = new AudioFormat(enc , 1f, 2, 3, 4, 5f, true);
// aff = new AudioFileFormat(type , af, 10);
// }
//
// public TestAudioFileWriter () {
// super();
// };
//
// public AudioFileFormat.Type[] getAudioFileTypes() {
// return new AudioFileFormat.Type[] {type};
// }
// public AudioFileFormat.Type[] getAudioFileTypes(AudioInputStream stream) {
// return new AudioFileFormat.Type[] {type};
// }
// public boolean isFileTypeSupported(AudioFileFormat.Type fileType) {
// return type.equals(fileType);
// }
// public boolean isFileTypeSupported(AudioFileFormat.Type fileType, AudioInputStream stream) {
// return type.equals(fileType);
// }
// public int write(AudioInputStream stream, AudioFileFormat.Type fileType, OutputStream out) throws IOException {
// return 10;
// }
// public int write(AudioInputStream stream, AudioFileFormat.Type fileType, File out) throws IOException {
// return 10;
// }
//}
//
//TestFormatConversionProvider.java
//
//package org.apache.harmony.sound.testProvider;
//
//import javax.sound.sampled.*;
//import javax.sound.sampled.spi.*;
//import java.util.*;
//import java.io.*;
//import java.net.*;
//
//public class TestFormatConversionProvider extends FormatConversionProvider{
//
// static AudioFormat.Encoding[] enc_source;
// static AudioFormat.Encoding[] enc_target;
// static AudioFormat af_source;
// static AudioFormat af_target;
//
// static {
// enc_source = new AudioFormat.Encoding[] {AudioFormat.Encoding.PCM_UNSIGNED};
// af_source = new AudioFormat(enc_source [0] , 1f, 2, 3, 4, 5f, true);
// enc_target= new AudioFormat.Encoding[] {AudioFormat.Encoding.PCM_SIGNED};
// af_target= new AudioFormat(enc_target[0] , 10f, 2, 30, 40, 50f, false);
// }
// public TestFormatConversionProvider() {
// super();
// };
// public AudioInputStream getAudioInputStream(
// AudioFormat.Encoding targetEncoding, AudioInputStream sourceStream) {
// if (!enc_target[0].equals(targetEncoding) ||
// !af_source.equals(sourceStream.getFormat())) {
// throw new IllegalArgumentException("conversion not supported");
// }
// return sourceStream;
// }
// public AudioInputStream getAudioInputStream(
// AudioFormat targetFormat, AudioInputStream sourceStream) {
// if (!af_target.equals(targetFormat) ||
// !af_source.equals(sourceStream.getFormat())) {
// throw new IllegalArgumentException("conversion not supported");
// }
// return sourceStream;
// }
// public AudioFormat.Encoding[] getTargetEncodings(
// AudioFormat sourceFormat) {
// if (af_source.matches(sourceFormat)) {
// return enc_target;
// } else {
// return new AudioFormat.Encoding[0];
// }
// }
// public AudioFormat[] getTargetFormats(
// AudioFormat.Encoding targetFormat, AudioFormat sourceFormat) {
// if (af_source.matches(sourceFormat)) {
// return new AudioFormat[] {af_target};
// } else {
// return new AudioFormat[0];
// }
// }
// public AudioFormat.Encoding[] getSourceEncodings() {
// return enc_source;
// }
// public AudioFormat.Encoding[] getTargetEncodings() {
// return enc_target;
// }
//}
//
//TestMixerProvider.java
//
//package org.apache.harmony.sound.testProvider;
//
//import javax.sound.sampled.*;
//import javax.sound.sampled.spi.*;
//import java.util.*;
//import java.io.*;
//import java.net.*;
//
//public class TestMixerProvider extends MixerProvider {
// static Mixer.Info info;
// static Mixer mixer;
// static {
// info = new MyMixerInfo("NAME", "VENDOR", "DESCRIPTION", "VERSION");
// mixer = new MyMixer(info);
// }
// public TestMixerProvider () {super();}
// public boolean isMixerSupported(Mixer.Info info) {
// return this.info.equals(info);
// }
// public Mixer.Info[] getMixerInfo() {
// return new Mixer.Info[] {info};
// }
// public Mixer getMixer(Mixer.Info info) {
// if (this.info.equals(info)) {
// return mixer;
// }
// throw new IllegalArgumentException("TestMixerProvider ");
// }
//}
//
//class MyMixerInfo extends Mixer.Info {
// public MyMixerInfo(String name, String vendor, String description,
// String version) {
// super(name, vendor, description, version);
// }
//}
//
//class MyMixer implements Mixer {
// private Mixer.Info minfo;
// private Line[] sourceLines = new Line[] {new myClip(),
// new mySourceDataLine(),
// new myTargetDataLine(),
// new myPort()};
// private Line[] targetLines = new Line[] {new myClip(),
// new mySourceDataLine(),
// new myTargetDataLine(),
// new myPort()};
// private Line.Info[] lineInfos = new Line.Info[] {
// new Line.Info(javax.sound.sampled.Clip.class),
// new Line.Info(javax.sound.sampled.SourceDataLine.class),
// new Line.Info(javax.sound.sampled.TargetDataLine.class),
// new Line.Info(javax.sound.sampled.Port.class)
// };
// public MyMixer(Mixer.Info info) {
// minfo = info;
// }
// public Line getLine(Line.Info info) throws LineUnavailableException {
// for (int i = 0; i < lineInfos.length; i++) {
// if (lineInfos[i].matches(info)) {
// return sourceLines[i];
// }
// }
// throw new IllegalArgumentException("not supported " + info);
// }
// public int getMaxLines(Line.Info info) {
// return AudioSystem.NOT_SPECIFIED;
// }
// public Mixer.Info getMixerInfo() {
// return minfo;
// }
// public Line.Info[] getSourceLineInfo() {
// return lineInfos;
// }
// public Line.Info[] getSourceLineInfo(Line.Info info) {
// for (int i = 0; i < lineInfos.length; i++) {
// if (lineInfos[i].matches(info)) {
// return new Line.Info[] {sourceLines[i].getLineInfo()};
// }
// }
// throw new IllegalArgumentException("not supported " + info);
// }
// public Line[] getSourceLines() {
// return sourceLines;
// }
// public Line.Info[] getTargetLineInfo() {
// return lineInfos;
// }
// public Line.Info[] getTargetLineInfo(Line.Info info) {
// for (int i = 0; i < lineInfos.length; i++) {
// if (lineInfos[i].matches(info)) {
// return new Line.Info[] {targetLines[i].getLineInfo()};
// }
// }
// throw new IllegalArgumentException("not supported " + info);
// }
// public Line[] getTargetLines() {
// return targetLines;
// }
// public boolean isLineSupported(Line.Info info) {
// for (int i = 0; i < lineInfos.length; i++) {
// if (lineInfos[i].matches(info)) {
// return true;
// }
// }
// return false;
// }
// public boolean isSynchronizationSupported(Line[] lines, boolean maintainSync) {
// return false;
// }
// public void synchronize(Line[] lines, boolean maintainSync) {}
//
// public void unsynchronize(Line[] lines) {}
//
// // methods of Line interface
// public void close() {}
// public Control getControl(Control.Type control) {
// throw new IllegalArgumentException("not supported "+ control);
// }
// public Control[] getControls() {
// return new Control[0];
// }
// public Line.Info getLineInfo() {
// return new Line.Info(this.getClass());
// }
// public boolean isControlSupported(Control.Type control) {
// return false;
// }
// public boolean isOpen() {
// return false;
// }
// public void open() throws LineUnavailableException {}
// public void removeLineListener(LineListener listener) {}
// public void addLineListener(LineListener listener) {}
//}
//
//class myClip implements Clip {
// public int getFrameLength() { return 10;}
// public long getMicrosecondLength() {return 100;}
// public void loop(int count) {}
// public void open(AudioFormat format, byte[] data, int offset, int bufferSize)
// throws LineUnavailableException {}
// public void open(AudioInputStream stream) throws LineUnavailableException,
// IOException {}
// public void setFramePosition(int frames) {}
// public void setLoopPoints(int start, int end) {}
// public void setMicrosecondPosition(long microseconds) {}
// public int available() {return 1;}
// public void drain() {}
// public void flush() {}
// public int getBufferSize() {return 1;}
// public AudioFormat getFormat() {return null;}
// public int getFramePosition() {return 1;}
// public float getLevel() {return 1f;}
// public long getLongFramePosition() {return 1;}
// public long getMicrosecondPosition() {return 10;}
// public boolean isActive() {return false;}
// public boolean isRunning(){return false;}
// public void start() {}
// public void stop(){}
// public void close() {}
// public Control getControl(Control.Type control) {
// throw new IllegalArgumentException("not supported "+ control);
// }
// public Control[] getControls() {
// return new Control[0];
// }
// public Line.Info getLineInfo() {
// return new Line.Info(this.getClass());
// }
// public boolean isControlSupported(Control.Type control) {
// return false;
// }
// public boolean isOpen() {
// return false;
// }
// public void open() throws LineUnavailableException {}
// public void removeLineListener(LineListener listener) {}
// public void addLineListener(LineListener listener) {}
//}
//
//class mySourceDataLine implements SourceDataLine{
// public void open(AudioFormat format) throws LineUnavailableException {}
// public void open(AudioFormat format, int bufferSize)
// throws LineUnavailableException {}
// public int write(byte[] b, int off, int len) {return 1;}
// public int available() {return 1;}
// public void drain() {}
// public void flush() {}
// public int getBufferSize() {return 1;}
// public AudioFormat getFormat() {return null;}
// public int getFramePosition() {return 1;}
// public float getLevel() {return 1f;}
// public long getLongFramePosition() {return 1;}
// public long getMicrosecondPosition() {return 10;}
// public boolean isActive() {return false;}
// public boolean isRunning(){return false;}
// public void start() {}
// public void stop(){}
// public void close() {}
// public Control getControl(Control.Type control) {
// throw new IllegalArgumentException("not supported "+ control);
// }
// public Control[] getControls() {
// return new Control[0];
// }
// public Line.Info getLineInfo() {
// return new Line.Info(this.getClass());
// }
// public boolean isControlSupported(Control.Type control) {
// return false;
// }
// public boolean isOpen() {
// return false;
// }
// public void open() throws LineUnavailableException {}
// public void removeLineListener(LineListener listener) {}
// public void addLineListener(LineListener listener) {}
//}
//
//class myTargetDataLine implements TargetDataLine {
// public void open(AudioFormat format) throws LineUnavailableException{}
// public void open(AudioFormat format, int bufferSize)
// throws LineUnavailableException{}
// public int read(byte[] b, int off, int len) {return 1;}
// public int available() {return 1;}
// public void drain() {}
// public void flush() {}
// public int getBufferSize() {return 1;}
// public AudioFormat getFormat() {return null;}
// public int getFramePosition() {return 1;}
// public float getLevel() {return 1f;}
// public long getLongFramePosition() {return 1;}
// public long getMicrosecondPosition() {return 10;}
// public boolean isActive() {return false;}
// public boolean isRunning(){return false;}
// public void start() {}
// public void stop(){}
// public void close() {}
// public Control getControl(Control.Type control) {
// throw new IllegalArgumentException("not supported "+ control);
// }
// public Control[] getControls() {
// return new Control[0];
// }
// public Line.Info getLineInfo() {
// return new Line.Info(this.getClass());
// }
// public boolean isControlSupported(Control.Type control) {
// return false;
// }
// public boolean isOpen() {
// return false;
// }
// public void open() throws LineUnavailableException {}
// public void removeLineListener(LineListener listener) {}
// public void addLineListener(LineListener listener) {}
//}
//
//class myPort implements Port {
// public void close() {}
// public Control getControl(Control.Type control) {
// throw new IllegalArgumentException("not supported "+ control);
// }
// public Control[] getControls() {
// return new Control[0];
// }
// public Line.Info getLineInfo() {
// return new Line.Info(this.getClass());
// }
// public boolean isControlSupported(Control.Type control) {
// return false;
// }
// public boolean isOpen() {
// return false;
// }
// public void open() throws LineUnavailableException {}
// public void removeLineListener(LineListener listener) {}
// public void addLineListener(LineListener listener) {}
//}