class PCMPlayer extends Thread {
protected AudioTrack mAudioTrack;
protected int mMiniBufferSize;
protected byte[] mBuffer;
File file;
FileInputStream in;
/**
* @param filePath 文件路径
* @param fileName 文件名称
* */
public void init(String filePath , String fileName) {
try {
file = new File(filePath, fileName);
in = new FileInputStream(file);
/**
* 参数1:采样率 根据录音的采样率自定义
* 参数2:声道 {@link AudioFormat.CHANNEL_OUT_MONO}单声道 {@link AudioFormat.CHANNEL_OUT_STEREO} 双声道
* 参数3:比特率 {@link AudioFormat.ENCODING_PCM_16BIT} {@link AudioFormat.ENCODING_PCM_8BIT}
* */
mMiniBufferSize = AudioTrack.getMinBufferSize(16000,
AudioFormat.CHANNEL_OUT_MONO, // CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 16000,
AudioFormat.CHANNEL_OUT_MONO, // CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
mMiniBufferSize,
AudioTrack.MODE_STREAM);
mBuffer = new byte[mMiniBufferSize];
} catch (Exception e) {
e.printStackTrace();
}
}
public void run() {
mAudioTrack.play();
int read = -1 ;
try {
while ((read = in.read(mBuffer)) != -1) {
try {
mAudioTrack.write(mBuffer, 0, read);
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
}
mAudioTrack.stop();
mAudioTrack = null;
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
调用:
PCMPlayer player = new PCMPlayer() ;
player.init( "/sdcard/" , "audio-record.wav");
player.start();