天天看点

Android左右声道的控制效果图源码AudioTrack对象的构造左右声道控制封装使用向左右声道单独输出不同的音频数据

查看了<code>AudioTrack</code>的API,提供了<code>play()</code>、<code>pause()</code>、<code>stop()</code>、<code>write()</code>等一系列的方法。

通过<code>write()</code>方法,可以实现将音频数据发送出去(播放出来)。

有三个构造方法

主要参数有如下几个

streamType:以什么形式播放

STREAM_VOICE_CALL

STREAM_SYSTEM

STREAM_RING

STREAM_MUSIC

STREAM_ALARM

STREAM_NOTIFICATION

sampleRateInHz:采样率

channelConfig:声道

AudioFormat.CHANNEL_OUT_MONO:输出单声道音频数据

AudioFormat.CHANNEL_OUT_STEREO:输出双声道音频数据(立体声)

audioFormat:音频数据格式

mode:缓冲模式

MODE_STATIC:一次性将音频载入以后再播放

MODE_STREAM:以流的形式,加载一点就播放一点

把channelConfig的相关参数都看了一遍,没发现有可以指定向某声道发送数据的,只能通过<code>AudioFormat.CHANNEL_OUT_MONO</code>和<code>AudioFormat.CHANNEL_OUT_STEREO</code>选择是输出单声道的音频数据还是双声道的音频数据。

构造的时候不能选择指定声道输出音频,但是有这样一个方法

可以通过把某一个声道的音量设置到最小,达到只想某个声道输出音频的效果。

我自己也有点”呵呵“,但是也没有发现还有别的方法可以实现这样的效果。

这个方法还有一点小问题,在个别手机上,即使将某个声道的声音设置到了最小,也还是会有一点声音,这个我也还没有搞清楚为什么,个人猜测可能和手机硬件有关系。

我这里的缓冲模式使用的<code>MODE_STREAM</code>的形式,以流的形式播放,因为这个逻辑要稍微复杂一点,尤其是暂停以后再继续播放的位置。

也是一个很”呵呵“的做法,但是依然还没有找到更好的方法。

构造两个<code>AudioTrack</code>对象,分别输出两个音频,一个禁用左声道,一个禁用右声道,达到预期效果。

继续阅读