0

サービス クラス内に SpeechRecognizer クラスを作成して、音声を認識し、バックグラウンドで連続して録音および再生するようにしていますが、このコードは機能しませんでした。

どうすればそれを行うことができるか、誰かが私にアイデアを与えることができますか?

これは私のアクティビティクラスです:

public class AudioRecordTest extends Activity
{
private static final String LOG_TAG = "AudioRecordTest";
private static String mFileName = null;
//private RecordButton mRecordButton = null;
private MediaRecorder mRecorder = null;
// private PlayButton   mPlayButton = null;
private MediaPlayer mPlayer = null;
Button record,play;
public static ImageView imageview;
boolean mStartRecording = false;
boolean mStartPlaying = false;
SpeechRecognizer mSpeechRecognizer;
Intent mSpeechRecognizerIntent;
@Override
public void onCreate(Bundle b) {
    super.onCreate(b);
    setContentView(R.layout.activity_main);
    imageview=(ImageView)findViewById(R.id.imageview);
    Intent serviceIntent = new Intent(this, MyService.class);
    startService(serviceIntent);
}}

これは私のサービスクラスです:

 public class MyService extends Service{
private static final String LOG_TAG = null;
boolean mStartRecording;
boolean mStartPlaying;
SpeechRecognizer mSpeechRecognizer;
Intent mSpeechRecognizerIntent;
private MediaRecorder mRecorder = null;
private static String mFileName = null;
private MediaPlayer mPlayer = null;
@Override
public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();
    mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
    mSpeechRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                                     RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,
                                     this.getPackageName());
    mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
    mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
    mFileName += "/audiorecordtest.m4a";
}
@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}
protected class SpeechRecognitionListener implements RecognitionListener
   {

       private final String TAG = null;

    @Override
       public void onBeginningOfSpeech()
       {               
           //Log.d(TAG, "onBeginingOfSpeech"); 
            //Toast.makeText(getApplicationContext(), "Test", 5000).show();
            mStartRecording=true;
            AudioRecordTest.imageview.setImageResource(R.drawable.hearing);
            onRecord(mStartRecording);
       }

       @Override
       public void onBufferReceived(byte[] buffer)
       {

       }

       @Override
       public void onEndOfSpeech()
       {
           //Log.d(TAG, "onEndOfSpeech");


                stopRecording();
                mStartRecording=false;

        }

       @Override
       public void onError(int error)
       {
         //Log.d(TAG, "error = " + error);
          mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
       }

       @Override
       public void onEvent(int eventType, Bundle params)
       {

       }

       @Override
       public void onPartialResults(Bundle partialResults)
       {

       }

       @Override
       public void onReadyForSpeech(Bundle params)
       {
           Log.d(TAG, "onReadyForSpeech"); //$NON-NLS-1$
       }

       @Override
       public void onResults(Bundle results)
       {
           //Log.d(TAG, "onResults"); //$NON-NLS-1$
           //ArrayList<String> matches = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
           // matches are the return values of speech recognition engine
           // Use these values for whatever you wish to do
           mStartPlaying=true;
           AudioRecordTest.imageview.setImageResource(R.drawable.seak);
           onPlay(mStartPlaying);
       }
       @Override
       public void onRmsChanged(float rmsdB)
       {

       }
   }

 private void onRecord(boolean start) {
        if (start) {
            startRecording();
        } else {
            stopRecording();
        }
    }

    private void onPlay(boolean start) {
        if (start) {
            startPlaying();
        } else {
            stopPlaying();
        }
    }

    private void startPlaying() {
        //mPlayer = new MediaPlayer();
        AudioManager audioManager = (AudioManager)getSystemService(AUDIO_SERVICE); 
        SoundPool sp = new SoundPool(10,AudioManager.STREAM_MUSIC,0);
        float actualVolume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        float maxVolume = (float) audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        int explosion = sp.load(mFileName,0);
        float volume = actualVolume / maxVolume;
        sp.play(explosion, volume, volume, 10, 0, 1.45f);

    }

    private void stopPlaying() {
        mPlayer.release();
        mPlayer = null;
    }

    private void startRecording() {
        mRecorder = new MediaRecorder();
        mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
        mRecorder.setOutputFile(mFileName);

        try {
            mRecorder.prepare();
        } catch (IOException e) {
            Log.e(LOG_TAG, "prepare() failed");
        }

        mRecorder.start();
    }

    private void stopRecording() {
        mRecorder.stop();
        mRecorder.release();
        mRecorder = null;
    }}
4

0 に答える 0