This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

VoLib VAU Output Buffer

Hello,

The vauProcess() function takes an input buffer pointer and a pointer to an output buffer pointer. What is the purpose of the output buffer and how, if at all, does the voice data differ between the input and output buffers after calling vauProcess()? If I go on to do further processing of the voice data, which buffer should I use?

Also, is the VAU module intended for use with the G729 codec?

Chris Johnson

Signalogic 

  • I thought this is already explained in API doc:

    tbool vauProcess ( void *  vauInst,
    linSample *  inSamples,
    linSample **  outSamples,
    ISPHENC1_FrameType *  vauFrameType  
    )

    VAU Processing API, takes samples and generates voice/no-voice(noise) decision.

    Parameters:
    [in]  vauInst  Handle to an algorithm instance.
    [in]  inSamples  Pointer to input linear 16-bit samples buffer, amount of samples read is equal to the configured frame size of VAU at Open/Init time.
    [in,out]  outSamples  Address of pointer to output buffer, caller cannot set this to the address of an un-allocated pointer, appropriate size of buffer needs to be allocated to the configured frame size at Open/Init time. The reason for passing a pointer to the buffer pointer is to allow VAU to change this pointer to some buffer it has been allocated to help prevent inefficient copying. Since VAU delays the signal, it can choose to change the pointer to the one of the buffers allocated to it, for example, when enabled. This buffer can be scratch memory so caller is supposed to create a copy if downstream any modules that are passed the VAU output directly or indirectly and if those modules use scratch that is shared with VAU's allocated scratch.
    [in,out]  vauFrameType  Frame type defined in XDM 1.0 (see <ti/xdais/dm/isphenc1.h>). Input frame type is always expected to be (but not checked) ISPHENC1_FTYPE_SPEECH. Output is either ISPHENC1_FTYPE_SPEECH or ISPHENC1_FTYPE_NODATA (indicating no-voice or noise)

    The input and output buffer data are different. You can do further processing based on the output buffer.

    For G.729AB, it has it is VAD already, that is Annex B.

    Regards, Eric

  • Eric,

    Maybe I'm missing something in the documentation or just not understanding it correctly. I don't see it explained how the output buffer data is different from the input buffer data, and I don't understand why it would be any different. If the vauFrameType variable denotes whether voice was detected or not, then what is the purpose of the output buffer? 

    Thanks,

    Chris

  • Also, is the VAU intended for use with any other codecs, or just as a general-purpose module for application-specific purposes?

  • output buffer is a delayed version of the input buffer, otherwise they are identical.  

  • Ok, thanks. How much of a delay is added? Is it just the amount to prevent voice clipping or is the hangover period also included?

  • VAU is a simple module for voice activity detection. It gives you voice classification per frame based. It is for general purpose only.

    Most of the codecs have their own VAD and generates SID frames with less bit or no transmit at all. The decoder need to understand the SID frame format to generate comfort noise.

    Regards, Eric 

  • I did a simulation and compared input and output PCM, it is 80 samples (10 ms)

  • Thanks Eric, this is all very helpful.