I agree with the Qt option, as it clearly produces some nice & performant
music applications. But you're still programming in C++ which is tedious
because of memory management; also "hard realtime" often precludes the use
of Garbage collectors. Of course Java has RT garbage collectors available:
http://java.sun.com/developer/technicalArticles/Programming/rt_pt2/ although
some may find "soft realtime" garbage collection as provided by the new G1
garbage collector sufficient:
http://research.sun.com/jtech/pubs/04-g1-paper-ismm.pdf ... see also:
http://blog.headius.com/2009/01/my-favorite-hotspot-jvm-flags.html
Lots of interesting Java-based music apps exist, with GUIs:
http://jmusic.ci.qut.edu.au/applications.html
http://www.softsynth.com/links/java_music.html
GUI application programming might be a little more forgiving in Java,
although Java is a pain-in-the ass language, where you spend more time
building and understanding scaffolding than you actually do programming...
part of the scaffolding are the "design patterns" needed to work-around
fundamental issues with primitive strongly typed languages like Java and C++
(
http://www.tiagoluchini.eu/2007/07/28/strategy-pattern-comparing-java-x-lis…
).
The good thing is you don't need to use Java anymore, but can take advantage
of its portability, security, advanced garbage-collection options, and
just-in-time compiler advances that may give it a performance advantage,
these days.... But you don't have to program in Java, you write in
http://groovy.codehaus.org/ or
http://clojure.org which means you can do
really high-level things with just a few lines of groovy code (
http://lists.xwiki.org/pipermail/users/2009-August/016937.html ).
Fortunately, several million unfortunate souls have slogged through all the
hard work and made a huge library of functionality for people to use, much
of it open source.
http://curious-attempt-bunny.blogspot.com/2009/01/simple-clojure-graphics-a…
is
a good example of the concision made possible by clojure...
Clojure may be of particular interest in realtime
multiprocessor/multithreaded apps because of its high level., language-level
support for concurrency and multithreaded programming (
http://clojure.org/concurrent_programming ) as well as potential support
for Software Transactional Memory, which is analogous to garbage colleciton
for threads (
http://www.stanford.edu/class/cs242/readings/TMvsGC.pdf
http://java.ociweb.com/mark/stm/article.html ).
Niels
http://nielsmayer.com