2 * 11/19/04 1.0 moved to LGPL.
3 * 12/12/99 Added appendSamples() method for efficiency. MDM.
4 * 15/02/99 ,Java Conversion by E.B ,ebsp@iname.com, JavaLayer
6 * Declarations for output buffer, includes operating system
7 * implementation of the virtual Obuffer. Optional routines
8 * enabling seeks and stops added by Jeff Tsay.
10 * @(#) obuffer.h 1.8, last edit: 6/15/94 16:51:56
11 * @(#) Copyright (C) 1993, 1994 Tobias Bading (bading@cs.tu-berlin.de)
12 * @(#) Berlin University of Technology
14 * Idea and first implementation for u-law output with fast downsampling by
15 * Jim Boucher (jboucher@flash.bu.edu)
17 * LinuxObuffer class written by
18 * Louis P. Kruger (lpkruger@phoenix.princeton.edu)
19 *-----------------------------------------------------------------------
20 * This program is free software; you can redistribute it and/or modify
21 * it under the terms of the GNU Library General Public License as published
22 * by the Free Software Foundation; either version 2 of the License, or
23 * (at your option) any later version.
25 * This program is distributed in the hope that it will be useful,
26 * but WITHOUT ANY WARRANTY; without even the implied warranty of
27 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28 * GNU Library General Public License for more details.
30 * You should have received a copy of the GNU Library General Public
31 * License along with this program; if not, write to the Free Software
32 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
33 *----------------------------------------------------------------------
37 * Base Class for audio output.
40 @METHODDEFAULT("D<IN,D<C,C*,THISLOC=D")
41 public abstract class Obuffer
43 public static final int OBUFFERSIZE = 2 * 1152; // max. 2 * 1152 samples per frame
44 public static final int MAXCHANNELS = 2; // max. number of channels
47 * Takes a 16 Bit PCM sample.
49 public abstract void append(int channel, short value);
52 * Accepts 32 new PCM samples.
54 public void appendSamples(@LOC("IN") int channel, @LOC("IN") float[] f)
57 for (@LOC("C") int i=0; i<32;)
59 s = clip(f[i++]); // flow from "IN" to "D"
65 * Clip Sample to 16 Bits
68 private final short clip(@LOC("IN") float sample)
70 return ((sample > 32767.0f) ? (short) 32767 :
71 ((sample < -32768.0f) ? (short) -32768 :
76 * Write the samples to the file or directly to the audio hardware.
78 public abstract void write_buffer(int val);
79 public abstract void close();
82 * Clears all data in the buffer (for seeking).
84 public abstract void clear_buffer();
87 * Notify the buffer that the user has stopped the stream.
89 public abstract void set_stop_flag();