Распознавание речи Android и текст на речь стало простым.
implementation ' net.gotev:speech:x.y.z ' Заменить xyz на
Чтобы начать использовать библиотеку, вы должны инициализировать ее в своей деятельности
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 ();
}
} Вы можете найти полностью работающее демо -приложение, которое использует эту библиотеку в каталоге examples . Просто проверьте проект и попробуйте.
Внутри деятельности:
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!" );
} В вашей деятельности onDestroy , добавьте:
@ Override
protected void onDestroy () {
Speech . getInstance (). shutdown ();
}Чтобы предотвратить утечки памяти.
Добавьте это в свой макет:
< 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 > Важно, чтобы SpeechProgressView всегда находилась внутри линейной работы, чтобы функционировать должным образом. Вы можете соответственно отрегулировать ширину и высоту к настройкам высоты стержня (см. Ниже).
Затем, когда вы начинаете распознавание речи, пропустите также SpeechProgressView :
Speech . getInstance (). startListening ( speechProgressView , speechDelegate );Вы можете установить все 5 цветов баров по желанию. Это всего лишь пример:
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 );Внутри деятельности:
Speech . getInstance (). say ( "say something" );Вы также можете предоставить обратный вызов для получения статуса:
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" );
}
});Вы можете настроить различные параметры, используя методы сеттера на экземпляре речи, которые вы можете получить так в любом месте в вашем коде:
Speech . getInstance ()Обратитесь к Javadocs для полной ссылки.
По умолчанию ведение журнала библиотеки отключена. Вы можете включить журнал отладки, вызывая:
Logger . setLogLevel ( LogLevel . DEBUG );где бы вы ни хотели в своем коде. Вы можете настроить уровень детализации от отладки до OFF.
Library Logger использует android.util.Log по умолчанию, поэтому вы получите выход в LogCat . Если вы хотите перенаправить журналы на разные выводы или использовать другой журнал, вы можете предоставить свою собственную реализацию делегата таким образом:
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
}
}); Используйте Speech.getInstance().getSpeechToTextLanguage() и Speech.getinstance().getTextToSpeechVoice() . Проверьте демонстрационное приложение для полного примера.
Используйте Speech.getInstance().getSupportedSpeechToTextLanguages(listener) и Speech.getInstance().getSupportedTextToSpeechVoices() . Проверьте демонстрационное приложение для полного примера.
Используйте Speech.getInstance().setLocale(locale) и Speech.getInstance().setVoice(voice) . Проверьте демонстрационное приложение для полного примера.
Когда вы устанавливаете локаль, голос автоматически изменяется на голос по умолчанию этого языка. Если вы хотите установить определенный голос, не забудьте переоценивать его каждый раз, когда вы меняете локаль.
Спасибо @zagum за оригинальную реализацию представления распознавания речи.
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.
Спасибо Кристиан Петрову за обзор кода, исправления ошибок и идеи улучшения библиотеки.