android 之录音实现-播放语音

android实现语音;

第一步:设置权限

    <!-- 语音权限 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO" >
    </uses-permission>
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />

第二部:录音实现封装代码:

public class BaseRecorder extends MediaRecorder {
    private static final String LOG_TAG = "BaseRecorder";


    // private ObtainDecibelThread thread;
private Boolean flag = false;
private static final int MIN_INTERVAL_TIME = 2000;// 2s


    private Dialog recordIndicator;
    private static int[] res = { R.drawable.mic_2, R.drawable.mic_3,
            R.drawable.mic_4, R.drawable.mic_5 };


    private Context context;
    private String fileName;
    public BaseRecorder(Context context,String fileName){
        this.context = context;
        this.fileName = fileName;
        setOutputFile(fileName);
        setAudioSource(MediaRecorder.AudioSource.MIC);
        setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    }


    private static BaseRecorder recorder;


    public static BaseRecorder getInstance(Context context,String fileName){
        Log.d(LOG_TAG, "BaseRecorder getInstance()");
        if(recorder != null){
            recorder.release();
        }
//        if(recorder == null){
//            recorder = new BaseRecorder(context,fileName);
//        }else{
//            recorder.reset();
//            recorder.setOutputFile(fileName);
//
//        }
        return new BaseRecorder(context,fileName);


    } ;


public void startRecording() {
        Log.d(LOG_TAG, "start startRecording");
try {
prepare();
} catch (IOException e) {
Log.e(LOG_TAG, "prepare() failed");
}
        initDialogAndStartRecord();
        
        
        Log.d(LOG_TAG, "end startRecording");
}


public void stopRecording() {
        Log.d(LOG_TAG, "start stopRecording");
if (recordIndicator != null) {
recordIndicator.dismiss();
}
        try {
            stop();
            release();
        }catch (Exception e){
            Log.d(LOG_TAG, "stop error",e);
        }finally {


        }
        long intervalTime = System.currentTimeMillis() - startTime;


        
//        System.out.println("fileName:"+fileName);
if (intervalTime < MIN_INTERVAL_TIME) {
Toast.makeText(context, "时间太短!", Toast.LENGTH_SHORT).show();
File file = new File(fileName);
file.delete();


            if(recordCallBack != null){
                recordCallBack.recordNoUse(fileName);
            }
} else {
            if(recordCallBack != null){
                double seconds = (double)intervalTime/1000;
                recordCallBack.recordSuccess(fileName,(int)seconds);
            }
}
        Log.d(LOG_TAG, "end stopRecording");
}
    private long startTime;
private void initDialogAndStartRecord() {
        Log.d(LOG_TAG, "starting record");
        startTime = System.currentTimeMillis();
        start();
}




    @Override
    public void release(){
        Log.d(LOG_TAG, "start release()");
        try {
            super.release();
        }catch (Exception e){
            Log.e(LOG_TAG, " release  failed");
        }
        Log.d(LOG_TAG, "end release()");
    }


    private RecordCallBack recordCallBack;


    public RecordCallBack getRecordCallBack() {
        return recordCallBack;
    }


    public void setRecordCallBack(RecordCallBack recordCallBack) {
        this.recordCallBack = recordCallBack;
    }


    public interface RecordCallBack{


        public void recordSuccess(String fileName,int seconds);


        public void recordNoUse(String fileName);


    }


}

第三部:实现语音播放

// 重新
private BaseRecorder.RecordCallBack recordCallBack = new BaseRecorder.RecordCallBack() {
@Override
public void recordSuccess(String fileName, int second) {
recorderFileName = fileName;
seconds = second;
updateRecordSecondsTV();
// linerlayout.setVisibility(View.VISIBLE);


}


@Override
public void recordNoUse(String fileName) {
recorderFileName = null;
updateRecordSecondsTV();
// linerlayout.setVisibility(View.INVISIBLE);


}
};


// 更新语言秒数
private void updateRecordSecondsTV() {
if (recorderFileName != null && seconds > 0) {
audioEntity = new AudioEntity();
audioEntity.setAudioPath(recorderFileName);
audioEntity.setAudioLength(seconds);
mAudioList.add(audioEntity);
mGVAudioAdapter.notifyDataSetChanged();
sCurrentAudioNum++;
} else {


}
}


// 获取当前时间的图片
private String generateFileName(String type) {
String fileName = "" + System.currentTimeMillis() + type;
return FileUtils.getCachePath("gen") + fileName;
}

//语音实现基本逻辑:









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值