Canlı bir iOS 26 mikrofon kanalı için cihaz ve yerel desteğini kontrol edin, model varlıklarını hazırlayın, uyumlu bir PCM formatı elde edin ve ses beslerken tanıma sonuçlarını tüketin. Son sözlerin kesinleşebilmesi için normal tamamlamayı iptalden ayrı olarak ele alın. Bu kılavuz, Apple'nin API belgelerini ve mevcut SimpleMemo canlı mikrofon örneğini takip eder; ayrıca ayrı olarak indirilebilir bir hazırlık yardımcısı içerir.

Tam örnekle başlayın, ardından boru hattını inceleyin

MIT lisanslı depo, SpeechSession'i bir iOS 26 ana bilgisayar uygulaması için bir Swift paketi olarak ortaya çıkarır. Depoyu Xcode'un paket bağımlılıklarının altına ekleyin ve SpeechAnalyzerLiveMic ürününü bağlayın. README, finalizedText'i görüntüleyen, volatileText'yı ayrı olarak oluşturan ve oturum hazırlanırken Başlat'ı devre dışı bırakan bir SwiftUI görünümünü gösterir.

Tam bir uygulama projesi için README'nin XcodeGen rotasını takip edin. Alternatif olarak, sağlanan uygulama kaynaklarını yeni bir iOS 26 uygulamasına kopyalayın. Aynı türleri iki kez tanımlamamak için bir entegrasyon rotası kullanın. Paket not depolama, e-posta teslimi veya Obsidian entegrasyonu uygulamaz.

Bağlantılı örnek, mikrofon ve konuşma-tanıma yetkisi talep ediyor. Ana bilgisayar uygulaması NSMicrophoneUsageDescription ve NSSpeechRecognitionUsageDescription sağlamalıdır; paketin eklenmesi bu ana bilgisayar açıklamalarını sağlayamaz. İzin kullanımını açıklayın, reddetme ve hazırlık durumlarını gösterin ve kullanıcının ne zaman kaydedeceğini seçmesine izin verin. Aşağıdaki yardımcı izin istemez veya mikrofonu başlatmaz.

Apple'in resmi canlı transkripsiyon örneği ve WWDC25 oturumu mimari için yararlı referanslardır. SpeechAnalyzer koordinat modülleri; desteklenen sistemler için ek bir API'tür, mevcut tüm SFSpeechRecognizer kodunun eski olduğunu varsaymak için bir neden değildir.

Kayıt yapmadan önce destek, varlıklar ve biçimlendirme hazırlayın

SpeechTranscriber çalışma zamanı aygıtı ve yerel kontrolleri sağlar. Tek başına bir iOS sürüm kontrolü yetersizdir. Aşağıdaki yardımcı yapılandırılmış bir transkripsiyon, analizör ve ses biçimi döndürür veya belirli bir hazırlık hatası verir.

Tam Swift hazırlık yardımcısını indirin. Tam dosya içe aktarmaları, sonuç ve hata türlerini ve aşağıda tartışılan DictationTranscriber ipucu yardımcısını içerir. Bu, eksiksiz bir kayıt uygulaması değil, bir kurulum bileşenidir.

@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 paylaşılan sistem modellerini yönetir. Bir model zaten sistem veya başka bir uygulama tarafından yüklenmiş olabilir. Bir kurulum isteği kurulum gerekmediğinde nil döndürür; aksi takdirde yerel ayarı rezerve edebilir ve bir indirme başlatabilir. Rezervasyon limitleri de bir hataya neden olabilir. Uygulamanızın özelliklerinde rezervasyonları yönetin ve uygulamanızın başka bir yerinde hala kullanımda olan bir modeli yayınlamak yerine artık ihtiyaç duyulmadığında bir yerel ayar bırakın.

Çevrimdışı olmadan önce gerekli konumu hazırlayın ve hazır olduğunuzu doğrulayın. Model varlıklar uygulama paketinin dışında yaşar, ancak yine de sistem depolama alanını tüketir ve zaman içinde değişebilir. Ana bilgisayar kullanıcı arayüzünde indirme ilerlemesini ve iptalini göster. "Cihaz içi tanıma", "hazırlık veya ağ erişimine gerek olmadığı" anlamına gelmez.

PCM'yi analizörün kabul ettiği biçimde besleme

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

