You are on page 1of 5

‫تم نشر التدوينة ‪ 2015-2-20‬مـ بواسطة ‪ Abboudi_Aliwi‬في موقع اندرودي ‪/http://www.andrody.

com‬‬

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

‫بسم ا الرحمن الرحيم‬

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

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

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

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

‫معاينة‪:‬‬
/http://www.andrody.com ‫ في موقع اندرودي‬Abboudi_Aliwi ‫ مـ بواسطة‬2015-2-20 ‫تم نشر التدوينة‬

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

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

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

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="‫لنص‬lll‫ا‬:" />
</LinearLayout>

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="‫حدث‬l‫"! ت‬
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"
/http://www.andrody.com ‫ في موقع اندرودي‬Abboudi_Aliwi ‫ مـ بواسطة‬2015-2-20 ‫تم نشر التدوينة‬

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="‫لسرعة‬lll‫ا‬:" />
</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="‫اضي‬lllll‫;"الفتر‬


@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);

//lll‫ سبينر‬l‫ل‬lllll‫لبيانات من ا‬llllllll‫يل ا‬ll‫تحم‬


loadSpinnerData();
speedSpinner.setOnItemSelectedListener(this);

//‫حدث‬l‫ر ت‬ll‫لى ز‬l‫لضغط ع‬lll‫ا‬


/http://www.andrody.com ‫ في موقع اندرودي‬Abboudi_Aliwi ‫ مـ بواسطة‬2015-2-20 ‫تم نشر التدوينة‬

buttonSpeak.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
setSpeed();
speakOut();
}

});
}

@Override
public void onInit(int status) {

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

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

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

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

private void speakOut() {


String text = editText.getText().toString();
/http://www.andrody.com ‫ في موقع اندرودي‬Abboudi_Aliwi ‫ مـ بواسطة‬2015-2-20 ‫تم نشر التدوينة‬

tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);


}

private void loadSpinnerData() {


//lll‫نصر سرعة سبينر‬ll‫اخل ع‬ll‫لبيانات د‬llllllll‫ا‬
List<String> lables = new ArrayList<String>();
lables.add("llO‫طيء جدا‬l‫;)"ب‬
lables.add("‫طيء‬l‫;)"ب‬
lables.add("‫اضي‬lllll‫;)"الفتر‬
lables.add("l‫ع‬l‫ي‬l‫;)"سر‬
lables.add("llO‫ جدا‬l‫ع‬l‫ي‬l‫;)"سر‬

// lll‫ سبينر‬llll‫ول ل‬l‫نشاء مح‬llll‫إ‬


ArrayAdapter<String> dataAdapter = new
ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, lables);

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

// ‫ول‬l‫بط مح‬ll‫ ر‬adapter lll‫ سبينر‬llll‫ب‬


speedSpinner.setAdapter(dataAdapter);

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

Toast.makeText(parent.getContext(), "‫ترت‬lll‫لقد اخ‬llll‫ا‬:" + speed,


Toast.LENGTH_LONG).show();
}

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

}
}

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

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

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

(: ‫ والسلم عليكم‬.. ‫انتظرونا بكل جديد ومفيد‬

You might also like