iOS 26 SpeechAnalyzer Live Mic: Pengaturan, Hasil, dan Penyelesaian Masalah
Halaman ini diterjemahkan secara otomatis dari bahasa Inggris. Baca versi asli berbahasa Inggris
Untuk alur mikrofon langsung iOS 26, periksa dukungan perangkat dan lokal, siapkan aset model, dapatkan format PCM yang kompatibel, lalu terima hasil pengenalan sambil memasukkan audio. Bedakan penyelesaian normal dari pembatalan agar kata-kata terakhir dapat difinalkan. Panduan ini mengikuti dokumentasi API dari Apple dan contoh mikrofon langsung SimpleMemo saat ini; tersedia juga alat bantu persiapan yang dapat diunduh secara terpisah.
Mulai dengan sampel lengkap, lalu periksa jalur pipa
Repositori berlisensi MIT mengekspos SpeechSession sebagai paket Swift untuk aplikasi host iOS 26. Tambahkan repositori di bawah ketergantungan paket Xcode dan tautkan produk SpeechAnalyzerLiveMic. README-nya menunjukkan tampilan SwiftUI yang menampilkan finalizedText, merender volatileText secara terpisah, dan menonaktifkan Mulai saat sesi sedang dipersiapkan.
Untuk proyek aplikasi lengkap, ikuti rute XcodeGen README. Atau, salin sumber aplikasi yang disediakan ke dalam aplikasi iOS 26 yang baru. Gunakan satu rute integrasi sehingga Anda tidak menentukan jenis yang sama dua kali. Paket tidak mengimplementasikan penyimpanan catatan, pengiriman email, atau integrasi Obsidian.
Contoh yang ditautkan meminta mikrofon dan otorisasi pengenalan ucapan. Aplikasi hostnya harus menyediakan NSMicrophoneUsageDescription dan NSSpeechRecognitionUsageDescription; menambahkan paket tidak dapat menyediakan deskripsi host tersebut. Menjelaskan penggunaan izin, menunjukkan penolakan dan status persiapan, dan membiarkan pengguna memilih kapan merekam. Penolong di bawah ini tidak meminta izin atau menyalakan mikrofon.
sampel transkripsi langsung resmi Apple dan sesi WWDC25 adalah referensi yang berguna untuk arsitektur. Modul koordinat SpeechAnalyzer; itu adalah API tambahan untuk sistem yang didukung, bukan alasan untuk menganggap semua kode SFSpeechRecognizer yang ada sudah usang.
Siapkan dukungan, aset, dan format sebelum merekam
SpeechTranscriber menyediakan perangkat runtime dan pemeriksaan lokal. Pemeriksaan versi iOS saja tidak cukup. Pembantu berikut mengembalikan transkrip, penganalisa, dan format audio yang dikonfigurasi, atau melemparkan kesalahan persiapan tertentu.
Unduh bantuan persiapan Swift lengkap. File lengkap termasuk impor, hasil dan jenis kesalahan, dan penolong petunjuk DictationTranscriber yang dibahas di bawah ini. Ini adalah komponen pengaturan, bukan aplikasi perekaman lengkap.
@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 mengelola model sistem bersama. Sebuah model mungkin sudah diinstal oleh sistem atau aplikasi lain. Permintaan instalasi mengembalikan nil ketika tidak ada instalasi yang diperlukan; jika tidak, itu dapat memesan lokal dan memulai pengunduhan. Batas reservasi juga dapat menghasilkan kesalahan. Kelola reservasi di seluruh fitur aplikasi Anda, dan lepaskan lokal saat tidak lagi diperlukan daripada merilis model yang masih digunakan di tempat lain di aplikasi Anda.
Sebelum offline, siapkan lokal yang diperlukan dan verifikasi kesiapan. Aset model hidup di luar bundel aplikasi, tetapi masih menggunakan penyimpanan sistem dan dapat berubah seiring waktu. Tampilkan kemajuan unduhan dan pembatalan di UI host. “Pengenalan pada perangkat” tidak berarti “tidak ada persiapan atau akses jaringan yang diperlukan.”
Umpankan PCM dalam format yang diterima penganalisa
AVAudioEngine microphone tap
-> owned PCM / conversion for the selected format
-> AsyncStream<AnalyzerInput>
-> SpeechAnalyzer + SpeechTranscriber
-> result consumer and UI state
Setelah mengaktifkan sesi audio, periksa format sebenarnya dari simpul input. Jangan membuat kode keras laju sampel karena perangkat atau rute sering menggunakan laju itu sebelumnya. Berikan format alami ke bestAvailableAudioFormat(compatibleWith:considering:) bila sesuai dan buka bungkus hasil opsionalnya. Apple mendokumentasikan bahwa penganalisa tidak secara transparan mengambil sampel ulang atau mengubah input.
AudioBufferConverter repositori mengembalikan penyangga yang sudah cocok tidak berubah dan menggunakan AVAudioConverter ketika format berbeda. Konversi diperlukan untuk format yang tidak cocok, bukan sebagai langkah ekstra selimut untuk setiap penyangga. Periksa panjang bingkai keluaran dan laporkan kesalahan konversi; secara diam-diam menjatuhkan setiap penyangga yang gagal dapat membuat UI rekaman tampak sehat saat tidak menghasilkan teks.
Berikan audio yang diantre kebijakan kepemilikan yang eksplisit. Konverter sampel yang diperbarui mengembalikan penyimpanan PCM independen bahkan ketika format sudah cocok, sehingga penggunaan kembali input nanti tidak menimpa audio yang diantri. Penyangga yang disediakan oleh panggilan balik audio tidak boleh diasumsikan tetap tidak dapat diubah setelah panggilan balik kembali. Jika Anda mengantri untuk digunakan nanti, atur salinan milik yang sesuai atau jalur pipa yang masa pakai penyangganya dikontrol. Jauhkan mutasi UI per-buffer dari panggilan balik audio. Untuk produksi, tentukan juga bagaimana Anda mengikat pekerjaan yang diantri dan menangani kelebihan beban atau perubahan rute.
Dalam Swift 6, menangkap variabel lokal tidak dengan sendirinya membuktikan bahwa jalur pipa aman untuk utas. Konverter sampel saat ini memiliki kontrak utas pemrosesan tunggal dan pemegang @unchecked Sendable yang dilindungi kunci pribadi untuk satu panggilan balik konverter. Itu tidak membuat semua penyangga PCM atau konverter umumnya aman untuk dibagikan di seluruh utas. Baca kontrak itu sebelum mengadaptasi sampel.
Ganti hasil volatile; selesaikan input sebelum menyelesaikan
Dengan hasil progresif diaktifkan, hasil volatile dapat merevisi teks untuk rentang audio. Jangan menambahkan setiap hasil parsial sebagai kalimat baru. Sampel sederhana menyimpan teks yang diselesaikan dan ekor volatile yang dapat diganti. Untuk pengeditan yang lebih kaya, sejajarkan pembaruan dengan rentang audio dan pertahankan segmen akhir secara terpisah. Apple menjelaskan perilaku ini di bagian hasil dari sesi WWDC.
- Pada tindakan Berhenti normal, berhenti menghasilkan audio mikrofon baru dan lepaskan ketukan sekali.
- Selesaikan kelanjutan input
AsyncStreamsehingga penganalisa dapat melihat akhir input. - Tunggu
finalizeAndFinishThroughEndOfInput(), sementara tugas hasil-konsumen tetap aktif. - Tunggu hingga konsumsi hasil selesai, lalu lakukan teks akhir dan lepaskan sumber daya sesi.
Finalisasi menunggu penghentian input dan konsumsi. Memanggilnya sementara produser tidak pernah selesai bisa pergi Berhenti menunggu. Membatalkan tugas hasil dengan segera juga dapat kehilangan ekor yang ingin Anda simpan. Tindakan Batalkan yang membuang ucapan harus menggunakan jalur pembatalan yang disengaja daripada berpura-pura itu adalah hasil akhir yang dinormalisasi.
Paket publik tetap menjadi sampel pembelajaran. stop() saat ini menyelesaikan dan kemudian membatalkan konsumen; itu tidak mengekspos pengakuan penyelesaian konsumen yang terpisah. Jika mempertahankan setiap hasil akhir penting, sesuaikan siklus hidup itu dan ujilah. Juga uji Berhenti saat persiapan sedang berlangsung, ketuk berulang, lihat pemecatan, interupsi, dan mulai ulang setelah kesalahan.
Dukungan kosakata tergantung pada modul transkripsi
Tidak akurat untuk mengatakan bahwa Pidato baru API tidak memiliki dukungan kosakata kontekstual. Dokumen Apple AnalysisContext.contextualStrings untuk DictationTranscriber. Dokumentasi merekomendasikan frasa singkat dan paling banyak frasa 100 di seluruh tag. Itu bukan janji bahwa petunjuk yang sama menyesuaikan SpeechTranscriber.
// For an analyzer configured with DictationTranscriber.
let context = AnalysisContext()
context.contextualStrings[.general] = ["Obsidian", "Yurica"]
try await analyzer.setContext(context)
setContext(_:) menggantikan konteks saat ini, jadi pertahankan atau gabungkan konteks aplikasi yang ada saat dibutuhkan. Pembantu yang dapat diunduh menolak lebih dari frasa 100 alih-alih memotongnya secara diam-diam. Petunjuk frasa berbeda dari opsi model bahasa yang disesuaikan juga didokumentasikan untuk DictationTranscriber, dan tidak ada jaminan pengenalan yang benar dari setiap nama. Pilih dan uji modul dan bahasa yang dibutuhkan oleh aplikasi Anda.
Saat merekam tidak menghasilkan teks, cari tahap yang gagal
| Gejala | Periksa selanjutnya | Bukti yang berguna |
|---|---|---|
| Persiapan gagal | Dukungan perangkat, lokal yang dinormalisasi, status aset, dan kesalahan reservasi/unduh | OS dan perangkat, lokal yang diminta/dipilih, domain dan kode kesalahan |
| Mic UI aktif, tidak ada buffer | Izin, aktivasi sesi audio, rute, memulai mesin, dan siklus hidup ketukan | Apakah panggilan balik tiba; laju sampel input dan jumlah saluran |
| Penyangga tiba, tidak ada teks | Format yang kompatibel, output konverter bukan nol, input yang dihasilkan dan tugas hasil aktif | Jumlah bingkai input/output dan kesalahan pipa aktual pertama |
| Kata-kata berulang | Apakah revisi volatile ditambahkan dan bukan diganti | Rentang audio hasil dan bendera final/volatile |
| Kata-kata terakhir menghilang | Penyelesaian input dan masa pakai konsumen selama finalisasi | Waktu input terakhir, penyelesaian finalisasi dan penerimaan hasil akhir |
| Peluncuran offline gagal | Kesiapan model yang diperlukan pada perangkat dan lokal tersebut | Status aset sebelum terputus dan kesalahan pengaturan muncul |
Untuk diagnostik, mulailah dengan pengaturan waktu tahap, jumlah bingkai, lokal, dan informasi kesalahan. Rekaman mentah dan teks yang dikenali tidak diperlukan untuk setiap entri log. Jika pengguna membagikan reproduksi, mintalah frasa uji singkat yang tidak sensitif dan konfigurasi yang relevan daripada percakapan pribadi.
Apa yang diperiksa, dan apa yang harus diukur pada perangkat
Artikel ini diperiksa terhadap dokumentasi Apple dan Xcode 26.6 pada bulan September 9, 2026. Pembantu yang dapat diunduh melewati pemeriksaan tipe Swift 6 dengan konkurensi ketat lengkap untuk target Simulator iOS 26. Ini tidak merekam audio, dan pemeriksaan ini tidak menunjukkan akurasi ucapan, pemasangan aset yang berhasil, atau sesi mikrofon ujung ke ujung.
Sampel publik di revisi 1befcce lulus empat tes konverter PCM dan Build Simulator iOS pada September 9. Dua tes menggunakan kembali penyangga sumber setelah konversi dan mengonfirmasi bahwa mono float dan output bilangan bulat stereo interleaved tetap utuh; keduanya gagal terhadap implementasi passthrough format pencocokan sebelumnya. README-nya secara eksplisit mengatakan bahwa refactor paket belum diuji ulang pada perangkat fisik iOS. Angka latensi historis sebelumnya di halaman ini bukan patokan untuk paket saat ini.
Untuk aplikasi Anda sendiri, rekam perangkat, OS, lokal, rute audio, kesiapan model, dan batas waktu yang tepat. Ukur teks volatile pertama, teks akhir pertama, dan penyelesaian normal-stop secara terpisah. Bandingkan sesi dengan aset yang siap dengan sesi yang memerlukan persiapan. Ulangi frasa tidak sensitif yang tetap, dan periksa kata-kata terakhir yang hilang atau diduplikasi serta kecepatan. Jangan menyimpulkan perilaku Neural Engine atau batas perangkat keras dari satu hasil pengaturan waktu.
Pada Apple Watch, gunakan alur input teks sistem terpisah jika sesuai dengan aplikasi Anda. TextFieldLink membuka antarmuka sistem; itu tidak menetapkan bahwa dikte sudah direkam. SpeechAnalyzer tidak tersedia di watchOS, dan paket iOS bukan merupakan implementasi mikrofon Watch.
Pertanyaan yang sering diajukan
Apakah SpeechAnalyzer berfungsi secara offline?
SpeechTranscriber memproses audio di perangkat, tetapi model yang diperlukan harus tersedia. Aset sudah dapat hadir sebelum peluncuran pertama aplikasi Anda. Periksa dan siapkan sebelum sesi offline; jangan berasumsi bahwa setiap peluncuran pertama harus diunduh atau bahwa model yang diinstal sebelumnya akan selalu tersedia.
Bisakah saya menambahkan kosakata khusus?
Apple dokumen AnalysisContext.contextualStrings untuk DictationTranscriber, dan modul itu juga memperlihatkan petunjuk konten bahasa yang disesuaikan. Ini bukan dokumentasi dari fitur yang sama untuk SpeechTranscriber. Pilih modul dengan hati-hati dan uji kata-kata dan lokal yang Anda butuhkan.
Mengapa aplikasi merekam tetapi tidak menampilkan teks?
Periksa dukungan perangkat dan lokal, status aset, input mikrofon, format penganalisa opsional, output konverter, urutan input, dan konsumen hasil. Munculkan kesalahan yang sebenarnya alih-alih memperlakukan setiap hasil kosong sebagai masalah format.
Bagaimana cara menjaga kata-kata terakhir saat berhenti?
Berhenti memproduksi audio, selesaikan kelanjutan input, dan biarkan penganalisa menyelesaikan hingga akhir input. Menjaga konsumen hasil tetap hidup untuk menerima hasil akhir. Pembatalan adalah jalur pembuangan terpisah, bukan pengganti penyelesaian normal.
Apakah sampel ini berjalan di Apple Watch?
Tidak. Sesi mikrofon yang ditautkan adalah contoh iOS 26, dan SpeechAnalyzer tidak tersedia di watchOS. Aplikasi Watch dapat menggunakan input teks sistem seperti TextFieldLink; yang menyajikan antarmuka input sistem dan tidak membuktikan bahwa perekaman dikte telah dimulai.
Apa yang telah divalidasi untuk sampel?
Repositori yang terhubung merekam empat tes konverter dan Simulator iOS dibangun pada September 9, 2026, termasuk dua regresi untuk penyimpanan penyangga sumber yang digunakan kembali. Tidak ada pengujian ulang perangkat fisik yang diklaim. Pembantu persiapan panduan ini diperiksa dengan Xcode 26.6 di Swift 6 menyelesaikan mode konkurensi ketat pada bulan September 9. Pemeriksaan ini tidak menetapkan akurasi mikrofon, perilaku unduhan model, atau latensi.
Bagaimana ini berhubungan dengan Simple Memo
Panduan ini dan sampel gratis dikelola oleh pengembang SimpleMemo. panduan input suara aplikasi menjelaskan alur kerja produk. Sampel itu sendiri tidak mengirim email dan tidak menyimpan apa pun ke Obsidian. Di Simple Memo, email memerlukan pengaturan dan verifikasi penerima, dan Obsidian menyimpan memerlukan integrasi dan pengaturan tujuan. Pengenalan ucapan lokal tidak menjelaskan perilaku privasi atau penyampaian tindakan selanjutnya yang dilakukan aplikasi Anda.
Terkait: arsitektur memo pertama offline. Langkah selanjutnya untuk pengembang adalah menjalankan sampel lengkap dengan frasa uji dan memverifikasi persiapan, hasil, dan berhenti di perangkat dan lokal yang mereka rencanakan untuk didukung.