01: /*
02: * @(#)ContinuousAudioDataStream.java 1.17 06/10/10
03: *
04: * Copyright 1990-2006 Sun Microsystems, Inc. All Rights Reserved.
05: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
06: *
07: * This program is free software; you can redistribute it and/or
08: * modify it under the terms of the GNU General Public License version
09: * 2 only, as published by the Free Software Foundation.
10: *
11: * This program is distributed in the hope that it will be useful, but
12: * WITHOUT ANY WARRANTY; without even the implied warranty of
13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14: * General Public License version 2 for more details (a copy is
15: * included at /legal/license.txt).
16: *
17: * You should have received a copy of the GNU General Public License
18: * version 2 along with this work; if not, write to the Free Software
19: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20: * 02110-1301 USA
21: *
22: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
23: * Clara, CA 95054 or visit www.sun.com if you need additional
24: * information or have any questions.
25: *
26: */
27:
28: package sun.audio;
29:
30: /**
31: * Create a continuous audio stream. This wraps a stream
32: * around an AudioData object, the stream is restarted
33: * at the beginning everytime the end is reached, thus
34: * creating continuous sound.<p>
35: * For example:
36: * <pre>
37: * AudioData data = AudioData.getAudioData(url);
38: * ContinuousAudioDataStream audiostream = new ContinuousAudioDataStream(data);
39: * AudioPlayer.player.start(audiostream);
40: * </pre>
41: *
42: * @see AudioPlayer
43: * @see AudioData
44: * @author Arthur van Hoff
45: * @version 1.13, 08/19/02
46: */
47: public class ContinuousAudioDataStream extends AudioDataStream {
48: /**
49: * Create a continuous stream of audio.
50: */
51: public ContinuousAudioDataStream(AudioData data) {
52: super (data);
53: }
54:
55: /**
56: * When reaching the EOF, rewind to the beginning.
57: */
58: public int read() {
59: int c = super .read();
60: if (c == -1) {
61: reset();
62: c = super .read();
63: }
64: return c;
65: }
66:
67: /**
68: * When reaching the EOF, rewind to the beginning.
69: */
70: public int read(byte buf[], int pos, int len) {
71: int count = 0;
72: while (count < len) {
73: int n = super .read(buf, pos + count, len - count);
74: if (n >= 0) {
75: count += n;
76: } else {
77: reset();
78: }
79: }
80: return count;
81: }
82: }
|