您的位置:首页 > 编程语言 > Go语言

基于Dragonboard410c的智能音箱(五)

2017-09-14 15:36 447 查看

前面我们已经简单的实现了一个音乐播放器,接下来就应该把讯飞的语音识别模块给合进去,实现我们的智能语音控制功能。

我们可以设计成这样,在语音控制之前,我们按一下前面实现的按键功能,作为开始输入语音的信号,然后只要识别出我们的几个关键字“play/stop/next/last”,就按照不同的关键字进行相应的操作,如果识别到其他语音信息,就不做任何处理。

下面是我的实现代码:

public class MainActivity extends Activity implements View.OnClickListener {

private Button puase, stop, last, next;
private RadioButton start;
private ListView listView;
private TextView totle, current_time;
private SeekBar progressBar;
private SpeechRecognizer mIat;
private Data data;
private String mEngineType = SpeechConstant.TYPE_CLOUD;
public final static int PLAY = 1;
public final static int STOP = 2;
public final static int NEXT = 3;
public final static int LAST = 4;
private ArrayList<String> save;
private PlayMusicBackgoundService service;
private ServiceConnection connection;
private boolean isstart = true;
private Timer timer;
private int onplay = 0;
private String currentmusic = null;
private boolean firstin = false;

private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
Lastsong();
break;
case 2:
Nextsong();
break;
case 3:
StartOrResume();
break;
}
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initvariable();
request();
timer = new Timer();
mIat = SpeechRecognizer.createRecognizer(this, mlisterner);
}

private void request() {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO}, 1);
}

private String TAG = "SmartSpeakers";
private InitListener mlisterner = new InitListener() {
@Override
public void onInit(int i) {
if (i != ErrorCode.SUCCESS) {
Log.i(TAG, "init fail!!!!");
}
}
};

private void initvariable() {
start = findViewById(R.id.start);
start.setFocusable(false);
last = findViewById(R.id.last);
last.setFocusable(false);
next = findViewById(R.id.next);
next.setFocusable(false);
listView = findViewById(R.id.music);
listView.setFocusable(false);
totle = findViewById(R.id.count_time);
totle.setFocusable(false);
current_time = findViewById(R.id.current_time);
current_time.setFocusable(false);
progressBar = findViewById(R.id.advance);
progressBar.setFocusable(false);
start.setOnClickListener(this);
last.setOnClickListener(this);
next.setOnClickListener(this);

save = new ArrayList<>();
Intent intent = new Intent();
intent.setAction("android.intent.action.BUND");
intent.setPackage("com.thundersoft.boardapk");
intent.putExtra("all", save);
connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
service = (PlayMusicBackgoundService) ((PlayMusicBackgoundService.MyServices) iBinder).getServices();
}

@Override
public void onServiceDisconnected(ComponentName componentName) {

}
};
bindService(intent, connection, BIND_AUTO_CREATE);
if (firstin) {
scanFile();
}
}

private void scanFile() {
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Song";
File file = new File(path);
save.clear();
for (File file1 : file.listFiles()) {
if (file1.getName().endsWith(".mp3")) {
save.add(file1.getName());
}
}
ListAdapter adapter = new ListAdapter(save, this);
listView.setAdapter(adapter);
}

@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.start:
StartOrResume();
break;
case R.id.last:
Lastsong();
break;
case R.id.next:
Nextsong();
break;
}

}

private void StartOrResume() {
if (isstart) {
start.setText("Pause");
isstart = false;
} else {
start.setText("Start");
isstart = false;
}
//以第一首歌为基础开始变化
currentmusic = save.get(0);
action(PLAY, currentmusic);
}

private void Lastsong() {
if (onplay == 0) {
action(LAST, save.get(save.size() - 1));
currentmusic = save.get(save.size() - 1);
onplay = save.size() - 1;
} else {
Log.i("LAST", onplay + "");
action(LAST, save.get(onplay - 1));
currentmusic = save.get(onplay - 1);
onplay = onplay - 1;
}
start.setText("Pause");
isstart = false;
}

private void Nextsong() {
if (onplay == (save.size() - 1)) {
action(NEXT, save.get(0));
currentmusic = save.get(0);
onplay = 0;
Log.i("onlpay", "" + onplay);
} else {
action(NEXT, save.get(onplay + 1));
currentmusic = save.get(onplay + 1);
onplay = onplay + 1;
}
start.setText("Pause");
isstart = false;
}

public void action(int action, String path) {
Intent intent = new Intent(this, PlayMusicBackgoundService.class);
intent.putExtra("action", action);
intent.putExtra("path", path);
startService(intent);
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == 1) {
scanFile();
firstin = true;
}
}

@Override
protected void onDestroy() {
super.onDestroy();
unbindService(connection);
}

public void setParam() {
mIat.setParameter(SpeechConstant.PARAMS, null);
mIat.setParameter(SpeechConstant.ENGINE_TYPE, mEngineType);
mIat.setParameter(SpeechConstant.RESULT_TYPE, "json");
mIat.setParameter(SpeechConstant.LANGUAGE, "en_us");
mIat.setParameter(SpeechConstant.ACCENT, null);
mIat.setParameter(SpeechConstant.VAD_BOS, "3000");
mIat.setParameter(SpeechConstant.VAD_EOS, "1000");
}

private RecognizerListener recognizerListener = new RecognizerListener() {
@Override
public void onVolumeChanged(int i, byte[] bytes) {

}

@Override
public void onBeginOfSpeech() {
Log.i(TAG, "Start Recorder");
}

@Override
public void onEndOfSpeech() {
Log.i(TAG, "End Recorder");
}

@Override
public void onResult(RecognizerResult recognizerResult, boolean b) {
String result = "";
if (b) {
result += recognizerResult.getResultString() + ",";
} else {
result += recognizerResult.getResultString() + "";
}
//Log.i(TAG, result);
/* Gson gson = new Gson();
JsonReader reader = new JsonReader(new StringReader(result));
Log.i(TAG,result);
reader.setLenient(true);
data = gson.fromJson(reader, Data.class);*/
//Log.i(TAG,"value *****"+ data.getWs().get(0).getCw().get(0).getW() + "");
if (result.contains("last") || result.contains("Last")) {
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
} else if (result.contains("Next") || result.contains("next")) {
Message message = new Message();
message.what = 2;
handler.sendMessage(message);
} else if (result.contains("Play") || result.contains("play") || result.contains("stop") || result.contains("Stop")) {
Message message = new Message();
message.what = 3;
handler.sendMessage(message);
}

}

@Override
public void onError(SpeechError speechError) {
Log.i(TAG, "" + speechError.getErrorCode());
}

@Override
public void onEvent(int i, int i1, int i2, Bundle bundle) {

}
};

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == event.KEYCODE_ENTER) {
setParam();
mIat.startListening(recognizerListener);
}
return false;
}
}


OK,大功告成,简单的智能音箱就实现啦!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息