> I'm currently working on the TI DaVinci processor, which has an
> ARM926 processor and a TMS320C64+ DSP in it. I have been using Speex
> 6kbps (narrowband, quality=2, complexity=1, perceptual_enh=0) on the
> DSP C64+ side without any issues; the voice sounds very good for such
> a low bandwidth requirement. However, recently, I tried out the
> 4kbps mode (changing quality to 1) on the DSP and it sounds robotic;
> if I ported the same 4kbps code to use on the ARM926 (GPP) side of
> the DaVinci, it sounds fine (no robotic artifacts).
I assume both builds had fixed-point enabled, right?
> So this leads me
> to think somehow the Speex code is not working properly for 4kbps
> (and lower) on the DSP C64+ processor side (6kbps sounds good as
> mentioned above). I followed the ti speex_C64_test trunk example
> packaged with the Speex code; I used the example config.h and
> Makefile for my build. Am I doing something wrong with the
> compilation of the Speex code for the DSP C64+? I tried changing the
> complexity to 10 and turning on perceptual enhancement and it still
> sounds robotic; again, like I mentioned above, the ARM side sounds
> fine with the 4kbps mode. Please advise. Thanks.
It's strange that it would happen on the C64, which AFAIK is a 32-bit
DSP. Did you test all rates and found 4 kbps to be the only one
problematic? If possible, can you try encoding on one and decoding on
the other, just to see whether the problem is when the encoder or the
decoder? Also, just in case it helps (but I doubt it),
try editing fixed_generic.h and change:
#define SHL32(a,shift) ((a) << (shift))
to
#define SHL32(a,shift) ((spx_int32_t)(a) << (spx_int32_t)(shift))
Cheers,
Jean-Marc