基于 speex 的语音录制
作者:林冠宏 / 指尖下的幽灵
掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8
博客:http://www.cnblogs.com/linguanh/
GitHub : https://github.com/af913337456/
本着开源的精神,如果对你有用,希望您能给予个星星(star) https://github.com/af913337456/SpeexVoiceRecorder
1,直观的
2,隐藏的
实例:
private VoiceRecorderHelper voiceRecorderHelper;
触发:
// R.id.record 这个 VIew 是你的触发 View
findViewById(R.id.record).setOnTouchListener(
new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent motionEvent) {
switch (motionEvent.getAction()){
case MotionEvent.ACTION_DOWN: /** 手指按下 */
voiceRecorderHelper.Action_Down(v,motionEvent);
return true;
case MotionEvent.ACTION_MOVE: /** 移动 */
voiceRecorderHelper.Action_Move(v,motionEvent);
return true;
case MotionEvent.ACTION_UP: /** 抬起 */
voiceRecorderHelper.Action_Up(v,motionEvent);
return true;
}
return false;
}
}
);
初始化:
voiceRecorderHelper =
new VoiceRecorderHelper(
this,
new VoiceRecorderHelper.CallBack()
{
@Override
public String setOutPutPath() {
/** 设置录音结果路径,你的格式也在这里设置 */
return getAudioSavePath("LinGuanHong");
}
@Override
public void onDown(View v) {
/** 纯粹的 down 事件回调 */
}
@Override
public void onMove_in_limit(View v) {
/** 手指移动的范围在限制内 */
}
@Override
public void onMove_out_limit(View v) {
/** 手指移动超过范围,内部做了显示取消的提示 */
}
@Override
public void onUp_start(View v) {
/** 纯粹的 Up 事件回调 */
}
@Override
public void onUp_cancel(View v) {
/** 这个时候已经因为手指移动超过范围取消了录音 */
}
@Override
public void onFinishRecord() {
/** 录音结束 */
}
@Override
public void onRecordSuccess(float len, String savePath) {
/** 录音、解码、保存成功 */
Log.e("aaaaa", "录音的路径 " + savePath + " 长度 " + len);
}
@Override
public void onRecordVolumeChange(int voiceValue) {
/** 录音声音强度的变化,单位分贝 */
}
}
);
}
jni层:编译好 Speex.so 库,使用提供的录制函数。 java层:异步线程录制,获取分贝等数据同步刷新UI