diff --git a/jdk/src/java.desktop/share/classes/com/sun/media/sound/AuFileFormat.java b/jdk/src/java.desktop/share/classes/com/sun/media/sound/AuFileFormat.java index 7a8c5bc6a68..7a91bfc0a75 100644 --- a/jdk/src/java.desktop/share/classes/com/sun/media/sound/AuFileFormat.java +++ b/jdk/src/java.desktop/share/classes/com/sun/media/sound/AuFileFormat.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,11 +45,12 @@ final class AuFileFormat extends AudioFileFormat { static final int AU_LINEAR_24 = 4; /* 24-bit linear PCM */ static final int AU_LINEAR_32 = 5; /* 32-bit linear PCM */ static final int AU_FLOAT = 6; /* 32-bit IEEE floating point */ - static final int AU_DOUBLE = 7; /* 64-bit IEEE floating point */ - static final int AU_ADPCM_G721 = 23; /* 4-bit CCITT g.721 ADPCM */ - static final int AU_ADPCM_G722 = 24; /* CCITT g.722 ADPCM */ - static final int AU_ADPCM_G723_3 = 25; /* CCITT g.723 3-bit ADPCM */ - static final int AU_ADPCM_G723_5 = 26; /* CCITT g.723 5-bit ADPCM */ +// we don't support these ... +// static final int AU_DOUBLE = 7; /* 64-bit IEEE floating point */ +// static final int AU_ADPCM_G721 = 23; /* 4-bit CCITT g.721 ADPCM */ +// static final int AU_ADPCM_G722 = 24; /* CCITT g.722 ADPCM */ +// static final int AU_ADPCM_G723_3 = 25; /* CCITT g.723 3-bit ADPCM */ +// static final int AU_ADPCM_G723_5 = 26; /* CCITT g.723 5-bit ADPCM */ static final int AU_ALAW_8 = 27; /* 8-bit ISDN A-law */ static final int AU_HEADERSIZE = 24; @@ -64,24 +65,28 @@ final class AuFileFormat extends AudioFileFormat { auType = -1; - if( AudioFormat.Encoding.ALAW.equals(encoding) ) { - if( format.getSampleSizeInBits()==8 ) { + if (AudioFormat.Encoding.ALAW.equals(encoding)) { + if (format.getSampleSizeInBits() == 8) { auType = AU_ALAW_8; } - } else if( AudioFormat.Encoding.ULAW.equals(encoding) ) { - if( format.getSampleSizeInBits()==8 ) { + } else if (AudioFormat.Encoding.ULAW.equals(encoding)) { + if (format.getSampleSizeInBits() == 8) { auType = AU_ULAW_8; } - } else if( AudioFormat.Encoding.PCM_SIGNED.equals(encoding) ) { - if( format.getSampleSizeInBits()==8 ) { + } else if (AudioFormat.Encoding.PCM_SIGNED.equals(encoding)) { + if (format.getSampleSizeInBits() == 8) { auType = AU_LINEAR_8; - } else if( format.getSampleSizeInBits()==16 ) { + } else if (format.getSampleSizeInBits() == 16) { auType = AU_LINEAR_16; - } else if( format.getSampleSizeInBits()==24 ) { + } else if (format.getSampleSizeInBits() == 24) { auType = AU_LINEAR_24; - } else if( format.getSampleSizeInBits()==32 ) { + } else if (format.getSampleSizeInBits() == 32) { auType = AU_LINEAR_32; } + } else if (AudioFormat.Encoding.PCM_FLOAT.equals(encoding)) { + if (format.getSampleSizeInBits() == 32) { + auType = AU_FLOAT; + } } } diff --git a/jdk/src/java.desktop/share/classes/com/sun/media/sound/AuFileReader.java b/jdk/src/java.desktop/share/classes/com/sun/media/sound/AuFileReader.java index 180f45c9076..876c3b78e80 100644 --- a/jdk/src/java.desktop/share/classes/com/sun/media/sound/AuFileReader.java +++ b/jdk/src/java.desktop/share/classes/com/sun/media/sound/AuFileReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,6 +30,7 @@ import java.io.IOException; import java.io.InputStream; import javax.sound.sampled.AudioFileFormat; +import javax.sound.sampled.AudioFileFormat.Type; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.UnsupportedAudioFileException; @@ -56,7 +57,7 @@ public final class AuFileReader extends SunFileReader { final int headerSize = dis.readInt(); final int dataSize = dis.readInt(); - final int encoding_local = dis.readInt(); + final int auType = dis.readInt(); final int sampleRate = dis.readInt(); final int channels = dis.readInt(); if (channels <= 0) { @@ -65,40 +66,38 @@ public final class AuFileReader extends SunFileReader { final int sampleSizeInBits; final AudioFormat.Encoding encoding; - switch (encoding_local) { - case AuFileFormat.AU_ULAW_8: - encoding = AudioFormat.Encoding.ULAW; - sampleSizeInBits = 8; - break; - case AuFileFormat.AU_ALAW_8: - encoding = AudioFormat.Encoding.ALAW; - sampleSizeInBits = 8; - break; - case AuFileFormat.AU_LINEAR_8: - // $$jb: 04.29.99: 8bit linear is *signed*, not *unsigned* - encoding = AudioFormat.Encoding.PCM_SIGNED; - sampleSizeInBits = 8; - break; - case AuFileFormat.AU_LINEAR_16: - encoding = AudioFormat.Encoding.PCM_SIGNED; - sampleSizeInBits = 16; - break; - case AuFileFormat.AU_LINEAR_24: - encoding = AudioFormat.Encoding.PCM_SIGNED; - - sampleSizeInBits = 24; - break; - case AuFileFormat.AU_LINEAR_32: - encoding = AudioFormat.Encoding.PCM_SIGNED; - - sampleSizeInBits = 32; - break; - // $jb: 03.19.99: we don't support these ... - /* case AuFileFormat.AU_FLOAT: - encoding = new AudioFormat.FLOAT; - sampleSizeInBits = 32; - break; - case AuFileFormat.AU_DOUBLE: + switch (auType) { + case AuFileFormat.AU_ULAW_8: + encoding = AudioFormat.Encoding.ULAW; + sampleSizeInBits = 8; + break; + case AuFileFormat.AU_ALAW_8: + encoding = AudioFormat.Encoding.ALAW; + sampleSizeInBits = 8; + break; + case AuFileFormat.AU_LINEAR_8: + // $$jb: 04.29.99: 8bit linear is *signed*, not *unsigned* + encoding = AudioFormat.Encoding.PCM_SIGNED; + sampleSizeInBits = 8; + break; + case AuFileFormat.AU_LINEAR_16: + encoding = AudioFormat.Encoding.PCM_SIGNED; + sampleSizeInBits = 16; + break; + case AuFileFormat.AU_LINEAR_24: + encoding = AudioFormat.Encoding.PCM_SIGNED; + sampleSizeInBits = 24; + break; + case AuFileFormat.AU_LINEAR_32: + encoding = AudioFormat.Encoding.PCM_SIGNED; + sampleSizeInBits = 32; + break; + case AuFileFormat.AU_FLOAT: + encoding = AudioFormat.Encoding.PCM_FLOAT; + sampleSizeInBits = 32; + break; + // we don't support these ... + /* case AuFileFormat.AU_DOUBLE: encoding = new AudioFormat.DOUBLE; sampleSizeInBits = 8; break; @@ -117,9 +116,9 @@ public final class AuFileReader extends SunFileReader { SamplePerUnit = 8; break; */ - default: - // unsupported filetype, throw exception - throw new UnsupportedAudioFileException("not a valid AU file"); + default: + // unsupported filetype, throw exception + throw new UnsupportedAudioFileException("not a valid AU file"); } final int frameSize = calculatePCMFrameSize(sampleSizeInBits, channels); @@ -136,7 +135,6 @@ public final class AuFileReader extends SunFileReader { final AudioFormat format = new AudioFormat(encoding, sampleRate, sampleSizeInBits, channels, frameSize, sampleRate, true); - return new AuFileFormat(AudioFileFormat.Type.AU, dataSize + headerSize, - format, length); + return new AuFileFormat(Type.AU, dataSize + headerSize, format, length); } } diff --git a/jdk/src/java.desktop/share/classes/com/sun/media/sound/AuFileWriter.java b/jdk/src/java.desktop/share/classes/com/sun/media/sound/AuFileWriter.java index b498c916435..723ffcd2c42 100644 --- a/jdk/src/java.desktop/share/classes/com/sun/media/sound/AuFileWriter.java +++ b/jdk/src/java.desktop/share/classes/com/sun/media/sound/AuFileWriter.java @@ -39,6 +39,7 @@ import java.io.SequenceInputStream; import java.util.Objects; import javax.sound.sampled.AudioFileFormat; +import javax.sound.sampled.AudioFileFormat.Type; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; @@ -59,32 +60,32 @@ public final class AuFileWriter extends SunFileWriter { * Constructs a new AuFileWriter object. */ public AuFileWriter() { - super(new AudioFileFormat.Type[]{AudioFileFormat.Type.AU}); + super(new Type[]{Type.AU}); } @Override - public AudioFileFormat.Type[] getAudioFileTypes(AudioInputStream stream) { + public Type[] getAudioFileTypes(AudioInputStream stream) { - AudioFileFormat.Type[] filetypes = new AudioFileFormat.Type[types.length]; + Type[] filetypes = new Type[types.length]; System.arraycopy(types, 0, filetypes, 0, types.length); // make sure we can write this stream AudioFormat format = stream.getFormat(); AudioFormat.Encoding encoding = format.getEncoding(); - if( (AudioFormat.Encoding.ALAW.equals(encoding)) || - (AudioFormat.Encoding.ULAW.equals(encoding)) || - (AudioFormat.Encoding.PCM_SIGNED.equals(encoding)) || - (AudioFormat.Encoding.PCM_UNSIGNED.equals(encoding)) ) { - + if (AudioFormat.Encoding.ALAW.equals(encoding) + || AudioFormat.Encoding.ULAW.equals(encoding) + || AudioFormat.Encoding.PCM_SIGNED.equals(encoding) + || AudioFormat.Encoding.PCM_UNSIGNED.equals(encoding) + || AudioFormat.Encoding.PCM_FLOAT.equals(encoding)) { return filetypes; } - return new AudioFileFormat.Type[0]; + return new Type[0]; } @Override - public int write(AudioInputStream stream, AudioFileFormat.Type fileType, OutputStream out) throws IOException { + public int write(AudioInputStream stream, Type fileType, OutputStream out) throws IOException { Objects.requireNonNull(stream); Objects.requireNonNull(fileType); Objects.requireNonNull(out); @@ -101,7 +102,7 @@ public final class AuFileWriter extends SunFileWriter { } @Override - public int write(AudioInputStream stream, AudioFileFormat.Type fileType, File out) throws IOException { + public int write(AudioInputStream stream, Type fileType, File out) throws IOException { Objects.requireNonNull(stream); Objects.requireNonNull(fileType); Objects.requireNonNull(out); @@ -141,61 +142,35 @@ public final class AuFileWriter extends SunFileWriter { * Returns the AudioFileFormat describing the file that will be written from this AudioInputStream. * Throws IllegalArgumentException if not supported. */ - private AudioFileFormat getAudioFileFormat(AudioFileFormat.Type type, AudioInputStream stream) { + private AudioFileFormat getAudioFileFormat(Type type, AudioInputStream stream) { if (!isFileTypeSupported(type, stream)) { throw new IllegalArgumentException("File type " + type + " not supported."); } - AudioFormat format = null; - AuFileFormat fileFormat = null; - AudioFormat.Encoding encoding = AudioFormat.Encoding.PCM_SIGNED; - AudioFormat streamFormat = stream.getFormat(); - AudioFormat.Encoding streamEncoding = streamFormat.getEncoding(); - - - int sampleSizeInBits; - int fileSize; - - if( (AudioFormat.Encoding.ALAW.equals(streamEncoding)) || - (AudioFormat.Encoding.ULAW.equals(streamEncoding)) ) { - - encoding = streamEncoding; - sampleSizeInBits = streamFormat.getSampleSizeInBits(); - - } else if ( streamFormat.getSampleSizeInBits()==8 ) { + AudioFormat.Encoding encoding = streamFormat.getEncoding(); + if (AudioFormat.Encoding.PCM_UNSIGNED.equals(encoding)) { encoding = AudioFormat.Encoding.PCM_SIGNED; - sampleSizeInBits=8; - - } else { - - encoding = AudioFormat.Encoding.PCM_SIGNED; - sampleSizeInBits=streamFormat.getSampleSizeInBits(); } + // We always write big endian au files, this is by far the standard + AudioFormat format = new AudioFormat(encoding, + streamFormat.getSampleRate(), + streamFormat.getSampleSizeInBits(), + streamFormat.getChannels(), + streamFormat.getFrameSize(), + streamFormat.getFrameRate(), true); - format = new AudioFormat( encoding, - streamFormat.getSampleRate(), - sampleSizeInBits, - streamFormat.getChannels(), - streamFormat.getFrameSize(), - streamFormat.getFrameRate(), - true); // AU is always big endian - - - if( stream.getFrameLength()!=AudioSystem.NOT_SPECIFIED ) { + int fileSize; + if (stream.getFrameLength() != AudioSystem.NOT_SPECIFIED) { fileSize = (int)stream.getFrameLength()*streamFormat.getFrameSize() + AuFileFormat.AU_HEADERSIZE; } else { fileSize = AudioSystem.NOT_SPECIFIED; } - fileFormat = new AuFileFormat( AudioFileFormat.Type.AU, - fileSize, - format, - (int)stream.getFrameLength() ); - - return fileFormat; + return new AuFileFormat(Type.AU, fileSize, format, + (int) stream.getFrameLength()); } private InputStream getFileStream(AuFileFormat auFileFormat, AudioInputStream audioStream) throws IOException { @@ -212,7 +187,7 @@ public final class AuFileWriter extends SunFileWriter { if (dataSizeInBytes>0x7FFFFFFFl) { dataSizeInBytes=UNKNOWN_SIZE; } - int encoding_local = auFileFormat.getAuType(); + int auType = auFileFormat.getAuType(); int sampleRate = (int)format.getSampleRate(); int channels = format.getChannels(); @@ -222,43 +197,17 @@ public final class AuFileWriter extends SunFileWriter { DataOutputStream dos = null; SequenceInputStream auStream = null; - AudioFormat audioStreamFormat = null; - AudioFormat.Encoding encoding = null; - InputStream codedAudioStream = audioStream; - - // if we need to do any format conversion, do it here. - - codedAudioStream = audioStream; - - audioStreamFormat = audioStream.getFormat(); - encoding = audioStreamFormat.getEncoding(); - + // if we need to do any format conversion, we do it here. //$$ fb 2001-07-13: Bug 4391108 - if( (AudioFormat.Encoding.PCM_UNSIGNED.equals(encoding)) || - (AudioFormat.Encoding.PCM_SIGNED.equals(encoding) - && !audioStreamFormat.isBigEndian()) ) { - // We always write big endian au files, this is by far the standard - codedAudioStream = AudioSystem.getAudioInputStream( new AudioFormat ( - AudioFormat.Encoding.PCM_SIGNED, - audioStreamFormat.getSampleRate(), - audioStreamFormat.getSampleSizeInBits(), - audioStreamFormat.getChannels(), - audioStreamFormat.getFrameSize(), - audioStreamFormat.getFrameRate(), - true), - audioStream ); - - - } + audioStream = AudioSystem.getAudioInputStream(format, audioStream); baos = new ByteArrayOutputStream(); dos = new DataOutputStream(baos); - dos.writeInt(AuFileFormat.AU_SUN_MAGIC); dos.writeInt(headerSize); dos.writeInt((int)dataSizeInBytes); - dos.writeInt(encoding_local); + dos.writeInt(auType); dos.writeInt(sampleRate); dos.writeInt(channels); @@ -269,7 +218,7 @@ public final class AuFileWriter extends SunFileWriter { header = baos.toByteArray(); headerStream = new ByteArrayInputStream( header ); auStream = new SequenceInputStream(headerStream, - new NoCloseInputStream(codedAudioStream)); + new NoCloseInputStream(audioStream)); return auStream; }