我正在使用speex编码一些音频数据并通过UDP发送,并在另一侧解码。 我用speex进行了一些测试,发现如果我在对它进行编码后直接对数据包进行解码,解码后的数据绝不会接近原始数据。缓冲区开始处的大部分字节为0. 因此,当我解码通过UDP发送的音频时,我所得到的只是噪声。 这是怎么了编码音频:speex解码出错
bool AudioEncoder::encode(float *raw, char *encoded_bits)
{
for (size_t i = 0; i < 256; i++)
this->_rfdata[i] = raw[i];
speex_bits_reset(&this->_bits);
speex_encode(this->_state, this->_rfdata, &this->_bits);
int bytesWritten = speex_bits_write(&this->_bits, encoded_bits, 512);
if (bytesWritten)
return true;
return false;
}
这是怎么了解码音频:
float *f = new float[256];
// recvbuf is the buffer I pass to my recv function on the socket
speex_bits_read_from(&this->_bits, recvbuf, 512);
speex_decode(this->state, &this->_bits, f);
我已经签出文档,以及我的大多数代码来自例子编码/解码来自speex网站的样本。 我不知道我在这里错过了什么。
的Speex是一个有损编解码器,所产生的流将是从原始的不同,因为为了你松散信息来实现更好的压缩。 – 2010-11-25 18:23:11
@Paulo Scardine如果我使用正弦波值对数组进行编码,则20〜1个浮点数(一旦解码)全部等于0。我知道这是有损的,但是我失去了大部分数据。如果我有一些正面价值,我也会得到一些负值。 – dotminic 2010-11-25 18:33:13
看起来像一个签名/未签名的数据类型问题。 – 2010-11-25 19:24:08