怎样用AACLib V1.0在Android上音频编码解码
来源:互联网 发布:php单双引号的区别 编辑:程序博客网 时间:2024/05/29 15:49
在这里下载相关库文件
V1.0 点击打开链接 (libaac.jar, libaac.so , demo项目)
V1.1 点击打开链接 (更新libaac.so,其他的与V1.0相同)
这几天在 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数据取出来播放或其他用途。
- 怎样用AACLib V1.0在Android上音频编码解码
- 怎样用jquery编码和解码?
- 音频编码解码简介
- android 音频编解码 混音 mp3编码解码 pcm编码解码
- 怎样用jquery编码和解码url
- 怎样用jquery编码和解码url
- 在Android2.2上进行audio音频解码的移植
- Android 编码规范V1.0
- UDA1341 音频编码解码芯片
- 音频编码和解码原理
- 利用开源ZXing库,在android上进行二维码简单的编码和解码
- 在Android 4.0以下机型上支持webp编码和解码
- SBC音频编解码算法在无线音频传输上的简单应用
- speex编解码在android上实现
- speex编解码在android上实现
- speex编解码在android上实现
- speex编解码在android上实现
- speex编解码在android上实现
- 程序员不应该再犯的五大编程错误
- 使用SqlDependency监听SqlServer2005数据库变更通知
- c++ 中的纯虚函数
- SVN的安装配置以及与Myeclipse的整合开发
- C++ 位对齐操作
- 怎样用AACLib V1.0在Android上音频编码解码
- c/c++支持可变参数的函数
- windows程序设计-第五版--读书笔记(2)--宽字符集和Unicode--文中内容摘取
- 关于ORA-00979 不是 GROUP BY 表达式错误的解释
- POJ-1160-Post Office
- 历遍指定文件夹位置查找文件
- Java实现线程池
- oracle wm_concat(column)函数的使用
- sitemap.xml