I’ve been using Overtone for everything sound-related that I’ve done in the past year.
Overtone provides abstractions for interacting with Supercollider’s sound synthesis engine, scsynth. Overtone is written in a modern JVM language [Clojure], and as such, it has access to the myriad libraries available for the JVM, including the ever-popular Processing visualization library [via Roland Sadowski’s the clj-processing wrapper]
It requires a working knowledge of Clojure, which is easy to learn (if you aren’t too heavily invested in imperative programming ala Java/C/Python/Ruby).
* As of 12/18/2011, Overtone runs with Clojure 1.3, and Sadowski’s clj-processing runs best with Clojure 1.2 … I recommend using Michael van Acken’s fork which uses gen-class instead of proxy … higher frame-rate and a more functional style.