src/net/java/sip/communicator/service/protocol/media/MediaAwareCall.java
/**
     * Notified by its very majesty the media service about changes in the
     * audio level of the local user, this listener generates the corresponding
     * events and delivers them to the listeners that have registered here.
     *
     * @param newLevel the new audio level of the local user.
     */
Notified by its very majesty the media service about changes in the
audio level of the local user, this listener generates the corresponding
events and delivers them to the listeners that have registered here.

@param newLevel the new audio level of the local user.
Notified by its very majesty the media service about changes in the audio level of the local user this listener generates the corresponding events and delivers them to the listeners that have registered here . @param newLevel the new audio level of the local user .
private void fireLocalUserAudioLevelChangeEvent(int newLevel)
    {
        List<SoundLevelListener> localUserAudioLevelListeners;
        synchronized (localUserAudioLevelListenersSyncRoot)
        {
            /*
             * Since the localUserAudioLevelListeners field of this
             * MediaAwareCall is implemented as a copy-on-write storage, just
             * get a reference to it and it should be safe to iterate over it
             * without ConcurrentModificationExceptions.
             */
            localUserAudioLevelListeners = this.localUserAudioLevelListeners;
        }
        if (localUserAudioLevelListeners != null)
        {
            /*
             * Iterate over localUserAudioLevelListeners using an index rather
             * than an Iterator in order to try to reduce the number of
             * allocations (as the number of audio level changes is expected to
             * be very large).
             */
            int localUserAudioLevelListenerCount
                = localUserAudioLevelListeners.size();
            for(int i = 0; i < localUserAudioLevelListenerCount; i++)
                localUserAudioLevelListeners.get(i).soundLevelChanged(
                        this,
                        newLevel);
        }
    }
private void fireLocalUserAudioLevelChangeEvent ( int newLevel ) { List < SoundLevelListener > localUserAudioLevelListeners ; synchronized ( localUserAudioLevelListenersSyncRoot ) { /*
             * Since the localUserAudioLevelListeners field of this
             * MediaAwareCall is implemented as a copy-on-write storage, just
             * get a reference to it and it should be safe to iterate over it
             * without ConcurrentModificationExceptions.
             */ localUserAudioLevelListeners = this . localUserAudioLevelListeners ; } if ( localUserAudioLevelListeners != null ) { /*
             * Iterate over localUserAudioLevelListeners using an index rather
             * than an Iterator in order to try to reduce the number of
             * allocations (as the number of audio level changes is expected to
             * be very large).
             */ int localUserAudioLevelListenerCount = localUserAudioLevelListeners . size ( ) ; for ( int i = 0 ; i < localUserAudioLevelListenerCount ; i ++ ) localUserAudioLevelListeners . get ( i ) . soundLevelChanged ( this , newLevel ) ; } }
Notified by its very majesty the media service about changes in the
 audio level of the local user, this listener generates the corresponding
 events and delivers them to the listeners that have registered here.
Notified by its very majesty the media service about changes in the audio level of the local user this listener generates the corresponding events and delivers them to the listeners that have registered here .