Hey all I have been working on a simple VOIP app and have gotten my self totally confused. <br>
is this the right process to follow? Any tips examples guidence would be super awesome. <br>
<br>
I have my voice data. capturing. <br>
I encoding it so that there are multi speex frames per packet.<br>
<br>
on&nbsp; the reciving end i decode the package i recive. <br>
<br>
Yeah it dosnt work at all. :D<br>
<br>
this is the code&nbsp; for the encode.<br>
<br>
int PackVoiceData(SpeexBits *bits,int space_avalible_in_packect, int
size_of_data_avalible, int frame_size , void * data_to_pack, char *
destinantion_buffer )<br>
{<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; float frame[FRAME_SIZE];<br>
&nbsp;&nbsp;&nbsp; int offset= 0;<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; float&nbsp; * data_as_floats;<br>
&nbsp;&nbsp;&nbsp; short * data_as_shorts = (short *) data_to_pack;<br>
&nbsp;&nbsp;&nbsp; memset(destinantion_buffer , 0,size_of_data_avalible);<br>
&nbsp;&nbsp;&nbsp; /// memset(data_as_shorts , 0,size_of_data_avalible);<br>
&nbsp;&nbsp;&nbsp; int number_of_frames;<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; /// clear the space each time.<br>
&nbsp;&nbsp;&nbsp; int length = space_avalible_in_packect;<br>
<br>
&nbsp;&nbsp;&nbsp; if ( size_of_data_avalible &lt; space_avalible_in_packect )<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; length = size_of_data_avalible;<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; /// allocate space in memory for the float version of the data.<br>
&nbsp;&nbsp;&nbsp; data_as_floats = (float *)calloc ( length, sizeof( float));<br>
&nbsp;&nbsp;&nbsp; number_of_frames = length/FRAME_SIZE;<br>
&nbsp;&nbsp;&nbsp; for(int i=0; i&lt; length; i++ )<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; data_as_floats[i] = data_as_shorts[i];<br>
<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; /// if size of data avaliable is less than the space avaliable in the packet figure<br>
&nbsp;&nbsp;&nbsp; ///&nbsp;&nbsp;&nbsp; the number of frames from the data avaliable<br>
&nbsp;&nbsp;&nbsp; speex_bits_reset( bits );<br>
&nbsp;&nbsp;&nbsp; /// Call speex incode n times before writing the data stream.<br>
&nbsp;&nbsp;&nbsp; for( int i =0 ; i &lt; number_of_frames-1; i ++)<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// pack a frame <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int j=0; j&lt; FRAME_SIZE; j++ )<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; frame[j] = data_as_floats [j+offset];<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // this enoced the data<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; speex_encode( encoder_state, frame , bits );<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // increase the offset<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; offset+=FRAME_SIZE;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; //speex_encode( encoder_state, frame , bits ); <br>
&nbsp;&nbsp;&nbsp; /// write teh stream out. <br>
&nbsp;&nbsp;&nbsp; int bytes_to_write = speex_bits_nbytes( bits );<br>
&nbsp;&nbsp;&nbsp; /// transform from float to char* to write. The
termination code is acutomatically added to teh end of the stream.<br>
&nbsp;&nbsp;&nbsp; bytes_written = speex_bits_write( bits, destinantion_buffer, bytes_to_write );<br>
&nbsp;&nbsp;&nbsp; /// return the amount of data writtne.<br>
&nbsp;&nbsp;&nbsp; printf( &quot;bytes written %d\n&quot; ,bytes_written );<br>
&nbsp;&nbsp;&nbsp; return bytes_written;<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; <br>
}<br>
<br>
<br>
<br>
and the decode. ...<br>
<br>
int Decode( SpeexBits *bits, char * input_bits, int data_in_length , char * output )<br>
{<br>
<br>
&nbsp;&nbsp;&nbsp; float&nbsp; * out_put = (float *)calloc(&nbsp; data_in_length,sizeof( float ) );<br>
&nbsp;&nbsp;&nbsp; int number_of_frames = data_in_length/FRAME_SIZE;<br>
&nbsp;&nbsp;&nbsp; int offset<br>
&nbsp;&nbsp;&nbsp; for( int i = 0; i&lt; number_of_frames; i++ )<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // read the bits into the byte stream struct.<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; speex_bits_read_from( bits , input_bits, FRAME_SIZE );<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // decode the data.<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; speex_decode( decoder_state, bits , out_put);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for( int i = 0; i &lt; data_in_length; i++ )<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; output[i+offset] = out_put[i];&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; offset+=FRAME_SIZE;<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; /// change the floats to shorts so it can be used by the sound out put. <br>
<br>
&nbsp;&nbsp;&nbsp; speex_bits_reset( bits );<br>
<br>
&nbsp;&nbsp;&nbsp; <br>
<br>
}<br>
<br>
<br>
my main&nbsp; loop just caputures and sends and then recives with a wait function/poll of the open socket. <br>
<br>
<br>