واجهة برمجة التطبيقات لتحويل النص إلى كلام باستخدام الذكاء الاصطناعي التوليدي

باستخدام واجهة GenAI Text to Speech API في "حزمة تعلّم الآلة"، يمكنك تحويل المحتوى النصي إلى كلام مسموع. تستخدم واجهة برمجة تطبيقات تحويل النص إلى كلام نموذج ذكاء اصطناعي توليدي لتقديم تركيب كلام عالي الجودة.

ننصح باستخدام واجهة برمجة التطبيقات "تحويل النص إلى كلام" في "حزمة تعلّم الآلة" عندما يكون ذلك ممكنًا لأنّها توفّر أصواتًا شبيهة جدًا بأصوات البشر، ولكن إذا لم تكن متاحة، يمكنك استخدام واجهة برمجة التطبيقات TextToSpeech في نظام Android الأساسي بدلاً من ذلك.

الإمكانات الأساسية

  • خيارات موحّدة للتنزيل والاستدلال ضمن حزمة تطوير برامج واحدة
  • واجهة برمجة تطبيقات Kotlin-first تستخدم الكوروتين وFlow لبث حالة التشغيل والصوت.

المتطلبات الأساسية

لاستخدام Text to Speech API، يجب استيفاء المتطلبات التالية:

  • أن يكون لديك أحد الأجهزة المتوافقة التالية:
    • ‫Google: ‏ Pixel 8 وPixel 9 وPixel 10 وPixel 11
    • ‫Samsung: ‏Galaxy S25 وGalaxy S26 وGalaxy Z Fold8 وGalaxy Z Fold8 Ultra وGalaxy Z Flip8
  • لديك أحدث إصدار من تطبيق "التعرّف على الكلام وتركيبه" (com.google.android.tts) من Google Play. إذا كان التطبيق غير متوفّر أو قديمًا، ستعرض طريقة checkStatus() القيمة FeatureStatus.UNAVAILABLE عند تنفيذ ميزة "تحويل النص إلى كلام".
  • يستخدم مشروعك الحد الأدنى من إصدار حزمة تطوير البرامج (SDK) ‏(minSdk) وهو 26 أو إصدار أحدث.

البدء

للبدء، أضِف تبعية ميزة "تحويل النص إلى كلام" في "حزمة تعلّم الآلة" إلى ملف build.gradle.kts (أو build.gradle) على مستوى الوحدة:

Kotlin

dependencies {
    // ML Kit GenAI TTS SDK
    implementation("com.google.mlkit:genai-text-to-speech:1.0.0-alpha1")
}

Groovy

dependencies {
    // ML Kit GenAI TTS SDK
    implementation 'com.google.mlkit:genai-text-to-speech:1.0.0-alpha1'
}

دمج واجهة برمجة تطبيقات تحويل النص إلى كلام

لاستخدام واجهة Text to Speech API، اتّبِع الخطوات التالية:

  1. ابدأ عملية إعداد العميل: أنشئ مثيل عميل SpeechSynthesizer من خلال تمرير عنصر إعدادات SpeechSynthesizerOptions. تحتاج فقط إلى نسخة واحدة من العميل لدعم جميع اللغات. تحدّد اللغة المحدّدة في عنصر الخيارات قائمة اللغات التلقائية التي تعرضها طريقة getSupportedVoices().
  2. تنزيل النموذج: تحقَّق من توفّر الصوت المستهدَف. إذا كانت الحالة FeatureStatus.DOWNLOADABLE، يمكنك استدعاء الإجراء download() لتنزيل النموذج الصوتي على الجهاز.
  3. توليف المحتوى: أنشئ عنصر SpeechSynthesizerRequest يحتوي على النص المُدخَل والصوت المستهدَف. استخدِم طريقة synthesize() لإنشاء الصوت وجمع تعديلات حالة التشغيل وأجزاء الصوت.
// Initialize the `SpeechSynthesizer` client.
// One client serves every language. `Locale.US` is only the default list locale.
val options = speechSynthesizerOptions(Locale.US)
val client = SpeechSynthesis.getClient(options)

// Query voices for multiple languages using the same client instance.
val englishVoice = client.getSupportedVoices().first() // Uses the default `Locale.US`
val frenchVoice = client.getSupportedVoices(Locale.FRANCE).first()

