Subversion Repositories svn.mios

Rev

Rev 213 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 213 Rev 628
Line 21... Line 21...
21
package org.midibox.sidlibr;
21
package org.midibox.sidlibr;
22
22
23
import javax.sound.midi.MidiMessage;
23
import javax.sound.midi.MidiMessage;
24
import javax.sound.midi.Receiver;
24
import javax.sound.midi.Receiver;
25
import javax.sound.midi.SysexMessage;
25
import javax.sound.midi.SysexMessage;
-
 
26
26
import org.midibox.sidedit.SIDSysexInfo;
27
import org.midibox.sidedit.SIDSysexInfo;
27
28
28
public class Ensemble implements Receiver {
29
public class Ensemble implements Receiver {
29
    private boolean[] cores = {false, false, false, false};
30
    private boolean[] cores = { false, false, false, false };
30
    protected int[] ensemble = new int[256];
31
    protected int[] ensemble = new int[256];
Line 85... Line 86...
85
            checksum = checksum + Integer.parseInt(s1,16);
86
            checksum = checksum + Integer.parseInt(s1, 16);
86
            checksum = checksum + Integer.parseInt(s2,16);
87
            checksum = checksum + Integer.parseInt(s2, 16);
87
            int temp = Integer.parseInt(s1+s2,16);
88
            int temp = Integer.parseInt(s1 + s2, 16);
88
            ensemble[i] = temp;
89
            ensemble[i] = temp;
89
        }
90
        }
90
        int chk = Integer.parseInt(d.substring((4*512)+dsi, (4*512)+dsi+2),16);
91
        int chk = Integer.parseInt(d.substring((4 * 512) + dsi, (4 * 512) + dsi
-
 
92
                + 2), 16);
91
        if (chk != (-checksum & 0x7F)) {
93
        if (chk != (-checksum & 0x7F)) {
92
            status = "checksum error";
94
            status = "checksum error";
93
        }
-
 
94
        else {
95
        } else {
95
            status = "succesful";      
96
            status = "succesful";
96
        }
97
        }
97
        return status;     
98
        return status;
98
    }
99
    }
99
   
100
Line 107... Line 108...
107
   
108
108
    public int getParameter(int address, int start_bit, int resolution) {
109
    public int getParameter(int address, int start_bit, int resolution) {
109
        int value = 0;
110
        int value = 0;
110
        int absres = Math.abs(resolution);
111
        int absres = Math.abs(resolution);
111
       
112
112
        // resolution < 8 bit: gets value of bit length 'resolution' starting on the start_bit
113
        // resolution < 8 bit: gets value of bit length 'resolution' starting on
-
 
114
        // the start_bit
113
        if (absres < 8) {
115
        if (absres < 8) {
114
            int bitmask = 0;
116
            int bitmask = 0;
115
            for(int j=0; j < absres; j++) {                                 // Iterate over all bits
117
            for (int j = 0; j < absres; j++) { // Iterate over all bits
116
                bitmask = bitmask | (int) Math.pow(2,(start_bit + j));     
118
                bitmask = bitmask | (int) Math.pow(2, (start_bit + j));
117
            }              
119
            }
Line 144... Line 146...
144
        }
146
        }
145
       
147
146
        return value;
148
        return value;
147
    }
149
    }
148
       
