للحصول على خط أنابيب ميكروفون iOS 26 مباشر، تحقق من الجهاز ودعم اللغة، وقم بإعداد أصول النموذج، واحصل على تنسيق PCM متوافق، واستهلك نتائج التعرف أثناء تغذية الصوت. تعامل مع الإكمال العادي بشكل منفصل عن الإلغاء حتى تصبح الكلمات الأخيرة نهائية. يتبع هذا الدليل وثائق API الخاصة ب Apple وعينة الميكروفون الحية SimpleMemo الحالية؛ كما يتضمن مساعد إعداد قابل للتنزيل بشكل منفصل.

ابدأ بالعينة الكاملة، ثم افحص خط الأنابيب

يعرض المستودع المرخص من MIT SpeechSession كحزمة Swift لتطبيق مضيف iOS 26. أضف المستودع تحت تبعيات حزمة Xcode واربط منتج SpeechAnalyzerLiveMic. يعرض README عرض SwiftUI الذي يعرض finalizedText، ويعرض volatileText بشكل منفصل، ويعطل البدء أثناء إعداد الجلسة.

للحصول على مشروع تطبيق كامل، اتبع مسار XcodeGen الخاص ب README. بدلا من ذلك، انسخ مصادر التطبيق المقدمة إلى تطبيق iOS 26 جديد. استخدم مسار تكامل واحد حتى لا تحدد نفس الأنواع مرتين. لا تنفذ الحزمة تخزين الملاحظات أو تسليم البريد الإلكتروني أو تكامل Obsidian.

تطلب العينة المرتبطة ترخيص الميكروفون والتعرف على الكلام. يجب أن يوفر تطبيقه المضيف NSMicrophoneUsageDescription وNSSpeechRecognitionUsageDescription؛ لا يمكن لإضافة الحزمة توفير أوصاف المضيف هذه. اشرح استخدام الإذن، وأظهر حالات الرفض والإعداد، واسمح للمستخدم باختيار وقت التسجيل. لا يطلب المساعد أدناه الإذن أو يبدأ تشغيل الميكروفون.

Apple's official live-transcrips sample and WWDC25 session هي مراجع مفيدة للهندسة المعمارية. وحدات إحداثيات SpeechAnalyzer؛ إنها API إضافية للأنظمة المدعومة، وليس سببا لافتراض أن جميع رموز SFSpeechRecognizer الحالية عفا عليها الزمن.

إعداد الدعم والأصول والتنسيق قبل التسجيل

SpeechTranscriber يوفر جهاز وقت التشغيل والفحوصات المحلية. فحص إصدار iOS وحده غير كاف. يقوم المساعد التالي بإرجاع ناسخ ومحلل وتنسيق صوت تم تكوينه، أو يلقي خطأ إعداد محدد.

قم بتنزيل مساعد إعداد Swift الكامل. يتضمن الملف الكامل الواردات وأنواع النتائج والأخطاء ومساعد تلميح DictationTranscriber الذي تمت مناقشته أدناه. هذا مكون إعداد، وليس تطبيق تسجيل كامل.

@available(iOS 26.0, *)
@MainActor
public func prepareSpeechAnalyzer(
    requestedLocale: Locale,
    naturalFormat: AVAudioFormat? = nil
) async throws -> PreparedSpeechAnalyzer {
    guard SpeechTranscriber.isAvailable else {
        throw SpeechPreparationError.deviceUnavailable
    }
    guard let locale = await SpeechTranscriber.supportedLocale(
        equivalentTo: requestedLocale
    ) else {
        throw SpeechPreparationError.unsupportedLocale
    }

    let transcriber = SpeechTranscriber(
        locale: locale,
        preset: .progressiveTranscription
    )
    // The system may already have the asset; nil means no install is needed.
    // A request can automatically reserve the locale or throw if no slot is free.
    if let request = try await AssetInventory.assetInstallationRequest(
        supporting: [transcriber]
    ) {
        try await request.downloadAndInstall()
    }
    try Task.checkCancellation()
    guard await AssetInventory.status(forModules: [transcriber]) == .installed else {
        throw SpeechPreparationError.assetsNotInstalled
    }
    guard let format = await SpeechAnalyzer.bestAvailableAudioFormat(
        compatibleWith: [transcriber], considering: naturalFormat
    ) else {
        throw SpeechPreparationError.noCompatibleFormat
    }

    let analyzer = SpeechAnalyzer(modules: [transcriber])
    try await analyzer.prepareToAnalyze(in: format)
    return PreparedSpeechAnalyzer(
        locale: locale, transcriber: transcriber,
        analyzer: analyzer, audioFormat: format
    )
}

