2016-08-04 4 views
3

Ich folgte fast jedem Link für Audio-Speichern und Konvertieren von Text, aber ich habe keine Möglichkeit gefunden, wie ich Audio-URL in benutzerdefinierten Recognition ListenerErhalten URI von gespeicherten Audio in OnResults (Bundle-Ergebnis) in Speech RecognitionListener Android

  1. record/save audio from voice recognition intent

  2. How to use Androids' speech to text with audio sample file

und viele andere als welll .... Audio-URL, die ich mit Hilfe von RecognizerIntent hier bekam

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     switch (requestCode) { 
      case REQ_CODE_SPEECH_INPUT: { 
       if (resultCode == getActivity().RESULT_OK && null != data) { 

        ArrayList<String> result = data 
          .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 
        txtSpeechInput.setText(result.get(0)); 
        Uri audioUri = data.getData(); 
        ContentResolver contentResolver = getActivity().getContentResolver(); 
        try { 
         InputStream filestream = contentResolver.openInputStream(audioUri); 
         copyInputStreamToFile(filestream, new File(Environment.getExternalStorageDirectory()+ "/recording.amr")); 
         Log.e("audio", "uri= "+ audioUri); 
        } catch (FileNotFoundException e) { 
         e.printStackTrace(); 
        } 
       } 

       break; 
      } 

     } 
    } 

ich möchte es hier bekommen, weil ich möchte nicht verwenden Google Dialog ich möchte es anpassen, ohne Dialog

@Override 
    public void onResults(Bundle results) { 
     String str = new String(); 
     Log.d("testing1", "onResults " + results); 
     data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); 

     str=data.get(0)+""; 
     result_txt.setText(str); 
     speech.stopListening(); 

     if(speech!=null){ 
      speech.destroy(); 
     } 
    } 

Aber ich bin nicht in der Lage, URL von diesen Bündelergebnissen zu erhalten. Ich habe zwei Anfragen:

und auch viele andere. Es ist nicht die doppelte Frage Leute haben gefragt, diese Frage bereits sondern Lösung, die ihnen gegeben wird mit

startActivityForResult

und dann in oben genannten Code-Snippet die Audio-URL bekommen, aber ich will es bekommen in

onResults (Bundle Ergebnisse)

Plea Frag mich, ob Zweifel da sind. Ich möchte es in Fragment verwenden. Vielen Dank im Voraus !!.

+1

Ich bin mit dem gleichen Problem konfrontiert. Ich brauche. Amr-Datei von OnResult-Methode. und ich bekomme Lösung von nirgendwo. –

+0

hast du das gelöst? –

+0

keine Antwort bisher habe ich auf andere Weise dann –

Antwort

0

ich mache gerade den STT Teil. Ich fragte question und Sie können meine Code-Einrichtung überprüfen, ich denke, dass Sie diesen Code nützlich finden können.

/** 
* Receiving speech input 
* */ 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    switch (requestCode) { 
     case REQUEST_SPEECH_TO_TEXT: { 
      if (resultCode == RESULT_OK && null != data) { 
       ... 
       // the resulting text is in the getExtras: 
       Bundle bundle = data.getExtras(); 
       ArrayList<String> matches = bundle.getStringArrayList(RecognizerIntent.EXTRA_RESULTS); 
       // Get text only 
       if(...) { 
        contentText = matches.get(0); 
        tvContent.setText(contentText); 
       } 
       // Save audio to file 
       else { 
        Uri audioUri = data.getData(); 
        ContentResolver contentResolver = getContentResolver(); 
        try { 
         final File recordFile = new File(fileName); 
         InputStream inputStream = contentResolver.openInputStream(audioUri); 
         OutputStream outputStream = new FileOutputStream(recordFile); 
         // Transfer bytes from in to out 
         byte[] buf = new byte[1024]; 
         int len; 
         while ((len = inputStream.read(buf)) > 0) { 
          outputStream.write(buf, 0, len); 
         } 
         inputStream.close(); 
         outputStream.close(); 
        } catch (FileNotFoundException e) { 
         e.printStackTrace(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
      break; 
     } 

    } 
} 

so "Dateiname" ist, was Sie brauchen und was Sie bekommen. Hoffe, das kann helfen.