البدء السريع على Windows و Linux

مكتبة C لنظامي Windows و Linux: طريقة بنائها، ومكان المفتاح، والبدء السريع.

الـ SDK الأصلي (native) واجهة API بلغة C لتطبيقات سطح المكتب والخوادم في نظامي Windows و Linux على x86-64. لا توجد ملفات تنفيذية جاهزة: تُبنى المكتبة من وسم الإصدار الخاص بها باستخدام CMake. والشيفرة المصدرية متاحة على github.com/Quran-Lab/tajweedformer-c.

التثبيت

Linux
git clone --recurse-submodules --branch 3.1.3 https://github.com/Quran-Lab/tajweedformer-c
cd tajweedformer-c
cmake --preset linux && cmake --build --preset linux
Windows
git clone --recurse-submodules --branch 3.1.3 https://github.com/Quran-Lab/tajweedformer-c
cd tajweedformer-c
cmake --preset windows-clang
cmake --build --preset windows-clang

المفتاح

استخدم مفتاح سطح مكتب. معرّف تطبيق Windows هو اسم عائلة الحزمة (package family name) أو AppUserModelID الخاص به، ومعرّف تطبيق Linux هو معرّفه بصيغة reverse-DNS. لا تُصرِّف المفتاح أبدًا ضمن شيفرة مصدرية مشتركة:

# the environment, or your app's config file
QURANLAB_KEY=qlk_v1_...

Client, model, session, read

لا تلتقط مكتبة C الصوت من الميكروفون: يمرّره إليها تطبيقك أو أداة التقاط الصوت في النظام.

#include <stdio.h>
#include "tajweedformer.h"

static void on_chunk(void *user, const TfChunk *chunk) {
  (void)user, puts(chunk->decoded->text);        /* what the model heard so far */
}

static int recite(const char *key) {
  TfClient *client = tf_client_create(
      &(TfClientOptions){.key = key, .app_id = "com.example.quickstart"});
  TfModel *model = tf_client_model(client, NULL);   /* downloaded once, verified, opened */
  TfSession *session = tf_session_create(
      model, &(TfSessionOptions){.on_chunk = on_chunk, .end_on_silence_ms = 1500});
  float samples[1600];                              /* mono float, 100 ms at 16 kHz */
  size_t n;
  while ((n = fread(samples, sizeof *samples, 1600, stdin)) > 0)
    if (tf_session_push(session, samples, (int)n) < 0) break;
  return tf_session_finish(session);
}

مرّر صوت الميكروفون إلى البرنامج عبر أنبوب (pipe) على شكل عيّنات خام أحادية القناة من نوع float، بمعدّل 16 كيلوهرتز. في Windows، شغّل السطر في Command Prompt، لأن Windows PowerShell يغيّر البايتات الخام أثناء مرورها عبر الأنبوب.

Linux
arecord -q -f FLOAT_LE -r 16000 -c 1 -t raw | ./quickstart qlk_v1_...
Windows
ffmpeg -f dshow -i audio="<your microphone>" -ac 1 -ar 16000 -f f32le - | quickstart.exe qlk_v1_...
  • الخيارات. يمكن أن تكون كل بنية خيارات (struct) NULL أو مُصفَّرة، فالصفر هو القيمة الافتراضية لكل حقل.
  • الأخطاء. تُرجع الدالة NULL أو رمز خطأ سالبًا. وتعطيك tf_last_error() الرسالة، و tf_last_error_fix() ما العمل، ورموز الخطأ هي الواردة في صفحة الأخطاء.
  • من دون ميكروفون. تمرّر tf_session_listen أحد المقاطع النموذجية المرفقة بالنموذج عبر المسار نفسه.

ما يصلك

يمثّل chunk->decoded المحاولة حتى الآن (النص، وكل رمز مع توقيتاته ودرجة ثقته)، وتعطي tf_session_heads(session) المخرجات الخام للمحاولة بعد استدعاء tf_session_finish. وتشرح صفحة ابنِ ملاحظاتك بنفسك ما يعنيه كلٌّ منها.

تجد الأسماء الدقيقة لإصدار الـ SDK لديك في README المستودع وفي tajweedformer.h.