Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Java e MIDI sincronizzatore di clock per periferiche usb

    Salve a tutti,
    qualcuno sa se esite un programmino Java per sincronizzare tastiere (KORG M50 e KORG RADIAS) a un tempo bpm preciso?
    Mi serve in Java perchè uo il mac e non ho trovato nulla in rete che faccia al caso mio.
    Per intenderci Logic pro 9 ha una funzione Sync ma di due sole periferiche. Ma qui vado fuori topic.
    Il punto è:
    proramma MIDI che

    1) trova le periferiche connesse
    2) permette con dei combo box di connettere i transmitters in modalità master selezionando la periferica listata
    3) permette di selezionare ovviamente un tempo master con uno slider e un textfield

    Io ho provato con le risorse della rete a fare un programmino da me ma mi mancano dei pezzi che connettano tra di loro le classi e i loro metodi, ad esempio una volta listate le periferiche le trasfomro in stringhe per listarle nei combobox ma poi l'inverso (quando clicco sul combobox la device che voglio mettere in slave) non ritorno alla MidiDevice ma mi ritorna solo la striniga.
    Qualcuno mi puo consigliare una via da seguire?
    Tipo come usare la Main class, che classi creare e come metterle insieme?

  2. #2
    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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.