Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
lDEVinux
GitHub Repository: lDEVinux/eaglercraft
Path: blob/main/src/lwjgl/java/javazoom/jl/decoder/Obuffer.java
8650 views
1
/*
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 ,[email protected], JavaLayer
5
*
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.
9
*
10
* @(#) obuffer.h 1.8, last edit: 6/15/94 16:51:56
11
* @(#) Copyright (C) 1993, 1994 Tobias Bading ([email protected])
12
* @(#) Berlin University of Technology
13
*
14
* Idea and first implementation for u-law output with fast downsampling by
15
* Jim Boucher ([email protected])
16
*
17
* LinuxObuffer class written by
18
* Louis P. Kruger ([email protected])
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.
24
*
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.
29
*
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
*----------------------------------------------------------------------
34
*/
35
package javazoom.jl.decoder;
36
37
/**
38
* Base Class for audio output.
39
*/
40
public abstract class Obuffer
41
{
42
public static final int OBUFFERSIZE = 2 * 1152; // max. 2 * 1152 samples per frame
43
public static final int MAXCHANNELS = 2; // max. number of channels
44
45
/**
46
* Takes a 16 Bit PCM sample.
47
*/
48
public abstract void append(int channel, short value);
49
50
/**
51
* Accepts 32 new PCM samples.
52
*/
53
public void appendSamples(int channel, float[] f)
54
{
55
short s;
56
for (int i=0; i<32;)
57
{
58
s = clip(f[i++]);
59
append(channel, s);
60
}
61
}
62
63
/**
64
* Clip Sample to 16 Bits
65
*/
66
private final short clip(float sample)
67
{
68
return ((sample > 32767.0f) ? 32767 :
69
((sample < -32768.0f) ? -32768 :
70
(short) sample));
71
}
72
73
/**
74
* Write the samples to the file or directly to the audio hardware.
75
*/
76
public abstract void write_buffer(int val);
77
public abstract void close();
78
79
/**
80
* Clears all data in the buffer (for seeking).
81
*/
82
public abstract void clear_buffer();
83
84
/**
85
* Notify the buffer that the user has stopped the stream.
86
*/
87
public abstract void set_stop_flag();
88
}
89
90