آموزش برنامه نویسی اندروید با اندروید استودیو (بخش چهل و هفتم: موتور Speech )

استاندارد

در این بخش به آموزش برنامه نویسی موتور Speech در اندروید می پردازیم.

موتور Speech در اندروید، کار تبدیل متن به گفتار را برای ما انجام می دهد.

تکنولوژی تبدیل متن به گفتار در اندروید، در Sdk اندروید به صورت پیش فرض وجود دارد.

تنها کاری که ما در این جا انجام می دهیم ، فراخوانی آن است.

سعی می کنیم این آموزش را به سادگی به پیش ببریم. پس فقط یک جا برای نوشتن متن ( EditText ) و یک دکمه به لایه اپلیکیشن اندرویدی اضافه می کنیم.

با این کار وقتی بر روی دکمه کلیک می کنیم، متنی که در داخل EditText نوشته ایم ، توسط موتور تبدیل متن به گفتار، خوانده خواهد شد.

برای شروع کار با موتور Speech ، من یک پروژه به نام TextToSpeech_Gsm در اندروید استودیو ایجاد می کنم.

به سراغ لایه اپلیکیشن می روم و از قسمت Paletteها در قسمت Text Fields ، یک Plain Text به داخل لایه اپلیکیشن می کشم.

نام این EditText را Text می گذارم.

سپس یک Button نیز به داخل لایه اپلیکیشن می کشم و نامش را Speech می گذارم.

( دقت نمایید که آیدی EditText ما editText و آیدی دکمه Button ما button است)

کدهای بخش لایه اپلیکیشن

<?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);
    }
}

برنامه را اجرا نمایید و با نوشتن هر متن انگلیسی می توانید، صدای متنی که نوشته اید را بشنوید.