AssetInventory يدير نماذج النظام المشتركة. قد يكون النموذج مثبتا بالفعل بواسطة النظام أو تطبيق آخر. طلب التثبيت يرجع nil عندما لا تكون هناك حاجة إلى التثبيت؛ وإلا فإنه يمكن حجز اللغة وبدء التنزيل. يمكن أن تؤدي حدود الحجز أيضا إلى حدوث خطأ. قم بإدارة الحجوزات عبر ميزات تطبيقك، وأصدر لغة عندما لم تعد هناك حاجة إليها بدلا من إصدار نموذج لا يزال قيد الاستخدام في مكان آخر في تطبيقك.

قبل عدم الاتصال بالإنترنت، قم بإعداد اللغة المطلوبة وتحقق من الاستعداد. تعيش أصول النموذج خارج حزمة التطبيقات، ولكنها لا تزال تستهلك تخزين النظام ويمكن أن تتغير بمرور الوقت. أظهر تقدم التنزيل والإلغاء في واجهة المستخدم المضيفة. "التعرف على الجهاز" لا يعني "لا حاجة إلى إعداد أو الوصول إلى الشبكة."

تغذية PCM بالتنسيق الذي يقبله المحلل

AVAudioEngine microphone tap
  -> owned PCM / conversion for the selected format
  -> AsyncStream<AnalyzerInput>
  -> SpeechAnalyzer + SpeechTranscriber
  -> result consumer and UI state

بعد تنشيط الجلسة الصوتية، افحص التنسيق الفعلي لعقدة الإدخال. لا تقم بتشفير معدل العينة لأن الجهاز أو الطريق غالبا ما يستخدم هذا المعدل من قبل. قم بتمرير تنسيق طبيعي إلى bestAvailableAudioFormat(compatibleWith:considering:) عند الاقتضاء وقم بفك نتيجته الاختيارية. يوثق Apple أن المحلل لا يعيد أخذ عينات أو يحول المدخلات بشفافية.

يقوم المستودع AudioBufferConverter بإرجاع المخزن المؤقت المطابق بالفعل دون تغيير ويستخدم AVAudioConverter عندما تختلف التنسيقات. التحويل مطلوب للتنسيقات غير المتطابقة، وليس كخطوة إضافية شاملة لكل مخزن مؤقت. تحقق من طول إطار الإخراج وأخطاء تحويل التقرير؛ يمكن أن يؤدي إسقاط كل مخزن مؤقت فاشل بصمت إلى جعل واجهة مستخدم التسجيل تبدو صحية أثناء عدم إنتاج أي نص.

امنح الصوت في قائمة الانتظار سياسة ملكية صريحة. يقوم محول العينة المحدث بإرجاع تخزين PCM مستقل حتى عندما تتطابق التنسيقات بالفعل، لذلك لا تقوم إعادة استخدام الإدخال لاحقا بالكتابة فوق الصوت في قائمة الانتظار. يجب عدم افتراض أن المخزن المؤقت الذي يوفره رد الاتصال الصوتي يظل ثابتا بعد عودة رد الاتصال. إذا قمت بوضعه في قائمة الانتظار لاستخدامه لاحقا، فقم بترتيب نسخة مملوكة مناسبة أو خط أنابيب يتم التحكم في عمر المخزن المؤقت الخاص به. احتفظ بطفرات واجهة المستخدم لكل مخزن من المخزن المؤقت بعيدا عن رد الاتصال الصوتي. بالنسبة للإنتاج، حدد أيضا كيفية ربط العمل في قائمة الانتظار والتعامل مع الحمل الزائد أو تغييرات الطريق.

