comp.lang.ada
 help / color / mirror / Atom feed
From: John McCabe <john@nospam.assen.demon.co.uk.nospam>
Subject: Re: Thinking of using Ada for a job at home. Couple of questions first.
Date: Wed, 03 Mar 2010 20:17:12 +0000
Date: 2010-03-03T20:17:12+00:00	[thread overview]
Message-ID: <6ggto5p3g2p58839gdsut6idb2l621nv2c@4ax.com> (raw)
In-Reply-To: op.u8z9n0mavwnd5a@garhos

Hibou57 (Yannick Duch�ne) <yannick_duchene@yahoo.fr> wrote:

>Le Wed, 03 Mar 2010 17:19:31 +0100, John McCabe  
><john@nospam.assen.demon.co.uk> a �crit:
>Hello,
>> So the first question is do any of you know of any bindings to MS
>> Windows MIDI (presumably the multimedia system) functions that already
>> exist and are open source or something like that? I searched on Google
>> for "ada midi" but it looks like there's a product called that so it
>> came up with loads of stuff. I'm aware there are some binding to Win32
>> from Ada but, as I've not been doing Ada in anger for a long time, I'm
>> not sure if there's something for Ada 2005.
>If there are possible funding, I would enjoy to re-organize my time to  
>honor this target under whatever license you may request.

Unfortunately there's not funding available. I've found a library
called libjdkmidi that, if it would look easier to bind to than direct
to Win32's mmsystem functions, might be worth doing. I suspect though
that it encapsulates some of the functionality you mention later in
relation to tasking etc, although I haven't looked that closely yet.

>If you ever you are interested in another stuff in the same area, I've  
>also started some times ago, but not terminated, an Ada binding to the VST  
>architecture. I've temporarily dropped the project for an undetermined  
>amount of time, because I need a project which could give me some earn. I  
>can't give a date, however, I'm pretty sure I will come back to it in the  
>future (at least, I hope I could)

Thanks, I'll bear that in mind.

>> The second question is related to the implementation of the System
>> Exclusive messages. Basically this is part of the reason I thought Ada
>> would be good for this task. The SysEx messages basically consist of a
>> smallish header and a variety of different structures that are
>> differentiated by the "Function" type in the header. Now I seem to
>> remember from when I did use Ada that it's possible to define the
>> record representation of a variant record such that the discriminant
>> is held within the body of the record. This would mean (I think) that
>> I could read a block of data from the synthesizer straight in to a
>> buffer that overlaid the variant record and essentially automatically
>> created a record that could be read as the particular variant related
>> to the incoming data. However I also seem to remember that's not quite
>> a 'recommended' way of doing that sort of thing.
>Excuse me, I'm not sure I've understood your words. Could you give a  
>concrete example of a process ?

Well basically you define a variant record that contains variants that
apply to all the SysEx messages then (dodgily) locate a buffer (e.g.
of bytes, integers, whatever) in the same place and write the incoming
data in to the buffer. When you come to read it later as a record
object rather than just as bytes it's essentially a valid variant
record (at least, I believe from what I remember that it is!). I think
Jeff's Unchecked_Conversion is a more appropriate way to do it though.

>Just to tell about what immediately comes into my mind : I'm not sure  
>variant record would be Ok for whole MIDI data sequences, as it comes into  
>sequence and not as a single block. The content of some MIDI messages are  
>splitted into multiple units which comes as a sequence. A variant record,  
>to be coherent, must be a whole, you cannot have something related to a  
>discriminant which remains dangling until some more data later arrives.

The application I'm trying to do is a patch editor so it will
essentially deal only with expected messages that are sent from the
synth in response to requests. I don't think the synth intersperses
any other midi data within those messages. It's a Kawai K1 by the way.

>All this comment provided I've understood a bit of what you were to mean  
>(I apologize if I'm wrong).

No need to apologise; if it's not clear to you then I'm sure there are
others in the same position.

>> The other thing that
>> guided me in Ada's direction is that the structure of the SysEx
>> messages requires a lot of bit-fields and I'm well aware that Ada's
>> representation clauses are fantastic for that sort of thing.

>Another reason to use Ada : Ada is also a good choice in this area, due to  
>its tasking capabilities. This kind of application typically heavily  
>relies on multiple tasks (and even more heavily if you have to deal with  
>multiple synthesizers, what is a common case)

I don't need to deal with multiple synthesizers but yes, the tasking
was another reason Ada sounded appropriate as the synth sends all
sorts of junk while it's idling that I need to be able to receive and
just dump, and I need a GUI as well.

>> So, in principle, would that be the way to do this, or would you be
>> able to suggest a better mechanism?
>>
>> Finally, is there a straightforward way to do that sort of thing using
>> tagged records? E.g. could I define a record which is the header
>> format, then extend that in a number of different tagged extensions to
>> create each individual message as a separate tagged record and use the
>> OO and dispatching facilities to work with them?
>I gonna go back to my docs to remind me about what's the layout of these  
>messages exactly.
>
>> Any advice you've got the time to give on this would be very much
>> appreciated.
>You're welcome

Thanks for taking the time to respond. Hope I've made it a little
clearer but if not, just let me know.




  reply	other threads:[~2010-03-03 20:17 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-03 16:19 Thinking of using Ada for a job at home. Couple of questions first John McCabe
2010-03-03 18:22 ` Jeffrey R. Carter
2010-03-03 20:09   ` John McCabe
2010-03-03 21:00     ` Simon Wright
2010-03-03 18:58 ` Hibou57 (Yannick Duchêne)
2010-03-03 20:17   ` John McCabe [this message]
2010-03-04  6:22     ` Hibou57 (Yannick Duchêne)
2010-03-04 11:39       ` John McCabe
2010-03-09 14:49         ` Warren Gay
2010-03-09 15:33           ` Jacob Sparre Andersen
2010-03-09 20:22           ` jonathan
2010-03-09 21:57             ` Charmed Snark
2010-03-09 22:54               ` jonathan
2010-03-10 17:46                 ` Charmed Snark
2010-03-10 19:12                   ` jonathan
2010-03-10 20:41                     ` Simon Wright
2010-03-10 21:00                       ` Pascal Obry
2010-03-09 20:32           ` Simon Wright
2010-03-10  6:42           ` J-P. Rosen
2010-03-03 19:17 ` Dmitry A. Kazakov
2010-03-03 20:38   ` John McCabe
2010-03-03 20:56     ` Simon Wright
2010-03-03 21:00       ` John McCabe
2010-03-03 21:10         ` John McCabe
2010-03-04  6:39         ` Hibou57 (Yannick Duchêne)
2010-03-03 21:35       ` tmoran
2010-03-04  6:43         ` Hibou57 (Yannick Duchêne)
2010-03-03 22:20     ` Dmitry A. Kazakov
2010-03-03 19:52 ` Gautier write-only
2010-03-03 20:57   ` John McCabe
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox