URGENT: Build software interface for hardware controllers

I need to develop alternative uses for the control surface products below.


They implement the MIDI (Musicial Instrument Digital Interface) protocol and are designed for use in real-time
as well as playback or recorded sequences of MIDI commands. (http://www.midi.org/)

As I said I am interested in using products like the ones above to control software.  I believe there is a large class of
individuals in the world whose job it is to control real-time processes with many control parameters.  I believe that
this is generally done by ineffeciently pointing and clicking.  I aim to replacing a point-and-click paradigm for
 these types of jobs with a real-time tactile-parameter-control paradigm using devices like those above.

For example:
1. change cells in an excel spreadsheet or other complicated model
2. instruct software to increase or decrease the duration of some event or subroutine it is carrying out.

I think I am talking about building middleware to sit between these devices and other software.
If possible I would like to use Eclipse in developing a solution/product to do this.  I think Eclipse is great.
But maybe I am way off course and middleware has nothing to do with this.

More broadly speaking, I need to know how to research implementing this type of solution.  I have some programming experience, but
not at the level needed to describe the research that needs to be done or to do the research on how to develop
this type of software myself, or to create a set of software requirements to pay to have somebody build this.

So I guess my question not only what I have descriped above, but also how to requisition a developer to make this
software, and where I might find such individuals to develop it.  And how much it costs.

I know this is a run-on question, and once I get some direction, I would be glad to fork it into multiple questions so
I can award a proper amount of points to those who are helping.

Thanks to all.
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

gabesoSolution ArchitectCommented:
Use object-oriented design for this: I think you are going to be looking at building an abstraction component at the lowest level that interfaces to a midi control of some kind and provides you with universal interface to midi in general.

You can then build other models on top of this layer that provide general functionality to capture the different types of usage and control parameter families.

Then on top of those you build interfaces that use these models: Excel, Eclipse, Web Interace, WAP Device - whatever.

The layered approach is the best way to approach the complexity of the problem because you are talking about something quite general: So you end up building components that use other components moving from the specifics of the midi interface to the particulars of the new interface style.

You don't say what platform this is for: Unix, Windows, Mac?
benk-master-flashAuthor Commented:
Thanks for the response gabeso.

So, I first need to build some sort of software component that is kind of an "adapter", that takes MIDI I/O and provides some other interface (built and defined by me) for say Java, COM, C++ to interface with the hardware.  It is abstract in the sense that it merely provides an interface that must be implemented.  

What would the interface need to define?  I'm unfortunately at a loss for where to begin.

Maybe some interface to map the controls to "events" or "actions", a way to set the "properties/states" of the controls?  Other classes/objects could then respond to/fire , get/set properties and methods of these objects?

Because there is a JAVA MIDI package, could it be that there is something (package, open source project) that will generally fit the above description already availale that I could extend?

gabesoSolution ArchitectCommented:
Just to give a silly example:

You might have a user interface in which the user juggles coloured balls and can change the effect by adding balls, speeding up, slowing down, changing colours, rates, spin etc

Obviously this has nothing to do with the midi format - they are far apart in representation. But by using layers of translation where objects at a higher level are interpreted through using objects at a lower level you finally get structured output to an external system.

There are two ends to the problem - the user (input) end and the system (output) end: Between the two ends are an as yet undetermined set of layered components that do the work in a structured way.

To get going, don't worry so much about specifics but think in terms of models - at both ends. You can start abstracting the midi interface and at the same time think about what the user is doing and then try to narrow the gap by introducing new layers between them. Then at some point there will be a sequence of models that take you from your new interface models to a midi interface. You might find it more fun just to concentrate on the user interface side of things initially.

If you are thinking in terms of Java as an implementation language then you can model things - perhaps using a UML tool - as java classes.

Probably better to be a paper exercise long before committing to any designs - you should be able to talk/explain your way from the higher layers down towards the actual output format to any nojn-technical third party: Keeping the fact that it is ultimately a midi interface ultimately helps keep things focused!

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
benk-master-flashAuthor Commented:
What would be the technical name for "layers of translation" as you call it.  This sounds like a rather standard "design pattern" or technique.  Could you find a reference where I can research it more or find examples that I could abstract to my own case..
gabesoSolution ArchitectCommented:
It is a 'design layer' which would contain packages that contain components: while a layer might be abstract (MIDI abstraction layer), the package would be physically real (perhaps a java Jar file called MIDI.jar) and so would the component (perhaps a MIDIController class).

So sets of packages would belong to a layer and that would solve one level of management problems and provide tools for higher layers to use.
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today

From novice to tech pro — start learning today.