في Swift 6، التقاط المتغيرات المحلية لا يثبت في حد ذاته أن خط الأنابيب آمن للخيوط. يحتوي محول العينة الحالي على عقد خيط معالجة واحد وحامل @unchecked Sendable خاص محمي بالقفل لرد اتصال محول واحد. لا يجعل جميع مخازن PCM أو المحول آمنا بشكل عام للمشاركة عبر مؤشرات الترابط. اقرأ هذا العقد قبل تكييف العينة.

استبدال النتائج المتقلبة؛ إنهاء الإدخال قبل الانتهاء

مع تمكين النتائج التدريجية، يمكن للنتيجة المتقلبة مراجعة النص لنطاق الصوت. لا تقم بإضاف كل نتيجة جزئية كجملة جديدة. تحتفظ العينة البسيطة بالنص النهائي والذيل المتطاير القابل للاستبدال. لتحرير أكثر ثراء، قم بمحاذاة التحديثات مع نطاقات الصوت والحفاظ على الأجزاء النهائية بشكل منفصل. يصف Apple هذا السلوك في جزء النتائج من جلسة WWDC.

  1. في إجراء الإيقاف العادي، توقف عن إنتاج صوت ميكروفون جديد وأزل الصنبور مرة واحدة.
  2. قم بإنهاء استمرار إدخال AsyncStream حتى يتمكن المحلل من رؤية نهاية الإدخال.
  3. انتظر finalizeAndFinishThroughEndOfInput()، بينما تظل مهمة المستهلك الناتجة حية.
  4. انتظر حتى يكتمل استهلاك النتائج، ثم التزم بالنص النهائي وموارد جلسة الإصدار.

ينتظر الانتهاء إنهاء المدخلات والاستهلاك. الاتصال به بينما لا ينتهي المنتج أبدا يمكن أن يترك التوقف عن الانتظار. يمكن أن يؤدي إلغاء مهمة النتيجة على الفور أيضا إلى فقدان الذيل الذي كنت تنوي حفظه. يجب أن يستخدم إجراء الإلغاء الذي يتجاهل النطق مسار إلغاء متعمد بدلا من التظاهر بأنه نتيجة نهائية طبيعية.

تظل الحزمة العامة عينة تعليمية. يضع stop() الحالي اللمسات الأخيرة ثم يلغي المستهلك؛ ولا يعرض إقرارا منفصلا بإتمام المستهلك. إذا كان الاحتفاظ بكل نتيجة نهائية مهما، فقم بتكييف دورة الحياة هذه واختبارها. اختبر أيضا إيقاف أثناء الإعداد، والنقرات المتكررة، وعرض الفصل، والمقاطعة، وإعادة التشغيل بعد حدوث خطأ.

يعتمد دعم المفردات على وحدة النسخ

من غير الدقيق القول إن الكلام الجديد API لا يحتوي على دعم للمفردات السياقية. وثائق Apple AnalysisContext.contextualStrings ل DictationTranscriber. توصي الوثائق بعبارات موجزة وعلى الأكثر عبارات 100 عبر العلامات. هذا ليس وعدا بأن نفس التلميحات تخصص SpeechTranscriber.

// For an analyzer configured with DictationTranscriber.
let context = AnalysisContext()
context.contextualStrings[.general] = ["Obsidian", "Yurica"]
try await analyzer.setContext(context)

setContext(_:) يحل محل السياق الحالي، لذا احتفظ بأي سياق تطبيق موجود أو دمجه عند الحاجة. يرفض المساعد القابل للتنزيل أكثر من عبارات 100 بدلا من اقتطاعها بصمت. تختلف تلميحات العبارة عن خيار نموذج اللغة المخصص الموثق أيضا ل DictationTranscriber، ولا يضمن أي منهما التعرف الصحيح على كل اسم. اختر الوحدة واللغة التي يحتاجها تطبيقك واختبرها.

