Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/classes/javax/sound/sampled/LineEvent.java
38918 views
1
/*
2
* Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
package javax.sound.sampled;
27
28
/**
29
* The <code>LineEvent</code> class encapsulates information that a line
30
* sends its listeners whenever the line opens, closes, starts, or stops.
31
* Each of these four state changes is represented by a corresponding
32
* type of event. A listener receives the event as a parameter to its
33
* {@link LineListener#update update} method. By querying the event,
34
* the listener can learn the type of event, the line responsible for
35
* the event, and how much data the line had processed when the event occurred.
36
*
37
* <p>Although this class implements Serializable, attempts to
38
* serialize a <code>LineEvent</code> object will fail.
39
*
40
* @author Kara Kytle
41
*
42
* @see Line
43
* @see LineListener#update
44
* @since 1.3
45
*
46
* @serial exclude
47
*/
48
public class LineEvent extends java.util.EventObject {
49
50
// INSTANCE VARIABLES
51
52
/**
53
* The kind of line event (<code>OPEN</code>, <code>CLOSE</code>,
54
* <code>START</code>, or <code>STOP</code>).
55
* @see #getType
56
* @serial
57
*/
58
private final Type type;
59
60
/**
61
* The media position when the event occurred, expressed in sample frames.
62
* Note that this field is only relevant to certain events generated by
63
* data lines, such as <code>START</code> and <code>STOP</code>. For
64
* events generated by lines that do not count sample frames, and for any
65
* other events for which this value is not known, the position value
66
* should be {@link AudioSystem#NOT_SPECIFIED}.
67
* @serial
68
* @see #getFramePosition
69
*/
70
private final long position;
71
72
73
/**
74
* Constructs a new event of the specified type, originating from the specified line.
75
* @param line the source of this event
76
* @param type the event type (<code>OPEN</code>, <code>CLOSE</code>, <code>START</code>, or <code>STOP</code>)
77
* @param position the number of sample frames that the line had already processed when the event occurred,
78
* or {@link AudioSystem#NOT_SPECIFIED}
79
*
80
* @throws IllegalArgumentException if <code>line</code> is
81
* <code>null</code>.
82
*/
83
public LineEvent(Line line, Type type, long position) {
84
85
super(line);
86
this.type = type;
87
this.position = position;
88
}
89
90
/**
91
* Obtains the audio line that is the source of this event.
92
* @return the line responsible for this event
93
*/
94
public final Line getLine() {
95
96
return (Line)getSource();
97
}
98
99
100
/**
101
* Obtains the event's type.
102
* @return this event's type ({@link Type#OPEN}, {@link Type#CLOSE},
103
* {@link Type#START}, or {@link Type#STOP})
104
*/
105
public final Type getType() {
106
107
return type;
108
}
109
110
/**
111
* Obtains the position in the line's audio data when the event occurred, expressed in sample frames.
112
* For example, if a source line had already played back 14 sample frames at the time it was
113
* paused, the pause event would report the line's position as 14. The next frame to be processed
114
* would be frame number 14 using zero-based numbering, or 15 using one-based numbering.
115
* <p>
116
* Note that this field is relevant only to certain events generated by
117
* data lines, such as <code>START</code> and <code>STOP</code>. For
118
* events generated by lines that do not count sample frames, and for any
119
* other events for which this value is not known, the position value
120
* should be {@link AudioSystem#NOT_SPECIFIED}.
121
*
122
* @return the line's position as a sample frame number
123
*/
124
/*
125
* $$kk: 04.20.99: note to myself: should make sure our implementation is consistent with this.
126
* which is a reasonable definition....
127
*/
128
public final long getFramePosition() {
129
130
return position;
131
}
132
133
/**
134
* Obtains a string representation of the event. The contents of the string may vary
135
* between implementations of Java Sound.
136
* @return a string describing the event.
137
*/
138
public String toString() {
139
String sType = "";
140
if (type != null) sType = type.toString()+" ";
141
String sLine;
142
if (getLine() == null) {
143
sLine = "null";
144
} else {
145
sLine = getLine().toString();
146
}
147
return new String(sType + "event from line " + sLine);
148
}
149
150
151
/**
152
* The LineEvent.Type inner class identifies what kind of event occurred on a line.
153
* Static instances are provided for the common types (OPEN, CLOSE, START, and STOP).
154
*
155
* @see LineEvent#getType()
156
*/
157
public static class Type {
158
159
160
/**
161
* Type name.
162
*/
163
// $$kk: 03.25.99: why can't this be final??
164
private /*final*/ String name;
165
166
/**
167
* Constructs a new event type.
168
* @param name name of the type
169
*/
170
protected Type(String name) {
171
this.name = name;
172
}
173
174
175
//$$fb 2002-11-26: fix for 4695001: SPEC: description of equals() method contains typo
176
/**
177
* Indicates whether the specified object is equal to this event type,
178
* returning <code>true</code> if the objects are identical.
179
* @param obj the reference object with which to compare
180
* @return <code>true</code> if this event type is the same as
181
* <code>obj</code>; <code>false</code> otherwise
182
*/
183
public final boolean equals(Object obj) {
184
return super.equals(obj);
185
}
186
187
188
/**
189
* Finalizes the hashcode method.
190
*/
191
public final int hashCode() {
192
return super.hashCode();
193
}
194
195
196
/**
197
* Returns the type name as the string representation.
198
*/
199
public String toString() {
200
return name;
201
}
202
203
204
// LINE EVENT TYPE DEFINES
205
206
/**
207
* A type of event that is sent when a line opens, reserving system
208
* resources for itself.
209
* @see #CLOSE
210
* @see Line#open
211
*/
212
public static final Type OPEN = new Type("Open");
213
214
215
/**
216
* A type of event that is sent when a line closes, freeing the system
217
* resources it had obtained when it was opened.
218
* @see #OPEN
219
* @see Line#close
220
*/
221
public static final Type CLOSE = new Type("Close");
222
223
224
/**
225
* A type of event that is sent when a line begins to engage in active
226
* input or output of audio data in response to a
227
* {@link DataLine#start start} request.
228
* @see #STOP
229
* @see DataLine#start
230
*/
231
public static final Type START = new Type("Start");
232
233
234
/**
235
* A type of event that is sent when a line ceases active input or output
236
* of audio data in response to a {@link DataLine#stop stop} request,
237
* or because the end of media has been reached.
238
* @see #START
239
* @see DataLine#stop
240
*/
241
public static final Type STOP = new Type("Stop");
242
243
244
/**
245
* A type of event that is sent when a line ceases to engage in active
246
* input or output of audio data because the end of media has been reached.
247
*/
248
/*
249
* ISSUE: we may want to get rid of this. Is JavaSound
250
* responsible for reporting this??
251
*
252
* [If it's decided to keep this API, the docs will need to be updated to include mention
253
* of EOM events elsewhere.]
254
*/
255
//public static final Type EOM = new Type("EOM");
256
257
258
/**
259
* A type of event that is sent when a line begins to engage in active
260
* input or output of audio data. Examples of when this happens are
261
* when a source line begins or resumes writing data to its mixer, and
262
* when a target line begins or resumes reading data from its mixer.
263
* @see #STOP
264
* @see SourceDataLine#write
265
* @see TargetDataLine#read
266
* @see DataLine#start
267
*/
268
//public static final Type ACTIVE = new Type("ACTIVE");
269
270
271
/**
272
* A type of event that is sent when a line ceases active input or output
273
* of audio data.
274
* @see #START
275
* @see DataLine#stop
276
*/
277
//public static final Type INACTIVE = new Type("INACTIVE");
278
279
} // class Type
280
281
} // class LineEvent
282
283