[speex-dev] Please 30 second to look a my code

Fabio fabpet at aliceposta.it
Fri Dec 19 02:22:36 PST 2003



Hi 
i'm developing a sort of VoIP application 
for my ipaq using speex...
I'm still at beginning and i have many problems encoding and decoding my 
wav files....output is only  noise! Why?

I'm using 
Libspeex 1.1.3, 
Embedded VisualC++ 3.0,
Ipaq 3850(206 MHz Intel® Strong ARM 32-bit RISC Processor) PocketPC 2002 (Windows CE 3.0).

Libspeex is complied with the definition of FIXED_POINT...

Regards
Fabio

P.S.
Rodrigo did u do something similar?

This is the code, what could be wrong?
void CRegistratoreDlg::OnEncode() 
{
 Sleep(500); //Wait because drawing send window 
 
 SpeexBits bits; 
 
 void *state; 
 
 short InBuffer[FRAME_SIZE]; 
 char OutBuffer[200]; 
 char waveheader[WAVEHEADER]; 
 
 HANDLE WaveFile; 
 HANDLE SpeexFile; 
 
 DWORD NrOfBytesRead, NrOfBytesWritten; 
 
 char nrBytes = 0; 
 int nbBytes = 0; 
 int bit_rate, frame_size, test=0; 
 bool first=true; 
 
 WaveFile = CreateFile(_T("\\Temp\\tempsound.wav"), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 
 SpeexFile = CreateFile(_T("\\Temp\\tempsound.spx"), GENERIC_WRITE, 0, NULL,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 
 
 speex_bits_init(&bits); //init encoded bits buffer 
 state = speex_encoder_init(&speex_nb_mode); //Init encoder in narrowband mode 
 speex_encoder_ctl(state, SPEEX_GET_FRAME_SIZE, &frame_size);//Get frame size 

 int tmp=0;
 speex_encoder_ctl(state, SPEEX_SET_VBR, &tmp);
 tmp=1;
 speex_encoder_ctl(state, SPEEX_SET_COMPLEXITY, &tmp);

 bit_rate=24000; 
 speex_encoder_ctl(state, SPEEX_SET_BITRATE, &bit_rate); 

 ReadFile(WaveFile, waveheader, WAVEHEADER, &NrOfBytesRead, NULL); 
 WriteFile(SpeexFile, waveheader, WAVEHEADER, &NrOfBytesWritten, NULL); //Raw copy of waveheader from speexfile to wavefile 
 
 while(true)
 { 
      ReadFile(WaveFile, InBuffer, FRAME_SIZE, &NrOfBytesRead, NULL); //Fabio: Somewhere i found FRAME_SIZE * 2
 
      speex_bits_reset(&bits); //Reset out bits buffer 
      speex_encode(state, InBuffer, &bits); //Encode bits 
 
      nbBytes = speex_bits_write(&bits, OutBuffer, 200); //Save encoded bits to buffer 
 
      if(first){ //First frame save the first byte, nrBytes, to outfile 
           nrBytes = nbBytes; 
           WriteFile(SpeexFile, &nrBytes, 1, &NrOfBytesWritten, NULL); 
           first=false; 
      } 
 
      WriteFile(SpeexFile, &OutBuffer, nbBytes, &NrOfBytesWritten, NULL); //Write encoded buffer to outfile 
 
      if(NrOfBytesRead<FRAME_SIZE) //Break if end of file 
           break; 
 } 
 
 speex_bits_destroy(&bits); //Deallocate 
 speex_encoder_destroy(state); 
 
 CloseHandle(WaveFile); 
 CloseHandle(SpeexFile);
 
 MessageBox(_T("Encoding Done")); 
}  

<p><p>void CRegistratoreDlg::OnDecode() 
{

 SpeexBits bits; 

 void *state; 

 char InBuffer[200]; 
 short OutBuffer[FRAME_SIZE]; 
 char waveheader[50]; 
 
 HANDLE InFile; 
 HANDLE OutFile; 
 
 char nrBytes = 0; 
 int nbBytes = 0; 
 
 DWORD NrOfBytesRead; 
 DWORD NrOfBytesWritten; 
 
 InFile = CreateFile(_T("\\Temp\\tempsound.spx"), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 
 
 //Create file to decode 
 OutFile = CreateFile(_T("\\Temp\\Dai.wav"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); // Create out wave file 
 
 state = speex_decoder_init(&speex_nb_mode); //Init decoder in //narrowband mode 
 
 int tmp=0; 
 speex_decoder_ctl(state, SPEEX_SET_ENH, &tmp); 
 
 speex_bits_init(&bits); //Init out bit buffer 
 
 ReadFile(InFile, waveheader, WAVEHEADER, &NrOfBytesRead, NULL); //Raw copy of wave header 
 
 WriteFile(OutFile, &waveheader, WAVEHEADER, &NrOfBytesWritten, NULL); //from wave file to speexfile 
 
 ReadFile(InFile, &nrBytes, 1, &NrOfBytesRead, NULL); //Read first byte in frame to "nrBytes" 
 
 nbBytes=nrBytes; //"nrBytes" gives info about used code rate 
 
 while(1){ //Decode until end of file  
      ReadFile(InFile, InBuffer, nbBytes, &NrOfBytesRead, NULL); //Read bits to decode 
  
      speex_bits_read_from(&bits, InBuffer, nbBytes); 
 
      speex_decode(state, &bits, OutBuffer); //Decode bits 
 
      WriteFile(OutFile, OutBuffer, FRAME_SIZE*2, &NrOfBytesWritten, NULL); 
  
      if(NrOfBytesRead<nbBytes) //Break if end of file 
           break; 
 } 
 
 speex_bits_destroy(&bits); //Deallocate 
 speex_decoder_destroy(state); 
 
 CloseHandle(InFile); 
 CloseHandle(OutFile); 
 
 MessageBox(_T("Decoding Done"));  
}

--- >8 ----
List archives:  http://www.xiph.org/archives/
Ogg project homepage: http://www.xiph.org/ogg/
To unsubscribe from this list, send a message to 'speex-dev-request at xiph.org'
containing only the word 'unsubscribe' in the body.  No subject is needed.
Unsubscribe messages sent to the list will be ignored/filtered.



More information about the Speex-dev mailing list