<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ca">
	<id>http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=MidiShare%3A_Tutorials_inicials_II</id>
	<title>MidiShare: Tutorials inicials II - Historial de revisió</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=MidiShare%3A_Tutorials_inicials_II"/>
	<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=MidiShare:_Tutorials_inicials_II&amp;action=history"/>
	<updated>2026-08-30T10:28:33Z</updated>
	<subtitle>Historial de revisió per a aquesta pàgina del wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>http://wiki.joanillo.org/index.php?title=MidiShare:_Tutorials_inicials_II&amp;diff=2919&amp;oldid=prev</id>
		<title>Joan: /* Compilació i execució des de la consola */</title>
		<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=MidiShare:_Tutorials_inicials_II&amp;diff=2919&amp;oldid=prev"/>
		<updated>2009-05-11T22:19:00Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Compilació i execució des de la consola&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Pàgina nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=SimpleMidiShareTest.java=&lt;br /&gt;
important llegir [[Connectant_aplicacions_MidiShare:_síntesi]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import grame.midishare.*;&lt;br /&gt;
&lt;br /&gt;
/** Simple test for MidiShare/Java.  Sends Midi (does not receive Midi)&lt;br /&gt;
&lt;br /&gt;
	Uses MidiShare's Java API (no JMSL at all).  &lt;br /&gt;
	Get this working before troubeshooting JMSL + MidiShare&lt;br /&gt;
&lt;br /&gt;
	Open Midi, Send 12 chromatic noteons and noteoffs, close midi.&lt;br /&gt;
&lt;br /&gt;
@author Nick Didkovsky, didkovn@mail.rockefeller.edu 7/12/01&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
public class SimpleMidiShareTest {&lt;br /&gt;
&lt;br /&gt;
	public static void main(String args[]) {&lt;br /&gt;
		// set these how you want them&lt;br /&gt;
		int outport = 0;&lt;br /&gt;
		int channel = 2;&lt;br /&gt;
		int pitch = 60;&lt;br /&gt;
		int vel = 120;&lt;br /&gt;
&lt;br /&gt;
		int installed = 0;&lt;br /&gt;
		try {&lt;br /&gt;
			installed = Midi.Share();&lt;br /&gt;
		} catch (UnsatisfiedLinkError e) {&lt;br /&gt;
			e.printStackTrace();&lt;br /&gt;
			System.out.println(&lt;br /&gt;
				&amp;quot;\nMidiShare Java API probably not installed properly, grame.midishare.Midi.Share() barfed.\n&amp;quot; + e);&lt;br /&gt;
			System.exit(0);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		System.out.println(&amp;quot;installed = &amp;quot; + installed);&lt;br /&gt;
		int version = Midi.GetVersion();&lt;br /&gt;
		System.out.println(&amp;quot;version = &amp;quot; + version);&lt;br /&gt;
		int numberOfAppl = Midi.CountAppls();&lt;br /&gt;
		System.out.println(&amp;quot;numberOfAppl = &amp;quot; + numberOfAppl);&lt;br /&gt;
		int ourRefNum = Midi.Open(&amp;quot;SimpleMidiShareTest&amp;quot;);&lt;br /&gt;
		numberOfAppl = Midi.CountAppls();&lt;br /&gt;
		System.out.println(&amp;quot;our ref #= &amp;quot; + ourRefNum + &amp;quot;, numberOfAppl = &amp;quot; + numberOfAppl);&lt;br /&gt;
&lt;br /&gt;
		StringBuffer text = new StringBuffer();&lt;br /&gt;
		short i;&lt;br /&gt;
		int ref, n = Midi.CountAppls();&lt;br /&gt;
		text.append(&amp;quot;List of MidiShare client applications\n&amp;quot;);&lt;br /&gt;
		text.append(&amp;quot;-------------------------------------\n&amp;quot;);&lt;br /&gt;
		for (i = 1; i &amp;lt;= n; i++) {&lt;br /&gt;
			ref = Midi.GetIndAppl(i); // get the refnum form the order number&lt;br /&gt;
			text.append(String.valueOf(i));&lt;br /&gt;
			text.append(&amp;quot; : reference number &amp;quot;);&lt;br /&gt;
			text.append(String.valueOf(ref));&lt;br /&gt;
			text.append(&amp;quot; name : &amp;quot;);&lt;br /&gt;
			text.append(Midi.GetName(ref));&lt;br /&gt;
			text.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		text.append(&amp;quot;-------------------------------------&amp;quot;);&lt;br /&gt;
		System.out.println(text.toString());&lt;br /&gt;
&lt;br /&gt;
		Midi.Connect(ourRefNum, 0, 1);&lt;br /&gt;
		int connected = Midi.IsConnected(ourRefNum, 0);&lt;br /&gt;
		System.out.println(&amp;quot;Connected? &amp;quot; + connected);&lt;br /&gt;
&lt;br /&gt;
		//connecto l'aplicació al fluidsynth, per poder escoltar&lt;br /&gt;
		int ref_fluidsynth;&lt;br /&gt;
		if ((ref_fluidsynth = Midi.GetNamedAppl(&amp;quot;fluidsynth&amp;quot;)) &amp;gt; 0) Midi.Connect (ourRefNum,ref_fluidsynth, 1);&lt;br /&gt;
		   &lt;br /&gt;
		for (int interval = 0; interval &amp;lt; 12; interval++) {&lt;br /&gt;
			int event = Midi.NewEv(Midi.typeKeyOn); // ask for a new note event&lt;br /&gt;
			if (event != 0) { // if the allocation was succesfull&lt;br /&gt;
				Midi.SetChan(event, channel); // set the Midi channel&lt;br /&gt;
				Midi.SetPort(event, outport); // set the destination port&lt;br /&gt;
				Midi.SetField(event, 0, pitch + interval); // set the pitch field&lt;br /&gt;
				Midi.SetField(event, 1, vel); // set the velocity field&lt;br /&gt;
				Midi.SendIm(ourRefNum, event);&lt;br /&gt;
			}&lt;br /&gt;
			System.out.println(&amp;quot;Sent Midi note on &amp;quot; + (pitch + interval));&lt;br /&gt;
			try {&lt;br /&gt;
				Thread.sleep(200);&lt;br /&gt;
			} catch (InterruptedException e) {&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			event = Midi.NewEv(Midi.typeKeyOff);&lt;br /&gt;
&lt;br /&gt;
			if (event != 0) {&lt;br /&gt;
				Midi.SetChan(event, channel);&lt;br /&gt;
				Midi.SetPort(event, outport);&lt;br /&gt;
				Midi.SetField(event, 0, pitch + interval);&lt;br /&gt;
				Midi.SetField(event, 1, vel);&lt;br /&gt;
				Midi.SendIm(ourRefNum, event);&lt;br /&gt;
			}&lt;br /&gt;
			System.out.println(&amp;quot;Sent Midi note off &amp;quot; + (pitch + interval));&lt;br /&gt;
			try {&lt;br /&gt;
				Thread.sleep(200);&lt;br /&gt;
			} catch (InterruptedException e) {&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		Midi.Close(ourRefNum);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De l'aplicació original, per tal de poder escoltar, faig només el petit canvi de connectar l'aplicació al fluidsynth.&lt;br /&gt;
La sortida de l'aplicació&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
installed = 1&lt;br /&gt;
version = 192&lt;br /&gt;
numberOfAppl = 5&lt;br /&gt;
our ref #= 5, numberOfAppl = 6&lt;br /&gt;
List of MidiShare client applications&lt;br /&gt;
-------------------------------------&lt;br /&gt;
1 : reference number 0 name : MidiShare&lt;br /&gt;
2 : reference number 1 name : msdisplay&lt;br /&gt;
3 : reference number 2 name : msconnect&lt;br /&gt;
4 : reference number 3 name : fluidsynth&lt;br /&gt;
5 : reference number 4 name : mscontrol&lt;br /&gt;
6 : reference number 5 name : SimpleMidiShareTest&lt;br /&gt;
-------------------------------------&lt;br /&gt;
Connected? 1&lt;br /&gt;
Sent Midi note on 60&lt;br /&gt;
Sent Midi note off 60&lt;br /&gt;
Sent Midi note on 61&lt;br /&gt;
Sent Midi note off 61&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=MidiShareIOTest.java=&lt;br /&gt;
&lt;br /&gt;
important llegir [[Connectant_aplicacions_MidiShare:_síntesi]]&lt;br /&gt;
&lt;br /&gt;
Toca unes quantes notes (envia events MIDI), i escolta també els events MIDI que rep d'alguna aplicació origen que estigui connectada. Com es veu en el codi, necessito les aplicacions fluidsynth (per escoltar) i mscontrol (per produir sons). Connecto l'aplicació al fluidsynth (ja puc escoltar), i per rebre missatges he de connectar el mscontrol a la meva a aplicació. &lt;br /&gt;
&lt;br /&gt;
No cal connectar mscontrol al fluidsynth, doncs per la propietat transitiva: mscontrol està connectat a l'aplicació, i l'aplicació està connectat al fluidsynth. Ara bé, en aquest cas, s'executa el codi del procediment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public void ReceiveAlarm(int ev) {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
que em permet tractar el event que rebo, i si vull escoltar la nota, l'he de reenviar per tal que el fluidsynth el faci sonar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Midi.SendIm(this.refnum, ev);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
en comptes de&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Midi.FreeEv(ev);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Així, doncs, el codi queda:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import java.awt.*;&lt;br /&gt;
import java.awt.event.*;&lt;br /&gt;
&lt;br /&gt;
import grame.midishare.*;&lt;br /&gt;
&lt;br /&gt;
/** Test for MidiShare's Java API.  Sends Midi and receives Midi, printing message types of incoming MIDI.&lt;br /&gt;
*&lt;br /&gt;
* Uses MidiShare's Java API (no JMSL at all). &lt;br /&gt;
* Get this working before troubeshooting JMSL + MidiShare&lt;br /&gt;
*&lt;br /&gt;
* IMPORTANT: Change inport and output values in main() for your system !!!!!!!!!!&lt;br /&gt;
*&lt;br /&gt;
* @author Nick Didkovsky, didkovn@mail.rockefeller.edu 4/15/04&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
public class MidiShareIOTest extends MidiAppl {&lt;br /&gt;
&lt;br /&gt;
    int inport;&lt;br /&gt;
    int outport;&lt;br /&gt;
&lt;br /&gt;
    public MidiShareIOTest(int inport, int outport) {&lt;br /&gt;
        this.inport = inport;&lt;br /&gt;
        this.outport = outport;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void Open(String name) throws MidiException {&lt;br /&gt;
        super.Open(name);&lt;br /&gt;
        configureFilter();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* kill active sensing */&lt;br /&gt;
    void configureFilter() {&lt;br /&gt;
        int i;&lt;br /&gt;
        for (i = 0; i &amp;lt; 256; i++) {&lt;br /&gt;
            //Midi.AcceptPort(filter, i, 1);&lt;br /&gt;
            Midi.AcceptPort(filter, i, 0);&lt;br /&gt;
            Midi.AcceptType(filter, i, 1);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        for (i = 0; i &amp;lt; 16; i++) {&lt;br /&gt;
            Midi.AcceptChan(filter, i, 1);&lt;br /&gt;
        }&lt;br /&gt;
        Midi.AcceptPort(filter, inport, 1);&lt;br /&gt;
        Midi.AcceptType(filter, Midi.typeActiveSens, 0);&lt;br /&gt;
        //    Midi.AcceptType(filter, Midi.typeSysEx, 0);&lt;br /&gt;
        //    System.out.println(&amp;quot;MidiShare configureFilter() filter#&amp;quot; + filter);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /** Simply notify that an input event occurred, print what kind */&lt;br /&gt;
    public void ReceiveAlarm(int ev) {&lt;br /&gt;
        switch (Midi.GetType(ev)) {&lt;br /&gt;
            case Midi.typeNote :&lt;br /&gt;
                System.out.println(&amp;quot;MidiShareIOTest, received typeNote&amp;quot;);&lt;br /&gt;
                break;&lt;br /&gt;
            case Midi.typeKeyOn :&lt;br /&gt;
                System.out.println(&amp;quot;MidiShareIOTest, received typeKeyOn&amp;quot;);&lt;br /&gt;
                break;&lt;br /&gt;
            case Midi.typeKeyOff :&lt;br /&gt;
                System.out.println(&amp;quot;MidiShareIOTest, received typeKeyOff&amp;quot;);&lt;br /&gt;
                break;&lt;br /&gt;
            case Midi.typeKeyPress :&lt;br /&gt;
                System.out.println(&amp;quot;MidiShareIOTest, received typeKeyPress&amp;quot;);&lt;br /&gt;
                break;&lt;br /&gt;
            case Midi.typeCtrlChange :&lt;br /&gt;
                System.out.println(&amp;quot;MidiShareIOTest, typeCtrlChange&amp;quot;);&lt;br /&gt;
                break;&lt;br /&gt;
            case Midi.typeProgChange :&lt;br /&gt;
                System.out.println(&amp;quot;MidiShareIOTest, received typeProgChange&amp;quot;);&lt;br /&gt;
                break;&lt;br /&gt;
            case Midi.typeChanPress :&lt;br /&gt;
                System.out.println(&amp;quot;MidiShareIOTest, received typeChanPress&amp;quot;);&lt;br /&gt;
                break;&lt;br /&gt;
            case Midi.typePitchWheel :&lt;br /&gt;
                System.out.println(&amp;quot;MidiShareIOTest, received typePitchWheel&amp;quot;);&lt;br /&gt;
                break;&lt;br /&gt;
            case Midi.typeSysEx :&lt;br /&gt;
                System.out.println(&amp;quot;MidiShareIOTest, received typeSysEx&amp;quot;);&lt;br /&gt;
                break;&lt;br /&gt;
            default :&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        //Midi.FreeEv(ev);&lt;br /&gt;
        Midi.SendIm(this.refnum, ev);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    void playNotes() {&lt;br /&gt;
        int channel = 1;&lt;br /&gt;
        int pitch = 60;&lt;br /&gt;
        int vel = 80;&lt;br /&gt;
        for (int interval = 0; interval &amp;lt; 4; interval++) {&lt;br /&gt;
            int event = Midi.NewEv(Midi.typeKeyOn); // ask for a new note event&lt;br /&gt;
            if (event != 0) { // if the allocation was succesfull&lt;br /&gt;
                Midi.SetChan(event, channel); // set the Midi channel&lt;br /&gt;
                Midi.SetPort(event, outport); // set the destination port&lt;br /&gt;
                Midi.SetField(event, 0, pitch + interval); // set the pitch field&lt;br /&gt;
                Midi.SetField(event, 1, vel); // set the velocity field&lt;br /&gt;
                Midi.SendIm(refnum, event);&lt;br /&gt;
            }&lt;br /&gt;
            System.out.println(&amp;quot;Sent Midi note on &amp;quot; + (pitch + interval));&lt;br /&gt;
            try {&lt;br /&gt;
                Thread.sleep(200);&lt;br /&gt;
            }&lt;br /&gt;
            catch (InterruptedException e) {&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            event = Midi.NewEv(Midi.typeKeyOff);&lt;br /&gt;
&lt;br /&gt;
            if (event != 0) {&lt;br /&gt;
                Midi.SetChan(event, channel);&lt;br /&gt;
                Midi.SetPort(event, outport);&lt;br /&gt;
                Midi.SetField(event, 0, pitch + interval);&lt;br /&gt;
                Midi.SetField(event, 1, vel);&lt;br /&gt;
                Midi.SendIm(refnum, event);&lt;br /&gt;
            }&lt;br /&gt;
            System.out.println(&amp;quot;Sent Midi note off &amp;quot; + (pitch + interval));&lt;br /&gt;
            try {&lt;br /&gt;
                Thread.sleep(200);&lt;br /&gt;
            }&lt;br /&gt;
            catch (InterruptedException e) {&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public static void main(String args[]) {&lt;br /&gt;
        // set these how you want them&lt;br /&gt;
        int inport = 0;&lt;br /&gt;
        int outport = 1;&lt;br /&gt;
&lt;br /&gt;
        int installed = 0;&lt;br /&gt;
        try {&lt;br /&gt;
            installed = Midi.Share();&lt;br /&gt;
        }&lt;br /&gt;
        catch (UnsatisfiedLinkError e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
            System.out.println(&lt;br /&gt;
                &amp;quot;\nMidiShare Java API probably not installed properly, grame.midishare.Midi.Share() barfed.\n&amp;quot; + e);&lt;br /&gt;
            System.exit(0);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        System.out.println(&amp;quot;installed = &amp;quot; + installed);&lt;br /&gt;
        int version = Midi.GetVersion();&lt;br /&gt;
        System.out.println(&amp;quot;version = &amp;quot; + version);&lt;br /&gt;
        int numberOfAppl = Midi.CountAppls();&lt;br /&gt;
        System.out.println(&amp;quot;numberOfAppl = &amp;quot; + numberOfAppl);&lt;br /&gt;
&lt;br /&gt;
        final MidiShareIOTest midiHandler = new MidiShareIOTest(inport, outport);&lt;br /&gt;
&lt;br /&gt;
        Frame f = new Frame(&amp;quot;Watch console for incoming midi messages. Close this frame to quit&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        f.addWindowListener(new WindowAdapter() {&lt;br /&gt;
            public void windowClosing(WindowEvent e) {&lt;br /&gt;
                System.out.println(&amp;quot;Closing Midi, byebye&amp;quot;);&lt;br /&gt;
                midiHandler.Close();&lt;br /&gt;
                System.exit(0);&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
        Button playButton = new Button(&amp;quot;play notes&amp;quot;);&lt;br /&gt;
        f.add(playButton);&lt;br /&gt;
        playButton.addActionListener(new ActionListener() {&lt;br /&gt;
            public void actionPerformed(ActionEvent arg0) {&lt;br /&gt;
                midiHandler.playNotes();&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
        f.setSize(600, 100);&lt;br /&gt;
        f.setVisible(true);&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            midiHandler.Open(&amp;quot;MidiShareIOTest&amp;quot;);&lt;br /&gt;
            Midi.Connect(midiHandler.refnum, 0, 1);&lt;br /&gt;
            Midi.Connect(0, midiHandler.refnum, 1);&lt;br /&gt;
            // Check output connection&lt;br /&gt;
            int connected = Midi.IsConnected(midiHandler.refnum, 0);&lt;br /&gt;
            System.out.println(&amp;quot;Connected for input? &amp;quot; + connected);&lt;br /&gt;
&lt;br /&gt;
            // Check input connection&lt;br /&gt;
            connected = Midi.IsConnected(0, midiHandler.refnum);&lt;br /&gt;
            System.out.println(&amp;quot;Connected for output? &amp;quot; + connected);&lt;br /&gt;
&lt;br /&gt;
            //em connecto a fluidsynth&lt;br /&gt;
            int ref_fluidsynth;&lt;br /&gt;
            if ((ref_fluidsynth = Midi.GetNamedAppl(&amp;quot;fluidsynth&amp;quot;)) &amp;gt; 0) Midi.Connect (midiHandler.refnum,ref_fluidsynth, 1);&lt;br /&gt;
            //em connecto al mscontrol&lt;br /&gt;
            int ref_mscontrol;&lt;br /&gt;
            if ((ref_mscontrol = Midi.GetNamedAppl(&amp;quot;mscontrol&amp;quot;)) &amp;gt; 0) Midi.Connect (ref_mscontrol,midiHandler.refnum, 1);&lt;br /&gt;
            &lt;br /&gt;
            StringBuffer text = new StringBuffer();&lt;br /&gt;
            short i;&lt;br /&gt;
            int ref, n = Midi.CountAppls();&lt;br /&gt;
            text.append(&amp;quot;List of MidiShare client applications\n&amp;quot;);&lt;br /&gt;
            text.append(&amp;quot;-------------------------------------\n&amp;quot;);&lt;br /&gt;
            for (i = 1; i &amp;lt;= n; i++) {&lt;br /&gt;
                ref = Midi.GetIndAppl(i); // get the refnum from the order number&lt;br /&gt;
                text.append(String.valueOf(i));&lt;br /&gt;
                text.append(&amp;quot; : reference number &amp;quot;);&lt;br /&gt;
                text.append(String.valueOf(ref));&lt;br /&gt;
                text.append(&amp;quot; name : &amp;quot;);&lt;br /&gt;
                text.append(Midi.GetName(ref));&lt;br /&gt;
                text.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            text.append(&amp;quot;-------------------------------------&amp;quot;);&lt;br /&gt;
            System.out.println(text.toString());&lt;br /&gt;
        }&lt;br /&gt;
        catch (MidiException e1) {&lt;br /&gt;
            System.out.println(&amp;quot;Error opening MidiShareIOTest: &amp;quot; + e1);&lt;br /&gt;
            e1.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La sortida del programa és:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
installed = 1&lt;br /&gt;
version = 192&lt;br /&gt;
numberOfAppl = 4&lt;br /&gt;
Connected for input? 1&lt;br /&gt;
Connected for output? 1&lt;br /&gt;
List of MidiShare client applications&lt;br /&gt;
-------------------------------------&lt;br /&gt;
1 : reference number 0 name : MidiShare&lt;br /&gt;
2 : reference number 1 name : msdisplay&lt;br /&gt;
3 : reference number 2 name : mscontrol&lt;br /&gt;
4 : reference number 3 name : fluidsynth&lt;br /&gt;
5 : reference number 4 name : MidiShareIOTest&lt;br /&gt;
-------------------------------------&lt;br /&gt;
Sent Midi note on 60&lt;br /&gt;
Sent Midi note off 60&lt;br /&gt;
Sent Midi note on 61&lt;br /&gt;
Sent Midi note off 61&lt;br /&gt;
Sent Midi note on 62&lt;br /&gt;
Sent Midi note off 62&lt;br /&gt;
Sent Midi note on 63&lt;br /&gt;
Sent Midi note off 63&lt;br /&gt;
Sent Midi note on 64&lt;br /&gt;
Sent Midi note off 64&lt;br /&gt;
Sent Midi note on 65&lt;br /&gt;
Sent Midi note off 65&lt;br /&gt;
Sent Midi note on 66&lt;br /&gt;
Sent Midi note off 66&lt;br /&gt;
Sent Midi note on 67&lt;br /&gt;
Sent Midi note off 67&lt;br /&gt;
MidiShareIOTest, received typeNote&lt;br /&gt;
MidiShareIOTest, received typeNote&lt;br /&gt;
MidiShareIOTest, received typeNote&lt;br /&gt;
MidiShareIOTest, received typeNote&lt;br /&gt;
Closing Midi, byebye&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Compilació i execució des de la consola==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/joan/workspace/MidiShareIOTest/src&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
la classe MidiAppl ja està compilada en el sistema:&lt;br /&gt;
/usr/src/midishare/lang/java/native/grame/midishare/MidiAppl.class&lt;br /&gt;
&lt;br /&gt;
Si no està compilada, l'hauré de compilar manualment:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd /usr/src/midishare/lang/java/native/grame/midishare&lt;br /&gt;
$ sudo javac -classpath /usr/src/midishare/lang/java/native -d /usr/src/midishare/lang/java/native/grame/midishare MidiAppl.java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
D'aquesta manera compilem MidiAppl.java i obtenim les classes en el mateix directori: MidiAppl.class, DriverInfos.class, MidiApplImpl.class, Midi.class, MidiPollingThread.class, ReadEvInfo.class, SmpteLoc.class, WriteEvInfo.class, MidiApplPolling.class, MidiException.class, MidiTask.class, SlotInfos.class, SyncInfo.class&lt;br /&gt;
&lt;br /&gt;
Com a norma, el destí per a les class serà /bin. De manera que de la carpeta del projecte penjarand dos carpetes: /src i /bin. En la línia de comandes això s'especifica amb l'opció -d.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo javac -classpath /usr/src/midishare/lang/java/native -d /home/joan/workspace/MidiShareIOTest/bin MidiShareIOTest.java&lt;br /&gt;
$ java -classpath /usr/src/midishare/lang/java/native:/home/joan/workspace/MidiShareIOTest/bin MidiShareIOTest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el classpath he de ficar la ruta on es troben les classes. Això en el Eclipse no cal fer-ho perquè quan es crea un projecte et pregunta quin serà el destí de les classes, i aleshores quan compila les fica allà i quan executa les espera trobar allà.&lt;/div&gt;</summary>
		<author><name>Joan</name></author>
		
	</entry>
</feed>