عندما لا ينتج التسجيل أي نص، حدد موقع المرحلة الفاشلة

الأعراضتحقق من التاليأدلة مفيدة
فشل الإعداددعم الجهاز، لغة طبيعية، حالة الأصول وأخطاء الحجز/التنزيلنظام التشغيل والجهاز، اللغة المطلوبة/المحددة، مجال الخطأ والرمز
Mic UI نشطة، لا توجد مخازنالإذن، تنشيط الجلسة الصوتية، الطريق، بدء تشغيل المحرك والنقر على دورة الحياةما إذا كانت معاودة الاتصال تصل؛ معدل عينة الإدخال وعدد القنوات
المخازن المؤقتة تصل، لا يوجد نصتنسيق متوافق، إخراج محول غير صفري، مدخلات أسفرت ومهمة نتائج نشطةعدد إطارات الإدخال/الإخراج وأول خطأ فعلي في خط الأنابيب
تكرر الكلماتما إذا كان يتم إلحاق المراجعات المتقلبة بدلا من استبدالهانطاقات الصوت النتيجة والأعلام النهائية/المتقلبة
الكلمات الأخيرة تختفيإكمال المدخلات وعمر المستهلك أثناء الانتهاءآخر وقت إدخال، الانتهاء من اللمسات الأخيرة وإيصال النتيجة النهائية
فشل الإطلاق في وضع عدم الاتصالجاهزية النموذج المطلوب على هذا الجهاز واللجمةحالة الأصل قبل قطع الاتصال وخطأ الإعداد السطحي

بالنسبة للتشخيصات، ابدأ بتوقيتات المرحلة، وعدد الإطارات، واللغة، ومعلومات الخطأ. ليست هناك حاجة للتسجيلات الأولية والنص المعترف به لكل إدخال سجل. إذا شارك المستخدم نسخة، فاطلب عبارة اختبار قصيرة غير حساسة والتكوين ذي الصلة بدلا من محادثة خاصة.

ما تم فحصه، وما يجب قياسه على الجهاز

تم التحقق من هذه المقالة مقابل وثائق Apple و Xcode 26.6 في سبتمبر 9، 2026. يجتاز المساعد القابل للتنزيل التحقق من نوع Swift 6 مع التزامن الصارم الكامل لهدف محاكاة iOS 26. لا يسجل الصوت، ولا يوضح هذا الفحص دقة الكلام أو التثبيت الناجح للأصول أو جلسة ميكروفون من البداية إلى النهاية.

اجتازت العينة العامة في revision 1befcce أربعة اختبارات لتحويل PCM وبناء محاكي iOS في سبتمبر 9. يعيد اختباران استخدام المخزن المؤقت للمصدر بعد التحويل ويؤكدان أن إخراج العدد الصحيح الاستريو العائم الأحادي والمتداخل لا يزال سليما؛ كلاهما يفشل ضد تنفيذ تمرير تنسيق المطابقة السابق. يقول README صراحة إن إعادة هيكلة الحزمة لم يتم إعادة اختبارها على جهاز iOS الفعلي. أرقام الكمون التاريخية سابقا في هذه الصفحة ليست معيارا للحزمة الحالية.

بالنسبة لتطبيقك الخاص، سجل الجهاز، ونظام التشغيل، واللون، ومسار الصوت، وجاهزية النموذج، وحدود التوقيت الدقيقة. قم بقياس النص المتطاير الأول، والنص النهائي الأول، والإكمال العادي بشكل منفصل. قارن جلسة مع الأصول الجاهزة مقابل جلسة تتطلب إعدادا. كرر عبارة ثابتة غير حساسة، وافحص الكلمات النهائية المفقودة أو المكررة وكذلك السرعة. لا تستنتج سلوك المحرك العصبي أو حد الأجهزة من نتيجة توقيت واحدة.

