gpt4 book ai didi

android - 如何确认 opus 编码缓冲区大小?

转载 作者:行者123 更新时间:2023-11-29 00:03:24 24 4
gpt4 key购买 nike

函数 opus_encode 需要帧大小作为参数。在 api 文档中,它说缓冲区大小是每个 channel 的样本数。但是如何确定我应该使用哪种尺寸呢?

我在 android 中使用 opus。采样率 16k,缓冲区大小 1280。当我在编码和解码中将帧大小设置为 640 时,解码文件的长度是原始 pcm 的一半。当我设置为 960 时,解码文件是原始 pcm 的 2/3。但设置为 1280,编码将返回 -1 作为 arg 错误。

当我使用 cool edit 播放解码时,它比原始 pcm 更快。

我的参数一定有问题。是否有人使用 opus 可以帮助我。非常感谢。

最佳答案

Opus编码定义:

opus_int32 opus_encode  ( OpusEncoder *         st,
const opus_int16 * pcm,
int frame_size,
unsigned char * data,
opus_int32 max_data_bytes )

当您指定 frame_size 时,您需要将其设置为 pcm 缓冲区中每个可用 channel 的样本数。

OPUS编解码器支持立体声和单声道信号,相应的编码器配置是调用opus_encoder_create函数时指定的channels参数。

您还需要了解 OPUS 编解码器支持的帧大小。它支持具有 2.5、5、10、20、40 或 60 毫秒音频数据的帧。

1 毫秒的 16kHz 音频是 16 个样本 (16000/1000)。因此,对于单声道,您可以将 frame_size 设置为:

  • 16 * 2.5 = 40(非常罕见)
  • 16 * 5 = 80(罕见)
  • 16 * 10 = 160
  • 16 * 20 = 320
  • 16 * 40 = 640
  • 16 * 60 = 960

OPUS 编解码器不接受其他尺寸。处理 1280 个样本的缓冲区大小的最佳方法是拆分为四个 20ms 数据包或两个 40ms 数据包。

因此,您对从缓冲区接收到的一个缓冲区中的两个或四个数据包进行编码。

关于android - 如何确认 opus 编码缓冲区大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46786922/

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