آموزش اندروید استودیوآموزش های برنامه نویسی اندروید
آموزش برنامه نویسی اندروید با اندروید استودیو (بخش چهل و هفتم: موتور Speech )
در این بخش به آموزش برنامه نویسی موتور Speech در اندروید می پردازیم.
موتور Speech در اندروید، کار تبدیل متن به گفتار را برای ما انجام می دهد.
تکنولوژی تبدیل متن به گفتار در اندروید، در Sdk اندروید به صورت پیش فرض وجود دارد.
تنها کاری که ما در این جا انجام می دهیم ، فراخوانی آن است.
سعی می کنیم این آموزش را به سادگی به پیش ببریم. پس فقط یک جا برای نوشتن متن ( EditText ) و یک دکمه به لایه اپلیکیشن اندرویدی اضافه می کنیم.
با این کار وقتی بر روی دکمه کلیک می کنیم، متنی که در داخل EditText نوشته ایم ، توسط موتور تبدیل متن به گفتار، خوانده خواهد شد.
برای شروع کار با موتور Speech ، من یک پروژه به نام TextToSpeech_Gsm در اندروید استودیو ایجاد می کنم.
کدهای بخش لایه اپلیکیشن
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.gsm_developers.texttospeech_gsm.MainActivity"> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="textPersonName" android:text="Text" android:ems="10" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="132dp" android:id="@+id/editText" /> <Button android:text="Speech" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:id="@+id/button" /> </RelativeLayout>
حال به سراغ بخش برنامه نویسی یعنی MainActivity.java می رویم تا کدهای مربوطه را بنویسیم.
کلاس لازم برای موتور Speech را به داخل برنامه Import نمایید:
import android.speech.tts.TextToSpeech;
در داخل کلاس MainActivity و خارج از متد onCreate سه شی از کلاس های TextToSpeech و Button و EditText ایجاد می کنم.
همچنین یک متغیر از نوع string نیز برای تبدیل EditText به رشته لازم است تا بتوان آن را در متد ()TextToSpeech به کار برد.
TextToSpeech tts; EditText et; Button MyButton; String text;
سپس در داخل متد ()onCreate دکمه Button و EditText را از قسمت لایه اپلیکیشن به قسمت برنامه نویسی پروژه به شی هایی که ایجاد کردم نسبت می دهم، تا در هنگام باز شدن برنامه معرفی شوند.
et=(EditText)findViewById(R.id.editText); MyButton=(Button) findViewById(R.id.button);
در قسمت بعدی برای شی TextToSpeech که ایجاد کردم باید یک سری مقدار دهی های اولیه انجام دهم.
این مقدار دهی ها شامل زبان مورد نظر برای Speech و کنترل خطاهای انسانی و .. می باشد.
tts=new TextToSpeech(MainActivity.this, new TextToSpeech.OnInitListener() { @Override public void onInit(int status) { // TODO Auto-generated method stub if(status == TextToSpeech.SUCCESS){ int result=tts.setLanguage(Locale.US); if(result==TextToSpeech.LANG_MISSING_DATA || result==TextToSpeech.LANG_NOT_SUPPORTED){ Log.e("error", "This Language is not supported"); } else{ ConvertTextToSpeech(); } } else Log.e("error", "Initilization Failed!"); } });
توسط این بخش از کد بالا، می توانید زبانی که می خواهید را انتخاب نمایید.
int result=tts.setLanguage(Locale.US);
مثلا Locale.UK ، Locale.JAPAN , Locale.ITALY
یک رویداد برای دکمه Button می نویسم تا در هنگام کلیک بر روی آن ، تابع TextToSpeech اجرا شود.
MyButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { ConvertTextToSpeech(); } });
در مرحله ی بعدی باید متد TextToSpeech را کد نویسی نماییم.
برای این کار در ابتدا لازم است رشته ی متنی را از EditText بگیریم.
سپس این رشته بررسی شود و اگر خالی نبود با استفاده از متد ()tts.speak به گفتار تبدیل شود.
اگر خالی بود، رشته برابر مقدار “Content Not Available” قرار داده می شود و این متن به گفتار تبدیل می شود.
private void ConvertTextToSpeech() { // TODO Auto-generated method stub text = et.getText().toString(); if(text==null||"".equals(text)) { text = "Content not available"; } tts.speak(text, TextToSpeech.QUEUE_FLUSH, null); }
کد کامل MainActivity.java
package com.gsm_developers.texttospeech_gsm; import android.content.Intent; import android.speech.tts.TextToSpeech; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import java.util.Locale; public class MainActivity extends AppCompatActivity { TextToSpeech tts; EditText et; Button MyButton; String text; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et=(EditText)findViewById(R.id.editText); MyButton=(Button) findViewById(R.id.button); tts=new TextToSpeech(MainActivity.this, new TextToSpeech.OnInitListener() { @Override public void onInit(int status) { // TODO Auto-generated method stub if(status == TextToSpeech.SUCCESS){ int result=tts.setLanguage(Locale.US); if(result==TextToSpeech.LANG_MISSING_DATA || result==TextToSpeech.LANG_NOT_SUPPORTED){ Log.e("error", "This Language is not supported"); } else{ ConvertTextToSpeech(); } } else Log.e("error", "Initilization Failed!"); } }); MyButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { ConvertTextToSpeech(); } }); } private void ConvertTextToSpeech() { // TODO Auto-generated method stub text = et.getText().toString(); if(text==null||"".equals(text)) { text = "Content not available"; } tts.speak(text, TextToSpeech.QUEUE_FLUSH, null); } }
سلام
توی این قسمت:
else{
ConvertTextToSpeech();
}
برای چی در قسمت else متد رو یه بار اجرا کردین؟
این باعث میشه وقتی برنامه بالا میاد برنامه یه بار بی مورد صدا می کنه
سلام چه طوری باید text to speech روبرای مدیاپلیر ست کرد؟