在我的Android应用程序中添加/实现连续语音识别的最佳方法是什么?

时间:2013-12-10 06:59:08

标签: android bluetooth voice-recognition

目前,我的应用程序可用作计算机上客户端应用程序的蓝牙服务器。我按下应用程序上的一个按钮,它会将相应的键(F1-F12)发送到计算机并播放一首歌曲。

我现在想要完成的是向应用程序添加语音命令,以便按钮功能可以通过语音进行,也许通过热门词或按钮启动。例如,说“One”会按下按钮1或发送相同的命令,同样使用kill命令“stop”。

目前,app函数的主要驱动线程是OnTouch方法,它实现了一系列与按钮对应的case语句。

    public boolean onTouch(View view, MotionEvent event) {

     //*** Load animations 
     Animation spinin = AnimationUtils.loadAnimation(this, R.anim.custom_anim);

     Animation linear = AnimationUtils.loadAnimation(this, R.anim.in_out);     


    if(connected) {
        switch(event.getAction()) { 
        case MotionEvent.ACTION_DOWN:
            switch(view.getId()) {



            case R.id.Image_SlideShow:               

                ring();

                mBluetoothService.write('1'); 
                Image1.startAnimation(spinin);
                processBackgroundSlide();

                break;  

            case R.id.Image1:     

                mBluetoothService.write('1'); 
                Image1.startAnimation(spinin);                  
                ring();
                processBackgroundSlide();
                break;

            case R.id.Image2:

                mBluetoothService.write('2'); 
                Image2.startAnimation(spinin);
                ring();
                Image_SlideShow.setImageResource(R.drawable.deep_blue_island_malvives_1920x896);                
                break;

            case R.id.Image3:

                mBluetoothService.write('3'); 
                Image3.startAnimation(spinin);
                ring();

                break;
            case R.id.Image4:                 
                mBluetoothService.write('4'); 
                Image4.startAnimation(spinin);
                ring();

                break;  
            case R.id.Image5:
                mBluetoothService.write('5'); 
                Image5.startAnimation(spinin);
                ring();
                break;

            case R.id.Image6:
                mBluetoothService.write('6'); 
                Image6.startAnimation(spinin);
                ring();
                break;                  

            case R.id.Image7:
                mBluetoothService.write('7'); 
                Image7.startAnimation(spinin);
                ring();

                break;                  


            case R.id.Image8:                 
                mBluetoothService.write('8'); 
                Image8.startAnimation(spinin);
                ring();
                break;

            case R.id.Image9: 

                mBluetoothService.write('9'); 
                Image9.startAnimation(spinin);

                ring();
                break;                  

            case R.id.Image10:                 
                mBluetoothService.write('A'); 
                Image10.startAnimation(spinin);
                ring();
                break;  


            case R.id.Image11:                 
                mBluetoothService.write('B'); 
                Image11.startAnimation(spinin);
                ring();
                break;                  

            case R.id.Image12:                 
                mBluetoothService.write('C'); 
                Image12.startAnimation(spinin);
                ring();
                break;  

            }  // end switch(view.getId())
            break;
        } // end switch(event.getAction())
    } // end if(connected)
    return true;
} // end onTouch(View view, MotionEvent event)

正如您所看到的,每个按钮对应一个数字然后通过蓝牙服务发送,我一直认为通过语音添加类似命令应该是一个简单的实现。

我尝试使用语音到文本来引用一些演示和线程,但我只会导致崩溃。我也引用了this thread involving switch statements,但是当按下任何按钮一次时,会出现多个语音窗口提示。

任何指示或建议都会有所帮助,谢谢你。

我也会将OnActivityResult留在这里以防它可能有所帮助。

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch(requestCode) {
    case REQUEST_CONNECT_DEVICE:
        if(resultCode == Activity.RESULT_OK) {
            // Get Device MAC Address
            String address = data.getExtras().getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS);
            // Get BluetoothDevice Object
            BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
            // Attempt to Connect to Device
            mBluetoothService.connect(device);              
            connected = true;
        }
        break;
    case REQUEST_ENABLE_BT:
        if(resultCode != Activity.RESULT_OK) {
            Log.d(TAG, "BT not enabled");
            Toast.makeText(this, R.string.bt_not_enabled_leaving, Toast.LENGTH_SHORT).show();
            finish();
        }
        break;
    }   // end switch(requestCode)
}  // end protected void onActivityResult

具体而言,我更倾向于如何将语音识别和命令完全实现为一项活动。我看到很多关于将它作为服务使用的例子,但对于Android编程是新手,我没有任何方向。

0 个答案:

没有答案