Я видел эту ссылку, и нет, пока не использую буфер дрожания, поскольку я пока не могу даже правильно закодировать / отправить / декодировать / воспроизвести один пакет. Я тяну волосы за это!

ользую 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. Я не уверен, что мне здесь не хватает.

Ответы на вопрос(3)

Ваш ответ на вопрос