Ses oturumunu etkinleştirdikten sonra, giriş düğümünün gerçek biçimini inceleyin. Bir örnekleme hızını sabit olarak kodlamayın, çünkü bir cihaz veya rota daha önce sıklıkla bu oranı kullandı. Uygun olduğunda bestAvailableAudioFormat(compatibleWith:considering:)'a doğal bir format iletin ve isteğe bağlı sonucunu açın. Apple, analizörün girdiyi şeffaf bir şekilde yeniden örneklemediğini veya dönüştürmediğini belgeler.

Deponun AudioBufferConverter'i, zaten eşleşen bir arabellek değişmeden döndürür ve biçimler farklı olduğunda AVAudioConverter'i kullanır. Her arabellek için genel bir ekstra adım olarak değil, uyumsuz formatlar için dönüşüm gereklidir. Çıktı kare uzunluğunu kontrol edin ve dönüşüm hatalarını bildirin; başarısız olan her arabellek sessizce düşürmek, bir kayıt kullanıcı arayüzünün metin üretmeden sağlıklı görünmesini sağlayabilir.

Kuyruklu sese açık bir sahiplik politikası verin. Güncellenmiş örnek dönüştürücü, formatlar zaten eşleşse bile bağımsız PCM depolama alanı döndürür, bu nedenle girdinin daha sonra yeniden kullanılması sıradaki sesin üzerine yazmaz. Bir sesli geri arama tarafından sağlanan bir arabellek, geri arama geri döndükten sonra değişmez kaldığı varsayılmamalıdır. Daha sonra kullanmak üzere sıraya girerseniz, uygun bir kopya veya tampon ömrü kontrol edilen bir boru hattı düzenleyin. Arabellek başına kullanıcı arayüzü mutasyonlarını sesli geri aramadan uzak tutun. Üretim için, sıraya koyan işi nasıl bağladığınıza da karar verin ve aşırı yük veya rota değişikliklerini ele alın.

Swift 6'de, yerel değişkenleri yakalamak tek başına bir boru hattının iş parçacığı güvenli olduğunu kanıtlamaz. Mevcut numunenin dönüştürücüsü, tek işlem iş parçacığı sözleşmesine ve bir dönüştürücü geri araması için özel kilit korumalı bir @unchecked Sendable tutucusuna sahiptir. Tüm PCM tamponlarını veya dönüştürücüyü iş parçacıkları arasında paylaşmak için genellikle güvenli hale getirmez. Örneği uyarlamadan önce bu sözleşmeyi okuyun.

Döneklikli sonuçları değiştirin; sonlandırmadan önce girişi tamamlayın

Aşamalı sonuçlar etkinleştirildiğinde, uçucu bir sonuç bir ses aralığı için metni revize edebilir. Her kısmi sonucu yeni bir cümle olarak eklemeyin. Basit örnek, nihai metni ve değiştirilebilir uçucu bir kuyruğu tutar. Daha zengin düzenleme için güncellemeleri ses aralıklarıyla hizalayın ve son segmentleri ayrı ayrı koruyun. Apple, bu davranışı WWDC oturumunun sonuç bölümünde açıklar.

  1. Normal bir Durdurma eyleminde, yeni mikrofon sesi üretmeyi durdurun ve dokunuşu bir kez kaldırın.
  2. Analizörün girişin sonunu görebilmesi için AsyncStream giriş devamını bitirin.
  3. Sonuç tüketici görevi canlı kalırken finalizeAndFinishThroughEndOfInput()'ı bekleyin.
  4. Sonuç tüketiminin tamamlanmasını bekleyin, ardından son metni taahhüt edin ve oturum kaynaklarını yayınlayın.

Sonlandırma, girişin sonlandırılması ve tüketimini bekler. Yapımcı hiç bitirmezken onu çağırmak Stop'u bekletebilir. Sonuç görevini hemen iptal etmek, kaydetmek istediğiniz kuyruğu da kaybedebilir. Bir ifadeyi atan bir İptal eylemi, normal bir kesinleşmiş sonuçmuş gibi davranmak yerine kasıtlı bir iptal yolu kullanmalıdır.

Genel paket bir öğrenme örneği olmaya devam ediyor. Mevcut stop(), tüketiciyi tamamlar ve ardından iptal eder; ayrı bir tüketici tamamlama onayını ortaya çıkarmaz. Her nihai sonucu korumak önemliyse, bu yaşam döngüsünü uyarlayın ve test edin. Ayrıca hazırlık devam ederken Durdur'u test edin, tekrarlanan dokunuşlar, kapatmayı, kesintiyi görüntüleyin ve bir hatadan sonra yeniden başlatın.

