Skip to content

Latest commit

 

History

History
458 lines (341 loc) · 39.8 KB

File metadata and controls

458 lines (341 loc) · 39.8 KB

Speech Swift

Apple Silicon के लिए AI स्पीच मॉडल, MLX Swift और CoreML द्वारा संचालित।

📖 Read in: English · 中文 · 日本語 · 한국어 · Español · Deutsch · Français · हिन्दी · Português · Русский · العربية · Tiếng Việt · Türkçe · ไทย

Mac और iOS के लिए ऑन-डिवाइस स्पीच रिकग्निशन, सिंथेसिस और समझ। Apple Silicon पर पूरी तरह लोकली चलता है — कोई क्लाउड नहीं, कोई API key नहीं, कोई डेटा डिवाइस से बाहर नहीं जाता।

📚 पूर्ण डॉक्यूमेंटेशन → · 🤗 HuggingFace मॉडल · 📝 ब्लॉग

soniqo%2Fspeech-swift | Trendshift

MacBook पर लोकल स्पीच AI — YouTube पर चार मिनट का ओपन-सोर्स लाइब्रेरी टूर देखें

MacBook पर लोकल स्पीच AI — YouTube पर चार मिनट का ओपन-सोर्स लाइब्रेरी टूर देखें

यूज़-केस: वॉइस एजेंट · ट्रांसक्रिप्शन · स्पीच जनरेशन

  • 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-3.5-ASR-Streaming-0.6B, CoreML + MLX, 40 भाषा-लोकेल)
  • Nemotron Streaming (अंग्रेज़ी) — नेटिव विराम चिह्न और कैपिटलाइज़ेशन के साथ लो-लेटेंसी स्ट्रीमिंग ASR (NVIDIA Nemotron-Speech-Streaming-0.6B, CoreML, केवल अंग्रेज़ी, बहुभाषी संस्करण से छोटा और तेज़)
  • Qwen3-ForcedAligner — शब्द-स्तरीय टाइमस्टैम्प अलाइनमेंट (ऑडियो + टेक्स्ट → टाइमस्टैम्प)
  • Qwen3-TTS — टेक्स्ट-टू-स्पीच (सर्वोच्च गुणवत्ता, स्ट्रीमिंग, कस्टम स्पीकर, 10 भाषाएँ)
  • CosyVoice TTS — वॉयस क्लोनिंग, मल्टी-स्पीकर डायलॉग, इमोशन टैग के साथ स्ट्रीमिंग TTS (9 भाषाएँ)
  • VoxCPM2 — वॉयस क्लोनिंग + निर्देश-आधारित वॉयस डिज़ाइन के साथ 48 kHz स्टूडियो-गुणवत्ता TTS (2B, MLX bf16/int8, 30 भाषाएँ)
  • 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)
  • Magpie TTS — बहुभाषी TTS (NVIDIA Magpie-TTS Multilingual 357M, MLX INT8 411 MB या CoreML INT8 342 MB, 9 भाषाएँ, 5 पूर्व-निर्धारित वक्ता, MLX पर स्ट्रीमिंग)
  • Supertonic TTS — ऑन-डिवाइस फ़्लो-मैचिंग TTS (Supertone Supertonic-3 99M, CoreML/Neural Engine, 31 भाषाएँ, 10 वॉयस, G2P-free, 44.1 kHz)
  • Chatterbox TTS — ज़ीरो-शॉट वॉयस क्लोनिंग के साथ बहुभाषी TTS (Resemble AI Chatterbox Multilingual, MLX fp16 ~1.3 GB, 23 भाषाएँ, MIT)
  • Qwen3.5-Chat — ऑन-डिवाइस LLM चैट (0.8B, MLX INT4 + CoreML INT8, DeltaNet हाइब्रिड, स्ट्रीमिंग टोकन)
  • FunctionGemma — संरचित फ़ंक्शन / टूल कॉल के लिए ऑन-डिवाइस LLM (Gemma 3 270M, CoreML 8-बिट पैलेटाइज़, Neural Engine, ~252 tok/s)
  • MADLAD-400 — 400+ भाषाओं में बहु-दिशात्मक अनुवाद (3B, MLX INT4 + INT8, T5 v1.1, Apache 2.0)
  • Hibiki Zero-3B — स्ट्रीमिंग स्पीच-टू-स्पीच अनुवाद (FR/ES/PT/DE → EN, MLX INT4 + INT8, Kyutai Moshi/Mimi स्टैक, CC-BY-4.0)
  • PersonaPlex — फुल-डुप्लेक्स स्पीच-टू-स्पीच (7B, ऑडियो इन → ऑडियो आउट, 18 वॉयस प्रीसेट)
  • DeepFilterNet3 — रियल-टाइम नॉइज़ सप्रेशन (2.1M params, 48 kHz)। 60 s सिंगल-शॉट सीमा से अधिक लंबे ऑडियो को crossfade के साथ स्वतः चंक किया जाता है — enhanceChunked(...) देखें
  • सोर्स सेपरेशन — HTDemucs (Demucs v4) + Open-Unmix के ज़रिए म्यूज़िक सोर्स सेपरेशन (UMX-HQ / UMX-L, 4 स्टेम: वोकल/ड्रम्स/बेस/अन्य, 44.1 kHz स्टीरियो)
  • MAGNeT — टेक्स्ट से संगीत निर्माण (Meta MAGNeT Small 300M / Medium 1.5B, MLX INT8, 30 सेकंड क्लिप 32 kHz मोनो, मास्क्ड पैरलल डिकोडिंग)
  • FlashSR — ऑडियो सुपर-रेज़ोल्यूशन (FlashSR ICASSP 2025, MLX, 48 kHz मोनो, 1-स्टेप डिस्टिल्ड डिफ्यूज़न, INT4 363 MB / INT8 720 MB)
  • वेक-वर्ड — ऑन-डिवाइस कीवर्ड स्पॉटिंग (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) · Hibiki (Kyutai) · Sortformer (NVIDIA)

