I've written something which could probably easily be extended to eliminate sources distant to the listener.

At it's current implementation state it is able to "reserve" sources and remove sources that has stopped.