home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / win95 / sieciowe / hotja32.lzh / hotjava / classsrc / browser / audio / audiostreamsequence.java < prev    next >
Text File  |  1995-08-11  |  3KB  |  93 lines

  1. /*
  2.  * @(#)AudioStreamSequence.java    1.9 95/03/14 Arthur van Hoff
  3.  *
  4.  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Permission to use, copy, modify, and distribute this software
  7.  * and its documentation for NON-COMMERCIAL purposes and without
  8.  * fee is hereby granted provided that this copyright notice
  9.  * appears in all copies. Please refer to the file "copyright.html"
  10.  * for further important copyright and licensing information.
  11.  *
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  13.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  14.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  15.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  16.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  17.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  18.  */
  19.  
  20. package browser.audio;
  21.  
  22. import java.io.InputStream;
  23. import java.util.Enumeration;
  24.  
  25. /**
  26.  * Convert a sequence of input streams into a single InputStream.
  27.  * This class can be used to play two audio clips in sequence.<p>
  28.  * For example:
  29.  * <pre>
  30.  *    Vector v = new Vector();
  31.  *    v.addElement(audiostream1);
  32.  *    v.addElement(audiostream2);
  33.  *    AudioStreamSequence audiostream = new AudioStreamSequence(v.elements());
  34.  *    AudioPlayer.player.start(audiostream);
  35.  * </pre>
  36.  * @see AudioPlayer
  37.  * @author Arthur van Hoff
  38.  * @version     1.9, 14 Mar 1995
  39.  */
  40. public
  41. class AudioStreamSequence extends InputStream {
  42.     Enumeration e;
  43.     InputStream in;
  44.     
  45.     /**
  46.      * Create an AudioStreamSequence given an
  47.      * enumeration of streams.
  48.      */
  49.     public AudioStreamSequence(Enumeration e) {
  50.     this.e = e;
  51.     in = e.hasMoreElements() ? (InputStream)e.nextElement() : null;
  52.     }
  53.  
  54.     /**
  55.      * Read, when reaching an EOF, flip to the next stream.
  56.      */
  57.     public int read() {
  58.     if (in == null) {
  59.         return -1;
  60.     }
  61.     int c = in.read();
  62.     if (c == -1) {
  63.         in.close();
  64.         in = null;
  65.         while (e.hasMoreElements() && (in == null)) {
  66.         in = (InputStream)e.nextElement();
  67.         }
  68.         return read();
  69.     }
  70.     return c;
  71.     }
  72.  
  73.     /**
  74.      * Read, when reaching an EOF, flip to the next stream.
  75.      */
  76.     public int read(byte buf[], int pos, int len) {
  77.     if (in == null) {
  78.         return -1;
  79.     }
  80.     int n = in.read(buf, pos, len);
  81.     if (n < len) {
  82.         if (n < 0) {
  83.         n = 0;
  84.         }
  85.         in.close();
  86.         in = e.hasMoreElements() ? (InputStream)e.nextElement() : null;
  87.         int m = read(buf, pos + n, len - n);
  88.         return (m > 0) ? n + m : n;
  89.     }
  90.     return n;
  91.     }
  92. }
  93.