على Apple Watch، استخدم تدفق إدخال نص نظام منفصل إذا كان يناسب تطبيقك. TextFieldLink يفتح واجهة النظام؛ لا يثبت أن الإملاء يسجل بالفعل. SpeechAnalyzer غير متوفر على watchOS، وحزمة iOS ليست تطبيق ميكروفون Watch.

الأسئلة الشائعة

هل يعمل محلل الكلام في وضع عدم الاتصال؟

SpeechTranscriber يعالج الصوت على الجهاز، ولكن يجب أن يكون طرازه المطلوب متاحا. يمكن أن تكون الأصول موجودة بالفعل قبل الإطلاق الأول لتطبيقك. تحقق منها وأعدها قبل جلسة غير متصلة بالإنترنت؛ لا تفترض أنه يجب تنزيل كل إطلاق أول أو أن النموذج المثبت مسبقا سيظل متاحا دائما.

هل يمكنني إضافة مفردات مخصصة؟

توثيق Apple AnalysisContext.contextualStrings for DictationTranscriber، وتعرض هذه الوحدة أيضا تلميحا مخصصا للمحتوى باللغة. هذه ليست وثائق لنفس الميزة ل SpeechTranscriber. اختر الوحدة النمطية عمدا واختبر الكلمات واللوقعة التي تحتاجها.

لماذا يسجل التطبيق ولكنه لا يعرض أي نص؟

تحقق من دعم الجهاز واللغة، وحالة الأصول، وإدخال الميكروفون، وتنسيق المحلل الاختياري، وإخراج المحول، وتسلسل الإدخال، ومستهلك النتيجة. يظهر الخطأ الفعلي بدلا من التعامل مع كل نتيجة فارغة كمشكلة في التنسيق.

كيف يمكنني الحفاظ على الكلمات الأخيرة عند التوقف؟

توقف عن إنتاج الصوت، وأكمل استمرار الإدخال، واترك المحلل يضع اللمسات الأخيرة حتى نهاية الإدخال. حافظ على المستهلك الناتج على قيد الحياة للحصول على النتائج النهائية. الإلغاء هو مسار تجاهل منفصل، وليس بديلا عن الإكمال العادي.

هل تعمل هذه العينة على Apple Watch؟

لا. جلسة الميكروفون المرتبطة هي مثال iOS 26، وSpeechAnalyzer غير متوفر على watchOS. يمكن لتطبيق Watch استخدام إدخال نص النظام مثل TextFieldLink؛ الذي يقدم واجهة إدخال النظام ولا يثبت أن تسجيل الإملاء قد بدأ.

ما الذي تم التحقق من صحته للعينة؟

يسجل المستودع المرتبط أربعة اختبارات محول وبناء جهاز محاكاة iOS في سبتمبر 9، 2026، بما في ذلك انحدارين لتخزين المخزن المؤقت للمصدر المعاد استخدامه. لم يتم المطالبة بإعادة اختبار الجهاز الفعلي. تم فحص مساعد إعداد هذا الدليل باستخدام Xcode 26.6 في Swift 6 وضع التزامن الصارم الكامل في سبتمبر 9. لا تثبت هذه الفحوصات دقة الميكروفون أو سلوك تنزيل النموذج أو وقت الاستجابة.

كيف يرتبط هذا ب Simple Memo

يتم الحفاظ على هذا الدليل والعينة المجانية بواسطة مطور SimpleMemo. يصف دليل الإدخال الصوتي التطبيق سير عمل المنتج. لا ترسل العينة نفسها أي بريد إلكتروني ولا تحفظ شيئا إلى Obsidian. في Simple Memo، يتطلب البريد الإلكتروني إعداد المستلم والتحقق منه، ويتطلب حفظ Obsidian إعدادات التكامل والوجهة. لا يصف التعرف على الكلام المحلي الخصوصية أو سلوك التسليم لأي إجراء لاحق يقوم به تطبيقك.

ذات صلة: بنية المذكرة الأولى غير المتصلة. الخطوة التالية للمطور هي تشغيل العينة الكاملة باستخدام عبارة اختبار والتحقق من الإعداد والنتائج والتوقف على الجهاز واللغة التي يخططون لدعمها.