Ho fatto qualche passo avanti: ora ho questa main class:
codice:
package JmidiSync;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import javax.sound.midi.MidiDevice;
import javax.sound.midi.Transmitter;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTextField;
/**
*
* @author Franz
*/
public class JMidiSync implements MouseMotionListener, ActionListener {
public static MidiHandler midi;
public static JFrame front;
public static JPanel skin;
public static JTextField bpm;
public static JSlider slideTime;
public static JComboBox one, two, three, four;
public static MidiDevice[] devArray;
public Transmitter[] transArray;
public static String[] devices, transmitters;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
midi = new MidiHandler();
new JMidiSync();
}
public JMidiSync() {
devArray = midi.getDevices();
//transArray = midi.getTransmitters();
devices = new String[midi.getDevicesNumber()];
//transmitters = new String[midi.getTransmittersNumber()];
for(int i = 0; i < devArray.length; i++) {
devices[i] = devArray[i].getDeviceInfo().toString();
}
/*for(int i = 0; i < transArray.length; i++) {
transmitters[i] = transArray[i].toString();
}*/
designGui();
}
public void designGui() {
front = new JFrame("JMidiSync");
front.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
skin = new JPanel();
skin.setSize(220, 300);
skin.setBounds(0, 0, 220, 300);
skin.setBackground(Color.DARK_GRAY);
skin.setLayout(null);
bpm = new JTextField();
bpm.setSize(200, 30);
bpm.setBounds(10, 10, 200, 30);
bpm.setEditable(false);
bpm.setText("120");
bpm.setHorizontalAlignment(JTextField.CENTER);
skin.add(bpm);
slideTime = new JSlider(JSlider.HORIZONTAL, 0, 240, 120);
slideTime.setSize(200, 30);
slideTime.setBounds(10, 50, 200, 30);
slideTime.addMouseMotionListener(this);
skin.add(slideTime);
one = new JComboBox(devices);
one.setSize(200, 30);
one.setBounds(10, 90, 200, 30);
one.addActionListener(this);
skin.add(one);
two = new JComboBox(devices);
two.setSize(200, 30);
two.setBounds(10, 130, 200, 30);
skin.add(two);
three = new JComboBox(devices);
three.setSize(200, 30);
three.setBounds(10, 170, 200, 30);
skin.add(three);
four = new JComboBox(devices);
four.setSize(200, 30);
four.setBounds(10, 210, 200, 30);
skin.add(four);
front.add(skin);
front.setSize(220, 300);
front.setVisible(true);
}
@Override
public void mouseDragged(MouseEvent e) {
Object obj = e.getComponent();
if (obj == slideTime) {
bpm.setText(String.valueOf(slideTime.getValue()));
}
}
@Override
public void mouseMoved(MouseEvent e) {
}
@Override
public void actionPerformed(ActionEvent e) {
Object obj = e.getSource();
}
che istanzia la classe midi:
codice:
package JmidiSync;
import java.util.List;
import javax.sound.midi.*;
public class MidiHandler {
public MidiDevice[] devArray;
public Transmitter[] transArray;
public static MidiDevice device;
public static MidiDevice.Info[] infos;
public MidiHandler() {
infos = MidiSystem.getMidiDeviceInfo();
devArray = new MidiDevice[infos.length];
for (int i = 0; i < infos.length; i++) {
try {
device = MidiSystem.getMidiDevice(infos[i]);
//does the device have any transmitters?
//if it does, add it to the device list
System.out.println(infos[i]);
devArray[i] = device;
//get all transmitters
List<Transmitter> transmitters = device.getTransmitters();
//and for each transmitter
for (int j = 0; j < transmitters.size(); j++) {
//create a new receiver
transmitters.get(j).setReceiver(
//using my own MidiInputReceiver
new MidiInputReceiver(device.getDeviceInfo().toString()));
}
Transmitter trans = device.getTransmitter();
trans.setReceiver(new MidiInputReceiver(device.getDeviceInfo().toString()));
//open each device
//device.open();
//if code gets this far without throwing an exception
//print a success message
//System.out.println(device.getDeviceInfo() + " Was Opened");
} catch (MidiUnavailableException e) {
}
}
}
public MidiDevice[] getDevices() {
return devArray;
}
public int getDevicesNumber() {
return devArray.length;
}
public Transmitter[] getTransmitters() {
return transArray;
}
public int getTransmittersNumber() {
return transArray.length;
}
}
LA domanda è: come creo e dove metto nella classe midi il costrutto per popolare la array di Transmitter transArray?
Fino al MidiDevice[] ci sono arrivato: in cima al for loop devArray[i] = device;
Come devo fare per transArray?
Calcolato che poi istanziato in main class devo trasformare la array transArray in una array di stringhe per popolare i combo box.