私はspeexを使用してオーディオデータをエンコードし、UDP経由で送信し、反対側でデコードしています。Speex を使用していくつかのテストを実行したところ、パケットをエンコードした直後にデコードすると、デコードされたデータが元のデータにまったく近くないことがわかりました。バッファの先頭にあるバイトのほとんどは 0 です。したがって、UDP 経由で送信されたオーディオをデコードすると、ノイズだけが得られます。これは私がオーディオをエンコードする方法です:
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 Web サイトのサンプル エンコード/デコード サンプルからのものです。ここで何が欠けているのかわかりません。