1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
package POC;
import javax.sound.midi.*;
public class Main {
public static void main(String[] args) throws MidiUnavailableException, InvalidMidiDataException {
MidiDevice.Info[] tableauInfo = MidiSystem.getMidiDeviceInfo();
MidiDevice apcOut;
MidiDevice apcIn;
apcIn = getDevice("Akai APC40", "MidiOut");
apcIn.open();
// System.out.println(apcIn.getMaxTransmitters()); 0
// System.out.println(apcIn.getMaxReceivers()); -1
apcOut = getDevice("Akai APC40", "MidiIn");
apcOut.open();
// System.out.println(apcOut.getMaxTransmitters()); -1
// System.out.println(apcOut.getMaxReceivers()); 0
ApcReceiver myApcReceiver = new ApcReceiver(apcIn);
apcOut.getTransmitter().setReceiver(myApcReceiver);
}
/**
* name = Akai APC40 || VAkai APC40 In ou Vakai APC40 Out
* className = MidiOutDeviceInfo ou MidiInDeviceInfo || autre
* @param name
* @param className
* @return
*/
public static MidiDevice getDevice(String name, String className) throws MidiUnavailableException {
MidiDevice returnedMidiDevice = null;
MidiDevice.Info[] tableauInfo = MidiSystem.getMidiDeviceInfo();
for (MidiDevice.Info info : tableauInfo) {
System.out.println(info);
if(info.getName().compareTo(name) == 0 && info.getClass().getSimpleName().contains(className)){
returnedMidiDevice = MidiSystem.getMidiDevice(info);
}
}
return returnedMidiDevice;
}
}
class ApcReceiver implements Receiver{
MidiDevice apcIn;
ShortMessage midiMessage = new ShortMessage();
public ApcReceiver(MidiDevice apcIn){
this.apcIn = apcIn;
}
@Override
public void send(MidiMessage message, long timeStamp) {
byte[] b = message.getMessage();
if (b[0] != (byte)254) {
System.out.println((0xFF & b[0])+" "+b[1]+ " "+b[2]);
}
/* Créer le filtre permettant de modifier les messages Midi */
try {
midiMessage.setMessage((0xFF & b[0]), b[1]+4, b[2]);
apcIn.getReceiver().send(midiMessage, 1);
} catch (InvalidMidiDataException e) {
e.printStackTrace();
} catch (MidiUnavailableException e) {
e.printStackTrace();
}
}
@Override
public void close() {
}
} |
Partager