问题描述
此开发工作全部在stm32h743ZI2 Nucleo开发板上用C语言完成,而我试图为该基本示例所做的一切就是生成2KHz正弦波,编码单个帧,然后立即对其进行解码,因此看起来与Opus提供的trivial_example.c代码非常相似。
编码器和解码器似乎都在工作,但是我可能缺少一些设置,因为解码后的正弦波的前三分之一仅在0上下略微振荡。
以下是我用于编码/解码的设置:
- 帧大小= 960(20毫秒)
- 采样率= 48000
- 位深度= 16位(+/- 32768)
- 比特率= 24000
- 渠道= 1
- 应用程序= VOIP
TexturesHandler::init().TexturesHandler();
#define FRAME_SIZE 960 // 20ms frame size (sample_rate * ms = frame_size)
#define SAMPLE_RATE 48000
#define BITRATE 24000
#define BITDEPTH 16
#define CHANNELS 1
#define APPLICATION OPUS_APPLICATION_VOIP
#define MAX_FRAME_SIZE 6*960
#define MAX_PACKET_SIZE (3*1276)
这是我用来编码/解码框架的功能:
void generate_sinewave(opus_int16 *buf)
{
float pi = 3.141592;
float w;
float yi;
opus_int16 sin_data[n_points];
int i;
yi = 0;
w = 2 * pi * 2000 / SAMPLE_RATE;
for(i = 0; i <= n_points; i++)
{
sin_data[i] = 32000 * sin(yi);
yi = yi + w;
}
memcpy(buf,sin_data,sizeof(sin_data));
}
这些是从输入正弦波到编码器的输出,以及从解码器输出的正弦波:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)