Converts a 16-bit linear PCM stream from and to 8-bit A-law. More...


Public Member Functions | |
| AudioCodecAlaw (AudioInterfacePCM audio) | |
| Constructs A-Law CODEC above existing PCM audio interface.   | |
| int | getVoicePduSubclass () | 
| Gets the VoicePDU subclass attribute of the AbstractAudio object.   | |
| int | getSampleSize () | 
| Returns the minimum sample size for use in creating buffers etc.   | |
| void | convertToPCM (byte[] in, byte[] out) | 
| Encodes data to PCM, i.e.   | |
| void | convertFromPCM (byte[] in, byte[] out) | 
| Decodes data from PCM, i.e.   | |
Static Private Member Functions | |
| static byte | linear2alaw (short pcm_value) | 
| Converts a 16-bit linear PCM value to 8-bit A-law.   | |
| static short | alaw2linear (byte alaw_value) | 
| Converts an 8-bit A-law value to 16-bit linear PCM.   | |
Private Attributes | |
| int | sampleSize | 
Static Private Attributes | |
| static final int | SIGN_BIT = 0x80 | 
| static final int | QUANT_MASK = 0xf | 
| static final int | SEG_SHIFT = 4 | 
| static final int | SEG_MASK = 0x70 | 
| static final int[] | seg_end | 
Converts a 16-bit linear PCM stream from and to 8-bit A-law.
Definition at line 11 of file AudioCodecAlaw.java.
| audio.AudioCodecAlaw.AudioCodecAlaw | ( | AudioInterfacePCM | audio ) | 
Constructs A-Law CODEC above existing PCM audio interface.
Definition at line 18 of file AudioCodecAlaw.java.
References audio.AbstractCODEC.audio, audio.AudioInterfacePCM.getSampleSize(), audio.AbstractCODEC.inputPcmBuf, audio.AbstractCODEC.outputPcmBuf, and audio.AudioCodecAlaw.sampleSize.
    {
        this.audio = audio;
        this.sampleSize = this.audio.getSampleSize ();
        this.outputPcmBuf = new byte[ this.sampleSize ];
        this.inputPcmBuf = new byte[ this.sampleSize ];
    }
| static short audio.AudioCodecAlaw.alaw2linear | ( | byte | alaw_value ) |  [static, private] | 
        
Converts an 8-bit A-law value to 16-bit linear PCM.
Definition at line 156 of file AudioCodecAlaw.java.
References audio.AudioCodecAlaw.QUANT_MASK, audio.AudioCodecAlaw.SEG_MASK, audio.AudioCodecAlaw.SEG_SHIFT, and audio.AudioCodecAlaw.SIGN_BIT.
Referenced by audio.AudioCodecAlaw.convertToPCM().
    {
        
        int a_val = ( ( alaw_value + 0x100 ) & 0xFF ) ^ 0x55;
        
        int t = ( a_val & QUANT_MASK ) << 4;
        int seg = ( a_val & SEG_MASK ) >> SEG_SHIFT;
        
        switch ( seg )
        {
            case 0:
                t += 8;
                break;
            case 1:
                t += 0x108;
                break;
            default:
                t += 0x108;
                t <<= seg - 1;
            }
        return (short)( ( a_val & SIGN_BIT ) != 0 ? t : -t );        
    }
| void audio.AudioCodecAlaw.convertFromPCM | ( | byte[] | in, | 
| byte[] | out | ||
| ) |  [virtual] | 
        
Decodes data from PCM, i.e.
converts samples from CODEC to A-Law format.
Implements audio.AbstractCODEC.
Definition at line 58 of file AudioCodecAlaw.java.
References utils.OctetBuffer.getShort(), audio.AudioCodecAlaw.linear2alaw(), and utils.OctetBuffer.wrap().
    {
        OctetBuffer bb = OctetBuffer.wrap( in );
        for( int i = 0; i < in.length / 2; ++i )
        {
            out[i] = linear2alaw( bb.getShort () );
        }
    }
| void audio.AudioCodecAlaw.convertToPCM | ( | byte[] | in, | 
| byte[] | out | ||
| ) |  [virtual] | 
        
