2012-12-01 136 views
4

我正在使用Portaudio和opus的VOIP客戶端上工作。 我從話筒幀 -encode閱讀作品每一幀,並把它放在一個列表 -pop的第一個元素從列表中對其進行解碼 與portaudioPortaudio + Opus編碼/解碼音頻輸入

-read,如果我做同樣的事情沒有編碼我的聲音它效果很好。但是當我使用作品我的聲音不好,我無法理解的聲音(這是壞的VoIP客戶端)

HandlerOpus::HandlerOpus(int sample_rate, int num_channels) 
    { 
     this->num_channels = num_channels; 
     this->enc = opus_encoder_create(sample_rate, num_channels, OPUS_APPLICATION_VOIP, &this->error); 
     this->dec = opus_decoder_create(sample_rate, num_channels, &this->error); 

     opus_int32 rate; 

     opus_encoder_ctl(enc, OPUS_GET_BANDWIDTH(&rate)); 
     this->encoded_data_size = rate; 
    } 

    HandlerOpus::~HandlerOpus(void) 
    { 
     opus_encoder_destroy(this->enc); 
     opus_decoder_destroy(this->dec); 
    } 

    unsigned char *HandlerOpus::encodeFrame(const float *frame, int frame_size) 
    { 
     unsigned char *compressed_buffer; 
     int ret; 

     compressed_buffer = new (unsigned char[this->encoded_data_size]); 
     ret = opus_encode_float(this->enc, frame, frame_size, compressed_buffer, this->encoded_data_size); 
     return (compressed_buffer); 
    } 

    float *HandlerOpus::decodeFrame(const unsigned char *data, int frame_size) 
    { 
     int ret; 
     float *frame = new (float[frame_size * this->num_channels]); 

     opus_packet_get_nb_channels(data); 
     ret = opus_decode_float(this->dec, data, this->encoded_data_size, frame, frame_size, 0); 
     return (frame); 
    } 

我不能改變我必須使用作品庫。 採樣率是48000,每個緩衝區的幀數是480​​,我嘗試過單聲道和立體聲。

我在做什麼錯?

回答

1

我解決我自己,我改變了配置問題:採樣率,以24000每緩衝框架仍然是480

+3

你能提供此修復一些更深入的瞭解?你使用什麼尺寸的數據包?基於這個答案,這聽起來像是你在尋找一個20ms的數據包,但只能以48kHz的採樣率提供10ms的音頻。將其改爲24kHz意味着480個樣本現在覆蓋20ms。這是否準確?或者我錯過了什麼? – 2012-12-13 20:49:37