I have been reading this thread for a while and that's my two cents.

If I've understood well, we are talking of creating a piece of software that
could be embedded in other applications. It will be able to read an abc file
and create an in-memory structure suitable for further transformations
(creating midi, extracting voices, transposing, ...).

Since being embedded is the thing that "embeddable" scripting languages do
best, my proposal is to use one of those script language as basis.

My choice would be Lua (www.lua.org) that is the same language used in the
Myriad products (Harmony Assistant) but this is debatable.

The main component would be a parser that reads the abc file and trigger
events as soon as it recognise meaningful objects.

Each event would be handled by a script that would take care of the objects.

The default set of event handlers will create an internal rapresentation of
the abc file (probably some form of a tree) that can be manipulated by other
scripts through a well defined API.

I understand it's not 100% clear, I would need some picture to better
express myself. If you think it's worthwile I could setup a web page with
more details.

To understand to what extent this architecture would be flexible let's take
some example (and let me use Lua as the language of choice).

We could create Lua bindings for existing C/C++ libraries (like TSE3,
libmusxml, leanGuido) and write scripts that directly call those libraries'
functions.

Since almost everything is done in scripts, anyone could improve them and
redistribute the changes without needing a compiler or being worried about
hardware platform (Lua scripts, as those of many other scripting languages,
are ascii based and platform independed).

Many scripting language have interfaces towards multiple language (such as
Java or C++) so it should be easy to include our piece of software in other
applications (probably using GUIs and proprietary pieces of software).

Now the hard parts! A lot of work should be done before launching such a
project:

1) Agree on an ABC syntax (2.0?)
2) Define a suitable internal represention. I'm not enough expert in the
music theory to define one!
3) Define a powerful (but easy-to-use) API.
4) Agree on a scripting language
5) Agree on a programming language (I would use plain old ANSI C)
5) Define architectural design
6) ... (tons of other things I'm not able to figure at the moment)

Of course everything will be open source and realeased publicly.

Any comment?

                    Remo


To subscribe/unsubscribe, point your browser to: http://www.tullochgorm.com/lists.html

Reply via email to