مشروع تطبيق ناطق صوتي برمجة اندرويد

بسم الله الرحمن الرحيم

في هذه الفترة, سوف نعرض عليكم مشاريع مع أكوادها مفتوحة المصدر, وشرح بعض النقاط ..

تستطيع من خلال المشاريع فهم نقاط في البرمجة, وتزيد خبرتك أكبر في برمجة تطبيقات اندرويد, كما يمكنك عمل تجميعة من التطبيقات والمميزات من خلال المشاريع المفتوحة المصدر.

اليوم إن شاء الله مشروع ناطق صوتي, مع خيارات لسرعة الصوت .. وتستطيع كذلك تغيير اللغة لعدة بلاد.

سوف أعرض عليكم الأكواد مباشرة, لأنني أتوقع من خلال متابعتك للمدونة تستطيع بعدها عمل مشروع جديد, وإن تتخطى مستوى مبتدأ في هذا المجال.

معاينة:

project_App_TextToSpeech_programming_android

الأمر بسيط .. لأنها تتصل بكلاسات موجود سابقاً بلغة الجافا. وفي البداية سوف نستخدم في ملف لليوت الرئيسية التالي :

2 TextView, 1 EditText, 1 Spinner and 1 Button .

جميعها تم شرحها سابقاً, عدا عنصر سبينر (Spinner) فهو بمثابة قائمة صغيرة, تستطيع اختيار منها قيمة واحدة من مجموعة من القيم, بمثابة سؤال وله عدة خيارات يمكنك اختيار واحدة فقط لتعرض لك القيمة. يمكنك القول إنها قائمة منسدلة 🙂

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="20dp">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp">

        <EditText
            android:id="@+id/editText1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0.8"
            android:ems="10" >

            <requestFocus />
        </EditText>

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20dp"
            android:layout_weight="0.2"
            android:text="النص:" />
    </LinearLayout>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="تحدث !"
        android:layout_margin="20dp"
        android:layout_gravity="center_horizontal" />

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <Spinner
            android:id="@+id/spinner1"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.8"/>

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20dp"
            android:layout_weight="0.2"
            android:text="السرعة:" />
    </LinearLayout>

</LinearLayout>

اما بالنسبة لملف الجافا الرئيسي .. فهو واضح وسوف أضع سطور التعليقات لبعض النقاط التي تستطيع التعديل فيها حسب ما يناسبك. أمور كثيرة لن أوضحها لأنها أصبحت واضحة بالنسبة لك من خلال دروسنا السابقة.

MainActivity.java

package com.andrody.first_app;

import android.app.Activity;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
public class MainActivity extends Activity implements
        TextToSpeech.OnInitListener,OnItemSelectedListener {

    private TextToSpeech tts;
    private Button buttonSpeak;
    private EditText editText;
    private Spinner speedSpinner,pitchSpinner;

    private static String speed="الافتراضي";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tts = new TextToSpeech(this, this);
        buttonSpeak = (Button) findViewById(R.id.button1);
        editText = (EditText) findViewById(R.id.editText1);
        speedSpinner = (Spinner) findViewById(R.id.spinner1);

//تحميل البيانات من الـ سبينر
        loadSpinnerData();
        speedSpinner.setOnItemSelectedListener(this);

//الضغط على زر تحدث
        buttonSpeak.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                setSpeed();
                speakOut();
            }

        });
    }


    @Override
    public void onInit(int status) {

        if (status == TextToSpeech.SUCCESS) {
// تستطيع من هنا تغيير اللغة UK
            int result = tts.setLanguage(Locale.UK);

            if (result == TextToSpeech.LANG_MISSING_DATA
                    || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                Log.e("TTS", "للأسف لم يتم اعتماده");
            } else {
                buttonSpeak.setEnabled(true);
                speakOut();
            }

        } else { Log.e("TTS", "Initilization فشل!");}

    }

    @Override
    public void onDestroy() {
// ايقاف تحويل الصوت
        if (tts != null) {
            tts.stop();
            tts.shutdown();
        }
        super.onDestroy();
    }
// قائمة السرعة مع سرعة كلاً منها
    private void setSpeed(){
        if(speed.equals("بطيء جداً")){
            tts.setSpeechRate(0.1f);
        }
        if(speed.equals("بطيء")){
            tts.setSpeechRate(0.5f);
        }
        if(speed.equals("الافتراضي")){
            tts.setSpeechRate(1.0f); // السرعة الافتراضية 1.0f
        }
        if(speed.equals("سريع")){
            tts.setSpeechRate(1.5f);
        }
        if(speed.equals("سريع جداً")){
            tts.setSpeechRate(2.0f);
        }

    }

    private void speakOut() {
        String text = editText.getText().toString();
        tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
    }

    private void loadSpinnerData() {
        //البيانات داخل عنصر سرعة سبينر
        List<String> lables = new ArrayList<String>();
        lables.add("بطيء جداً");
        lables.add("بطيء");
        lables.add("الافتراضي");
        lables.add("سريع");
        lables.add("سريع جداً");

        // إنشاء محول لـ سبينر
        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, lables);

        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        // ربط محول  adapter بـ سبينر
        speedSpinner.setAdapter(dataAdapter);

    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position,
                               long id) {
        // بعد اختيار عنصر من قائمة سبينر.. توست
        speed = parent.getItemAtPosition(position).toString();

        Toast.makeText(parent.getContext(), "القد اخترت:" + speed,
                Toast.LENGTH_LONG).show();
    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {

    }
}

في حال تغيير اللغة , هناك عدة لغات معدودة معتمدة .. تستطيع معرفتها من الموقع الرسمي للمطورين :

http://developer.android.com/reference/java/util/Locale.html

عدل بالكود كما يحلو لك .. وأعرضه على المحاكي, لترى نتيجة عملك ..

انتظرونا بكل جديد ومفيد .. والسلام عليكم 🙂

لتحميل التدوينة في كتاب إلكتروني  Download pdf : https://andrody.com/?attachment_id=195

About عبدالقادر عليوي

مواليد 1996 , سوري الجنسية, طالب علم, لدي شغوف كبير في تعلم كل ما يتعلق بالانترنت من تطوير وحماية, أحب القراءة كثيراً .. هدفي نشر العلم بشتى أنواعه ومجالاته, متابع من الدرجة الأولى لـ الدكتور ابراهيم الفقي و الشيخ أحمد ديدات - رحمهم الله -.

Check Also

التقنيات التي نستطيع برمجة تطبيقات والعاب الاندرويد بها

هل أنت محتار من أين تريد البدأ في مجال برمجة التطبيقات للهواتف الذكية أو الألعاب عالية الاداء ؟ تعرف في هذا المقال عن اللغات والتقنيات واختر منها ما يناسبك لدخول هذا المجال

تعلم برمجة تطبيق اندرويد لمدونتك البلوجر (1)

هل لديك تدوينة أو موقع إخباري ؟ أو معرض يعرض الكثير من البيانات من وسائط ؟ وبحاجة لعرضها في تطبيق اندرويد ؟ هذه فرصتك من هنا وللمبتدئين تعلم برمجة تطبيق لمدونتك

عرض صورة في التطبيق من فايربيس

بسم الله الرحمن الرحيم اليوم سيكون شرحنا عن كيفية عرض صورة  في التطبيق من قاعدة …

One comment

  1. تسلم يا غالي ولكم جزيل الشكر ……. إستفدنا الكثير

ضع بصمتك بتعليق يعبر عن امتنانك

هذا الموقع يستخدم Akismet للحدّ من التعليقات المزعجة والغير مرغوبة. تعرّف على كيفية معالجة بيانات تعليقك.