Apple Silicon के लिए AI स्पीच मॉडल, MLX Swift और CoreML द्वारा संचालित।
📖 Read in: English · 中文 · 日本語 · 한국어 · Español · Deutsch · Français · हिन्दी · Português · Русский
Mac और iOS के लिए ऑन-डिवाइस स्पीच रिकग्निशन, सिंथेसिस और समझ। Apple Silicon पर पूरी तरह लोकली चलता है — कोई क्लाउड नहीं, कोई API key नहीं, कोई डेटा डिवाइस से बाहर नहीं जाता।
📚 पूर्ण डॉक्यूमेंटेशन → · 🤗 HuggingFace मॉडल · 📝 ब्लॉग
- Qwen3-ASR — स्पीच-टू-टेक्स्ट (ऑटोमैटिक स्पीच रिकग्निशन, 52 भाषाएँ, MLX + CoreML)
- Parakeet TDT — CoreML के माध्यम से स्पीच-टू-टेक्स्ट (Neural Engine, NVIDIA FastConformer + TDT decoder, 25 भाषाएँ)
- Omnilingual ASR — स्पीच-टू-टेक्स्ट (Meta wav2vec2 + CTC, 1,672 भाषाएँ 32 लिपियों में, CoreML 300M + MLX 300M/1B/3B/7B)
- Streaming Dictation — पार्शियल्स और एंड-ऑफ-अटरन्स डिटेक्शन के साथ रियल-टाइम डिक्टेशन (Parakeet-EOU-120M)
- Nemotron Streaming — नेटिव विराम चिह्न और कैपिटलाइज़ेशन के साथ लो-लेटेंसी स्ट्रीमिंग ASR (NVIDIA Nemotron-Speech-Streaming-0.6B, CoreML, अंग्रेज़ी)
- Qwen3-ForcedAligner — शब्द-स्तरीय टाइमस्टैम्प अलाइनमेंट (ऑडियो + टेक्स्ट → टाइमस्टैम्प)
- Qwen3-TTS — टेक्स्ट-टू-स्पीच (सर्वोच्च गुणवत्ता, स्ट्रीमिंग, कस्टम स्पीकर, 10 भाषाएँ)
- CosyVoice TTS — वॉयस क्लोनिंग, मल्टी-स्पीकर डायलॉग, इमोशन टैग के साथ स्ट्रीमिंग TTS (9 भाषाएँ)
- Kokoro TTS — ऑन-डिवाइस TTS (82M, CoreML/Neural Engine, 54 वॉयस, iOS-ready, 10 भाषाएँ)
- VibeVoice TTS — लंबे-रूप / बहु-वक्ता TTS (Microsoft VibeVoice Realtime-0.5B + 1.5B, MLX, 90 मिनट तक के पॉडकास्ट / ऑडियोबुक संश्लेषण, EN/ZH)
- Qwen3.5-Chat — ऑन-डिवाइस LLM चैट (0.8B, MLX INT4 + CoreML INT8, DeltaNet हाइब्रिड, स्ट्रीमिंग टोकन)
- MADLAD-400 — 400+ भाषाओं में बहु-दिशात्मक अनुवाद (3B, MLX INT4 + INT8, T5 v1.1, Apache 2.0)
- PersonaPlex — फुल-डुप्लेक्स स्पीच-टू-स्पीच (7B, ऑडियो इन → ऑडियो आउट, 18 वॉयस प्रीसेट)
- DeepFilterNet3 — रियल-टाइम नॉइज़ सप्रेशन (2.1M params, 48 kHz)
- सोर्स सेपरेशन — Open-Unmix के ज़रिए म्यूज़िक सोर्स सेपरेशन (UMX-HQ / UMX-L, 4 स्टेम: वोकल/ड्रम्स/बेस/अन्य, 44.1 kHz स्टीरियो)
- वेक-वर्ड — ऑन-डिवाइस कीवर्ड स्पॉटिंग (KWS Zipformer 3M, CoreML, 26× रियल-टाइम, कॉन्फ़िगरेबल कीवर्ड सूची)
- VAD — वॉयस एक्टिविटी डिटेक्शन (Silero स्ट्रीमिंग, Pyannote ऑफ़लाइन, FireRedVAD 100+ भाषाएँ)
- Speaker Diarization — कौन कब बोला (Pyannote पाइपलाइन, Neural Engine पर एंड-टू-एंड Sortformer)
- Speaker Embeddings — WeSpeaker ResNet34 (256-dim), CAM++ (192-dim)
पेपर: Qwen3-ASR (Alibaba) · Qwen3-TTS (Alibaba) · Omnilingual ASR (Meta) · Parakeet TDT (NVIDIA) · CosyVoice 3 (Alibaba) · Kokoro (StyleTTS 2) · PersonaPlex (NVIDIA) · Mimi (Kyutai) · Sortformer (NVIDIA)
- 19 Apr 2026 — MLX vs CoreML on Apple Silicon — A Practical Guide to Picking the Right Backend
- 20 Mar 2026 — We Beat Whisper Large v3 with a 600M Model Running Entirely on Your Mac
- 26 Feb 2026 — Speaker Diarization and Voice Activity Detection on Apple Silicon — Native Swift with MLX
- 23 Feb 2026 — NVIDIA PersonaPlex 7B on Apple Silicon — Full-Duplex Speech-to-Speech in Native Swift with MLX
- 12 Feb 2026 — Qwen3-ASR Swift: On-Device ASR + TTS for Apple Silicon — Architecture and Benchmarks
अपने Package.swift में पैकेज जोड़ें:
.package(url: "https://github.com/soniqo/speech-swift", branch: "main")केवल वही मॉड्यूल इम्पोर्ट करें जिनकी आपको ज़रूरत है — प्रत्येक मॉडल अपनी अलग SPM लाइब्रेरी है, इसलिए आप केवल उसी के लिए भुगतान करते हैं जो आप उपयोग करते हैं:
.product(name: "ParakeetStreamingASR", package: "speech-swift"),
.product(name: "SpeechUI", package: "speech-swift"), // वैकल्पिक SwiftUI व्यू3 लाइनों में ऑडियो बफ़र ट्रांसक्राइब करें:
import ParakeetStreamingASR
let model = try await ParakeetStreamingASRModel.fromPretrained()
let text = try model.transcribeAudio(audioSamples, sampleRate: 16000)पार्शियल्स के साथ लाइव स्ट्रीमिंग:
for await partial in model.transcribeStream(audio: samples, sampleRate: 16000) {
print(partial.isFinal ? "FINAL: \(partial.text)" : "... \(partial.text)")
}~10 लाइनों में SwiftUI डिक्टेशन व्यू:
import SwiftUI
import ParakeetStreamingASR
import SpeechUI
@MainActor
struct DictateView: View {
@State private var store = TranscriptionStore()
var body: some View {
TranscriptionView(finals: store.finalLines, currentPartial: store.currentPartial)
.task {
let model = try? await ParakeetStreamingASRModel.fromPretrained()
guard let model else { return }
for await p in model.transcribeStream(audio: samples, sampleRate: 16000) {
store.apply(text: p.text, isFinal: p.isFinal)
}
}
}
}SpeechUI केवल TranscriptionView (finals + partials) और TranscriptionStore (स्ट्रीमिंग ASR एडाप्टर) प्रदान करता है। ऑडियो विज़ुअलाइज़ेशन और प्लेबैक के लिए AVFoundation का उपयोग करें।
उपलब्ध SPM उत्पाद: Qwen3ASR, Qwen3TTS, Qwen3TTSCoreML, ParakeetASR, ParakeetStreamingASR, NemotronStreamingASR, OmnilingualASR, KokoroTTS, VibeVoiceTTS, CosyVoiceTTS, PersonaPlex, SpeechVAD, SpeechEnhancement, SourceSeparation, Qwen3Chat, SpeechCore, SpeechUI, AudioCommon.
नीचे संक्षिप्त दृश्य। पूर्ण मॉडल कैटलॉग (आकार, क्वांटिज़ेशन, डाउनलोड URL, मेमोरी टेबल्स) → soniqo.audio/architecture.
| मॉडल | कार्य | बैकएंड | आकार | भाषाएँ |
|---|---|---|---|---|
| Qwen3-ASR | स्पीच → टेक्स्ट | MLX, CoreML (हाइब्रिड) | 0.6B, 1.7B | 52 |
| Parakeet TDT | स्पीच → टेक्स्ट | CoreML (ANE) | 0.6B | 25 यूरोपीय |
| Parakeet EOU | स्पीच → टेक्स्ट (स्ट्रीमिंग) | CoreML (ANE) | 120M | 25 यूरोपीय |
| Nemotron Streaming | भाषण → टेक्स्ट (स्ट्रीमिंग, विराम चिह्नों के साथ) | CoreML (ANE) | 0.6B | अंग्रेज़ी |
| Omnilingual ASR | स्पीच → टेक्स्ट | CoreML (ANE), MLX | 300M / 1B / 3B / 7B | 1,672 |
| Qwen3-ForcedAligner | ऑडियो + टेक्स्ट → टाइमस्टैम्प | MLX, CoreML | 0.6B | बहुभाषी |
| Qwen3-TTS | टेक्स्ट → स्पीच | MLX, CoreML | 0.6B, 1.7B | 10 |
| CosyVoice3 | टेक्स्ट → स्पीच | MLX | 0.5B | 9 |
| Kokoro-82M | टेक्स्ट → स्पीच | CoreML (ANE) | 82M | 10 |
| VibeVoice Realtime-0.5B | टेक्स्ट → स्पीच (लंबे-रूप, बहु-वक्ता) | MLX | 0.5B | EN/ZH |
| VibeVoice 1.5B | टेक्स्ट → स्पीच (90 मिनट तक पॉडकास्ट) | MLX | 1.5B | EN/ZH |
| Qwen3.5-Chat | टेक्स्ट → टेक्स्ट (LLM) | MLX, CoreML | 0.8B | बहुभाषी |
| MADLAD-400 | टेक्स्ट → टेक्स्ट (अनुवाद) | MLX | 3B | 400+ |
| PersonaPlex | स्पीच → स्पीच | MLX | 7B | EN |
| Silero VAD | वॉयस एक्टिविटी डिटेक्शन | MLX, CoreML | 309K | भाषा-तटस्थ |
| Pyannote | VAD + Diarization | MLX | 1.5M | भाषा-तटस्थ |
| Sortformer | Diarization (E2E) | CoreML (ANE) | — | भाषा-तटस्थ |
| DeepFilterNet3 | स्पीच एन्हांसमेंट | CoreML | 2.1M | भाषा-तटस्थ |
| Open-Unmix | सोर्स सेपरेशन | MLX | 8.6M | Agnostic |
| WeSpeaker | स्पीकर एम्बेडिंग | MLX, CoreML | 6.6M | भाषा-तटस्थ |
नेटिव ARM Homebrew (/opt/homebrew) आवश्यक है। Rosetta/x86_64 Homebrew समर्थित नहीं है।
brew tap soniqo/speech https://github.com/soniqo/speech-swift
brew install speechफिर:
audio transcribe recording.wav
audio speak "Hello world"
audio translate "Hello, how are you?" --to es
audio respond --input question.wav --transcript
audio-server --port 8080 # स्थानीय HTTP / WebSocket सर्वर (OpenAI-compatible /v1/realtime)dependencies: [
.package(url: "https://github.com/soniqo/speech-swift", branch: "main")
]केवल वही इम्पोर्ट करें जो आपको चाहिए — प्रत्येक मॉडल अपना SPM target है:
import Qwen3ASR // स्पीच रिकग्निशन (MLX)
import ParakeetASR // स्पीच रिकग्निशन (CoreML, बैच)
import ParakeetStreamingASR // पार्शियल्स + EOU के साथ स्ट्रीमिंग डिक्टेशन
import NemotronStreamingASR // अंग्रेज़ी स्ट्रीमिंग ASR नेटिव विराम चिह्न के साथ (0.6B)
import OmnilingualASR // 1,672 भाषाएँ (CoreML + MLX)
import Qwen3TTS // टेक्स्ट-टू-स्पीच
import CosyVoiceTTS // वॉयस क्लोनिंग के साथ TTS
import KokoroTTS // टेक्स्ट-टू-स्पीच (iOS-ready)
import VibeVoiceTTS // लंबे-रूप / बहु-वक्ता TTS (EN/ZH)
import Qwen3Chat // ऑन-डिवाइस LLM चैट
import MADLADTranslation // 400+ भाषाओं में बहु-दिशात्मक अनुवाद
import PersonaPlex // फुल-डुप्लेक्स स्पीच-टू-स्पीच
import SpeechVAD // VAD + स्पीकर डायराइज़ेशन + एम्बेडिंग
import SpeechEnhancement // नॉइज़ सप्रेशन
import SourceSeparation // म्यूज़िक सोर्स सेपरेशन (Open-Unmix, 4 स्टेम)
import SpeechUI // स्ट्रीमिंग ट्रांसक्रिप्ट के लिए SwiftUI कॉम्पोनेंट
import AudioCommon // शेयर्ड प्रोटोकॉल और यूटिलिटीज़- Swift 6+, Xcode 16+ (Metal Toolchain के साथ)
- macOS 15+ (Sequoia) या iOS 18+, Apple Silicon (M1/M2/M3/M4)
macOS 15 / iOS 18 न्यूनतम आवश्यकता MLState से आती है —— Apple की परसिस्टेंट ANE स्टेट API —— जिसका उपयोग CoreML पाइपलाइन (Qwen3-ASR, Qwen3-Chat, Qwen3-TTS) टोकन स्टेप्स के बीच KV कैश को Neural Engine पर रखने के लिए करती हैं।
git clone https://github.com/soniqo/speech-swift
cd speech-swift
make buildmake build Swift पैकेज और MLX Metal shader library दोनों को कंपाइल करता है। GPU इन्फ़रेंस के लिए Metal library आवश्यक है — इसके बिना आपको रनटाइम पर Failed to load the default metallib दिखेगा। make debug डीबग बिल्ड के लिए, make test टेस्ट सूट के लिए।
- DictateDemo (डॉक्स) — macOS मेनू-बार स्ट्रीमिंग डिक्टेशन, लाइव पार्शियल्स, VAD-संचालित एंड-ऑफ-अटरन्स डिटेक्शन, और वन-क्लिक कॉपी। बैकग्राउंड एजेंट के रूप में चलता है (Parakeet-EOU-120M + Silero VAD)।
- iOSEchoDemo — iOS इको डेमो (Parakeet ASR + Kokoro TTS)। डिवाइस और सिम्युलेटर।
- PersonaPlexDemo — माइक इनपुट, VAD, और मल्टी-टर्न संदर्भ के साथ संवादात्मक वॉयस असिस्टेंट। macOS। M2 Max पर RTF ~0.94 (रियल-टाइम से तेज़)।
- SpeechDemo — टैब्ड इंटरफ़ेस में डिक्टेशन और TTS सिंथेसिस। macOS।
प्रत्येक डेमो के README में बिल्ड निर्देश हैं।
नीचे दिए गए स्निपेट्स प्रत्येक डोमेन के लिए न्यूनतम पथ दिखाते हैं। प्रत्येक अनुभाग soniqo.audio पर पूर्ण गाइड से लिंक होता है जिसमें कॉन्फ़िगरेशन विकल्प, कई बैकएंड, स्ट्रीमिंग पैटर्न, और CLI रेसिपी शामिल हैं।
स्पीच-टू-टेक्स्ट — पूर्ण गाइड →
import Qwen3ASR
let model = try await Qwen3ASRModel.fromPretrained()
let text = model.transcribe(audio: audioSamples, sampleRate: 16000)वैकल्पिक बैकएंड: Parakeet TDT (CoreML, 32× रियल-टाइम), Omnilingual ASR (1,672 भाषाएँ, CoreML या MLX), स्ट्रीमिंग डिक्टेशन (लाइव पार्शियल्स)।
फ़ोर्स्ड अलाइनमेंट — पूर्ण गाइड →
import Qwen3ASR
let aligner = try await Qwen3ForcedAligner.fromPretrained()
let aligned = aligner.align(
audio: audioSamples,
text: "Can you guarantee that the replacement part will be shipped tomorrow?",
sampleRate: 24000
)
for word in aligned {
print("[\(word.startTime)s - \(word.endTime)s] \(word.text)")
}टेक्स्ट-टू-स्पीच — पूर्ण गाइड →
import Qwen3TTS
import AudioCommon
let model = try await Qwen3TTSModel.fromPretrained()
let audio = model.synthesize(text: "Hello world", language: "english")
try WAVWriter.write(samples: audio, sampleRate: 24000, to: outputURL)वैकल्पिक TTS इंजन: CosyVoice3 (स्ट्रीमिंग + वॉयस क्लोनिंग + इमोशन टैग), Kokoro-82M (iOS-ready, 54 वॉयस), VibeVoice (लंबे-रूप पॉडकास्ट / बहु-वक्ता, EN/ZH), वॉयस क्लोनिंग।
स्पीच-टू-स्पीच — पूर्ण गाइड →
import PersonaPlex
let model = try await PersonaPlexModel.fromPretrained()
let responseAudio = model.respond(userAudio: userSamples)
// 24 kHz मोनो Float32 आउटपुट — प्लेबैक के लिए तैयारLLM चैट — पूर्ण गाइड →
import Qwen3Chat
let chat = try await Qwen35MLXChat.fromPretrained()
chat.chat(messages: [(.user, "Explain MLX in one sentence")]) { token, isFinal in
print(token, terminator: "")
}अनुवाद — पूरी गाइड →
import MADLADTranslation
let translator = try await MADLADTranslator.fromPretrained()
let es = try translator.translate("Hello, how are you?", to: "es")
// → "Hola, ¿cómo estás?"वॉयस एक्टिविटी डिटेक्शन — पूर्ण गाइड →
import SpeechVAD
let vad = try await SileroVADModel.fromPretrained()
let segments = vad.detectSpeech(audio: samples, sampleRate: 16000)
for s in segments { print("\(s.startTime)s → \(s.endTime)s") }स्पीकर डायराइज़ेशन — पूर्ण गाइड →
import SpeechVAD
let diarizer = try await DiarizationPipeline.fromPretrained()
let segments = diarizer.diarize(audio: samples, sampleRate: 16000)
for s in segments { print("Speaker \(s.speakerId): \(s.startTime)s - \(s.endTime)s") }स्पीच एन्हांसमेंट — पूर्ण गाइड →
import SpeechEnhancement
let denoiser = try await DeepFilterNet3Model.fromPretrained()
let clean = try denoiser.enhance(audio: noisySamples, sampleRate: 48000)वॉयस पाइपलाइन (ASR → LLM → TTS) — पूर्ण गाइड →
import SpeechCore
let pipeline = VoicePipeline(
stt: parakeetASR,
tts: qwen3TTS,
vad: sileroVAD,
config: .init(mode: .voicePipeline),
onEvent: { event in print(event) }
)
pipeline.start()
pipeline.pushAudio(micSamples)VoicePipeline रियल-टाइम वॉयस-एजेंट स्टेट मशीन है (speech-core द्वारा संचालित) जो VAD-संचालित टर्न डिटेक्शन, इंटरप्शन हैंडलिंग, और eager STT के साथ आता है। यह किसी भी SpeechRecognitionModel + SpeechGenerationModel + StreamingVADProvider को कनेक्ट करता है।
audio-server --port 8080सभी मॉडलों को HTTP REST + WebSocket endpoints के माध्यम से एक्सपोज़ करता है, जिसमें /v1/realtime पर OpenAI Realtime API-संगत WebSocket शामिल है। देखें Sources/AudioServer/।
speech-swift प्रति मॉडल एक SPM टारगेट में विभाजित है ताकि उपभोक्ता केवल उसी के लिए भुगतान करें जो वे इम्पोर्ट करते हैं। साझा इन्फ़्रास्ट्रक्चर AudioCommon (प्रोटोकॉल, ऑडियो I/O, HuggingFace डाउनलोडर, SentencePieceModel) और MLXCommon (वेट लोडिंग, QuantizedLinear हेल्पर्स, multi-head attention के लिए SDPA हेल्पर) में रहता है।
बैकएंड, मेमोरी टेबल्स, और मॉड्यूल मैप के साथ पूर्ण आर्किटेक्चर डायग्राम → soniqo.audio/architecture · API संदर्भ → soniqo.audio/api · बेंचमार्क → soniqo.audio/benchmarks
स्थानीय डॉक्स (रिपॉज़िटरी):
- मॉडल: Qwen3-ASR · Qwen3-TTS · CosyVoice · Kokoro · VibeVoice · Parakeet TDT · Parakeet Streaming · Nemotron Streaming · Omnilingual ASR · PersonaPlex · FireRedVAD · Source Separation
- इन्फ़रेंस: Qwen3-ASR · Parakeet TDT · Parakeet Streaming · Nemotron Streaming · Omnilingual ASR · TTS · VibeVoice · Forced Aligner · Silero VAD · स्पीकर डायराइज़ेशन · स्पीच एन्हांसमेंट
- संदर्भ: शेयर्ड प्रोटोकॉल
मॉडल वेट पहले उपयोग पर HuggingFace से डाउनलोड होते हैं और ~/Library/Caches/qwen3-speech/ में कैश होते हैं। QWEN3_CACHE_DIR (CLI) या cacheDir: (Swift API) से ओवरराइड करें। सभी fromPretrained() एंट्री पॉइंट offlineMode: true भी स्वीकार करते हैं ताकि वेट कैश होने पर नेटवर्क स्किप किया जा सके।
सैंडबॉक्स्ड iOS कंटेनर पाथ सहित पूर्ण विवरण के लिए docs/inference/cache-and-offline.md देखें।
यदि आपको रनटाइम पर Failed to load the default metallib दिखता है, तो Metal shader library गुम है। मैनुअल swift build के बाद make build या ./scripts/build_mlx_metallib.sh release चलाएँ। यदि Metal Toolchain गुम है, तो पहले इसे इंस्टॉल करें:
xcodebuild -downloadComponent MetalToolchainmake test # पूर्ण सुइट (यूनिट + मॉडल डाउनलोड के साथ E2E)
swift test --skip E2E # केवल यूनिट (CI-सुरक्षित, कोई डाउनलोड नहीं)
swift test --filter Qwen3ASRTests # विशिष्ट मॉड्यूलE2E टेस्ट क्लासेस E2E उपसर्ग का उपयोग करती हैं ताकि CI उन्हें --skip E2E से फ़िल्टर कर सके। पूर्ण टेस्टिंग नियम के लिए CLAUDE.md देखें।
PRs का स्वागत है — बग फ़िक्स, नए मॉडल इंटीग्रेशन, डॉक्यूमेंटेशन। फ़ॉर्क करें, feature ब्रांच बनाएँ, make build && make test, main के विरुद्ध PR खोलें।
Apache 2.0