Index: modules/sound/src/main/java/javax/sound/sampled/EnumControl.java =================================================================== --- modules/sound/src/main/java/javax/sound/sampled/EnumControl.java (revision 479535) +++ modules/sound/src/main/java/javax/sound/sampled/EnumControl.java (working copy) @@ -21,7 +21,7 @@ public abstract class EnumControl extends Control { public static class Type extends Control.Type { - public static final Type REVERB = new Type("REVERB"); //$NON-NLS-1$ + public static final Type REVERB = new Type("Reverb"); //$NON-NLS-1$ protected Type(String name) { super(name); Index: modules/sound/src/main/java/javax/sound/sampled/AudioFormat.java =================================================================== --- modules/sound/src/main/java/javax/sound/sampled/AudioFormat.java (revision 479535) +++ modules/sound/src/main/java/javax/sound/sampled/AudioFormat.java (working copy) @@ -129,9 +129,10 @@ this.sampleSizeInBits = sampleSizeInBits; this.channels = channels; this.frameSize = sampleSizeInBits >> 3; - if ((sampleSizeInBits & 0x7) == 0) { + if ((sampleSizeInBits & 0x7) != 0) { this.frameSize++; } + this.frameSize *= channels; this.frameRate = sampleRate; this.bigEndian = bigEndian; @@ -196,6 +197,11 @@ frameRate != format.getFrameRate()) { return false; } + + if ((sampleSizeInBits > 8) + && (bigEndian != format.isBigEndian())) { + return false; + } return true; } Index: modules/sound/src/main/java/javax/sound/sampled/AudioFileFormat.java =================================================================== --- modules/sound/src/main/java/javax/sound/sampled/AudioFileFormat.java (revision 479535) +++ modules/sound/src/main/java/javax/sound/sampled/AudioFileFormat.java (working copy) @@ -81,6 +81,13 @@ return Collections.unmodifiableMap(prop); } + public Object getProperty(String key) { + if (prop == null) { + return null; + } + return prop.get(key); + } + public String toString() { return type + " (." + type.getExtension() + ") file, data format: " + format + //$NON-NLS-1$ //$NON-NLS-2$ " frame length: " + frameLength; //$NON-NLS-1$ Index: modules/sound/src/main/java/javax/sound/sampled/BooleanControl.java =================================================================== --- modules/sound/src/main/java/javax/sound/sampled/BooleanControl.java (revision 479535) +++ modules/sound/src/main/java/javax/sound/sampled/BooleanControl.java (working copy) @@ -64,6 +64,6 @@ } public String toString() { - return getType() + " Control with current value: " + value; //$NON-NLS-1$ + return getType() + " Control with current value: " + getStateLabel(value); //$NON-NLS-1$ } } Index: modules/sound/src/main/java/javax/sound/sampled/DataLine.java =================================================================== --- modules/sound/src/main/java/javax/sound/sampled/DataLine.java (revision 479535) +++ modules/sound/src/main/java/javax/sound/sampled/DataLine.java (working copy) @@ -80,8 +80,12 @@ } DataLine.Info inf = (DataLine.Info)info; - if (minBufferSize < inf.getMinBufferSize() || - maxBufferSize > inf.getMaxBufferSize()) { + if ((minBufferSize != AudioSystem.NOT_SPECIFIED + && inf.getMinBufferSize() != AudioSystem.NOT_SPECIFIED + && minBufferSize < inf.getMinBufferSize()) + || (maxBufferSize != AudioSystem.NOT_SPECIFIED + && inf.getMaxBufferSize() != AudioSystem.NOT_SPECIFIED + && maxBufferSize > inf.getMaxBufferSize())) { return false; } @@ -96,14 +100,14 @@ @Override public String toString() { - String formatStr = (formats.length == 1? formats[0].toString() + String formatStr = (formats.length == 1? "format " + formats[0].toString() //$NON-NLS-1$ : formats.length + " audio formats"); //$NON-NLS-1$ String bufStr = ""; //$NON-NLS-1$ if (minBufferSize != AudioSystem.NOT_SPECIFIED) { - bufStr = ", and buffers of " + minBufferSize + //$NON-NLS-1$ - "to " + maxBufferSize + " bytes"; //$NON-NLS-1$ //$NON-NLS-2$ + bufStr = "and buffers of " + minBufferSize + //$NON-NLS-1$ + " to " + maxBufferSize + " bytes"; //$NON-NLS-1$ //$NON-NLS-2$ } - return getLineClass() + " supporting " + formatStr + bufStr; //$NON-NLS-1$ + return getLineClass() + " supporting " + formatStr + ", " + bufStr; //$NON-NLS-1$ } } Index: modules/sound/src/main/java/javax/sound/sampled/Line.java =================================================================== --- modules/sound/src/main/java/javax/sound/sampled/Line.java (revision 479535) +++ modules/sound/src/main/java/javax/sound/sampled/Line.java (working copy) @@ -33,7 +33,7 @@ } public boolean matches(Line.Info info) throws NotImplementedException { - throw new NotImplementedException("not yet implemented"); + return lineClass.isAssignableFrom(info.getLineClass()); } @Override Index: modules/sound/src/main/java/javax/sound/sampled/AudioInputStream.java =================================================================== --- modules/sound/src/main/java/javax/sound/sampled/AudioInputStream.java (revision 479535) +++ modules/sound/src/main/java/javax/sound/sampled/AudioInputStream.java (working copy) @@ -38,6 +38,8 @@ private byte[] oneByte = new byte[1]; + private long marketFramePos; + public AudioInputStream(InputStream stream, AudioFormat format, long length) { this.stream = stream; this.format = format; @@ -67,11 +69,14 @@ } int res; if (stream != null) { // InputStream + if (framePos == frameLength) { + return 0; + } res = stream.read(); if (res == -1) { return -1; } - framePos = +1; + framePos += 1; return res; } else { // TargetDataLine if (line.read(oneByte, 0, 1) == 0) { @@ -87,7 +92,11 @@ } public int read(byte[] b, int off, int len) throws IOException { - int l = len - (len % frameSize); + int l = Math.min(len, (int) ((frameLength - framePos) * frameSize)); + l = l - (l % frameSize); + if (l == 0) { + return 0; + } int res; if (stream != null) { // InputStream res = stream.read(b, off, l); @@ -130,7 +139,8 @@ public int available() throws IOException { if (stream != null) { // InputStream - return stream.available(); + return Math.min(stream.available(), + (int)((frameLength - framePos) * frameSize)); } else { // TargetDataLine return line.available(); } @@ -145,8 +155,9 @@ } public void mark(int readlimit) { - if (stream != null) { //I nputStream + if (stream != null) { //InputStream stream.mark(readlimit); + marketFramePos = framePos; } else { // TargetDataLine // do nothing } @@ -155,6 +166,7 @@ public void reset() throws IOException { if (stream != null) { //InputStream stream.reset(); + framePos = marketFramePos; } else { // TargetDataLine // do nothing }