Kelime desteği transkripsiyon modülüne bağlıdır

Yeni Speech API için bağlamsal sözcük desteği bulunmadığını söylemek doğru değildir. Apple, DictationTranscriber için AnalysisContext.contextualStrings desteğini belgeliyor. Belgelerde kısa ifadeler ve tüm etiketler genelinde en fazla 100 ifade öneriliyor. Bu, aynı ipuçlarının SpeechTranscriber özelleştirmesinde de kullanılabileceği anlamına gelmez.

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

setContext(_:) mevcut bağlamın yerini alır, bu nedenle gerektiğinde mevcut herhangi bir uygulama bağlamını koruyun veya birleştirin. İndirilebilir yardımcı, 100 ifadelerinden daha fazlasını sessizce kesmek yerine reddeder. İfade ipuçları, DictationTranscriber için de belgelenen özelleştirilmiş dil modeli seçeneğinden farklıdır ve ikisi de her ismin doğru tanınmasını garanti etmez. Uygulamanızın ihtiyaç duyduğu modülü ve dili seçin ve test edin.

Kayıt metin üretmediğinde, başarısız aşamayı bulun

BelirtiSıradakini kontrol etFaydalı kanıt
Hazırlık başarısızCihaz desteği, normalleştirilmiş yerel, varlık durumu ve rezervasyon/indirme hatalarıİşletim sistemi ve aygıt, istenen/seçilen yerel ayar, hata alanı ve kod
Mikrofon kullanıcı arayüzü etkin, arabellek yokİzin, sesli oturum aktivasyonu, rota, motor çalıştırma ve dokunma yaşam döngüsüGeri aramaların gelip gelmediği; örnekleme hızını ve kanal sayısını girin
Tamponlar geliyor, mesaj yokUyumlu format, sıfır olmayan dönüştürücü çıkışı, verilen girişler ve aktif sonuçlar göreviGiriş/çıkış çerçeve sayıları ve ilk gerçek boru hattı hatası
Kelimeler tekrarıUçucu revizyonların değiştirilmek yerine eklenip eklenmediğiSonuç ses aralıkları ve son/uçucu bayraklar
Son kelimeler kaybolurGiriş tamamlama ve sonuçlandırma sırasında tüketici ömrüSon giriş zamanı, sonuçlandırma tamamlama ve nihai sonuç makbuzu
Çevrimdışı başlatma başarısızBu cihazda ve yerelde gerekli model hazırlığıKesilmeden önce varlık durumu ve ortaya çıkan kurulum hatası

Tanılamalar için aşama zamanlamaları, kare sayıları, yerel ve hata bilgileri ile başlayın. Her günlük girişi için ham kayıtlar ve tanınan metin gerekli değildir. Bir kullanıcı bir reprodüksiyonu paylaşıyorsa, özel bir konuşma yerine kısa bir hassas olmayan test ifadesi ve ilgili yapılandırma isteyin.

Ne kontrol edildi ve bir cihazda ne ölçülmeli

Bu makale Eylül 9, 2026 tarihinde Apple belgelerine ve Xcode 26.6 ile kontrol edildi. İndirilebilir yardımcı, bir iOS 26 Simülatör hedefi için tam sıkı eşzamanlılıkla Swift 6 tip kontrolünü geçer. Ses kaydetmez ve bu kontrol konuşma doğruluğunu, başarılı varlık kurulumunu veya uçtan uca mikrofon oturumunu göstermez.

revision 1befcce adresindeki genel örnek, Eylül 9'de dört PCM dönüştürücü testini ve bir iOS Simülatör yapısını geçti. İki test, dönüşümden sonra kaynak arabelleğini yeniden kullanır ve mono float ve iç içe geçmiş stereo tamsayı çıkışının sağlam kaldığını doğrular; her ikisi de önceki eşleşen format geçiş uygulamasına karşı başarısız olur. README, paket refaktörünün fiziksel bir iOS cihazında yeniden test edilmediğini açıkça söylüyor. Bu sayfada daha önce bulunan geçmiş gecikme numaraları mevcut paket için bir kıyaslama değildir.