समाचार

त्वरित प्रारंभ

अपने 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, SupertonicTTS, VibeVoiceTTS, CosyVoiceTTS, VoxCPM2TTS, ChatterboxTTS, MagpieTTS, MagpieTTSCoreML, MAGNeTMusicGen, FlashSR, PersonaPlex, HibikiTranslate, 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), MLX 0.6B 40
Nemotron Streaming (अंग्रेज़ी) भाषण → टेक्स्ट (स्ट्रीमिंग, विराम चिह्नों के साथ) CoreML (ANE) 0.6B EN
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
VoxCPM2 टेक्स्ट → स्पीच (48 kHz, वॉयस डिज़ाइन + क्लोनिंग) MLX 2B (bf16/int8) 30
Chatterbox Multilingual टेक्स्ट → स्पीच (ज़ीरो-शॉट क्लोनिंग) MLX 0.8B (fp16) 23
Kokoro-82M टेक्स्ट → स्पीच CoreML (ANE) 82M 10
Supertonic-3 टेक्स्ट → स्पीच (44.1 kHz, फ़्लो-मैचिंग, G2P-free) CoreML (ANE) 99M 31
VibeVoice Realtime-0.5B टेक्स्ट → स्पीच (लंबे-रूप, बहु-वक्ता) MLX 0.5B EN/ZH
VibeVoice 1.5B टेक्स्ट → स्पीच (90 मिनट तक पॉडकास्ट) MLX 1.5B EN/ZH
Magpie-TTS Multilingual टेक्स्ट → वाक् (5 पूर्व-निर्धारित वक्ता, स्ट्रीमिंग) MLX / CoreML 357M (MLX INT8, CoreML INT8) 9 (CoreML में JA नहीं)
Qwen3.5-Chat टेक्स्ट → टेक्स्ट (LLM) MLX, CoreML 0.8B बहुभाषी
FunctionGemma टेक्स्ट → टूल कॉल (LLM) CoreML 270M EN
MADLAD-400 टेक्स्ट → टेक्स्ट (अनुवाद) MLX 3B 400+
Hibiki Zero-3B स्पीच → स्पीच (अनुवाद) MLX 3B FR/ES/PT/DE → EN
PersonaPlex स्पीच → स्पीच MLX 7B EN
Silero VAD वॉयस एक्टिविटी डिटेक्शन MLX, CoreML 309K भाषा-तटस्थ
Pyannote VAD + Diarization MLX 1.5M भाषा-तटस्थ
Sortformer Diarization (E2E) CoreML (ANE) भाषा-तटस्थ
DeepFilterNet3 स्पीच एन्हांसमेंट CoreML 2.1M भाषा-तटस्थ
Sidon स्पीच रिस्टोरेशन (नॉइज़ हटाना + डीरीवर्ब, 48 kHz) CoreML w2v-BERT 2.0 + DAC (fp16/int8) भाषा-तटस्थ
HTDemucs (Demucs v4) सोर्स सेपरेशन MLX 168M Agnostic
Open-Unmix सोर्स सेपरेशन MLX 8.6M Agnostic
MAGNeT टेक्स्ट → संगीत (30 सेकंड @ 32 kHz) MLX 300M / 1.5B (int4/int8) EN प्रॉम्प्ट्स
FlashSR ऑडियो सुपर-रेज़ोल्यूशन (48 kHz) MLX 363 MB / 720 MB (int4/int8) भाषा-निरपेक्ष
WeSpeaker स्पीकर एम्बेडिंग MLX, CoreML 6.6M भाषा-तटस्थ

