آموزش تبدیل متن به گفتار در اندروید

اندروید این امکان را می دهد تا بتوانیم متن را به صدا تبدیل کنیم و علاوه بر آن با زبان دلخواه پخش کنیم.

در بعضی از device ها این قابلیت فعال نمی‌باشد که از طریق روش زیر در تنظیمات می‌توان آن را نصب کرد:

استفاده از این قابلیت بسیار ساده است. اندروید کلاس TextToSpeech را برای این هدف ارائه می دهد. برای استفاده از این کلاس فقط کافی است، شئ از این کلاس را به عنوان نمونه درست کنیم و متد speak را فراخوانی کنیم.

متد‌های دیگری هم برای رسیدن به نتیجه‌ی دلخواه کمک می‌کنند، مثلا می‌توانیم زبان، جنس صدا (زیر یا بم بودن) و مشخصه‌های دیگری را اعمال کنیم.

متد setLanguage

متد setLanguage یک شئ Locale  را به عنوان پارامتر می گیرد. این پارامتر می تواند مکان‌هایی مثل آمریکا، فرانسه، آلمان، چین، ایتالیا و … باشد.

textToSpeech.setLanguage(Locale.UK);

متد getLanguage

این متد یک نمونه  lacale  را برمیگرداند که زبان را توصیف می کند.

متد isSpeaking

این متد بررسی می کند که آیا موتور TextToSpeech  اشغال می باشد یا نه.

متد setPitch

این متد زیر و بمی صدا را برای موتور TextToSpeech تنظیم می کند.

متد setSpeechRate

این متد سرعت صحبت را تنظیم می کند.

متد shutdown

این متد منابع استفاده شده توسط TextToSpeech را آزاد می کند.

متد stop

این متد صحبت را متوقف می کند.

متد Speak

این متد سه پارامتر ورودی می‌گیرد که شامل:

  1. text: متنی که می‌خواهیم خوانده شود.
  2. mode: می‌توانیم یکی از دو حالت TextToSpeech.QUEUE_ADD (بعد از متن‌های دیگر خوانده می‌شود) یا TextToSpeech.QUEUE_FLUSH (متن‌های دیگر را متوقف می‌کند و خودش شروع می‌شود) را انتخاب کنیم.
  3. map: نیازی به این فیلد نیست. مقدار آن را null قرار می‌دهیم.

نمونه کد به صورت زیر است:

textToSpeech.speak("Hello word!", TextToSpeech.QUEUE_FLUSH, null);
برای درست کردن نمونه از سرویس TextToSpeech ، شما باید یک listener را پیاده سازی کنید. این listener وقتی سرویس TTS پایین باشد به شما اطلاع می‌دهد. و مانع از فریز شدن رابط کاربری شما حین استفاده از این سرویس می‌شود.
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
}
Was this article helpful?
Dislike 0
قبلی: پخش ویدئو در اندروید با استفاده از کلاس MediaPlayer
بعدی: جسچرها و حرکات لمسی در اندروید