اندروید این امکان را می دهد تا بتوانیم متن را به صدا تبدیل کنیم و علاوه بر آن با زبان دلخواه پخش کنیم.
در بعضی از device ها این قابلیت فعال نمیباشد که از طریق روش زیر در تنظیمات میتوان آن را نصب کرد:
استفاده از این قابلیت بسیار ساده است. اندروید کلاس TextToSpeech را برای این هدف ارائه می دهد. برای استفاده از این کلاس فقط کافی است، شئ از این کلاس را به عنوان نمونه درست کنیم و متد speak را فراخوانی کنیم.
متدهای دیگری هم برای رسیدن به نتیجهی دلخواه کمک میکنند، مثلا میتوانیم زبان، جنس صدا (زیر یا بم بودن) و مشخصههای دیگری را اعمال کنیم.
متد setLanguage
متد setLanguage یک شئ Locale را به عنوان پارامتر می گیرد. این پارامتر می تواند مکانهایی مثل آمریکا، فرانسه، آلمان، چین، ایتالیا و … باشد.
textToSpeech.setLanguage(Locale.UK);
متد getLanguage
این متد یک نمونه lacale را برمیگرداند که زبان را توصیف می کند.
متد isSpeaking
این متد بررسی می کند که آیا موتور TextToSpeech اشغال می باشد یا نه.
متد setPitch
این متد زیر و بمی صدا را برای موتور TextToSpeech تنظیم می کند.
متد setSpeechRate
این متد سرعت صحبت را تنظیم می کند.
متد shutdown
این متد منابع استفاده شده توسط TextToSpeech را آزاد می کند.
متد stop
این متد صحبت را متوقف می کند.
متد Speak
این متد سه پارامتر ورودی میگیرد که شامل:
- text: متنی که میخواهیم خوانده شود.
- mode: میتوانیم یکی از دو حالت TextToSpeech.QUEUE_ADD (بعد از متنهای دیگر خوانده میشود) یا TextToSpeech.QUEUE_FLUSH (متنهای دیگر را متوقف میکند و خودش شروع میشود) را انتخاب کنیم.
- map: نیازی به این فیلد نیست. مقدار آن را null قرار میدهیم.
نمونه کد به صورت زیر است:
textToSpeech.speak("Hello word!", TextToSpeech.QUEUE_FLUSH, null);
TextToSpeech textToSpeech = new TextToSpeech(this, new TextToSpeech.OnInitListener() { @Override public void onInit(int i) { //code run when done loading } });
تبدیل گفتار به متن
در تبدیل گفتار به متن (speech to text) کاربر صحبت میکند، اندروید ضبط میکند و آن را تبدیل به متن میکند.
درست مثل کار کردن با دوربین اینجا هم یک اینتنت میفرستیم و منتظر جواب میمانیم.
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); // prompt text is shown on screen to tell user what to say intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "text"); startActivityForResult(intent, requestCode);
هنگامی که جواب اینتنت آمد در این صورت صحبتهای کاربر را به صورت لیستی از string خواهیم داشت.
@Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); ArrayList<String> list = intent.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); String spokenText = list.get(0); }
در device هایی که قابلیت speech to text وجود ندارد exception گرفته میشود که برای حل این مساله از try/catch استفاده میکنیم:
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); ... try{ }catch (ActivityNotFoundException ex){ //code to handle the exception }