इंस्टॉलेशन

Homebrew

नेटिव ARM Homebrew (/opt/homebrew) आवश्यक है। Rosetta/x86_64 Homebrew समर्थित नहीं है।

brew install speech

फिर:

speech transcribe recording.wav
speech speak "Hello world"
speech translate "Hello, how are you?" --to es
speech respond --input question.wav --transcript
speech-server --port 8080            # स्थानीय HTTP / WebSocket सर्वर (OpenAI-compatible /v1/realtime + /v1/audio/transcriptions)

पूर्ण CLI संदर्भ →

Swift Package Manager

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, 40 भाषाएँ)
import OmnilingualASR       // 1,672 भाषाएँ (CoreML + MLX)
import Qwen3TTS             // टेक्स्ट-टू-स्पीच
import CosyVoiceTTS         // वॉयस क्लोनिंग के साथ TTS
import VoxCPM2TTS           // 48 kHz TTS, वॉयस क्लोनिंग + वॉयस डिज़ाइन (2B)
import KokoroTTS            // टेक्स्ट-टू-स्पीच (iOS-ready)
import VibeVoiceTTS         // लंबे-रूप / बहु-वक्ता TTS (EN/ZH)
import MagpieTTS            // बहुभाषी TTS (NVIDIA Magpie 357M, MLX, 9 भाषाएँ)
import MagpieTTSCoreML      // Magpie CoreML बैकएंड (CoreML + MLX हाइब्रिड, 8 भाषाएँ)
import Qwen3Chat            // ऑन-डिवाइस LLM चैट
import FunctionGemma    // ऑन-डिवाइस टूल-कॉल LLM
import MADLADTranslation    // 400+ भाषाओं में बहु-दिशात्मक अनुवाद
import HibikiTranslate      // स्ट्रीमिंग स्पीच-टू-स्पीच अनुवाद (FR/ES/PT/DE → EN)
import PersonaPlex          // फुल-डुप्लेक्स स्पीच-टू-स्पीच
import SpeechVAD            // VAD + स्पीकर डायराइज़ेशन + एम्बेडिंग
import SpeechEnhancement    // नॉइज़ सप्रेशन
import SpeechRestoration    // स्पीच रिस्टोरेशन — नॉइज़ हटाना + डीरीवर्ब (Sidon, CoreML, 48 kHz)
import SourceSeparation     // म्यूज़िक सोर्स सेपरेशन (Open-Unmix, 4 स्टेम)
import MAGNeTMusicGen      // टेक्स्ट से संगीत निर्माण (30 सेकंड, 32 kHz)
import FlashSR             // ऑडियो सुपर-रेज़ोल्यूशन (48 kHz, 1-स्टेप डिफ्यूज़न)
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 build

