android Text-to-speech and speech to Text

advertisement
Cosc 4/5730
Android
Text to Speech
And Speech To Text
Android
TEXT TO SPEECH
Text to Speech
• In Android 1.6+ there is a native Text-tospeech built into the Android OS.
– In 2.3.3, Menu-> Voice input & output-> Text-tospeech settings
– In 4.X, Settings-> Language and Input -> Text-tospeech output
– You can use the “Listen to an example” to see how
it works.
How it works.
• The Text-to-Speech (TTS) uses a the Pico
engine
– It sends the “speech” to the audio output.
• There is only one TTS engine and it is share
across all the activities on the device.
– Other activities maybe using it
– The user may have overridden the settings in the
preferences as well.
Using the TTS
• First we need to check if the TTS engine is
available.
– We can do this with a Intent to with
ACTION_CHECK_TTS_DATA
• Using startActivityForResult, we then find out if the TTS
engine is working and avialable.
Android.speech.tts
• To use the TTS we need get access to it using the
constructor
• TextToSpeech(Context context,
TextToSpeech.OnInitListener listener)
– The constructor for the TextToSpeech class.
mTts = mTts = new TextToSpeech(this, this);
– First this, use the context of our application
– Likely US-EN
– Second this, the listener.
• … Activity implements OnInitListener
– @override public void onInit(int status)
OnInitListener
• onInit(int status)
– Called to signal the completion of the
TextToSpeech engine initialization.
– Status is either
• TextToSpeech.SUCCESS
– You can use it.
– or
• TextToSpeech.ERROR
– Failure, you can’t use it.
Using the TTS
• To have it speak words
– speak(String text, int queueMode,
HashMap<String, String> params)
• To stop, call stop()
• Shutdown() to release everything
Example
• mTts.speak(“Test”,
TextToSpeech.QUEUE_ADD, null);
– You should hear the word test spoken.
Other methods.
• You can change the pitch and speech rate with
– setPitch(float pitch)
– setSpeechRate(float speechRate)
• To find out if “it” is still speaking
– Boolean isSpeaking()
• To have the speech written to a file
– synthesizeToFile(String text, HashMap<String,
String> params, String filename)
• Remember permission for writing to the file system.
Note
• In the OnPause() method
– You should put at least a stop() call
– You app has lost focus
Example code
• Txt2spk example in github
– Simple text box and button. Type in the words
you want to speak and then press play.
– If you are running the example on a phone
• For fun, use the voice input (microphone on the
keyboard) for the input and then have it read it back to
you. 
Android
SPEECH TO TEXT
Speech To Text
• Like Text to speech, we are going to call on
another Google's voice recognition software.
– Android.speech package
– The simple version uses an intent and there is a dialog
box for the users to know when to speech.
• RecognizerIntent
– With a onActivityResult
• A Note speech recognition doesn’t work in the
emulators.
Simple version code
• First get the recognize intent
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
• Specify the calling package to identify your application (this one is generic for any
class you use)
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,
getClass().getPackage().getName());
• Display an hint to the user in the dialog box
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Say Something!");
• Given an hint to the recognizer about what the user is going to say
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
• Specify how many results you want to receive. The results will be sorted where the
first result is the one with higher confidence. In this case max of 5 results
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 5);
• Now launch the activity for a result
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
Simple version code (2)
• When the recognition is done, results are returned to onActivityResult
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode ==
RESULT_OK) {
• Fill the list view with the strings the recognizer thought it could have
heard, there should be at most 5, based on the call
ArrayList<String> matches =
data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
• Now you deal with results in matches array.
}
• lastly send other results to the super since we are not dealing with them.
super.onActivityResult(requestCode, resultCode, data);
}
SpeechRecognizer class
• A second version is more complex, but also
removes the dialog box
• Which many people want implement their own or just
not have one.
• You will need record_audio permission
– <uses-permission android:name="android.permission.RECORD_AUDIO"/>
• Get the speech recognizer and a
RecognitionListener
– This still uses an intent as well.
• Remember the recognition is done by Google's “cloud”.
SpeechRecognizer
• First get the recognizer
sr =
SpeechRecognizer.createSpeechRecognizer(this);
• Set your listener.
sr.setRecognitionListener(new
Recognitionlistener());
– Listener is on the next slide.
RecognitionListener
• create a Recognitionlistener and implement the following methods
– void onBeginningOfSpeech()
• The user has started to speak.
– void onBufferReceived(byte[] buffer)
• More sound has been received.
– void onEndOfSpeech()
• Called after the user stops speaking.
– void onError(int error)
• A network or recognition error occurred.
• Error codes are covered here
– void onEvent(int eventType, Bundle params)
• Reserved for adding future events.
– void onPartialResults(Bundle partialResults)
• Called when partial recognition results are available.
– void onReadyForSpeech(Bundle params)
• Called when the endpointer is ready for the user to start speaking.
– void onResults(Bundle results)
• Called when recognition results are ready.
– void onRmsChanged(float rmsdB)
• The sound level in the audio stream has changed.
RecognitionListener (2)
• onResults methods
– This is where you would pull out the results from
the bundle
– ArrayList results =
results.getStringArrayList(SpeechRecognizer.RESUL
TS_RECOGNITION);
Start the recognition
• As in the simple version we need an intent to start the
recognition, but we are sending the intent through the
SpeechRecognizer object, we declared in the beginning.
–
get the recognize intent
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
–
Specify the calling package to identify your application
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,getClass().getPackag
e().getName());
–
Given an hint to the recognizer about what the user is going to say
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LA
NGUAGE_MODEL_FREE_FORM);
– Specified the max number of results
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS,5);
– Use our SpeechRecognizer to send the intent.
sr.startListening(intent);
• The listener will now get the results.
Code Examples
• The txt2spk will speak text
• Speak2Text demo shows you more
information on using other languages for voice
recognition, plus will speak the results back to
you.
• speech2txtDemo is simplified voice
recognition
• speech2txtDemo2 is uses the
RecognitionListener.
iSpeech
• There have SDK and API for blackberry,
android, and iphone as well.
– Text to speech
• With many voice options as well
– Speech to text
• Limited to 100 word demo key per application launch.
– License key removes the 100 word limit.
• http://www.ispeech.org/
References
• http://developer.android.com/resources/samples
/ApiDemos/src/com/example/android/apis/app/
TextToSpeechActivity.html
• http://developer.android.com/reference/android
/speech/SpeechRecognizer.html
• http://developer.android.com/resources/samples
/ApiDemos/src/com/example/android/apis/app/
VoiceRecognition.html
• http://stackoverflow.com/questions/6316937/ho
w-can-i-use-speech-recognition-without-theannoying-dialog-in-android-phones
Q&A
Download