我正在使用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