Linux平台使用OPUS对Audio PCM数据进行编解码

1)Audio编解码入门级小知识,分享给将要学习或者正在学习Audio编解码开发的同学。

2)内容属于原创,若转载,请说明出处。

3)提供相关问题有偿答疑和支持。

Opus编码是一个开源的音频编码格式,具有较高的压缩率和优秀的音质表现。它支持多种采样率和比特率的音频文件。在Opus编码中,最高比特率可以达到510 kbps,而最低则只有1 kbps。这使得Opus编码适用于各种不同的应用场景,包括电话通信、网络流媒体、网络电话、游戏语音等。同时,Opus编码具有低延迟、低失真和高容错性等特点,使其成为一个非常实用和优秀的音频编码格式。但是Opus编解码是有损压缩。目前看小米的很多IPC设备都是使用Opus编解码。

官网:https://www.opus-codec.org/
目前最新版本:opus-1.5.1.tar.gz
基于SigmaStar SSC375平台交叉编译:./configure CC=/tools/toolchain/gcc-11.1.0-20210608-sigmastar-glibc-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc --prefix=/home/opus/opus-1.5.1/__INSTALL --enable-static --host=arm-linux-gnueabihf

那么在/homeopus/opus-1.5.1/__iINSTALL产生如下文件:

编译测试demo:opus-1.5.1/src/opus_demo.c

/toolchain/gcc-11.1.0-20210608-sigmastar-glibc-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc opus_demo.c -lm -o opus_demo -I/home/opus/opus-1.5.1/__INSTALL/include/opus -I/home/opus/opus-1.5.1/silk -I./opus-1.5.1/src/ -I/home/opus/opus-1.5.1/celt -I/home/opus/opus-1.5.1/include -L/home/opus/opus-1.5.1/__INSTALL/lib -lopus

测试:


看下cpu的消耗:1000bit/s,看起来cpu的消耗很小

1500bit/s,看起来cpu的消耗变多了

使用CBR的模式:

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Opus是一种高效的音频编解码器,它支持多种采样率,帧大小和比特率。对于Java开发人员而言,可以使用Java wrapperjopus进行Opus编解码。下面是一个简单的示例,展示如何使用jopus进行Opus解码: ```java import java.nio.ByteBuffer; import com.ibm.media.codec.audio.AudioCodec; public class OpusDecoder { private AudioCodec codec; private ByteBuffer outBuf; public OpusDecoder() { codec = new AudioCodec(); codec.setInputFormat(AudioCodec.getLinearAudioFormat(48000, 16, 2)); codec.setOutputFormat(AudioCodec.getLinearAudioFormat(48000, 16, 2)); codec.open(); outBuf = ByteBuffer.allocate(4096); } public byte[] decode(byte[] input) { ByteBuffer inBuf = ByteBuffer.wrap(input); outBuf.clear(); codec.process(inBuf, outBuf); byte[] output = new byte[outBuf.position()]; outBuf.flip(); outBuf.get(output); return output; } public void close() { codec.close(); } } ``` 在上面的示例中,我们使用了com.ibm.media.codec.audio.AudioCodec类来进行Opus解码。在构造函数中,我们打开了编解码器并设置了输入和输出的音频格式。在decode()方法中,我们将输入数据包装在ByteBuffer中,然后使用编解码进行解码,并将解码后的数据放入一个ByteBuffer中。最后,我们将解码后的数据从ByteBuffer中提取出来,并返回一个字节数组。在close()方法中,我们关闭了编解码器。 需要注意的是,在使用jopus进行Opus解码时,需要先将Opus数据解包成多个Opus帧,然后逐帧进行解码。另外,因为Opus解码后的数据PCM格式的,因此需要使用其他或API将PCM数据转换为适合播放或存储的音频格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值