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().