Hi, Sorry, in case this is for me (IIRC I have never seen another Nanang in this mailing list :D), then I am afraid you've mistaken, I have never integrated any ITU codecs into PJSIP. Regards, nanang On Mon, Nov 10, 2008 at 2:43 AM, Rawshan Iajdani <iajdani at provati.com> wrote: > I know you implemented ITU version of codecs. I included my test file where > I tried to keep everything same as ITU, except that I convert the 10 bit > frames to 80 16bit samples. After that I decode that to PCM. But the sound > I get after decoding is just some metallic scrambled. Am I missing anything > here? Look at the routine covertBit2Serial(); That was what written by me. > > > > > > > > > > > > > > void covertBit2Serial(Word16 *input, Word16 *output); > > void printbits(Word16 value); > > > > int main(int argc, char *argv[] ) > > { > > Word16 synth_buf[L_FRAME+M], *synth; /* Synthesis */ > > Word16 parm[PRM_SIZE+1]; /* Synthesis parameters */ > > Word16 serial[SERIAL_SIZE]; /* Serial stream */ > > Word16 Az_dec[MP1*2]; /* Decoded Az for post-filter */ > > Word16 T2[2]; /* Pitch lag for 2 subframes */ > > > > > > Word16 i, frame; > > FILE *f_syn, *f_serial; > > > > printf("\n"); > > printf("************ G.729a 8.0 KBIT/S SPEECH DECODER ************\n"); > > printf("\n"); > > printf("------------------- Fixed point C simulation ----------------\n"); > > printf("\n"); > > printf("------------ Version 1.1 (Release 2, November 2006) --------\n"); > > printf("\n"); > > > > /* Passed arguments */ > > > > if ( argc != 3) > > { > > printf("Usage :%s bitstream_file outputspeech_file\n",argv[0]); > > printf("\n"); > > printf("Format for bitstream_file:\n"); > > printf(" One (2-byte) synchronization word \n"); > > printf(" One (2-byte) size word,\n"); > > printf(" 80 words (2-byte) containing 80 bits.\n"); > > printf("\n"); > > printf("Format for outputspeech_file:\n"); > > printf(" Synthesis is written to a binary file of 16 bits > data.\n"); > > exit( 1 ); > > } > > > > /* Open file for synthesis and packed serial stream */ > > > > if( (f_serial = fopen(argv[1],"rb") ) == NULL ) > > { > > printf("%s - Error opening file %s !!\n", argv[0], argv[1]); > > exit(0); > > } > > > > if( (f_syn = fopen(argv[2], "wb") ) == NULL ) > > { > > printf("%s - Error opening file %s !!\n", argv[0], argv[2]); > > exit(0); > > } > > > > printf("Input bitstream file : %s\n",argv[1]); > > printf("Synthesis speech file : %s\n",argv[2]); > > > > /*-----------------------------------------------------------------* > > * Initialization of decoder * > > *-----------------------------------------------------------------*/ > > > > for (i=0; i<M; i++) synth_buf[i] = 0; > > synth = synth_buf + M; > > > > bad_lsf = 0; /* Initialize bad LSF indicator */ > > Init_Decod_ld8a(); > > Init_Post_Filter(); > > Init_Post_Process(); > > > > > > /*-----------------------------------------------------------------* > > * Loop for each "L_FRAME" speech data * > > *-----------------------------------------------------------------*/ > > Word16 iBuffer[5]; > > > > frame = 0; > > while( fread(iBuffer, sizeof(Word16), 5, f_serial) == 5) > > { > > covertBit2Serial(iBuffer,serial); > > > > printf("Frame =%d\r", frame++); > > > > bits2prm_ld8k( &serial[2], &parm[1]); > > > > /* the hardware detects frame erasures by checking if all bits > > are set to zero > > */ > > parm[0] = 0; /* No frame erasure */ > > for (i=2; i < SERIAL_SIZE; i++) > > if (serial[i] == 0 ) parm[0] = 1; /* frame erased */ > > > > /* check pitch parity and put 1 in parm[4] if parity error */ > > > > parm[4] = Check_Parity_Pitch(parm[3], parm[4]); > > > > Decod_ld8a(parm, synth, Az_dec, T2); > > > > Post_Filter(synth, Az_dec, T2); /* Post-filter */ > > > > Post_Process(synth, L_FRAME); > > > > fwrite(synth, sizeof(short), L_FRAME, f_syn); > > > > } > > return(0); > > } > > > > > > > > > > void covertBit2Serial(Word16 *input, Word16 *output){ > > output[0]=SYNC_WORD; > > output[1]=SIZE_WORD; > > int outIndex =2; > > int i,j; > > Word16 Mask; > > for (i=0;i<5;i++){ > > for(j=0;j<16;j++){ > > Mask = 0x0001 << (15-j); > > > > if ((Mask | input[i]) == input[i]) > > output[outIndex++] = BIT_1; > > > > else > > output[outIndex++] = BIT_0; > > > > } > > > > } > > } > > > > > > > > void printbits(Word16 value){ > > const int SHIFT = 8 * sizeof( Word16 ) - 1; > > const Word16 MASK = 1 << SHIFT; > > //getchar(); > > > > //printf("buffer is \n"); > > > > int k = 0; > > for (k = 1; k <= SHIFT + 1; k++ ) > > { > > printf("%c",value & MASK ? '1' : '0' ); > > > > value <<= 1; > > > > // if ( k == 8) > > // printf( ' '); > > } > > //printf("\n"); > > } > > > > > > _______________________________________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing list > pjsip at lists.pjsip.org > http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org > >