gpt4 book ai didi

c++ - Portaudio + Opus 编码/解码音频输入

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:49:01 24 4
gpt4 key购买 nike

我正在使用 Portaudio 和 opus 开发 VOIP 客户端。我从框架中的麦克风读取- 使用 Opus 对每一帧进行编码并将其放入列表中- 从列表中弹出第一个元素并对其进行解码-用portaudio阅读

如果我在不对声音进行编码的情况下做同样的事情,效果会很好。但是当我使用 Opus 时,我的声音很糟糕,我听不懂声音(这对 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);
}

我无法更改必须使用 Opus 的库。采样率为 48000,每个缓冲区的帧数为 480,我尝试了单声道和立体声。

我做错了什么?

最佳答案

我自己解决了这个问题我更改了配置:采样率到 24000,每个缓冲区的帧数仍然是 480。

关于c++ - Portaudio + Opus 编码/解码音频输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13660796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com