code: public void update() {
  		if (done) {
  			return;
  		}
  
  		float sampleRate = audio.getRate();
  		float sampleSize;
  		if (audio.getChannels() > 1) {
  			sampleSize = 4; // AL10.AL_FORMAT_STEREO16
  		} else {
  			sampleSize = 2; // AL10.AL_FORMAT_MONO16
  		}
  		
  		int processed = AL10.alGetSourcei(source, AL10.AL_BUFFERS_PROCESSED);
  		while (processed > 0) {
  			unqueued.clear();
  			AL10.alSourceUnqueueBuffers(source, unqueued);
  			
  			int bufferIndex = unqueued.get(0);
  
  			float bufferLength = (AL10.alGetBufferi(bufferIndex, AL10.AL_SIZE) / sampleSize) / sampleRate;
  			positionOffset += bufferLength;
  			
  	        if (stream(bufferIndex)) {			
  	        	AL10.alSourceQueueBuffers(source, unqueued);
  	        } else {
  	        	remainingBufferCount--;
  	        	if (remainingBufferCount == 0) {
  	        		done = true;
  	        	}
  	        }
  	        processed--;
  		}
  		
  		int state = AL10.alGetSourcei(source, AL10.AL_SOURCE_STATE);
  	    
  	    if (state != AL10.AL_PLAYING) {
  	    	AL10.alSourcePlay(source);
  	    }
  	}
docs: Poll the bufferNames - check if we need to fill the bufferNames with another
  section.
  
  Most of the time this should be reasonably quick