导航:首页 > APP软件 > 安卓音频解码器包

安卓音频解码器包

发布时间:2023-03-03 09:23:18

㈠ 怎样用AACLib V1.0在Android上音频编码解码

这几天在 android上的音频项目,顺便把用到的aac编解码库封装了一下,有需要的可以从上面下载。当然是没有本事自己写编解码器的,还是用FFmpeg + FDK_aac来做。下面介绍一下其java接口的使用。java库见libaac.jar文件,把libaac.jar加到 libs目录下,把libaac.so加到 libs/armeabi目录即可使用。

AAC编码:
(1) 创建一个Encoder对象作为成员变量
aac.Encoder encoder;

(2) 初始化它

encoder = new aac.Encoder();
if(! encoder.open(11025, 1))
{
Log.d("mylog", "failed to open encoder !\n");
encoder = null;
}

这里要指定输入音频源(PCM格式)的sampe_rate和channel个数,如果为CHANNEL_OUT_MONO,则channel=1,否则为2。 sample_rate一般设置为11025,因为手机性能有限,设置太高的话也处理不过来,而且处理人声的话11025也是足够了。


(3) 编码

把接收到PCM数据交给encoder来处理即可,要求输入源为ENCODING_PCM_16BIT,即每个sample是16BIT的。这个encoder对象内有2个缓冲区:inbuf, outbuf。显然,在编码时,inbuf就是用于存储接收到的PCM数据,outbuf就是存编码后得到的数据。

int out_size = encoder.encode(in_size);
其返回值out_size,表示在outbuf里的有效数据长度。此时可以把outbuf里的aac数据通过网络发送或其他用途。

其中,用户需要知道encoder每次处理多长的数据,即一个frame的大小。对于单声道MONO来说,每次应该输入2048byte的数据。对于双声道STEREO来说,应该输入4096byte的数据。下面这一行可以根据声道数来计算输入的frame的大小:

int in_size = aac.Encoder.frameSize(1);

AAC解码:
(1) 创建一个Decoder对象作为成员变量

aac.Decoder decoder;

(2) 初始化

decoder = new aac.Decoder();
if( ! decoder.open())
{
Log.d("mylog", "failed to open decoder !\n");
decoder = null;
}

(3) 解码
Decoder对象也有inbuf和outbuf,把待解码的aac frame放到inbuf里

int pcm_size = decoder.decode(aac_size);

解得到数据在outbuf里,其有效长度为上述函数的返回值pcm_size,此时可以把outbuf里的PCM数据取出来播放或其他用途。

阅读全文

与安卓音频解码器包相关的资料

热点内容
创维32e360e怎么看网络电视 浏览:824
js网站加载动画 浏览:411
shelljava 浏览:666
系统文件被删可以还原吗 浏览:835
万方等网站怎么下载 浏览:857
为什么电脑文件显示是写字板 浏览:37
百度网盘打卡压缩文件 浏览:925
英语怎么读的网站 浏览:115
怎么远程改电脑开机密码 浏览:501
可以直接打开压缩文件的浏览器 浏览:654
qq相册一个文件可以存多少张照片 浏览:894
淘宝升级是不是免费的 浏览:819
西安万利网络科技有限公司怎么样 浏览:125
段位只是一个数据多少人吵散了 浏览:722
双网卡上不同网络 浏览:94
拳皇game怎么打压缩文件 浏览:748
有哪些两级配送物流网络 浏览:8
sql目录名加文件名 浏览:446
小学编程教材哪个好 浏览:179
英语词典苹果app 浏览:344

友情链接