查看了<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>对象,分别输出两个音频,一个禁用左声道,一个禁用右声道,达到预期效果。