[Speex-dev] Nothing but rhythm was left after encoding and decoding by speex on ipad(XCode 4.1 48110)
刘华
liuhua1976 at gmail.com
Thu Sep 29 05:08:34 PDT 2011
hi,
I tried to encode the voice data read from AudioQueue and then decode
it. There was nothing but rhythm left, it sounds like robot's voice,
but I cannot recognize any word.
The app was compiled by XCode 4.1. Speex 1.0.5 and 1.2.rc1 gave the
same result. When compiling speex 1.0.5, I added them to Xcode
project, set the Header Search Paths, then compiled successfully. When
compiling speex 1.2.rc1, I included the config.h file generated by the
configure on Mac OS X 10.7.1(add "#include config.h" in arch.h) and
did the same thing with that on speex 1.0.5.
The following is the code I used to encode and decode, it works
properly in Android 3.0:
static int speexo_encode(const void *in_bytes, void *out_bytes, int size)
{
if (!codec_open)
return 0;
int return_value;
speex_bits_reset(&ebits);
//speex_echo_capture(echo_state, (short*)in_bytes, (short*)in_bytes);
//speex_preprocess_run(prep_state, (short*)in_bytes);
speex_encode_int(enc_state, (short*)in_bytes, &ebits);
if(speex_bits_nbytes(&ebits) >= (int)size) {
return_value = 0;
}
else {
return_value = (int)speex_bits_write(&ebits, (char*)out_bytes, size);
}
return return_value;
}
static int speexo_decode(const void *in_bytes, int in_len, void *out_bytes)
{
if (!codec_open)
return 0;
int return_value;
speex_bits_reset(&dbits);
speex_bits_read_from(&dbits, (char *)in_bytes, in_len);
if (0 != speex_decode_int(dec_state, &dbits, (short*)out_bytes)) {
return_value = 0;
}
else {
return_value = dec_frame_size*2;
}
return return_value;
}
Please give your suggestion, thanks.
More information about the Speex-dev
mailing list