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