views:

849

answers:

2

I've been thinking a lot lately about a music-oriented project I'd like to work on. Kind of like a game... kind of like a studio workstation (FL Studio, Reason).

I guess the best way to describe it would be: like "Guitar Hero", but with no canned tracks. All original music--composed by you, on the fly--but the software would use its knowledge of music theory (as well as some supervised learning algorithms) to make sure that your input gets turned into something that sounds great.

It sounds a little silly, explaining it like that, but there ya go. It's something I think would make an interesting side project.

Anyhow, I'm looking for a Java library for generating the actual audio. Browsing around on sourceforge, there are countless software synths, and I have no idea which to choose.

My top priority is that it should sound incredible... Really rich, layered, textured synths, with gobs of configurable parameters. Emulation of acoustic instruments is not important to me.

My second priority is that it ought to be straightforward to use strictly as a library, with no GUI involved at all. (If there's a synth with really breathtaking output, but it's tightly-coupled with a GUI, then I might consider ripping the audio portion out of the application, but I'd rather start with a nicely contained library).

I know I could send MIDI to a standalone synth, but I think it'd be cool to read the actual synth code and learn a little DSP while I'm at it.

Any suggestions?

Oh yeah, I'm on Windows, so posix-only stuff is a no go.

Thanks!

+3  A: 

Have you checked out JFugue? It's an "open-source Java API for programming music without the complexities of MIDI".

Additional information: Found a couple of other resources referenced in the JFugue documentation (pdf):

  • Audio Synthesis Engine Project: open source version of Java’s MIDI synthesizer

  • Gervill: open source software synthesizer created as a proposal for the Audio Synthesis Engine Project

Zach Scrivena
Hey, I wrote that documentation!Had I seen this question yesterday, I would have also suggested borrowing code from the Audio Synthesis Engine Project.
David
+1  A: 

Yeah, I noticed JFugue a few years ago. It's on my list of interesting computer/music bookmarks:

http://delicious.com/BenjiSmith/computermusic http://delicious.com/BenjiSmith/programming.java.libraries.music

But JFugue is all about the structure of the music itself... the melodies, harmonies, rhythms, etc....

What I'm looking for right now is just the synthesizer. Something like this...

Synth s = new Synth();
Instrument i = s.getInstrument("Robot Bass");
i.makeAwesome(true);

And then I'll send my events into the MIDI stream (or into whatever control API the synth library provides).

benjismith
Thanks for the links. I'm toying with the idea of making a java-tracker, and these will undoubtly come in handy.
Oddmund