O reconhecimento de fala do Android e o texto para a fala facilitada.
implementation ' net.gotev:speech:x.y.z ' Substitua xyz por
Para começar a usar a biblioteca, você deve inicializá -la em sua atividade
public class YourActivity extends Activity {
Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
setContentView ( R . layout . your_layout );
Speech . init ( this , getPackageName ());
}
@ Override
protected void onDestroy () {
// prevent memory leaks when activity is destroyed
Speech . getInstance (). shutdown ();
}
} Você pode encontrar um aplicativo de demonstração totalmente funcional que usa esta biblioteca no diretório examples . Basta verificar o projeto e experimentar.
Dentro de uma atividade:
try {
// you must have android.permission.RECORD_AUDIO granted at this point
Speech . getInstance (). startListening ( new SpeechDelegate () {
@ Override
public void onStartOfSpeech () {
Log . i ( "speech" , "speech recognition is now active" );
}
@ Override
public void onSpeechRmsChanged ( float value ) {
Log . d ( "speech" , "rms is now: " + value );
}
@ Override
public void onSpeechPartialResults ( List < String > results ) {
StringBuilder str = new StringBuilder ();
for ( String res : results ) {
str . append ( res ). append ( " " );
}
Log . i ( "speech" , "partial result: " + str . toString (). trim ());
}
@ Override
public void onSpeechResult ( String result ) {
Log . i ( "speech" , "result: " + result );
}
});
} catch ( SpeechRecognitionNotAvailable exc ) {
Log . e ( "speech" , "Speech recognition is not available on this device!" );
// You can prompt the user if he wants to install Google App to have
// speech recognition, and then you can simply call:
//
// SpeechUtil.redirectUserToGoogleAppOnPlayStore(this);
//
// to redirect the user to the Google App page on Play Store
} catch ( GoogleVoiceTypingDisabledException exc ) {
Log . e ( "speech" , "Google voice typing must be enabled!" );
} No onDestroy da sua atividade, adicione:
@ Override
protected void onDestroy () {
Speech . getInstance (). shutdown ();
}Para evitar vazamentos de memória.
Adicione isso ao seu layout:
< LinearLayout
android : orientation = " vertical "
android : layout_width = " wrap_content "
android : layout_height = " wrap_content "
android : id = " @+id/linearLayout " >
< net .gotev.speech.ui.SpeechProgressView
android : id = " @+id/progress "
android : layout_width = " 120dp "
android : layout_height = " 150dp " />
</ LinearLayout > É importante que o SpeechProgressView esteja sempre dentro de um linearlayout para funcionar corretamente. Você pode ajustar a largura e a altura de acordo com as configurações de altura da barra (veja abaixo).
Então, quando você inicia o reconhecimento de fala, passa também o SpeechProgressView :
Speech . getInstance (). startListening ( speechProgressView , speechDelegate );Você pode definir todas as cores de 5 bar como desejar. Este é apenas um exemplo:
int [] colors = {
ContextCompat . getColor ( this , android . R . color . black ),
ContextCompat . getColor ( this , android . R . color . darker_gray ),
ContextCompat . getColor ( this , android . R . color . black ),
ContextCompat . getColor ( this , android . R . color . holo_orange_dark ),
ContextCompat . getColor ( this , android . R . color . holo_red_dark )
};
speechProgressView . setColors ( colors ); int [] heights = { 60 , 76 , 58 , 80 , 55 };
speechProgressView . setBarMaxHeightsInDp ( heights );Dentro de uma atividade:
Speech . getInstance (). say ( "say something" );Você também pode fornecer um retorno de chamada para receber status:
Speech . getInstance (). say ( "say something" , new TextToSpeechCallback () {
@ Override
public void onStart () {
Log . i ( "speech" , "speech started" );
}
@ Override
public void onCompleted () {
Log . i ( "speech" , "speech completed" );
}
@ Override
public void onError () {
Log . i ( "speech" , "speech error" );
}
});Você pode configurar vários parâmetros usando os métodos setter na instância de fala, que você pode obter assim em qualquer lugar do seu código:
Speech . getInstance ()Consulte Javadocs para obter uma referência completa.
Por padrão, o registro da biblioteca está desativado. Você pode ativar o log de depuração invocando:
Logger . setLogLevel ( LogLevel . DEBUG );onde você quiser no seu código. Você pode ajustar o nível de detalhe de depuração para desativado.
O Logger da Biblioteca usa android.util.Log por padrão, para que você obtenha a saída no LogCat . Se você deseja redirecionar os logs para diferentes saídas ou usar um madeireiro diferente, você pode fornecer sua própria implementação de delegados como esta:
Logger . setLoggerDelegate ( new Logger . LoggerDelegate () {
@ Override
public void error ( String tag , String message ) {
//your own implementation here
}
@ Override
public void error ( String tag , String message , Throwable exception ) {
//your own implementation here
}
@ Override
public void debug ( String tag , String message ) {
//your own implementation here
}
@ Override
public void info ( String tag , String message ) {
//your own implementation here
}
}); Use Speech.getInstance().getSpeechToTextLanguage() e Speech.getinstance().getTextToSpeechVoice() . Verifique o aplicativo de demonstração para um exemplo completo.
Use Speech.getInstance().getSupportedSpeechToTextLanguages(listener) e Speech.getInstance().getSupportedTextToSpeechVoices() . Verifique o aplicativo de demonstração para um exemplo completo.
Use Speech.getInstance().setLocale(locale) e Speech.getInstance().setVoice(voice) . Verifique o aplicativo de demonstração para um exemplo completo.
Quando você define a localidade, a voz é alterada automaticamente para a voz padrão desse idioma. Se você deseja definir uma voz específica, lembre-se de redefini-la toda vez que você altera a localidade também.
Obrigado a @zagum pela implementação original da visão de reconhecimento de fala.
Copyright (C) 2019 Aleksandar Gotev
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Agradecemos a Kristiyan Petrov pela revisão de código, correções de bugs e idéias de melhoria da biblioteca.