home *** CD-ROM | disk | FTP | other *** search
Java Source | 1997-01-27 | 2.8 KB | 88 lines |
- /*
- * @(#)NativeAudioStream.java 1.2 95/09/02 Arthur van Hoff, Thomas Ball
- *
- * Copyright (c) 1995 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Permission to use, copy, modify, and distribute this software
- * and its documentation for NON-COMMERCIAL purposes and without
- * fee is hereby granted provided that this copyright notice
- * appears in all copies. Please refer to the file "copyright.html"
- * for further important copyright and licensing information.
- *
- * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
- * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
- * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
- */
-
- package sun.audio;
-
- import java.io.InputStream;
- import java.io.DataInputStream;
- import java.io.FilterInputStream;
- import java.io.IOException;
-
- /**
- * A Sun-specific AudioStream that supports the .au file format.
- *
- * @version 1.1, 22 Aug 1995
- */
- public
- class NativeAudioStream extends FilterInputStream {
- private final int SUN_MAGIC = 0x2e736e64;
- private final int DEC_MAGIC = 0x2e736400;
- private final int MINHDRSIZE = 24;
- private final int TYPE_ULAW = 1;
-
- private int length = 0;
-
- /**
- * Read header, only sun 8 bit, ulaw encoded, single channel,
- * 8000hz is supported
- */
- public NativeAudioStream(InputStream in) throws IOException {
- super(in);
- DataInputStream data = new DataInputStream(in);
- int magic = data.readInt();
- if (magic != SUN_MAGIC && magic != DEC_MAGIC) {
- System.out.println("NativeAudioStream: invalid file type.");
- throw new InvalidAudioFormatException();
- }
- int hdr_size = data.readInt(); // header size
- if (hdr_size < MINHDRSIZE) {
- System.out.println("NativeAudioStream: wrong header size of " +
- hdr_size + ".");
- throw new InvalidAudioFormatException();
- }
- length = data.readInt();
-
- int encoding = data.readInt();
- if (encoding != TYPE_ULAW) {
- System.out.println("NativeAudioStream: invalid audio encoding.");
- throw new InvalidAudioFormatException();
- }
-
- int sample_rate = data.readInt();
- if ((sample_rate / 1000) != 8) { // allow some slop
- System.out.println("NativeAudioStream: invalid sample rate of " +
- sample_rate + ".");
- throw new InvalidAudioFormatException();
- }
-
- int channels = data.readInt();
- if (channels != 1) {
- System.out.println("NativeAudioStream: wrong number of channels. "
- + "(wanted 1, actual " + channels + ")");
- throw new InvalidAudioFormatException();
- }
-
- in.skip(hdr_size - MINHDRSIZE);
- }
-
- public int getLength() {
- return length;
- }
- }
-