Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/javax/sound/midi/Sequencer/Looping.java
41155 views
1
/*
2
* Copyright (c) 2003, 2016, 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.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
import javax.sound.midi.InvalidMidiDataException;
25
import javax.sound.midi.MetaEventListener;
26
import javax.sound.midi.MetaMessage;
27
import javax.sound.midi.MidiDevice;
28
import javax.sound.midi.MidiEvent;
29
import javax.sound.midi.MidiSystem;
30
import javax.sound.midi.Sequence;
31
import javax.sound.midi.Sequencer;
32
import javax.sound.midi.ShortMessage;
33
import javax.sound.midi.Track;
34
35
/**
36
* @test
37
* @bug 4204105
38
* @summary RFE: add loop() method(s) to Sequencer
39
* @key intermittent
40
*/
41
public class Looping {
42
43
public static void main(String[] args) throws Exception {
44
out("4204105: RFE: add loop() method(s) to Sequencer");
45
boolean passed = testAll();
46
if (passed) {
47
out("Test PASSED.");
48
} else {
49
throw new Exception("Test FAILED.");
50
}
51
}
52
53
/**
54
* Execute the test on all available Sequencers.
55
*
56
* @return true if the test passed for all Sequencers, false otherwise
57
*/
58
private static boolean testAll() throws Exception {
59
boolean result = true;
60
MidiDevice.Info[] devices = MidiSystem.getMidiDeviceInfo();
61
for (int i = 0; i < devices.length; i++) {
62
MidiDevice device = MidiSystem.getMidiDevice(devices[i]);
63
if (device instanceof Sequencer) {
64
result &= testSequencer((Sequencer) device);
65
}
66
}
67
return result;
68
}
69
70
/**
71
* Execute the test on the passed Sequencer.
72
*
73
* @return true if the test is passed this Sequencer, false otherwise
74
*/
75
private static boolean testSequencer(Sequencer seq) throws Exception{
76
boolean result = true;
77
out("testing: " + seq);
78
79
result &= testGetSet(seq);
80
81
seq.setSequence(createSequence());
82
83
result &= testGetSet(seq);
84
85
result &= testPlay(seq);
86
87
return result;
88
}
89
90
private static boolean testGetSet(Sequencer seq) {
91
boolean result = true;
92
Sequence sequence = seq.getSequence();
93
boolean isSequenceLoaded = (sequence != null);
94
95
out("TestGetSet");
96
97
try {
98
if (seq.getLoopStartPoint() != 0) {
99
out("start point", isSequenceLoaded,
100
"isn't 0!");
101
result = false;
102
}
103
} catch (IllegalArgumentException iae) {
104
if (!isSequenceLoaded) {
105
out("Caught permissable IllegalArgumentException:");
106
} else {
107
out("Threw unacceptable IllegalArgumentException! FAILED");
108
result = false;
109
}
110
out(iae.toString());
111
}
112
113
if (seq.getLoopEndPoint() != -1) {
114
out("end point", isSequenceLoaded,
115
"isn't -1!");
116
result = false;
117
}
118
119
try {
120
seq.setLoopStartPoint(25);
121
if (seq.getLoopStartPoint() != 25) {
122
out("setLoopStartPoint()", isSequenceLoaded,
123
"doesn't set the start point correctly!");
124
result = false;
125
}
126
} catch (IllegalArgumentException iae) {
127
if (!isSequenceLoaded) {
128
out("Caught permissable IllegalArgumentException:");
129
} else {
130
out("Threw unacceptable IllegalArgumentException! FAILED");
131
result = false;
132
}
133
out(iae.toString());
134
}
135
136
try {
137
seq.setLoopEndPoint(26);
138
if (seq.getLoopEndPoint() != 26) {
139
out("setLoopEndPoint()", isSequenceLoaded,
140
"doesn't set the end point correctly!");
141
result = false;
142
}
143
} catch (IllegalArgumentException iae) {
144
if (!isSequenceLoaded) {
145
out("Caught permissable IllegalArgumentException:");
146
} else {
147
out("Threw unacceptable IllegalArgumentException! FAILED");
148
result = false;
149
}
150
out(iae.toString());
151
}
152
153
try {
154
seq.setLoopStartPoint(0);
155
if (seq.getLoopStartPoint() != 0) {
156
out("setLoopStartPoint()", isSequenceLoaded,
157
"doesn't set the start point correctly!");
158
result = false;
159
}
160
} catch (IllegalArgumentException iae) {
161
if (!isSequenceLoaded) {
162
out("Caught permissable IllegalArgumentException:");
163
} else {
164
out("Threw unacceptable IllegalArgumentException! FAILED");
165
result = false;
166
}
167
out(iae.toString());
168
}
169
170
if (isSequenceLoaded) {
171
seq.setLoopEndPoint(sequence.getTickLength());
172
if (seq.getLoopEndPoint() != sequence.getTickLength()) {
173
out("setLoopEndPoint()", isSequenceLoaded,
174
"doesn't set the end point correctly!");
175
result = false;
176
}
177
} else {
178
// fails
179
seq.setLoopEndPoint(-1);
180
if (seq.getLoopEndPoint() != -1) {
181
out("setLoopEndPoint()", isSequenceLoaded,
182
"doesn't set the end point correctly!");
183
result = false;
184
}
185
}
186
187
if (seq.getLoopCount() != 0) {
188
out("loop count", isSequenceLoaded,
189
"isn't 0!");
190
result = false;
191
}
192
193
seq.setLoopCount(1001);
194
if (seq.getLoopCount() != 1001) {
195
out("setLoopCount()", isSequenceLoaded,
196
"doesn't set the loop count correctly!");
197
result = false;
198
}
199
200
seq.setLoopCount(Sequencer.LOOP_CONTINUOUSLY);
201
if (seq.getLoopCount() != Sequencer.LOOP_CONTINUOUSLY) {
202
out("setLoopCount(Sequencer.LOOP_CONTINUOUSLY)", isSequenceLoaded,
203
"doesn't set the loop count correctly!");
204
result = false;
205
}
206
207
try {
208
seq.setLoopCount(-55);
209
out("setLoopCount()", isSequenceLoaded,
210
"doesn't throw IllegalArgumentException on illegal value!");
211
result = false;
212
} catch (IllegalArgumentException e) {
213
// EXCEPTION IS EXPECTED
214
out("Caught permissable IAE");
215
}
216
217
seq.setLoopCount(0);
218
if (seq.getLoopCount() != 0) {
219
out("setLoopCount()", isSequenceLoaded,
220
"doesn't set the loop count correctly!");
221
result = false;
222
}
223
224
return result;
225
}
226
227
private static boolean testPlay(Sequencer seq) {
228
boolean result = true;
229
long stopTime;
230
231
out("TestPlay");
232
233
TestMetaEventListener listener = new TestMetaEventListener();
234
seq.addMetaEventListener(listener);
235
long startTime = System.currentTimeMillis();
236
try {
237
seq.open();
238
out("Playing sequence, length="+(seq.getMicrosecondLength()/1000)+"millis");
239
seq.start();
240
while (true) {
241
stopTime = listener.getStopTime();
242
if (stopTime != 0) {
243
break;
244
}
245
try {
246
Thread.sleep(100);
247
} catch (InterruptedException e) {
248
}
249
}
250
long measuredDuration = stopTime - startTime;
251
out("play duration (us): " + measuredDuration);
252
} catch (Exception e) {
253
out("test not executed; exception:");
254
e.printStackTrace();
255
}
256
seq.close();
257
return result;
258
}
259
260
/**
261
* Create a new Sequence for testing.
262
*
263
* @return a dummy Sequence, or null, if a problem occured while creating
264
* the Sequence
265
*/
266
private static Sequence createSequence() {
267
Sequence sequence = null;
268
int lengthInSeconds = 2;
269
long lengthInMicroseconds = lengthInSeconds * 1000000;
270
int resolution = 480;
271
long lengthInTicks = (lengthInMicroseconds * 120 * resolution) / 60000000l;
272
out("length in ticks: " + lengthInTicks);
273
try {
274
sequence = new Sequence(Sequence.PPQ, resolution, 1);
275
Track track = sequence.createTrack();
276
ShortMessage mm = new ShortMessage();
277
mm.setMessage(0xF6, 0, 0);
278
MidiEvent me = new MidiEvent(mm, lengthInTicks);
279
track.add(me);
280
} catch (InvalidMidiDataException e) {
281
// DO NOTHING
282
}
283
out("sequence length (ticks): " + sequence.getTickLength());
284
out("sequence length (us): " + sequence.getMicrosecondLength());
285
return sequence;
286
}
287
288
289
private static void out(String m1, boolean isSequenceLoaded, String m2) {
290
out(m1 + (isSequenceLoaded ? " with Sequence " : " without Sequence ") + m2);
291
}
292
293
private static void out(String message) {
294
System.out.println(message);
295
}
296
297
private static class TestMetaEventListener implements MetaEventListener {
298
private long stopTime;
299
300
301
public void meta(MetaMessage m) {
302
System.out.print(" Got MetaMessage: ");
303
if (m.getType() == 47) {
304
stopTime = System.currentTimeMillis();
305
System.out.println(" End Of Track -- OK");
306
} else {
307
System.out.println(" unknown. Ignored.");
308
}
309
}
310
311
public long getStopTime() {
312
return stopTime;
313
}
314
}
315
}
316
317