It seems to me that you will need to perform some sort of Frequency analysis on the audio file in question. You could either pre-process the file on level load (using the data to queue up your level actions), or perform the analysis in real-time.
Either way, you'll want to divide your audio waveform into sections, each comprised of N samples, and then perform a Fourier Transform on those N samples. This will give you frequency data for that section of time in your audio, from which you can decide what to do in your game (e.g. drop a bomb on a bass kick).
If you instead perform a transform on the whole song, you will get the frequency data for the whole song. Which you probably don't want, as you will no longer know at what points in time the frequencies occur. However, you could use this information to theme your level (e.g. lots of bass = some sort of underground level or somesuch).
In order to do that in a reasonable amount of time (pre-processing or real-time), you'll want to implement a Fast Fourier Transform algorithm. The Cooley-Tukey algorithm is apparently pretty commonly used. If you don't want to try to implement such an algorithm yourself, JTransforms is a multi-threaded FFT library for Java, and Kiss FFT, while in C, has a BSD license (and you may be able to find a java wrapper for it).
Addendum: You will also probably want to take a look into whether or not applying a Windowing Function affects your output in a significant way. In the above, taking N samples, a Rectangular Window Function is applied automatically.
From Information I have found, it appears that most people don't worry too much about dealing with a Window Function for the FFT.