// Check and download a voice model (for example, the French voice model).
if (client.checkStatus(frenchVoice) == FeatureStatus.DOWNLOADABLE) {
    client.download(frenchVoice).collect { status -> println("Download status: $status") }
}

// Construct the request.
// The `VoiceInfo` instance, `frenchVoice` here, determines the spoken language.
val request = SpeechSynthesizerRequest(
    input = SpeechSynthesizerRequest.Input.Text("Bonjour tout le monde", frenchVoice),
    audioAttributes = AudioAttributes.Builder()
        .setUsage(AudioAttributes.USAGE_MEDIA)
        .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
        .build()
)

// Speak and collect streaming audio or status.
client.synthesize(request).collect { response ->
    when (response) {
        is SpeechSynthesizerResponse.StatusUpdate -> println("Playback status: ${response.status}")
        is SpeechSynthesizerResponse.AudioAvailable -> println("Audio chunk: ${response.audio.size} bytes")
        is SpeechSynthesizerResponse.Error -> println("Error: ${response.errorCode}")
    }
}

// Release resources when done.
client.close()

الأصوات المتاحة

تتيح واجهة Text to Speech API في "حزمة تعلّم الآلة" استخدام الأصوات التالية. اختَر صوتًا حسب الاسم باستخدام السمة VoiceInfo.name.

  • ‫star02: صوت أنثوي بنبرة متوسطة
  • ‫star04: صوت رجل بنبرة متوسطة إلى عالية
  • star05: صوت رجل بنبرة منخفضة
  • ‫star08: صوت أنثوي بنبرة منخفضة
  • ‫star11: صوت رجل بنبرة متوسطة يبدو شابًا
  • ‫star12: صوت أنثوي، نبرة متوسطة إلى عالية
  • ‫star13: صوت رجل بنبرة متوسطة
  • ‫star16: صوت أنثوي بنبرة منخفضة بعض الشيء

اللغات المتاحة

تتيح واجهة تحويل النص إلى كلام API في حزمة تعلّم الآلة اللغات التالية:

  • العربية (ar-XA)
  • الدانمركية (da-DK)
  • الألمانية (de-DE)
  • الإنجليزية (en-GB)
  • العربية (ar-AE)
  • الإسبانية (es-ES)
  • الإسبانية (es-US)
  • الفرنسية (fr-CA)
  • الفرنسية (fr-FR)
  • الهندية (hi-IN)
  • الإندونيسية (id-ID)
  • الإيطالية (it-IT)
  • اليابانية (ja-JP)
  • الكورية (ko-KR)
  • النرويجية (nb-NO)
  • الهولندية (nl-NL)
  • البولندية (pl-PL)
  • البرتغالية (pt-BR)
  • الروسية (ru-RU)
  • السويدية (sv-SE)
  • التركية (tr-TR)

المشاكل الشائعة في الإعداد

في ما يلي بعض المشاكل الشائعة ونصائح لتحديدها وحلّها:

المشكلة السبب المحتمل الحلّ المقترَح
قائمة الأصوات (من الإجراء getSupportedVoices()) فارغة. الجهاز غير متوافق، أو أنّ تطبيق "التعرّف على الكلام وتركيبه " غير متوفّر أو قديم. تأكَّد من أنّ جهازك متوافق وحدِّث تطبيق "التعرّف على الكلام وتحويله إلى نص".
تعرض الطريقة checkStatus() القيمة FeatureStatus.UNAVAILABLE. الجهاز غير متوافق، أو تطبيق "التعرّف على الكلام وتركيبه " غير متوفّر أو قديم. تأكَّد من أنّ جهازك متوافق وحدِّث تطبيق "التعرّف على الكلام وتحويله إلى نص".
تعرض الطريقة checkStatus() القيمة FeatureStatus.DOWNLOADABLE. لم يتم تنزيل الصوت على الجهاز بعد. استدعِ طريقة download() وانتظر حتى تنتهي قبل استدعاء طريقة synthesize().
تعذُّر التنزيل أو توقُّف تقدّمه لا يتوفر اتصال بالشبكة. يُرجى إعادة المحاولة عندما يكون الجهاز متصلاً بالإنترنت.