Isn't it possible to use the old infrastructure, where not all the sources were streaming ones and just let the user reserve some as streaming sources if he/she wants to?
I would have to change non-streaming Java sources over to "Clips", and just using "SourceDataLines" for the reserved streaming channels. I would have to solve the OpenAL bug, of course.
After more consideration, I've decided to use Egon's suggestion of reserving a certain number of streaming channels, making all the other ones non-streaming. The reason I changed my mind on this is that streaming is quite an involved process, and I want my library to be as non cpu-intensive as possible. The benefit of using non-streaming sources is that you simply hand all of the pre-loaded data off to the sound library to play. Streaming a source, on the other hand, is done in a busy loop which reads data in from a file input stream (or from a buffer if it is a "normal" source), keeps checking how much data has been processed, and feeds the data to the channel in pieces.
I want to use a hybrid of Egon's suggestion and my single stream-thread concept. This will hopefully solve the OpenAL multi-thread bug I mentioned earlier. One potential issue I am aware of is that in OpenAL, non-streaming sources can be any size, but I believe there is a maximum size you can use for a Javasound Clip. I'll need to figure out what that value is and change the default settings in SoundSystemConfig to match that. I'll be sure to mention this Javasound limitation in the documentation as well. The result of this limitation would mean that if a sound effect is too long, the end of it would be cut off. Hopefully the maximum Clip size is something reasonable.
-- EDIT --
On second thought, I will check for maximum Clip size violations in the LibraryJavaSound class rather than changing SoundSystemConfig default settings. That way I won't be placing a needless limitation on the OpenAL side.
-- END EDIT --
By default I will have the number of streaming channels set at four. You will be able to change this number using a method like SoundSystemConfig.setMaximumStreamingSources( int ). Four should be more than enough streaming channels. If you think about it, in all likelyhood you would never need to have more than a couple of streaming sources playing at the same time in a game - for things like background music, characters speaking, or rendered cut-scenes. Most other sound effects are going to be short enough to not need them streamed.
This is a fairly large change to the code and will require some extensive debugging. I'm hoping to spend a lot of time this weekend working on it. Hopefully I will be able to post the next release in a couple of days, assuming I don't run into any major problems.