make 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 आउटपुट — प्लेबैक के लिए तैयार
import Qwen3Chat
import FunctionGemma

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 HibikiTranslate
import AudioCommon

let model = try await HibikiTranslateModel.fromPretrained()
let pcm = try AudioFileLoader.load(url: input, targetSampleRate: 24000)
let (englishAudio, textTokens) = model.translate(
    sourceAudio: pcm, sourceLanguage: .fr
)
// Hibiki Zero-3B — FR/ES/PT/DE → EN, ऑन-डिवाइस, स्ट्रीमिंग Mimi कोडेक

वॉयस एक्टिविटी डिटेक्शन — पूर्ण गाइड →

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)

स्पीच रिस्टोरेशन — पूर्ण गाइड →

Sidon (w2v-BERT 2.0 प्रेडिक्टर + DAC वोकोडर, Core ML) के साथ संयुक्त नॉइज़ हटाना और डीरीवर्ब। एक सामान्य नॉइज़ सप्रेसर के विपरीत, Sidon को स्पीकर की पहचान संरक्षित रखने के लिए ट्रेन किया गया है, इसलिए यह TTS से पहले किसी शोरयुक्त या रीवर्बरेंट वॉयस-क्लोनिंग रेफ़रेंस को साफ़ करने के लिए उपयुक्त है। इनपुट 16 kHz है; आउटपुट 48 kHz मोनो है।

import SpeechRestoration

let restorer = try await SpeechRestorer.fromPretrained()          // .fp16 (default) or .int8
let clean = try restorer.restore(audio: noisySamples, sampleRate: 16000)  // → 48 kHz

CLI से:

speech restore noisy.wav -o clean.wav            # denoise + dereverb, 48 kHz output
speech restore noisy.wav --variant int8          # smaller, lower peak RAM

# Clean a voice-cloning reference before TTS (opt-in; preserves speaker identity):
speech speak "Hello" --engine voxcpm2 --voice-sample ref.wav --clean-reference

वॉयस पाइपलाइन (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 को कनेक्ट करता है।

HTTP API सर्वर

speech-server --port 8080

सभी मॉडलों को HTTP REST + WebSocket endpoints के माध्यम से एक्सपोज़ करता है, जिसमें OpenAI-संगत APIs शामिल हैं: /v1/realtime पर Realtime WebSocket और /v1/audio/transcriptions पर ट्रांसक्रिप्शन REST endpoint। देखें 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

स्थानीय डॉक्स (रिपॉज़िटरी):

कैश कॉन्फ़िगरेशन

मॉडल वेट पहले उपयोग पर HuggingFace से डाउनलोड होते हैं और ~/Library/Caches/qwen3-speech/ में कैश होते हैं। QWEN3_CACHE_DIR (CLI) या cacheDir: (Swift API) से ओवरराइड करें। सभी fromPretrained() एंट्री पॉइंट offlineMode: true भी स्वीकार करते हैं ताकि वेट कैश होने पर नेटवर्क स्किप किया जा सके।

मुख्यभूमि चीन के उपयोगकर्ता (या जहाँ भी huggingface.co धीमा/अवरुद्ध है) HF_ENDPOINT सेट करके मिरर से डाउनलोड कर सकते हैं, जैसे export HF_ENDPOINT=https://hf-mirror.com

सैंडबॉक्स्ड iOS कंटेनर पाथ सहित पूर्ण विवरण के लिए docs/inference/cache-and-offline.md देखें।

MLX Metal library

यदि आपको रनटाइम पर Failed to load the default metallib दिखता है, तो Metal shader library गुम है। मैनुअल swift build के बाद make build या ./scripts/build_mlx_metallib.sh release चलाएँ। यदि Metal Toolchain गुम है, तो पहले इसे इंस्टॉल करें:

xcodebuild -downloadComponent MetalToolchain

टेस्टिंग

make 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