البدء السريع على الويب
حزمة 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 الحزمة.