URGENT:  Build software interface for hardware controllers

Posted on 2006-04-04
Last Modified: 2010-04-17
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. (

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.
Question by:benk-master-flash
    LVL 9

    Expert Comment

    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?

    Author Comment

    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?

    LVL 9

    Accepted Solution

    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!

    Author Comment

    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..
    LVL 9

    Expert Comment

    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.

    Write Comment

    Please enter a first name

    Please enter a last name

    We will never share this with anyone.

    Featured Post

    Top 6 Sources for Identifying Threat Actor TTPs

    Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

    This article is meant to give a basic understanding of how to use R Sweave as a way to merge LaTeX and R code seamlessly into one presentable document.
    Entering a date in Microsoft Access can be tricky. A typo can cause month and day to be shuffled, entering the day only causes an error, as does entering, say, day 31 in June. This article shows how an inputmask supported by code can help the user a…
    An introduction to basic programming syntax in Java by creating a simple program. Viewers can follow the tutorial as they create their first class in Java. Definitions and explanations about each element are given to help prepare viewers for future …
    Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …

    779 members asked questions and received personalized solutions in the past 7 days.

    Join the community of 500,000 technology professionals and ask your questions.

    Join & Ask a Question

    Need Help in Real-Time?

    Connect with top rated Experts

    11 Experts available now in Live!

    Get 1:1 Help Now