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