这篇文章主要讲的是AudioTrack的用法。
AudioTrack 一般用来实现播放原始音频数据(PCM)
觉得这个类没有什么好说的,咱就直接上代码吧。
步骤一:
配置需要的参数,初始化AudioTrack对象。
我们需要了解一下这些参数
streamType 这个参数表示使用哪种音频管理策略
STREAM_VOCIE_CALL 电话声音
STREAM_SYSTEM 系统声音
STREAM_RING 铃声
STREAM_MUSCI 音乐声
STREAM_ALARM 警告声
STREAM_NOTIFICATION 通知声
sampleRateInHz, 采样率(我在使用AudioRecord实现声音采集一文中说明)
channelConfig, 声道数(我在使用AudioRecord实现声音采集一文中说明)
audioFormat, 量化精度(我在使用AudioRecord实现声音采集一文中说明)
bufferSizeInBytes, 缓存大小(我在使用AudioRecord实现声音采集一文中说明)
mode 播放模式。一种是static方式,另一种是streaming方式。
static方式:需要一次性将所有的数据都写入播放缓冲区,适合播放铃声,较短的音频片段。
streaming方式:按照一定的时间间隔不间断的写入音频数据。(常用这种方式)
private AudioTrack audioTrack;
private int streamType = AudioManager.STREAM_MUSIC;
private int sampleRateInHz = 44100;
private int channelConfig = AudioFormat.CHANNEL_OUT_MONO;
private int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
private int bufferSizeInBytes;
private int mode = AudioTrack.MODE_STREAM;
bufferSizeInBytes = AudioTrack.getMinBufferSize(sampleRateInHz,channelConfig,audioFormat);
audioTrack = new AudioTrack(streamType,sampleRateInHz,channelConfig,audioFormat,bufferSizeInBytes,mode);
步骤二:
还是播放
audioTrack.play();
步骤三:
开启一个子线程,需要不间断的向AudioTrack缓冲区 “写入”数据
步骤四:
释放资源
int len = -1;
try {
while((len = dataInputStream.read(bys)) != -1 ){
audioTrack.write(bys,0,len);
}
audioTrack.stop();
audioTrack.release();
} catch (IOException e) {
e.printStackTrace();
}
AudioTrack读取PCM文件播放声音。
请多多指教
接下来一篇文章我会将带来 将PCM格式存储成WAV格式文件