函数opus_encode需要帧大小作为参数。在api doc中,它表示缓冲区大小是每个通道的样本数。 但是如何确定我应该使用哪种尺寸?
我在android中使用opus。采样率16k,缓冲区大小1280.当我在编码和解码时将帧大小设置为640时,解码文件的长度是原始pcm的一半。当我设置为960时,解码文件是原始pcm的2/3。但设置为1280,编码将返回-1作为arg错误。
当我使用酷编辑播放解码时,它比原始pcm快。
我的参数必须有一些东西。 是否有人使用opus可以帮助我。 非常感谢。
答案 0 :(得分:1)
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
缓冲区中每个可用通道的样本数。
OPUS编解码器支持立体声和单声道信号,编码器的相应配置是您在调用channels
功能时指定的opus_encoder_create
参数。
您还需要通过OPUS编解码器了解支持的帧大小。它支持以下帧:2.5,5,10,20,40或60 ms的音频数据。
16kHz的1毫秒音频是16个样本(16000/1000)。因此对于mono,您可以将frame_size指定为:
OPUS编解码器不接受其他尺寸。处理1280个样本的缓冲区大小的最佳方法是分割四个20ms的数据包或两个40ms的数据包。
因此,您从缓冲区接收的一个缓冲区中编码两个或四个数据包。