gpt4 book ai didi

c - 使用 opus_decode_float 使用 Opus API 解码

转载 作者:太空宇宙 更新时间:2023-11-04 04:27:05 25 4
gpt4 key购买 nike

我正在尝试将 OPUS api 的基本编码和解码功能与此主要功能一起使用:

#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <opus/opus.h>
#include <stdio.h>

int main(int argc, char **argv)
{
OpusEncoder *enc;
OpusDecoder *dec;
unsigned char *str;
float frame = 0.32;
int ret = 0;
int error;
float *returned;

if ((str = malloc(4096)) == NULL)
return (-1);
enc = opus_encoder_create (24000, 1, OPUS_APPLICATION_AUDIO, &error);

printf("ret = %d | input = %.2f\n", error, frame);

ret = opus_encode_float(enc, &frame, 480, str, 4096);

printf("ret = %d\n", ret);

dec = opus_decoder_create (24000, 1, &error);
ret = opus_decode_float(dec, str, ret, returned, 480, 0);

printf("ret = %d | res = %.2f\n", ret, returned[0]);

return (0);
}

问题是我试图在编码中传递 0.32 float 并使用 opus_decoder_float 对其进行解码,但是当我尝试打印结果时我只得到 0.00 并且我找不到任何使用此方法的示例具体功能。

我没有收到关于 ret 值的任何错误消息,程序打印:

ret = 0 | input = 0.32
ret = 3
ret = 480 | res = 0.00

如何获取返回的 float 中的 0.32?

最佳答案

返回 未初始化。 opus_decode_float()printf() 接收一个具有不确定值的指针。

  // problem code
returned float *returned;
...
// What value is `returned`?
ret = opus_decode_float(dec, str, ret, returned, 480, 0);
printf("ret = %d | res = %.2f\n", ret, returned[0]);

建议修复,分配内存。 opus_decode_float()

  returned  float         *returned;
...
int frame_size = 480;
int channels = 1; // from `opus_encoder_create (24000, 1, ...`

returned = malloc(sizeof *returned * frame_size * channels);
assert(returned);
ret = opus_decode_float(dec, str, ret, returned, frame_size, 0);

printf("ret = %d | res = %.2f\n", ret, returned[0]);
free(returned);

此外,当我阅读 doc , 下面的pcm 需要一个指向大数组的指针float (frame_size*channels), 而不仅仅是1.

opus_int32 opus_encode_float(OpusEncoder *st, const float *pcm,
int frame_size, unsigned char *data, opus_int32 max_data_bytes)

// Too small?
float frame = 0.32;
ret = opus_encode_float(enc, &frame, 480, str, 4096);

关于c - 使用 opus_decode_float 使用 Opus API 解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40363618/

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