البدء السريع على Android
الـ SDK بلغة Kotlin لنظام Android: سطر التثبيت، ومكان المفتاح، والبدء السريع.
الـ SDK بلغة Kotlin مكتبة AAR لنظام Android (minSdk 26، و arm64-v8a و armeabi-v7a). الحزمة هي ai.quranlab:tajweedformer على Maven Central، والشيفرة المصدرية متاحة على github.com/Quran-Lab/tajweedformer-android.
التثبيت
// settings.gradle.kts: mavenCentral() in the repositories
// app/build.gradle.kts
dependencies {
implementation("ai.quranlab:tajweedformer:3.1.5")
}المفتاح
استخدم مفتاح تطبيقات. معرّف التطبيق هو applicationId الخاص به في Gradle. أبقِ المفتاح خارج مستودعك:
# local.properties (git-ignored)
QURANLAB_KEY=qlk_v1_...اقرأ المفتاح في Gradle وضعه في حقل BuildConfig أو في عنصر نائب في ملف البيان (manifest placeholder)، ثم مرّره إلى الـ SDK عند تشغيل التطبيق.
Client, model, listen, read
suspend fun quickStart(context: Context, heard: TextView) {
// your key; one Client per process
val client = TajweedClient(context, "qlk_v1_...")
// the first run downloads and verifies the model
val model = client.model()
// asks for the microphone itself; ends 1.5 s after the learner stops
val session = model.listen(TajweedSessionOptions(endOnSilenceMs = 1500))
// every chunk: what the model heard so far
session.chunks.collect { chunk -> heard.text = chunk.decoded.text }
}هذه هي الاستدعاءات الأربعة في كل حزمة SDK من Quran Lab.
- الميكروفون. يطلب
model.listen()إذنandroid.permission.RECORD_AUDIOعند الحاجة. وإذا رُفض الإذن، فالخطأ هوmicrophone_denied. ويلتقط الصوت بمعدّل أخذ العيّنات الخاص بالجهاز، فلا يظهر أي معدّل لأخذ العيّنات في شيفرتك. - نهاية المحاولة. إذا ضُبط
endOnSilenceMs، تنتهي المحاولة من تلقاء نفسها حين يعقب الكلامَ صمتٌ بالمدة المحدّدة فيه: يحمل آخر مقطعdecoded.isFinal، ويُرجعsession.finish()رؤوس الإخراج (heads) لهذه المحاولة. ومن دون هذا الخيار تستمر المحاولة حتى استدعاءfinish()أوcancel(). - الخلفية. تنتهي محاولة
listenحين يخرج التطبيق من الواجهة. ابدأ محاولة جديدة حين يعود التطبيق إليها. - صوتك الخاص. يحلّ
model.session()وsession.push(samples)محلّlisten()، وكل ما عدا ذلك يبقى كما هو.
ما يصلك
كل 320 مللي ثانية يصل مقطع فيه chunk.decoded (المحاولة حتى الآن: text، tokens، words، settled، isFinal) و chunk.heads (المخرجات الخام التي اخترتها). وتشرح صفحة ابنِ ملاحظاتك بنفسك ما يعنيه كلٌّ منها.
تجد الأسماء الدقيقة لإصدار الـ SDK لديك في README الحزمة.