package com.sinovoice.open.voicewake;
import java.io.File;
import java.lang.ref.WeakReference;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import com.sinovoice.hcicloudsdk.common.HciErrorCode;
import com.sinovoice.open.sys.AccountInfo;
import com.sinovoice.open.sys.HciCloudSysHelper;
/**
* Asr¼����
*
* @author sinovoice
*/
public class HciCloudAsrRecorderActivity extends Activity {
private static final String TAG = HciCloudAsrRecorderActivity.class.getSimpleName();
/**
* HciCloud�����࣬���������ϵͳ��ʼ�����ͷŲ�����
*/
private HciCloudSysHelper mHciCloudSysHelper;
/**
* AsrRecorder�����࣬ �����TTS�����ij�ʼ������ʼ�ϳɣ��ͷŲ�����
*/
private HciCloudAsrRecorderHelper mHciCloudAsrRecorderHelper;
/**
* �������˻���Ϣ
*/
private AccountInfo mAccountInfo;
/**
* �洢·��
*/
public static final String SDCARD_PATH = Environment.getExternalStorageDirectory().getAbsolutePath();
public static final String FOLDER_SEP = File.separator;
public static final String COMPANY_FOLDER = "HciCloud";
public static final String APP_FOLDER = "HciCloudVoiceWake";
public static final String LOG_FOLDER = "log";
public static final String ASR_FOLDER = "asr";
/**
* ��ʾ���
*/
private TextView mResult; //��ʾ���
private TextView mState; //��ʾ״̬
private TextView mError; //��ʾ����
private TextView mThresholdTextView; //��ʾ��ֵ
/**
* ������ť
*/
private Button mBtnRecogRealTimeMode;
/**
* ��ֵ����
*/
private SeekBar mSeekBar;
/**
* ��ֵ��С
*/
private int mShreshold;
/**
* ����¼�����
*/
private boolean mIsRecording;
/**
* UI��Ϣ������
*/
private static Handler mUIHandler = null;
private static class WeakRefHandler extends Handler {
private WeakReference<HciCloudAsrRecorderActivity> ref = null;
public WeakRefHandler(HciCloudAsrRecorderActivity activity) {
ref = new WeakReference<HciCloudAsrRecorderActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
if (ref.get() != null) {
switch (msg.what) {
case HciCloudAsrRecorderHelper.RECORD_STATE:
if (!msg.obj.toString().equalsIgnoreCase(""))
ref.get().mState.setText(msg.obj.toString());
break;
case HciCloudAsrRecorderHelper.RECORD_RESULT:
if (!msg.obj.toString().equalsIgnoreCase(""))
ref.get().mResult.setText(msg.obj.toString());
break;
case HciCloudAsrRecorderHelper.RECORD_ERROR:
if (!msg.obj.toString().equalsIgnoreCase(""))
ref.get().mError.setText(msg.obj.toString());
break;
default:
break;
}
}
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mAccountInfo = AccountInfo.getInstance();
boolean loadResult = mAccountInfo.loadAccountInfo(this);
if (loadResult) {
// ������Ϣ�ɹ�����������
Log.i(TAG, "���������˺ųɹ�");
} else {
// ������Ϣʧ�ܣ���ʾʧ�ܽ���
Log.e(TAG, "���������˺�ʧ�ܣ�����assets/AccountInfo.txt�ļ�����д��ȷ�������˻���Ϣ���˻���Ҫ��www.hcicloud.com������������ע�����롣");
return;
}
mHciCloudSysHelper = HciCloudSysHelper.getInstance();
// �˷������߳������ģ����ҽ����н�����زŻ��������ִ�С�
// �˴�ֻ����ʾ�ϳ������÷���û�жԺ�ʱ�������д�����Ҫ�����߷����̨�߳̽��г�ʼ������
// �������ȵ���HciCloudSys�ij�ʼ������
int sysInitResult = mHciCloudSysHelper.init(this);
if (sysInitResult != HciErrorCode.HCI_ERR_NONE) {
Log.e(TAG, "hci init error, error code = " + sysInitResult);
return;
}
//��ȡ¼����������ʵ��
mHciCloudAsrRecorderHelper = HciCloudAsrRecorderHelper.getInstance();
//����UI��Ϣ��������¼����������ʵ����
mUIHandler = new WeakRefHandler(this);
mHciCloudAsrRecorderHelper.setUIHandler(mUIHandler);
//��ʼ���ؼ�
initView();
}
/**
* ��ʼ���ؼ�
*/
private void initView() {
mResult = (TextView) findViewById(R.id.resultview);
mState = (TextView) findViewById(R.id.stateview);
mError = (TextView) findViewById(R.id.errorview);
mBtnRecogRealTimeMode = (Button) findViewById(R.id.begin_recog_real_time_mode);
mBtnRecogRealTimeMode.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Button btnRecog = (Button)v;
if (!mIsRecording){
//��ʼ��������
initRecorder();
//��ʼ����
boolean ok = mHciCloudAsrRecorderHelper.start();
if (ok) {
btnRecog.setText("ֹͣ����");
mIsRecording = true;
}else {
Toast.makeText(HciCloudAsrRecorderActivity.this, "¼����δ���ڿ���״̬�����Ե�", Toast.LENGTH_SHORT).show();
}
}else {
mHciCloudAsrRecorderHelper.release();
btnRecog.setText("��ʼ����");
mIsRecording = false;
}
}
});
mShreshold = 30;
mThresholdTextView = (TextView) findViewById(R.id.threshold);
mThresholdTextView.setText("��ֵ��" + mShreshold);
mSeekBar = (SeekBar) findViewById(R.id.seekBar1);
mSeekBar.setProgress(mShreshold);
mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
mShreshold = progress;
mThresholdTextView.setText("��ֵ��" + mShreshold);
}
});
}
/**
* ��ʼ��������
*/
public void initRecorder() {
int asrInitResult = mHciCloudAsrRecorderHelper.init(this);
if (asrInitResult != HciErrorCode.HCI_ERR_NONE) {
Log.e(TAG, "asrRecorder init error, error code = " + asrInitResult);
return;
}
}
/**
* ���ط�ֵ
* @return ��ֵ
*/
public int getShreshold() {
return mShreshold;
}
@Override
protected void onDestroy() {
//�ͷ�asr
if (mHciCloudAsrRecorderHelper != null && mIsRecording) {
mHciCloudAsrRecorderHelper.release();
}
//�ͷ�ϵͳ
mHciCloudSysHelper.release();
super.onDestroy();
}
}