Kendi uygulamanız için cihazı, işletim sistemini, yerel ayarı, ses rotasını, model hazırlığını ve tam zamanlama sınırlarını kaydedin. İlk uçucu metni, ilk son metni ve normal durdurma tamamlamayı ayrı ayrı ölçün. Hazır varlıklara sahip bir oturumu, hazırlık gerektiren bir oturumla karşılaştırın. Sabit, hassas olmayan bir ifadeyi tekrarlayın ve eksik veya yinelenen son kelimeleri ve hızı inceleyin. Bir zamanlama sonucundan Neural Engine davranışını veya donanım sınırını çıkarmayın.

Apple Watch'de, uygulamanıza uyuyorsa ayrı bir sistem metin giriş akışı kullanın. TextFieldLink sistem arayüzünü açar; diktenin zaten kaydedildiğini belirlemez. SpeechAnalyzer watchOS'te kullanılamıyor ve iOS paketi bir Watch mikrofon uygulaması değil.

Sık sorulan sorular

SpeathAnalyzer çevrimdışı çalışıyor mu?

SpeechTranscriber cihazda ses işler, ancak gerekli modeli mevcut olmalıdır. Varlıklar, uygulamanızın ilk başlatılmasından önce zaten mevcut olabilir. Çevrimdışı bir oturumdan önce bunları kontrol edin ve hazırlayın; her ilk başlatmanın indirilmesi gerektiğini veya önceden yüklenmiş bir modelin her zaman mevcut kalacağını varsaymayın.

Özel kelime ekleyebilir miyim?

Apple, DictationTranscriber için AnalysisContext.contextualStrings'i belgeler ve bu modül ayrıca özelleştirilmiş bir dil içerik ipucunu da ortaya çıkarır. Bu, SpeechTranscriber için aynı özelliğin dokümantasyonu değildir. Modülü bilerek seçin ve ihtiyacınız olan kelimeleri ve yereli test edin.

Neden uygulama kayıt yapıyor ancak metin göstermiyor?

Cihaz ve yerel ayar desteğini, varlık durumunu, mikrofon girişini, isteğe bağlı analizör formatını, dönüştürücü çıkışını, giriş sırasını ve sonuç tüketiciyi kontrol edin. Her boş sonucu bir biçim sorunu olarak ele almak yerine gerçek hatayı ortaya çıkarın.

Dururken son sözleri nasıl tutarım?

Ses üretmeyi bırakın, giriş devamını tamamlayın ve analizörün girişin sonuna kadar sonuçlanmasına izin verin. Nihai sonuçları almak için sonuç tüketicisini canlı tutun. İptal, normal tamamlamanın yerine değil, ayrı bir atma yoludur.

Bu örnek Apple Watch'de çalışıyor mu?

Hayır. Bağlantılı mikrofon oturumu bir iOS 26 örneğidir ve SpeechAnalyzer watchOS'te kullanılamaz. Bir Watch uygulaması, bir sistem giriş arayüzü sunan ve dikte kaydının başladığını kanıtlamayan TextFieldLink gibi sistem metin girişini kullanabilir.

Örnek için ne doğrulandı?

Bağlantılı depo, yeniden kullanılan kaynak tampon depolama için iki regresyon da dahil olmak üzere Eylül 9, 2026'de dört dönüştürücü testi ve bir iOS Simülatörü derlemesi kaydeder. Fiziksel cihaz yeniden testi talep edilmedi. Bu kılavuzun hazırlık yardımcısı, Eylül 9'da Swift 6 tam katı eşzamanlılık modunda Xcode 26.6 ile tip kontrol edildi. Bu kontroller mikrofon doğruluğunu, model indirme davranışını veya gecikmeyi belirlemez.

Bunun Simple Memo ile ilişkisi

Bu kılavuz ve ücretsiz örnek SimpleMemo geliştiricisi tarafından korunur. Uygulamanın sesli giriş kılavuzu ürün iş akışını açıklar. Numunenin kendisi hiçbir e-posta göndermez ve Obsidian'e hiçbir şey kaydetmez. Simple Memo'de e-posta, alıcı kurulumu ve doğrulaması gerektirir ve Obsidian kaydetme entegrasyonu ve hedef ayarları gerektirir. Yerel konuşma tanıma, uygulamanızın daha sonra gerçekleştirdiği herhangi bir eylemin gizlilik veya dağıtım davranışını tanımlamaz.

İlgili: çevrimdışı ilk not mimarisi. Bir geliştirici için bir sonraki adım, tam örneği bir test ifadesiyle çalıştırmak ve desteklemeyi planladıkları cihazda ve bölgede hazırlığı, sonuçları ve durdurmayı doğrulamaktır.