Obtener URI del audio guardado en OnResults(resultado del paquete) en Speech RecognitionListener android
speech-recognition recognizer-intent (1)
Seguí casi todos los enlaces para guardar el audio y convertirlo en texto, pero no encontré ninguna manera de cómo puedo obtener la Url de audio en el Escuchador de reconocimiento personalizado.
grabar / guardar audio desde el intento de reconocimiento de voz
Cómo usar la voz de Androids en texto con archivo de muestra de audio
y muchos otros también ... URL de audio que obtuve aquí con la ayuda de RecognizerIntent
@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;
}
}
}
Quiero obtenerlo aquí porque no quiero usar el diálogo de Google. Quiero personalizarlo sin diálogo
@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();
}
}
Pero no puedo obtener la URL de este paquete de resultados. Tengo dos consultas:
- Por favor, hágamelo saber ¿Cómo puedo lograr el URI guardado de audio en paquetes?
- Cuando modifiqué la voz al texto. Escucha durante mucho tiempo. Igual que Recognition. Si el audio no se graba en 2-3 segundos, dice que no encontró ningún sonido. Lo mismo quiero hacer con la personalizada ya que la escucha durante mucho tiempo. Seguí estos enlaces para la segunda pregunta:
Android: reconocimiento de voz que limita el tiempo de escucha
El reconocimiento de voz deja de escuchar después de unos segundos
y muchos otros también. No es la pregunta duplicada que las personas ya han hecho esta pregunta, pero la solución que se les da es usar
startActivityForResult
y luego obtener la url de audio en el fragmento de código mencionado anteriormente, pero quiero obtenerlo en
onResults (Resultados del paquete)
Por favor, pregúnteme si tiene alguna duda. Quiero usarlo en fragmento. ¡¡Gracias por adelantado!!.
Actualmente estoy haciendo la parte STT. Hice una pregunta y puedes verificar la configuración de mi código, creo que puedes encontrar útil este código.
/**
* 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;
}
}
}
entonces, "nombre de archivo" es lo que necesitas y lo que obtienes. Espero que esto pueda ayudar.