• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: CoreMIDI via Java and MIDISport -- funny you should ask
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: CoreMIDI via Java and MIDISport -- funny you should ask


  • Subject: Re: CoreMIDI via Java and MIDISport -- funny you should ask
  • From: Bill Stewart <email@hidden>
  • Date: Sun, 26 May 2002 15:02:27 -0700

These are some known problems with the Java VM on 10.1

There is an update available for Java (that also includes an updated CAJava)
to work around these problems - you should definitely be running with that
Java update

Bill

on 26/5/02 11:56 AM, Kenneth Welch wrote:

>> Has anyone been able to get CoreMIDI via Java to work with a MIDISport
>> USB interface? As soon as I try to log in (calling
>> MIDISetup.RestartMIDISystem or new MIDIClient) the application hangs.
>
> I just subscribed to this list a couple days ago, intending to ask about
> the same problem. But I was able to get it working on my own. I have a
> Quicksilver G4 running 10.1.4, with a USB MIDISport 2x2 I bought a
> couple months ago attached. I've noticed two separate things -- the app
> hangs as soon as you first make a RestartMIDISystem call or a call that
> has to fetch a device/entity/destination/endpoint, and secondly, that
> under certain circumstances MIDI Monitor will detect outgoing packets
> even when they don't seem to do anything on any synth hardware attached
> to the MIDISport. These appear to be separate issues, so I will tell you
> what I know about them separately.
>
> As for the application hang: when the app is run from inside
> ProjectBuilder, you can kickstart it by clicking on the app's menubar,
> after which it works normally. If you don't do the kickstarting within
> about 5 seconds, a runtime exception will get thrown out of nowhere,
> something to do with a Buckyball Timer object, which is something I had
> never heard of before, though I assume it's related to Apple's
> Carbon-API-related naming cuteness (buckyballs being very large hollow
> molecules made out of carbon).
>
> Alternatively, if you run your app by launching it from the Finder or
> the Dock (having Bulit it first in ProjectBuilder), simply moving the
> mouse after it hangs is sufficient to kickstart it (at least on my
> system).
>
> In order to only have the hang issue occur once per use, I made all of
> the MIDI objects my app uses be static fields in my MIDI-related class,
> and the app's main constructor that runs on launch calls a static
> initialization method that assigns them all at the beginning. My app
> itself never needs to change the MIDI objects -- all it ever does is
> send packets from the client object to the various destination objects
> and that doesn't cause hangs -- so I guess I sort've lucked out there.
>>
>> I am able run MIDIMonitor (from snoize) and am able to write a Carbon
>> test application to work, but I can't get the MIDISport to work when
>> called from my Java code.
>
> This is the second problem I was having. I couldn't get mine to work
> either. MIDI Monitor, in spy mode, was detecting the packets my app was
> sending to the MIDISport -- but the packets weren't actually doing
> anything w.r.t. activating the activity LEDs or affecting the attached
> synth hardware in any way.
>
> I was able to get it working, so let me show you what I found worked and
> didn't work; maybe it'll be relevant to your code.
>
> First, the static method MIDIData.newMIDINoteMessage() does not work. I
> could not get MIDI Monitor to detect any NoteOn/Off outgoing packets
> when I had my app trying to create them with this call. Use
> newMIDIRawData() instead.
>
> Second, if you try to put more than one event/message into a MIDIData
> structure before adding it to your MIDIPacketList, none of the packets
> you send will work on the MIDISport, even though MIDI Monitor detects
> and parses them correctly in spy mode. I suspect this is because you
> supply a timestamp when adding a MIDIData object to your MIDIPacketList,
> and having one timestamp for more than one event is probably what's
> tripping it up.
>
> Here's some code that works for me:
>
> private static MIDIClient client;
> private static MIDIOutputPort output;
> private static MIDIDevice sport;
> private static MIDIEntity ports;
> private static MIDIEndpoint synth;
>
> public static void initMIDI() { // I call this on app launch so the
> hang thing only happens once
> try {
> client = new MIDIClient(new CAFString("App"), null);
> output = client.outputPortCreate(new CAFString("App
> Output"));
> sport = MIDIDevice.getDevice(0);
> ports = sport.getEntity(0);
> synth = ports.getDestination(0); // an endpoint for the
> MIDISport 2x2's Port A output
> }
> catch (Exception egg) {
> System.exit(1);
> }
> }
>
> public static void playNote() {
> try {
> MIDIData event;
> MIDIPacketList list = new MIDIPacketList();
>
> event = MIDIData.newMIDIRawData(3); // three being the
> number of bytes the event will hold
> event.addRawData(144, 60, 127); // NoteOn message for
> channel 0, middle C, max volume
> list.add(0, event); // zero is the timestamp, meaning
> "immediately"
> event = MIDIData.newMIDIRawData(3);
> event.addRawData(128, 60, 0); // NoteOff message for channel
> 0, middle C
> list.add(33000000, event); // I think this timestamp
> translates into about 0.9 seconds; I could be wrong
> output.send(synth, list);
> }
> catch (Exception egg) {
> System.exit(2);
> }
> }
>>
>> Is it time to get a different MIDI Interface? Since it only seems to
>> have problems when accessed via Java, I am assuming it is a problem on
>> Apple's end, but I'm not convinced, since I believe others have said
>> that all this works with the Roland USB interface.
>
> Hope that helps. I haven't tried it on anything other than
> ProjectBuilder in "pure java" mode, so if other approaches don't have
> the hang issue then I'd certainly like to see it fixed in java. Oh, and
> here's the full runtime exception it throws when you just let it sit
> there hanging for about 5 seconds from within ProjectBuilder (LlamaWare
> is my app's name):
>
> A Buckyball Timer threw an exception:
> java.lang.IllegalMonitorStateException: current thread not owner
> at com.apple.mrj.macos.carbon.CarbonLock.release0(Native Method)
> at com.apple.mrj.macos.carbon.CarbonLock.release(CarbonLock.java:43)
> at com.apple.buckyball.app.Timer.EventLoopTimer(Timer.java:213)
> at com.apple.audio.midi.MIDIClient.MIDIClientCreate(Native Method)
> at com.apple.audio.midi.MIDIClient.alloc(MIDIClient.java:59)
> at com.apple.audio.midi.MIDIClient.<init>(MIDIClient.java:43)
> at MyMIDI.initMIDI(MyMIDI.java:22)
> at LlamaWare.<init>(LlamaWare.java:271)
> at LlamaWare.main(LlamaWare.java:253)
> at java.lang.reflect.Method.invoke(Native Method)
> at com.apple.buckyball.app.LaunchRunner.run(LaunchRunner.java:82)
> at com.apple.buckyball.app.LaunchRunner.callMain(LaunchRunner.java:44)
> at com.apple.buckyball.app.CarbonLibApp.launch(CarbonLibApp.java:67)
>
>
> ~ Kenny
> _______________________________________________
> coreaudio-api mailing list | email@hidden
> Help/Unsubscribe/Archives:
> http://www.lists.apple.com/mailman/listinfo/coreaudio-api
> Do not post admin requests to the list. They will be ignored.


mailto:email@hidden
tel: +1 408 974 4056
__________________________________________________________________________
"Thousands of years ago, cats were worshipped as gods. We have never
forgotten this."
__________________________________________________________________________
_______________________________________________
coreaudio-api mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/coreaudio-api
Do not post admin requests to the list. They will be ignored.

  • Follow-Ups:
    • Re: Java 1.3.1 Update
      • From: Kenneth Welch <email@hidden>
References: 
 >Re: CoreMIDI via Java and MIDISport -- funny you should ask (From: Kenneth Welch <email@hidden>)

  • Prev by Date: Re: CoreMIDI via Java and MIDISport -- funny you should ask
  • Next by Date: Re: Java 1.3.1 Update
  • Previous by thread: Re: CoreMIDI via Java and MIDISport -- funny you should ask
  • Next by thread: Re: Java 1.3.1 Update
  • Index(es):
    • Date
    • Thread