public SoundBuffer read()
    {
        if( endOfStream( GET, XXX ) )
            return null;

        if( module == null )
        {
            errorMessage( "Module null in method 'read'" );
            return null;
        }

        // Check to make sure there is an audio format:
        if( myAudioFormat == null )
        {
            errorMessage( "Audio Format null in method 'read'" );
            return null;
        }

        int bufferFrameSize = (int) SoundSystemConfig.getStreamingBufferSize()
                                    / 4;

        int frames = songDuration - playPosition;
        if( frames > bufferFrameSize )
            frames = bufferFrameSize;

        if( frames <= 0 )
        {
            endOfStream( SET, true );
            return null;
        }
		byte[] outputBuffer = new byte[ frames * 4 ];

        ibxm.get_audio( outputBuffer, frames );

        playPosition += frames;
        if( playPosition >= songDuration )
        {
            endOfStream( SET, true );
        }

        // Reverse the byte order if necessary:
        if( reverseBytes )
            reverseBytes( outputBuffer, 0, frames * 4 );

        // Wrap the data into a SoundBuffer:
        SoundBuffer buffer = new SoundBuffer( outputBuffer, myAudioFormat );

        return buffer;
    }