[Speex-dev] Integrating speex with VideoNet application: Constantbackground noise

Carine Liang carineliang at yahoo.com.sg
Sun Dec 24 17:21:18 PST 2006


Hi,



I'm still unable to get rid of the background noise though I've changed
the PCM samples to 16 bit. 
I'm began to wonder if I can just take the PCM samples and encode them. 

What my application tries to do is to record the voice from a microphone, encode it, send it via the socket to a peer, decode at the peer's side and play the voice. My application works fine without the codec but I need to achieve a lower data rate. Anyone has done that before?

Is there anyone who's deal with encoding and
decoding PCM samples in windows? 

Please help.

Carine

----- Original Message ----
From: John Miles <jmiles at pop.net>
To: Carine Liang <carineliang at yahoo.com.sg>; speex-dev at xiph.org
Sent: Friday, 3 November 2006 12:32:43 AM
Subject: RE: [Speex-dev] Integrating speex with VideoNet application: Constantbackground noise



 
DIV {
MARGIN:0px;}



Yes, 
it's necessary; Speex will encode signed 16-bit PCM data and decode to 
the same format.  See the examples that come with 
it.

 

8-bit audio is not something you would ever want to 
use.

 

-- 
john

RAD 
Game Tools


  -----Original Message-----
From: Carine Liang 
  [mailto:carineliang at yahoo.com.sg]
Sent: Thursday, November 02, 2006 
  12:18 AM
To: John Miles; speex-dev at xiph.org
Subject: Re: 
  [Speex-dev] Integrating speex with VideoNet application: Constantbackground 
  noise



  
  Hi 
  John,

Thanks for your reply. 

Yes, my output device is in 8-bit 
  mode, same as my input mode. I'm actually working in char (8 bit) arrays. Is 
  it necessary to work in signed short integers only? I changed all the short 
  arrays in the example to char. 

Carine


  ----- 
  Original Message ----
From: John Miles <jmiles at pop.net>
To: 
  carineliang at yahoo.com.sg; speex-dev at xiph.org
Sent: Thursday, 2 November 
  2006 2:04:39 PM
Subject: RE: [Speex-dev] Integrating speex with VideoNet 
  application: Constantbackground noise


  DIV {
MARGIN:0px;}


  At 
  first glance it looks like you are opening the output device in 8-bit mode 
  (m_waveFormatEx.wBitsPerSample =8;).  You will need to use 16-bit mode if you expect to write 
  an array of signed short integers to the audio buffer..  8-bit PCM 
  is an unsigned mode, no longer used much these 
  days.

   

  Also, a good debugging trick is to include something like this in your 
  output sample processing loop:

   

      static FILE *hack = 
  fopen("test.raw","wb");

      fwrite(output, 2, FRAME_SIZE, 
  hack);

   

  After your app is closed, there will be a file called "test.raw" 
  in its working directory, which you can load into Sound Forge or a similar 
  audio editing package for closer inspection without relying on your output 
  buffers and playback code to work properly.  
  

   

  -- 
  john

  RAD 
  Game Tools

  
    -----Original Message-----
From: speex-dev-bounces at xiph.org 
    [mailto:speex-dev-bounces at xiph.org]On Behalf Of Carine 
    Liang
Sent: Wednesday, November 01, 2006 9:40 PM
To: 
    speex-dev at xiph.org
Subject: Re: [Speex-dev] Integrating speex with 
    VideoNet application: Constantbackground noise



    
    Hi,

Can 
    someone please help me with my problem below. Any suggestions is 
    appreciated. 

thanks,
Carine


    ----- 
    Original Message ----
From: Carine Liang 
    <carineliang at yahoo.com.sg>
To: speex-dev at xiph.org; 
    speex-dev at xiph.org
Sent: Tuesday, 31 October 2006 1:05:49 PM
Subject: 
    [Speex-dev] Integrating speex with VideoNet application: Constant background 
    noise


    
    Hi,

I am developing a peer-to-peer video conference application 
    which uses speex as a codec for the voice. 

I am new to speex, so 
    please bear with me if I asked the obvious. After I added the encode and 
    decode function to my MFC app, I heard a constant background noise, even 
    when no one is speaking into the microphone. 

#define FRAME_SIZE 
    160

The application is coded in MFC C++. The record buffer is set to 
    be the same as the FRAME_SIZE such that my callback function is called 
    everytime 160 bytes of data is recorded.

Here's what I did in the 
    initialisation (called only once).
m_waveFormatEx.wFormatTag 
    =WAVE_FORMAT_PCM;
m_waveFormatEx.nChannels 
    =1;
m_waveFormatEx.wBitsPerSample =8;
m_waveFormatEx.cbSize 
    =0;
m_waveFormatEx.nSamplesPerSec = 8000;
m_waveFormatEx.nBlockAlign 
    =1;
m_waveFormatEx.nAvgBytesPerSec = 8000;

int quality 
    =8;
speex_bits_init(&bits);
enc_state = 
    speex_encoder_init(&speex_nb_mode);
speex_encoder_ctl(enc_state, 
    SPEEX_SET_QUALITY, &quality);


In my recording callback 
    function
LRESULT RecordSound::OnSoundData(WPARAM wParam, LPARAM 
    lParam)
{
 ....
    dataPtr = (char *)lpHdr 
    ->lpData;
    dataSize = (int)lpHdr 
    ->dwBytesRecorded;

    for(int 
    k=0;k<FRAME_SIZE;k++)
       input[k] = 
    dataPtr[k];     //input is 
    float[FRAME_SIZE]
    
    
    speex_bits_reset(&bits);
    speex_encode(enc_state, 
    input, &bits);
    encByte = 
    speex_bits_write(&bits, cbits, 200);

    //send 
    cbits to peer computer via sockets
}


In the receiver's 
    initialization function, I've initialized the 
    speex_decoder.
speex_bits_init(&bits);
dec_state = 
    speex_decoder_init(&speex_nb_mode);

In the receiver's socket 
    function, it reads from socket and store the data in cbits (char 
    array).
{
    speex_bits_read_from(&bits, cbits, 
    retvalue); //retvalue is 38
    speex_decode(dec_state, 
    &bits, output); //where output is float array

    
    for(int k=0;k<FRAME_SIZE;k++)
       out[k] = 
    output[k];  //out is a char array
    
    
   PostThreadMessage( WM_PLAYSOUND_PLAYBLOCK, FRAME_SIZE, 
    (LPARAM)out );
}







    
    What is the internet to you?
Contribute to the Yahoo! Time Capsule and be a part of internet 
    history. 
    _______________________________________________
Speex-dev mailing 
    list
Speex-dev at xiph.org
http://lists.xiph.org/mailman/listinfo/speex-dev







    
    What is the internet to you?
Contribute to the Yahoo! Time Capsule and be a part of internet 
    history.





  
  What will the world find in 2020?
Leave a part of your 2006 in the Yahoo! 
  Time Capsule. Contribute 
  now!




Send instant messages to your online friends http://asia.messenger.yahoo.com 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.xiph.org/pipermail/speex-dev/attachments/20061224/fc7031e5/attachment.htm


More information about the Speex-dev mailing list