音频(二) - AudioRecord&AudioTrack

版权声明:本文为原创文章,未经允许不得转载

博客地址:http://blog.csdn.net/kevindgk

GitHub地址:https://github.com/KevinDGK/MyAudioDemo

一、AudioRecord

简介

在Java应用中,AudioRecord类管理着音频来源,使用平台的音频输入硬件来录音。然后,我们可以从AudioRecord类中将录音的数据“拉”出来。其中,我们获取数据的方法有三种:

- read(byte[],int, int)
- read(short[], int, int)
- sread(ByteBuffer, int)

至于选择哪个方法来获取数据,取决于我们需要的数据格式,需要哪种格式就使用哪种方法。

一旦我们创建成功了AudioRecord类并调用了read方法,它就会使用新的录音得到的数据来填充与之相关的音频缓冲区。缓冲区的大小是在构造方法中定义的,长度取决于不会使得有多余的音频没有录制到。

源码分析

  • 构造方法
/**
    构造方法
    - 由于一些无效的参数或者其他错误会抛出IllegalArgumentException,所以在你构造了一个AudioRecord实例之后,需要立刻调用 getState() 方法来判断这个实例的状态是否可以使用。
    参数:
    - audioSource:录音来源,查看MediaRecorder.AudioSource类对录音来源的定义。
        MediaRecorder.AudioSource.DEFAULT   默认音频来源
        MediaRecorder.AudioSource.MIC       麦克风
        MediaRecorder.AudioSource.VOICE_UPLINK  上行线路的声音来源
        ...
        一般情况下,我们使用麦克风即可。
    - sampleRateInHz:采样率,单位Hz(赫兹)。44100Hz是目前唯一一个能够在所有的设备上使用的频率,但是一些其他的例如22050、16000、11025也能够在一部分设备上使用。
    - channelConfig:音频声道的配置(输入)
        AudioFormat.CHANNEL_IN_MONO:单声道
        AudioFormat.CHANNEL_IN_STEREO:立体声
        其中,CHANNEL_IN_MONO可以保证在所有设备上使用。
    - audioFormat:返回的音频数据的编码格式
        AudioFormat.ENCODING_INVALID:无效的编码格式
        AudioFormat.ENCODING_DEFAULT:默认的编码格式
        AudioFormat.ENCODING_PCM_16BIT:每份采样数据为PCM 16bit,保证所有设备支持
        AudioFormat.ENCODING_PCM_8BIT:样本数据格式为PCM 8bit,不保证所有设备支持
        AudioFormat.ENCODING_PCM_FLOAT:单精度浮点样本
        ...
    - bufferSizeInBytes:在录音时期,音频数据写入的缓冲区的整体大小(单位字节),即缓冲区的大小。我们能够从这个缓冲区中读取到不超过缓冲区长度的整块数据。可以通过 getMinBufferSize(int, int, int) 这个方法来决定我们使用的AudioRecord实例所需要的最小的缓冲区的大小,如果我们使用的数值比这个还要小,则会导致AudioRecord实例初始化失败。
*/
public AudioRecord(int audioSource, int sampleRateInHz, int channelConfig, int audioFormat,
            int bufferSizeInBytes);
    • 0
      点赞
    • 3
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值