mirror of
https://github.com/openjdk/jdk.git
synced 2026-02-26 02:00:12 +00:00
8147407: Provide support of WaveExtensible sound format
Reviewed-by: prr, amenkov
This commit is contained in:
parent
d19138e94b
commit
173e79ac66
@ -3,4 +3,5 @@ com.sun.media.sound.AuFileReader
|
||||
com.sun.media.sound.AiffFileReader
|
||||
com.sun.media.sound.WaveFileReader
|
||||
com.sun.media.sound.WaveFloatFileReader
|
||||
com.sun.media.sound.WaveExtensibleFileReader
|
||||
com.sun.media.sound.SoftMidiAudioFileReader
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2007, 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
|
||||
@ -124,7 +124,6 @@ public final class WaveExtensibleFileReader extends SunFileReader {
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static final String[] channelnames = { "FL", "FR", "FC", "LF",
|
||||
@ -196,9 +195,9 @@ public final class WaveExtensibleFileReader extends SunFileReader {
|
||||
fmt_found = true;
|
||||
|
||||
int format = chunk.readUnsignedShort();
|
||||
if (format != 0xFFFE)
|
||||
throw new UnsupportedAudioFileException(); // WAVE_FORMAT_EXTENSIBLE
|
||||
// only
|
||||
if (format != WaveFileFormat.WAVE_FORMAT_EXTENSIBLE) {
|
||||
throw new UnsupportedAudioFileException();
|
||||
}
|
||||
channels = chunk.readUnsignedShort();
|
||||
samplerate = chunk.readUnsignedInt();
|
||||
/* framerate = */chunk.readUnsignedInt();
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2013, 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
|
||||
@ -28,13 +28,11 @@ package com.sun.media.sound;
|
||||
import javax.sound.sampled.AudioFileFormat;
|
||||
import javax.sound.sampled.AudioFormat;
|
||||
|
||||
|
||||
/**
|
||||
* WAVE file format class.
|
||||
*
|
||||
* @author Jan Borgersen
|
||||
*/
|
||||
|
||||
final class WaveFileFormat extends AudioFileFormat {
|
||||
|
||||
/**
|
||||
@ -53,15 +51,16 @@ final class WaveFileFormat extends AudioFileFormat {
|
||||
private static final int STANDARD_FMT_CHUNK_SIZE = 16;
|
||||
|
||||
// magic numbers
|
||||
static final int RIFF_MAGIC = 1380533830;
|
||||
static final int WAVE_MAGIC = 1463899717;
|
||||
static final int FMT_MAGIC = 0x666d7420; // "fmt "
|
||||
static final int DATA_MAGIC = 0x64617461; // "data"
|
||||
static final int RIFF_MAGIC = 1380533830;
|
||||
static final int WAVE_MAGIC = 1463899717;
|
||||
static final int FMT_MAGIC = 0x666d7420; // "fmt "
|
||||
static final int DATA_MAGIC = 0x64617461; // "data"
|
||||
|
||||
// encodings
|
||||
static final int WAVE_FORMAT_UNKNOWN = 0x0000;
|
||||
static final int WAVE_FORMAT_PCM = 0x0001;
|
||||
static final int WAVE_FORMAT_ADPCM = 0x0002;
|
||||
static final int WAVE_FORMAT_IEEE_FLOAT= 0x0003;
|
||||
static final int WAVE_FORMAT_ALAW = 0x0006;
|
||||
static final int WAVE_FORMAT_MULAW = 0x0007;
|
||||
static final int WAVE_FORMAT_OKI_ADPCM = 0x0010;
|
||||
@ -72,12 +71,7 @@ final class WaveFileFormat extends AudioFileFormat {
|
||||
static final int WAVE_IBM_FORMAT_ADPCM = 0x0103;
|
||||
static final int WAVE_FORMAT_DVI_ADPCM = 0x0011;
|
||||
static final int WAVE_FORMAT_SX7383 = 0x1C07;
|
||||
|
||||
|
||||
WaveFileFormat( AudioFileFormat aff ) {
|
||||
|
||||
this( aff.getType(), aff.getByteLength(), aff.getFormat(), aff.getFrameLength() );
|
||||
}
|
||||
static final int WAVE_FORMAT_EXTENSIBLE= 0xFFFE;
|
||||
|
||||
WaveFileFormat(AudioFileFormat.Type type, int lengthInBytes, AudioFormat format, int lengthInFrames) {
|
||||
|
||||
@ -98,7 +92,6 @@ final class WaveFileFormat extends AudioFileFormat {
|
||||
}
|
||||
|
||||
int getWaveType() {
|
||||
|
||||
return waveType;
|
||||
}
|
||||
|
||||
|
||||
@ -52,27 +52,6 @@ import javax.sound.sampled.AudioSystem;
|
||||
*/
|
||||
public final class WaveFileWriter extends SunFileWriter {
|
||||
|
||||
// magic numbers
|
||||
static final int RIFF_MAGIC = 1380533830;
|
||||
static final int WAVE_MAGIC = 1463899717;
|
||||
static final int FMT_MAGIC = 0x666d7420; // "fmt "
|
||||
static final int DATA_MAGIC = 0x64617461; // "data"
|
||||
|
||||
// encodings
|
||||
static final int WAVE_FORMAT_UNKNOWN = 0x0000;
|
||||
static final int WAVE_FORMAT_PCM = 0x0001;
|
||||
static final int WAVE_FORMAT_ADPCM = 0x0002;
|
||||
static final int WAVE_FORMAT_ALAW = 0x0006;
|
||||
static final int WAVE_FORMAT_MULAW = 0x0007;
|
||||
static final int WAVE_FORMAT_OKI_ADPCM = 0x0010;
|
||||
static final int WAVE_FORMAT_DIGISTD = 0x0015;
|
||||
static final int WAVE_FORMAT_DIGIFIX = 0x0016;
|
||||
static final int WAVE_IBM_FORMAT_MULAW = 0x0101;
|
||||
static final int WAVE_IBM_FORMAT_ALAW = 0x0102;
|
||||
static final int WAVE_IBM_FORMAT_ADPCM = 0x0103;
|
||||
static final int WAVE_FORMAT_DVI_ADPCM = 0x0011;
|
||||
static final int WAVE_FORMAT_SX7383 = 0x1C07;
|
||||
|
||||
/**
|
||||
* Constructs a new WaveFileWriter object.
|
||||
*/
|
||||
@ -80,10 +59,6 @@ public final class WaveFileWriter extends SunFileWriter {
|
||||
super(new AudioFileFormat.Type[]{AudioFileFormat.Type.WAVE});
|
||||
}
|
||||
|
||||
|
||||
// METHODS TO IMPLEMENT AudioFileWriter
|
||||
|
||||
|
||||
@Override
|
||||
public AudioFileFormat.Type[] getAudioFileTypes(AudioInputStream stream) {
|
||||
|
||||
@ -126,8 +101,7 @@ public final class WaveFileWriter extends SunFileWriter {
|
||||
throw new IOException("stream length not specified");
|
||||
}
|
||||
|
||||
int bytesWritten = writeWaveFile(stream, waveFileFormat, out);
|
||||
return bytesWritten;
|
||||
return writeWaveFile(stream, waveFileFormat, out);
|
||||
}
|
||||
|
||||
|
||||
@ -200,9 +174,9 @@ public final class WaveFileWriter extends SunFileWriter {
|
||||
encoding = streamEncoding;
|
||||
sampleSizeInBits = streamFormat.getSampleSizeInBits();
|
||||
if (streamEncoding.equals(AudioFormat.Encoding.ALAW)) {
|
||||
waveType = WAVE_FORMAT_ALAW;
|
||||
waveType = WaveFileFormat.WAVE_FORMAT_ALAW;
|
||||
} else {
|
||||
waveType = WAVE_FORMAT_MULAW;
|
||||
waveType = WaveFileFormat.WAVE_FORMAT_MULAW;
|
||||
}
|
||||
} else if ( streamFormat.getSampleSizeInBits()==8 ) {
|
||||
encoding = AudioFormat.Encoding.PCM_UNSIGNED;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2007, 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
|
||||
@ -67,8 +67,9 @@ public final class WaveFloatFileReader extends SunFileReader {
|
||||
fmt_found = true;
|
||||
|
||||
int format = chunk.readUnsignedShort();
|
||||
if (format != 3) // WAVE_FORMAT_IEEE_FLOAT only
|
||||
if (format != WaveFileFormat.WAVE_FORMAT_IEEE_FLOAT) {
|
||||
throw new UnsupportedAudioFileException();
|
||||
}
|
||||
channels = chunk.readUnsignedShort();
|
||||
samplerate = chunk.readUnsignedInt();
|
||||
/* framerate = */chunk.readUnsignedInt();
|
||||
|
||||
@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright (c) 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
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.InputStream;
|
||||
|
||||
import javax.sound.sampled.AudioFileFormat;
|
||||
import javax.sound.sampled.AudioInputStream;
|
||||
import javax.sound.sampled.AudioSystem;
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @bug 8147407
|
||||
*/
|
||||
public final class RecognizeWaveExtensible {
|
||||
|
||||
private static byte[] data = {
|
||||
82, 73, 70, 70, 72, 0, 0, 0, 87, 65, 86, 69, 102, 109, 116, 32, 40,
|
||||
0, 0, 0, -2, -1, 1, 0, 64, 31, 0, 0, 0, 125, 0, 0, 4, 0, 32, 0, 22,
|
||||
0, 32, 0, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 16, 0, -128, 0, 0, -86, 0,
|
||||
56, -101, 113, 102, 97, 99, 116, 4, 0, 0, 0, 0, 0, 0, 0, 100, 97,
|
||||
116, 97, 0, 0, 0, 0
|
||||
};
|
||||
|
||||
public static void main(final String[] args) throws Exception {
|
||||
final InputStream is = new ByteArrayInputStream(data);
|
||||
final AudioFileFormat aff = AudioSystem.getAudioFileFormat(is);
|
||||
System.out.println("AudioFileFormat: " + aff);
|
||||
try (AudioInputStream ais = AudioSystem.getAudioInputStream(is)) {
|
||||
System.out.println("AudioFormat: " + ais.getFormat());
|
||||
}
|
||||
System.out.println("new String(data) = " + new String(data));
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user