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

حزمة npm للمتصفحات و Node: سطر التثبيت، ومكان المفتاح، والبدء السريع.

الـ SDK للويب هو المحرّك مُصرَّفًا إلى WebAssembly، ويعمل في المتصفحات وفي Node 20 أو أحدث. الحزمة هي @quran-lab/tajweedformer على npm، والشيفرة المصدرية متاحة على github.com/Quran-Lab/tajweedformer-web.

التثبيت

npm install @quran-lab/tajweedformer@3.1.3

المفتاح

استخدم مفتاح ويب. مفتاح الويب عامّ بحكم تصميمه: لا يعمل إلا من أصول https التي تحدّدها له بالضبط، ويُسجَّل كل أصل (origin) منها تطبيقًا مستقلًا، وتعرضها البوابة تطبيقًا واحدًا مع اختيار للأصل. وتحتاج الصفحة إلى سياق آمن (secure context): https أو http://localhost.

# .env.local (git-ignored)
VITE_QURANLAB_KEY=qlk_v1_...

في Node، استخدم مفتاح سطح مكتب ومرّر معرّف تطبيقك إلى Client.

Client, model, listen, read

import { TajweedClient } from '@quran-lab/tajweedformer';

const heard = document.querySelector('#heard');
const client = await TajweedClient.create({ key: 'qlk_v1_...' });   // your web key
const model = await client.model();              // downloads the model once, then cached

async function take(from) {                      // one take: the microphone, or a clip
  // ends when the learner stops
  const session = await model.listen({ from, endOnSilenceMs: 1500 });
  for await (const chunk of session.chunks) heard.textContent = chunk.decoded.text;
}
document.querySelector('#listen').onclick = () => take();   // the microphone needs a tap
  • الميكروفون. يطلب listen() الإذن، ويلتقط الصوت بمعدّل أخذ العيّنات الخاص بالجهاز، وينقل هذا المعدّل إلى الجلسة.
  • خارج الخيط الرئيسي. يعمل المحرّك في المتصفحات داخل Worker، فالاستدلال على أي مقطع لا يعطّل صفحتك أبدًا.
  • تنتهي محاولة listen حين تُخفى الصفحة. ابدأ محاولة جديدة حين تصبح الصفحة مرئية من جديد.
  • من دون ميكروفون. يسرد model.sampleClips بضعة مقاطع صوتية قصيرة مرفقة بالنموذج، ويمرّر model.listen({ from: model.sampleClips[0] }) واحدًا منها عبر المسار نفسه. وبهذه الطريقة يعرض اختبارٌ، أو فحصٌ يُجريه مساعد برمجي، مخرجات حقيقية على جهاز لا ميكروفون فيه.
  • صوتك الخاص، أو Node. يحلّ model.session() و session.push(samples) محلّ listen()، وكل ما عدا ذلك يبقى كما هو.

ما يصلك

يحمل كل مقطع chunk.decoded (text، tokens، words، settled، isFinal) و chunk.heads (المخرجات الخام التي اخترتها). وتشرح صفحة ابنِ ملاحظاتك بنفسك ما يعنيه كلٌّ منها.

تجد الأسماء الدقيقة لإصدار الـ SDK لديك في README الحزمة.