static public void initialize(actor.interfaces.Movable newListener) {
        if (enabled) {
            listener = newListener;
            al = ALFactory.getAL();
            ALut.alutInit();
            checkForALErrorsWithMessage("Failed to initialize OpenAl");
            sources = new LinkedList<Source>();
            /*
             * Queue our sound events based on their distance from the camera
             */
            events = new PriorityQueue<Event>(16, new Comparator<Event>() {
                @Override
                public int compare(Event event1, Event event2) {
                    float d1 = event1.getPosition().minus(
                            listener.getPosition()).magnitude2();
                    float d2 = event2.getPosition().minus(
                            listener.getPosition()).magnitude2();

                    if (d1 > d2)
                        return -1;
                    else if (d2 > d1)
                        return 1;
                    else
                        return 0;
                }
            });
            Library.initialize();

            for (int i = 0; i < MAX_SOURCES; i++)
                try {
                    sources.add(new Source());
                } catch (RuntimeException e) {
                    System.err.println(e.toString());
                    System.err
                            .println("Error when generating OpenAL Sources. Successfully generated "
                                    + i + " sources of " + MAX_SOURCES);
                    break;
                }
        }
    }