ArrayToPCMpublic class ArrayToPCM extends BasicCodec
Fields Summary |
---|
private static String | ArrayToPCM |
Constructors Summary |
---|
public ArrayToPCM()
inputFormats = new Format[] {new AudioFormat(AudioFormat.LINEAR,
Format.NOT_SPECIFIED,
Format.NOT_SPECIFIED,
Format.NOT_SPECIFIED,
Format.NOT_SPECIFIED,
Format.NOT_SPECIFIED,
Format.NOT_SPECIFIED,
Format.NOT_SPECIFIED,
Format.byteArray) };
outputFormats = new Format[] {new AudioFormat(AudioFormat.LINEAR,
Format.NOT_SPECIFIED,
16,
Format.NOT_SPECIFIED,
Format.NOT_SPECIFIED,
Format.NOT_SPECIFIED,
Format.NOT_SPECIFIED,
Format.NOT_SPECIFIED,
Format.shortArray) };
|
Methods Summary |
---|
public java.lang.String | getName()
return ArrayToPCM;
| public javax.media.Format[] | getSupportedOutputFormats(javax.media.Format in)
if (! (in instanceof AudioFormat) )
return outputFormats;
AudioFormat iaf=(AudioFormat) in;
if (!(iaf.getEncoding().equals(AudioFormat.LINEAR)) ||
(iaf.getDataType()!=Format.byteArray) )
return new Format[0];
AudioFormat oaf = new AudioFormat (AudioFormat.LINEAR,
iaf.getSampleRate(),
16,
iaf.getChannels(),
AudioFormat.LITTLE_ENDIAN,
AudioFormat.SIGNED,
iaf.getFrameSizeInBits(),
iaf.getFrameRate(),
Format.shortArray);
return new Format[] {oaf};
| public static void | main(java.lang.String[] args)
Codec codec=new ArrayToPCM();
Format[] ifmt=codec.getSupportedInputFormats();
Format[] ofmt=codec.getSupportedOutputFormats(new AudioFormat(AudioFormat.LINEAR,
8000, 8, 2,
AudioFormat.LITTLE_ENDIAN,
AudioFormat.UNSIGNED));
for (int i=0; i<ifmt.length ; i++) {
System.out.println(ifmt[i]);
}
System.out.println("* out *");
for (int i=0; i<ofmt.length ; i++) {
System.out.println(ofmt[i]);
}
| public int | process(javax.media.Buffer inputBuffer, javax.media.Buffer outputBuffer)
// == prolog
if (isEOM(inputBuffer) )
return BUFFER_PROCESSED_OK;
byte[] inBuffer = (byte [])inputBuffer.getData();
AudioFormat inFormat = (AudioFormat) inputBuffer.getFormat();
boolean isSigned = inFormat.getSigned() == AudioFormat.SIGNED ;
boolean isBigEndian = inFormat.getEndian() == AudioFormat.BIG_ENDIAN;
int sampleSize = (inFormat.getFrameSizeInBits()+7)>>3;
int inLength = inputBuffer.getLength();
// support only for 8 and 16 bits
int samplesNumber = (sampleSize == 1) ? inLength : (inLength>>1);
int outLength = samplesNumber;
short[] outBuffer = validateShortArraySize(outputBuffer, outLength);
// == main
int offset = isSigned ? 0 : 32768;
int inOffset=0;
int outOffset=0;
if (sampleSize == 1) {
// signed + unsigned 8 bit
for (int i=samplesNumber-1;i>=0;i--) {
outBuffer[i]=(short)((inBuffer[i]<<8) + offset);
}
} else {
// signed + unsigned 16 bit
if (isBigEndian) {
for (int i=samplesNumber-1; i>=0; i--){
int sample1 = inBuffer[inOffset++] << 8;
int sample2 = inBuffer[inOffset++] & 0xff;
outBuffer[outOffset++] = (short)((sample1 | sample2) + offset);
}
} else {
for (int i=samplesNumber-1; i>=0; i--){
int sample1 = inBuffer[inOffset++] & 0Xff;
int sample2 = inBuffer[inOffset++] << 8;
outBuffer[outOffset++] = (short)((sample1 | sample2) + offset);
}
}
}
// == epilog
outputBuffer.setLength(samplesNumber);
outputBuffer.setFormat(outputFormat);
return BUFFER_PROCESSED_OK;
|
|