Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/javax/sound/midi/Gervill/SoftChannel/ProgramAndBankChange.java
41159 views
1
/*
2
* Copyright (c) 2010, 2015, 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
/* @test
25
@summary Test SoftChannel program and bank change
26
@modules java.desktop/com.sun.media.sound
27
*/
28
29
import java.io.IOException;
30
31
import javax.sound.midi.*;
32
import javax.sound.sampled.*;
33
34
import com.sun.media.sound.*;
35
36
public class ProgramAndBankChange {
37
38
private static SimpleInstrument generateTestInstrument(Patch patch) {
39
ModelOscillator osc = new ModelOscillator() {
40
public float getAttenuation() {
41
return 0;
42
}
43
44
public int getChannels() {
45
return 1;
46
}
47
48
public ModelOscillatorStream open(float samplerate) {
49
return new ModelOscillatorStream() {
50
public void close() throws IOException {
51
}
52
53
public void noteOff(int velocity) {
54
}
55
56
public void noteOn(MidiChannel channel, VoiceStatus voice,
57
int noteNumber, int velocity) {
58
}
59
60
public int read(float[][] buffer, int offset, int len)
61
throws IOException {
62
return len;
63
}
64
65
public void setPitch(float ipitch) {
66
}
67
};
68
}
69
};
70
ModelPerformer performer = new ModelPerformer();
71
performer.getOscillators().add(osc);
72
SimpleInstrument testinstrument = new SimpleInstrument();
73
testinstrument.setPatch(patch);
74
testinstrument.add(performer);
75
return testinstrument;
76
}
77
78
private static void assertTrue(boolean value) throws Exception {
79
if (!value)
80
throw new RuntimeException("assertTrue fails!");
81
}
82
83
private static void testProgramAndBank(SoftSynthesizer soft,
84
AudioInputStream stream, Patch patch) throws Exception {
85
86
int program = patch.getProgram();
87
int bank = patch.getBank();
88
89
MidiChannel channel = soft.getChannels()[0];
90
byte[] buff = new byte[2048];
91
92
channel.programChange(bank, program);
93
channel.noteOn(64, 64);
94
stream.read(buff, 0, buff.length);
95
96
int foundprogram = -1;
97
int foundbank = -1;
98
VoiceStatus[] vstatus = soft.getVoiceStatus();
99
for (int i = 0; i < vstatus.length; i++) {
100
if (vstatus[i].active) {
101
foundprogram = vstatus[i].program;
102
foundbank = vstatus[i].bank;
103
break;
104
}
105
}
106
107
assertTrue(foundprogram == program);
108
assertTrue(foundbank == bank);
109
110
channel.noteOn(64, 0);
111
stream.read(buff, 0, buff.length);
112
113
channel = soft.getChannels()[1];
114
// Send MSB Bank
115
channel.controlChange(0x00, bank / 128);
116
// Send LSB Bank
117
channel.controlChange(0x20, bank % 128);
118
// Send Program Change
119
channel.programChange(program);
120
channel.noteOn(64, 64);
121
stream.read(buff, 0, buff.length);
122
123
foundprogram = -1;
124
foundbank = -1;
125
vstatus = soft.getVoiceStatus();
126
for (int i = 0; i < vstatus.length; i++) {
127
if (vstatus[i].active) {
128
foundprogram = vstatus[i].program;
129
foundbank = vstatus[i].bank;
130
break;
131
}
132
}
133
assertTrue(foundprogram == program);
134
assertTrue(foundbank == bank);
135
channel.noteOn(64, 0);
136
stream.read(buff, 0, buff.length);
137
}
138
139
public static void main(String[] args) throws Exception {
140
SoftSynthesizer soft = new SoftSynthesizer();
141
AudioInputStream stream = soft.openStream(null, null);
142
soft.unloadAllInstruments(soft.getDefaultSoundbank());
143
144
soft.loadInstrument(generateTestInstrument(new Patch(0, 0)));
145
soft.loadInstrument(generateTestInstrument(new Patch(7, 0)));
146
soft.loadInstrument(generateTestInstrument(new Patch(20, 10)));
147
soft.loadInstrument(generateTestInstrument(new Patch(3678, 15)));
148
soft.loadInstrument(generateTestInstrument(new Patch(4678, 15)));
149
150
testProgramAndBank(soft, stream, new Patch(0, 0));
151
testProgramAndBank(soft, stream, new Patch(7, 0));
152
testProgramAndBank(soft, stream, new Patch(20, 10));
153
testProgramAndBank(soft, stream, new Patch(3678, 15));
154
testProgramAndBank(soft, stream, new Patch(4678, 15));
155
156
soft.close();
157
}
158
}
159
160