Encodes data to PCM, i.e.
converts samples from A-Law to CODEC format.
Implements audio.AbstractCODEC.
Definition at line 45 of file AudioCodecAlaw.java.
References audio.AudioCodecAlaw.alaw2linear(), utils.OctetBuffer.putShort(), and utils.OctetBuffer.wrap().
    {
        OctetBuffer bb = OctetBuffer.wrap( out );
        for ( int i = 0; i < in.length; ++i ) 
        {
            bb.putShort( alaw2linear( in[i] ) );
        }
    }
| int audio.AudioCodecAlaw.getSampleSize | ( | ) |  [virtual] | 
        
Returns the minimum sample size for use in creating buffers etc.
Implements audio.AudioInterface.
Definition at line 37 of file AudioCodecAlaw.java.
    {
        return 160;
    }
| int audio.AudioCodecAlaw.getVoicePduSubclass | ( | ) |  [virtual] | 
        
Gets the VoicePDU subclass attribute of the AbstractAudio object.
Implements audio.AbstractCODEC.
Definition at line 29 of file AudioCodecAlaw.java.
    {
        return protocol.VoicePDU.ALAW;
    }
| static byte audio.AudioCodecAlaw.linear2alaw | ( | short | pcm_value ) |  [static, private] | 
        
Converts a 16-bit linear PCM value to 8-bit A-law.
Definition at line 109 of file AudioCodecAlaw.java.
References audio.AudioCodecAlaw.QUANT_MASK, audio.AudioCodecAlaw.seg_end, and audio.AudioCodecAlaw.SEG_SHIFT.
Referenced by audio.AudioCodecAlaw.convertFromPCM().
    {
        
        int pcm = pcm_value >> 3;
        int mask;
        if ( pcm >= 0 )
        {
            mask = 0xD5; // sign (7th) bit = 1 
            }
        else 
        {
            mask = 0x55; // sign bit = 0 
            pcm = -pcm - 1;
            }
        /* Convert the scaled magnitude to segment number. 
         */
        int seg = 8;
        
        for ( int i = 0; i < 8; ++i ) {
            if ( pcm <= seg_end[i] ) {
                seg = i;
                break;
            }
        }
        /* Combine the sign, segment, and quantization bits. 
         */
        if ( seg >= 8 ) { // out of range, return maximum value. 
            return (byte)( (  0x7F ^ mask ) & 0xFF - 0x100 );
        }
        int aval = ( seg << SEG_SHIFT ) & 0xFF;
        
        if ( seg < 2 ) {
            aval |= (pcm >> 1) & QUANT_MASK;
        } else {
            aval |= (pcm >> seg) & QUANT_MASK;
        }
        
        return (byte)( ( aval ^ mask ) & 0xFF - 0x100 );
    }
final int audio.AudioCodecAlaw.QUANT_MASK = 0xf [static, private] | 
        
Definition at line 95 of file AudioCodecAlaw.java.
Referenced by audio.AudioCodecAlaw.alaw2linear(), and audio.AudioCodecAlaw.linear2alaw().
int audio.AudioCodecAlaw.sampleSize [private] | 
        
Definition at line 13 of file AudioCodecAlaw.java.
Referenced by audio.AudioCodecAlaw.AudioCodecAlaw().
final int [] audio.AudioCodecAlaw.seg_end [static, private] | 
        
 {
            0x1F, 0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF, 0xFFF
            }
Definition at line 102 of file AudioCodecAlaw.java.
Referenced by audio.AudioCodecAlaw.linear2alaw().
final int audio.AudioCodecAlaw.SEG_MASK = 0x70 [static, private] | 
        
Definition at line 99 of file AudioCodecAlaw.java.
Referenced by audio.AudioCodecAlaw.alaw2linear().
final int audio.AudioCodecAlaw.SEG_SHIFT = 4 [static, private] | 
        
Definition at line 98 of file AudioCodecAlaw.java.
Referenced by audio.AudioCodecAlaw.alaw2linear(), and audio.AudioCodecAlaw.linear2alaw().
final int audio.AudioCodecAlaw.SIGN_BIT = 0x80 [static, private] | 
        
Definition at line 92 of file AudioCodecAlaw.java.
Referenced by audio.AudioCodecAlaw.alaw2linear().
 1.7.2