150
149
    public void setParameter(int address, int value, int start_bit, int resolution) {
151
    public void setParameter(int address, int value, int start_bit,
-
 
152
            int resolution) {
150
        int absres = Math.abs(resolution);
153
        int absres = Math.abs(resolution);
151
       
154
152
        // Shift all bipolar values up to make them fit into a positive integer
155
        // Shift all bipolar values up to make them fit into a positive integer
153
        if (resolution < 0) {
156
        if (resolution < 0) {
154
            int midimin = -((int) Math.ceil((Math.pow(2,absres)-1)/2));
157
            int midimin = -((int) Math.ceil((Math.pow(2, absres) - 1) / 2));
155
            value = value - midimin;           
158
            value = value - midimin;
156
        }
159
        }
157
       
160
158
        // resolution < 8 bit: sets value of bit length 'resolution' starting on the start_bit
161
        // resolution < 8 bit: sets value of bit length 'resolution' starting on
-
 
162
        // the start_bit
159
        if (absres < 8) {              
163
        if (absres < 8) {
160
            int temp = nibbleSwap(ensemble[address]);               // Retrieve data
164
            int temp = nibbleSwap(ensemble[address]); // Retrieve data
161
           
165
162
            for(int j=0; j < absres; j++) {                     // Iterate over all bits
166
            for (int j = 0; j < absres; j++) { // Iterate over all bits
163
                int this_bit = start_bit + j;
167
                int this_bit = start_bit + j;
164
                int bitmask0 = (int) Math.pow(2,j);                 // Bitmask for checking if current bit needs to change
168
                int bitmask0 = (int) Math.pow(2, j); // Bitmask for checking if
-
 
169
                // current bit needs to
-
 
170
                // change
165
                int bitmask1 = (int) Math.pow(2,(this_bit));        // Bitmask for turning bits on
171
                int bitmask1 = (int) Math.pow(2, (this_bit)); // Bitmask for
-
 
172
                // turning bits
-
 
173
                // on
166
                int bitmask2 = (~bitmask1) & 0xFF;                  // Bitmask for turning bits off
174
                int bitmask2 = (~bitmask1) & 0xFF; // Bitmask for turning bits
-
 
175
                // off
167
                if ((value & bitmask0) == 0) {                                 
176
                if ((value & bitmask0) == 0) {
168
                    temp = (temp & bitmask2) & 0xFF;                // Turn bit off
177
                    temp = (temp & bitmask2) & 0xFF; // Turn bit off
169
                }
178
                }
170
                if ((value & bitmask0) != 0) {                                         
179
                if ((value & bitmask0) != 0) {
171
                    temp = (temp | bitmask1) & 0xFF;                // Turn bit on  
180
                    temp = (temp | bitmask1) & 0xFF; // Turn bit on
Line 208... Line 217...
208
        for(int c=0; c < cores.length; c++) {  
217
        for (int c = 0; c < cores.length; c++) {
209
            if (cores[c]) {
218
            if (cores[c]) {
210
                SysexMessage sysexMessage = new SysexMessage();
219
                SysexMessage sysexMessage = new SysexMessage();
211
                try {
220
                try {
212
                    String strMessage = SIDSysexInfo.editEsembleParameterSysex;
221
                    String strMessage = SIDSysexInfo.editEsembleParameterSysex;
213
                    strMessage = strMessage.replace("<device>", "0" + Integer.toString(c));
222
                    strMessage = strMessage.replace("<device>", "0"
-
 
223
                            + Integer.toString(c));
-
 
224
                    strMessage = strMessage
214
                    strMessage = strMessage.replace("<address>", calcAddr(addr));
225
                            .replace("<address>", calcAddr(addr));
215
                    strMessage = strMessage.replace("<value>", calcValue(value,bytes));
226
                    strMessage = strMessage.replace("<value>", calcValue(value,
-
 
227
                            bytes));
216
                   
228
217
                    int nLengthInBytes = strMessage.length() / 2;
229
                    int nLengthInBytes = strMessage.length() / 2;
218
                    byte[]  abMessage = new byte[nLengthInBytes];
230
                    byte[] abMessage = new byte[nLengthInBytes];
219
                    for (int i = 0; i < nLengthInBytes; i++)
231
                    for (int i = 0; i < nLengthInBytes; i++) {
220
                    {
-
 
221
                        abMessage[i] = (byte) Integer.parseInt(strMessage.substring(i * 2, i * 2 + 2), 16);            
232
                        abMessage[i] = (byte) Integer.parseInt(strMessage
-
 
233
                                .substring(i * 2, i * 2 + 2), 16);
222
                    }
234
                    }
223
                   
235
224
                    System.out.println(strMessage);
236
                    System.out.println(strMessage);
225
                    sysexMessage.setMessage(abMessage, abMessage.length);  
237
                    sysexMessage.setMessage(abMessage, abMessage.length);
226
                } catch (Exception e) {        
238
                } catch (Exception e) {
Line 252... Line 264...
252
        if (byt==1) {
264
        if (byt == 1) {
253
            String s0 = "0";
265
            String s0 = "0";
254
            String s1 = Integer.toHexString(val & 0x0F);       
266
            String s1 = Integer.toHexString(val & 0x0F);
255
            String s2 = Integer.toHexString((val & 0xF0)>>4);
267
            String s2 = Integer.toHexString((val & 0xF0) >> 4);
256
            s =(s0+s1+s0+s2);
268
            s = (s0 + s1 + s0 + s2);
257
        }
-
 
258
        else if (byt==2) {
269
        } else if (byt == 2) {
259
            String s0 = "0";
270
            String s0 = "0";
260
            String s1 = Integer.toHexString(val & 0x000F);     
271
            String s1 = Integer.toHexString(val & 0x000F);
261
            String s2 = Integer.toHexString((val & 0x00F0)>>4);
272
            String s2 = Integer.toHexString((val & 0x00F0) >> 4);
262
            String s3 = Integer.toHexString((val & 0x0F00)>>8);
273
            String s3 = Integer.toHexString((val & 0x0F00) >> 8);
263
            String s4 = Integer.toHexString((val & 0xF000)>>12);
274
            String s4 = Integer.toHexString((val & 0xF000) >> 12);
Line 281... Line 292...
281
        Ensemble p = new Ensemble(receiver);
292
        Ensemble p = new Ensemble(receiver);
282
        p.setEnsemble(ensemble.clone());
293
        p.setEnsemble(ensemble.clone());
283
        return p;
294
        return p;
284
    }  
295
    }
285
}
296
}
286
-
 
287
-
 
288
-
 
289
-