البدء السريع على Apple
حزمة Swift لنظامي iOS و macOS: سطر التثبيت، ومكان المفتاح، والبدء السريع.
تعمل حزمة Swift على نظامي iOS و macOS في أجهزة Apple silicon. وتستخدم Neural Engine إذا كان الجهاز قد اختبره بمقارنته بالمحرّك الدقيق على المعالج المركزي، وإلا فتعمل بهذا المحرّك على المعالج المركزي. والشيفرة المصدرية متاحة على github.com/Quran-Lab/tajweedformer-apple.
التثبيت
// Package.swift, or in Xcode: File > Add Package Dependencies
.package(url: "https://github.com/Quran-Lab/tajweedformer-apple", from: "3.1.4")
// product TajweedFormer
import TajweedFormerالمفتاح
يستخدم تطبيق iOS مفتاح تطبيقات، وتستخدم نسخته لنظام macOS مفتاح سطح مكتب، فتحتاج إلى مفتاحين. معرّف التطبيق هو معرّف الحزمة (bundle id) الخاص به. أبقِ المفتاح خارج مستودعك:
// Secrets.xcconfig (git-ignored), the target's base configuration
QURANLAB_KEY = qlk_v1_...
// Info.plist: QuranLabKey = $(QURANLAB_KEY)
let key = Bundle.main.object(forInfoDictionaryKey: "QuranLabKey") as? Stringأضف إلى تطبيقك إمكانية App Attest (capability): بها يُثبت تطبيقك تثبيته، ولا تُرفع التسجيلات التي يشاركها المتعلّمون من دونها (مشاركة التسجيلات).
Client, model, listen, read
import TajweedFormer
func quickStart(key: String) async throws {
// once per process
let client = try TajweedClient(key: key)
// downloads the model once, verifies it, opens and warms it
let model = try await client.model()
// asks for the microphone; 1.5 s of silence end the take
let session = try await model.listen(options: .init(endOnSilenceMs: 1500))
for await chunk in session.chunks { // every 320 ms
print(chunk.decoded.text) // what the model heard so far
}
}استدعِ هذه الدالة من زر: Task { try await quickStart(key: key) }.
- الميكروفون. يطلب
listen()الإذن، ويلتقط الصوت بمعدّل أخذ العيّنات الخاص بالجهاز وينقل هذا المعدّل إلى الجلسة، فلا يظهر هنا أي معدّل لأخذ العيّنات. - نهاية المحاولة. إذا ضُبط
endOnSilenceMs، تنتهي المحاولة من تلقاء نفسها بعد 1.5 ثانية من توقّف المتعلّم. ومن دون هذا الخيار، استدعِtry await session.finish(). - المحاولة التالية تبدأ باستدعاء جديد لـ
model.listen(). - الأخطاء. كل خطأ هو
TajweedError، وفيه رمز خطأ ثابت (code)، وسطر ما العمل (fix)، ورابط إلى صفحة الأخطاء.
ما يصلك
يحمل كل مقطع chunk.decoded (النص، وكل رمز مع توقيتاته ودرجة ثقته، وعدد الرموز التي استقرّت) و chunk.heads (المخرجات الخام التي اخترتها). وتشرح صفحة ابنِ ملاحظاتك بنفسك ما يعنيه كلٌّ منها.
تجد الأسماء الدقيقة لإصدار الـ SDK لديك في README الحزمة.