public class AmrAudioPlayer {
private String path;
private MediaPlayer mMediaPlayer;
private AudioManager mAudioManager;
private IOnAudioPlayerLisenter mOnAudioPlayerLisenter;
private static AmrAudioPlayer mInstance = null;
private static final String TAG = AmrAudioPlayer.class.getSimpleName();
private AmrAudioPlayer(){}
public static AmrAudioPlayer getInstance() {
mInstance = mInstance == null ? new AmrAudioPlayer() : mInstance;
return mInstance;
}
public void play(String path){
this.path = path;
if (TextUtils.isEmpty(path)) {
return;
}
mMediaPlayer = new MediaPlayer();
try {
mMediaPlayer.setDataSource(path);
} catch (IOException e) {
e.printStackTrace();
Log.i(TAG,"播放失败.");
}
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
// 通过异步的方式装载媒体资源
mMediaPlayer.prepareAsync();
//异步资源加载完毕后的事件处理
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// 装载完毕 开始播放流媒体
Log.i(TAG,"开始播放......");
mp.start();
if (mOnAudioPlayerLisenter != null) {
mOnAudioPlayerLisenter.onStart();
}
}
});
//播放完成后的处理
mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
stop();
}
});
//音频播放发生异常时的处理
mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
Log.i(TAG,"音频播放发生错误......");
return false;
}
});
}
/***
* 停止播放
*/
public void stop(){
Log.i(TAG,"停止播放......");
if (null == mMediaPlayer) {
return;
}
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
}
mMediaPlayer.release();
mMediaPlayer = null;
if (null != mOnAudioPlayerLisenter) {
mOnAudioPlayerLisenter.onStop();
}
}
public boolean isPlaying(){
return mMediaPlayer != null && mMediaPlayer.isPlaying();
}
public String getAudioPath(){
return path;
}
public void setIOnAudioPlayerLisenter(IOnAudioPlayerLisenter onAudioPlayerLisenter) {
mOnAudioPlayerLisenter = onAudioPlayerLisenter;
}
/***
*音频播放回调接口
*/
public interface IOnAudioPlayerLisenter{
public void onStart();
/***
* 音频播放停止
*/
public void onStop();
}
}
Amr工具类
public class AmrRecordUtil {
private Context mContext;
/**
* 生成的文件名称
*/
String filename = System.currentTimeMillis()+"";
/**
* 输出文件格式
*/
private static final String AUDIO_RECORDER_FILE_EXT_AMR = ".amr";
/**
* 保存到的文件夹路径
* 弃用,统一使用 FileConstants.getAudioMsgDirPath(context)
*/
// private static final String AUDIO_RECORDER_FOLDER = "Android/data/com.pingan.diablouser/files/audios";
/**
* 生成的临时RAW文件名称
*/
private static final String AUDIO_RECORDER_TEMP_FILE = "record_temp.pcm";
/**
* 采样率
*/
private static final int RECORDER_SAMPLERATE = 8000;
/**
* 声道
*/
private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_MONO;
/**
* 比特率
*/
private static final int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT;
/**
* 录音Record
*/
private AudioRecord recorder = null;
/**
* 缓存区
*/
private int minBufferSize = 0;
/**
* 录音线程
*/
private Thread recordingThread = null;
/**
* 录音状态
*/
private boolean isRecording = false;
/**
* handler,用于向主线程传递消息,更新UI
*/
private Handler mHandler;
/**
* started recording
*/
public static final int MSG_REC_STARTED = 0;
/**
* stopped recording
*/
public static final int MSG_REC_STOPPED = 1