Android音频子系统源码分析之AudioTrack的使用

网上已有许多朋友对Android音频子系统做了透彻的分析,我这完全是给自己在做学习笔记本文基于Android Ics

AudioTrack的使用实例,在google的源码中已经为我们准备了AudioTrack的测试代码,代码路径如下:

frameworks/base/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/audio/MediaAudioTrackTest.java

源码太长了鸭梨太大了,我随便在该测试代码中抽取了几个API方法,以至于了解AudioTrack是怎么使用的,方便后面的分析。

好吧来看看testSetStereoVolumeMax这个API吧从字面意思理解应该是设置音量了,具体的实现看下面源码

//Test case 1: setStereoVolume() with max volume returns SUCCESS
    @LargeTest
    public void testSetStereoVolumeMax() throws Exception {
        // constants for test
        final String TEST_NAME = "testSetStereoVolumeMax";
        final int TEST_SR = 22050;
        final int TEST_CONF = AudioFormat.CHANNEL_OUT_STEREO;
        final int TEST_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
        final int TEST_MODE = AudioTrack.MODE_STREAM;
        final int TEST_STREAM_TYPE = AudioManager.STREAM_MUSIC;
        
        //-------- initialization --------------
        int minBuffSize = AudioTrack.getMinBufferSize(TEST_SR, TEST_CONF, TEST_FORMAT);
        AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR, TEST_CONF, TEST_FORMAT, 
                minBuffSize, TEST_MODE);
        byte data[] = new byte[minBuffSize/2];
        //--------    test        --------------
        track.write(data, 0, data.length);
        track.write(data, 0, data.length);
        track.play();
        float maxVol = AudioTrack.getMaxVolume();
        assertTrue(TEST_NAME, track.setStereoVolume(maxVol, maxVol) == AudioTrack.SUCCESS);
        //-------- tear down      --------------
        track.release();
    }


从上面的代码我们可以知道当我们使用AudioTrack的时候第一步要做的事情就是初始化AudioTrack,初始化分两部走

1)调用getMinBufferSize get the minimum buffer size required for the successful creation of an AudioTrack

2)创建AudioTrack实例

3)用AudioTrack中的各种API去做各种事,比如说上面的track.write(data, 0, data.length)将数据写入硬件,track.play()播放音频数据

我沿着这几个艰辛的目标回到了AudioTrack这个类的实现frameworks/base/media/java/android/media/AudioTrack.java

getMinBufferSize究竟是怎么实现的,在分析它的源码之前我们需要对它的那三个参数有一定的了解
@param sampleRateInHz:采样率

------------人耳能听到大概是20Hz40000Hz吧
@param channelConfig:声道

------------CHANNEL_OUT_MONO
------------CHANNEL_CONFIGURATION_MONO

------------CHANNEL_OUT_STEREO

----------&

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值