Basic MIDI editing support in Ardour is heavily coming along, but another aspect that hasn’t been addressed to any significant degree yet is how to manage the other end of the MIDI connection, the MIDI devices. Any respectable sequencer has some means of representing semantic information about the MIDI data it sends, such as device names, program names and controller names.
Several database type formats exist to provide this semantic information for a given MIDI device. Back in the days I used Cakewalk, which use .ins instrument definition files. Rosegarden and Muse have their own xml based formats that does the same, and probably there exists many more formats. Softsynths are another chapter, but I don’t know of any commonly used way for a softsynth to transmit this kind of data to its host application.
One day Ardour will be faced with the problem of representing this kind of data within the program. Defining a new internal data format would obviously be wrong as there exists so many already. Choosing an already existing format will probably lead to people complaining about not supporting this and that.
The question I’m raising is whether this needs to be built into ardour at all (or to what degree), as we now have support for the extensible LV2 plugin standard. ll-plugins already contains a MIDI map extension, somewhat a step in the direction I’m talking about. I know LV2 plugins are mainly designed to process sound data, but I wonder if, with an appropriate extension, they could somehow serve as a database API for extracting/parsing semantic MIDI information from the various established MIDI semantic info file formats.
Consider a MIDI track in Ardour. That MIDI track is connected to a JACK port, which has a name. The instrument that plays the notes in the end can often, but not always, be determined from the name of that port. Suppose that you have a configuration file in your home directory that maps JACK port names with a file containing the semantic information about the synth/device. You also have a collection of LV2 plugins that can parse the given files, and return the information in a uniform manner. Given the port connection, whose name ardour send to the plugin, the plugin will return the info requested after it has parsed the config file.
These are just thoughts and I won’t elaborate much further until I get some feedback from the regular bunch of smart people that hangs out around here. I’m sure they have better and more elegant solutions:)