AudioRecorder实时录制mp3格式音频

        在讲述正文以前首先介绍有关音频的一些知识。
1、riff/wav/pcm/raw/aac/mp3
        riff其实就是一种文件描述的格式;pcm就是媒体文件数据的元数据,直接记录声音的内容;wav文件就采用了riff的描述,前面44字节就是riff描述内容,wav=riff+pcm;raw=pcm;mp3是一种音频的压缩编码,就是将pcm通过算法进行压缩;aac也是一种高级音频编码,相对于mp3,aac格式的音频更佳,文件更小,不足之处在于它属于有损压缩的格式。
2、MediaRecorder/audioRecord区别
        MediaRecorder是系统提供常用的录音类,该类可以实现音频录制生成文件;audioRecord也是系统提供的录音类,但是它可以直接捕获音频流,开发者可以实时随意处理其内容,常见场景比如语音聊天/tom猫/k歌。

        介绍完基础知识,下面进入正文,如何实时录制mp3音频,现如今转化音频为MP3的框架使用的最多的是lame框架(利用C语言是实现的),在Android和IOS中均可使用。
        我们使用的是lame框架进行mp3的格式转换,由于它是C语言编写的,无法在Android中直接使用,我们必须使用Jni的方法来调用lame,在这里就不介绍Jni的使用方法了,使用Jni的方法我们主要是为了得到一个So文件,得到So文件以后,我们load至系统中就可以调用对应的方法,这里我使用的一个现成的so文件来进行lame框架中格式转化的方法,下面进入详细的代码。

一、引入So文件

        使用So文件必须将So文件引入至系统中,在这里简要介绍一下如何在Android Stuio中引入so文件,有两种方式:
(1)按照As中默认路径存放,将so文件存放至main文件夹(与java文件文件夹同级)下,与原先eclipse一样即可
(2)配置so文件的存放路径,将配置写在app的android节点之下,具体代码如下:

android{
    ...
    /*将so文件放置libs文件夹时,需要配置,防止main/jniLibs时一定不能配置 */
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
}

引入so文件的项目图:
如下图,引入so文件

二、工具类源码代码结构

        引入了so文件以后,接下来就是实际上的录音工具类的编写了,首先贴上录音工具类的代码结构图。

三、源码解析

待续…

四、总结

        本项目主要使用的jni的方法调用libmp3的框架来进行实时的录音录制,使用的技术主要有jni、AudioRecord等的技术,demo源码可在Android 实时录制音频为MP3格式demo

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章