Skip to content

Latest commit

 

History

History
563 lines (422 loc) · 41.2 KB

File metadata and controls

563 lines (422 loc) · 41.2 KB

Speech Swift

Apple Silicon için yapay zeka destekli konuşma modelleri; MLX Swift ve CoreML ile çalışır.

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

Mac ve iOS için cihaz üzerinde konuşma tanıma, sentezleme ve anlama. Apple Silicon üzerinde yerel olarak çalışır — bulut yok, API anahtarı yok, hiçbir veri cihazınızdan dışarı çıkmaz.

📚 Tam Dokümantasyon → · 🤗 HuggingFace Modelleri · 📝 Blog · 💬 Discord

Homebrew installs Verified public repositories: 15

soniqo%2Fspeech-swift | Trendshift

MacBook üzerinde yerel konuşma yapay zekası — açık kaynak kütüphanenin 4 dakikalık tanıtımını YouTube'da izleyin

MacBook üzerinde yerel konuşma yapay zekası — açık kaynak kütüphanenin 4 dakikalık tanıtımını YouTube'da izleyin

Kullanım senaryoları: Sesli Ajanlar · Transkripsiyon · Konuşma Üretimi

Speech Swift ile geliştirildi

Speech Swift paketine doğrulanabilir biçimde başvuran 16 açık depo.

AnythingLLM · Palmier Pro · Anarlog · ClawdHome · Jabber · Ora · VoxFlow · LokalBot · Voicey · HushType · DexDictate macOS · Watchtower · Wishper App · FriSpeak · Scribe · VoicePen

Yetenek grupları: STT / ASR · Hizalama · TTS · LLM ve çeviri · Speech-to-Speech · İyileştirme / restorasyon · Kaynak ayırma · Müzik / ses üretimi · Wake word, VAD, konuşmacı ayrıştırma ve konuşmacı kimliği

STT / ASR

  • Qwen3-ASR — Konuşmadan metne (otomatik konuşma tanıma, 52 dil, MLX + CoreML)
  • WhisperASR — Whisper Large-v3 Turbo speech-to-text via native CoreML runtime (ANE, multilingual)
  • MOSS Transcribe Diarize — Model tarafından üretilen konuşmacı etiketleri ve zaman damgalarıyla yerel CoreML/MLX çevrimdışı transkripsiyonu (128K MLX bağlamı; INT5/INT8)
  • Parakeet TDT — CoreML üzerinden konuşmadan metne (Neural Engine, NVIDIA FastConformer + TDT kod çözücü, 25 dil)
  • Omnilingual ASR — Konuşmadan metne (Meta wav2vec2 + CTC, 32 yazı sistemi üzerinde 1.672 dil, CoreML 300M + MLX 300M/1B/3B/7B)
  • Cohere Transcribe 2B — Yerel MLX konuşmadan metne (14 dil, FP16/INT5/INT8)
  • Voxtral Mini 3B — Yerel MLX konuşmadan metne (8 dil, FP16/INT5/INT8) — M5 Pro üzerinde RTF 0,074
  • Akış Dikte — Kısmi sonuçlar ve söyleyiş sonu algılaması ile gerçek zamanlı dikte (Parakeet-EOU-120M)
  • Nemotron Streaming (Çok dilli) — Yerel noktalama ve büyük harf desteğiyle düşük gecikmeli akış ASR (NVIDIA Nemotron-3.5-ASR-Streaming-0.6B, CoreML + MLX, 40 dil-yerel ayarı)
  • Nemotron Streaming (İngilizce) — Yerel noktalama ve büyük harf desteğiyle düşük gecikmeli akış ASR (NVIDIA Nemotron-Speech-Streaming-0.6B, CoreML, yalnızca İngilizce, çok dilli varyanttan daha küçük ve hızlı)

Hizalama

  • Qwen3-ForcedAligner — Kelime düzeyinde zaman damgası hizalama (ses + metin → zaman damgaları)

TTS / Konuşma üretimi

  • Qwen3-TTS — Metinden konuşmaya (en yüksek kalite, akış, özel konuşmacılar, 10 dil)
  • CosyVoice TTS — Ses klonlama, çok konuşmacılı diyalog, duygu etiketleri ile akış TTS (9 dil)
  • VoxCPM2 — Ses klonlama ve talimat odaklı ses tasarımı ile 48 kHz stüdyo kalitesinde TTS (2B, MLX bf16/int8, 30 dil)
  • IndexTTS2 — Native MLX voice cloning from a reference voice (IndexTeam IndexTTS-2, 1.5B-class fp16 bundle, speaker/emotion/pause controls)
  • F5-TTS — Zero-shot voice cloning from a short reference clip + transcript (SWivid F5-TTS v1 Base, DiT flow matching + Vocos, MLX fp16, 24 kHz, English + Mandarin; non-commercial license)
  • Higgs TTS 3 — Conversational TTS with zero-shot voice cloning and inline emotion/style/SFX/prosody tags (Boson Higgs TTS 3, Qwen3-4B backbone, MLX bf16, 24 kHz, 100+ languages; research/non-commercial license)
  • Kokoro TTS — Cihaz üzerinde TTS (82M, CoreML/Neural Engine, 54 ses, iOS için hazır, 10 dil)
  • VibeVoice TTS — Uzun biçimli / çok konuşmacılı TTS (Microsoft VibeVoice Realtime-0.5B + 1.5B, MLX, 90 dakikaya kadar podcast/sesli kitap sentezi, EN/ZH)
  • Magpie TTS — Çok dilli TTS (NVIDIA Magpie-TTS Multilingual 357M, MLX INT8 411 MB veya CoreML INT8 342 MB, 9 dil, 5 hazır konuşmacı, MLX'te akış)
  • Supertonic TTS — Cihaz üzerinde flow-matching TTS (Supertone Supertonic-3 99M, CoreML/Neural Engine, 31 dil, 10 ses, G2P-free, 44.1 kHz)
  • Chatterbox TTS — Zero-shot ses klonlama özellikli çok dilli TTS (Resemble AI Chatterbox Multilingual, MLX fp16 ~1,3 GB, 23 çalışma zamanı dili; İbranice için niqqud gerekir, MIT)
  • OmniVoice TTS — Zero-shot ses klonlama ile otoregresif olmayan difüzyon TTS (k2-fsa OmniVoice, Qwen3 omurgası, MLX fp16 varsayılan / int8 kullanılabilir, 600+ dil, Apache-2.0)
  • Indic-Mio — Hindi/Indic TTS with inline emotion markers and optional reference-voice cloning (MLX, 24 kHz)
  • CSM (Conversational Speech Model) — Bir referans klip + transkript üzerinden zero-shot ses klonlama ile diyalog odaklı metinden konuşmaya (Sesame CSM-1B, Llama-1B omurgası + Mimi codec, MLX int8/fp16, 24 kHz, İngilizce; Apache-2.0)

LLM ve çeviri

  • Qwen3Chat — Cihaz üzerinde LLM sohbet (Qwen3.5-0.8B MLX/CoreML artı dense Qwen3 4B ve Gemma 4 E2B/E4B MLX arka uçları, akış token'ları)
  • FunctionGemma — Cihaz üzerinde yapılandırılmış fonksiyon / araç çağrıları için LLM (Gemma 3 270M, CoreML 8-bit paletleme, Neural Engine, ~252 tok/s)
  • MADLAD-400 — 400+ dil arasında çoktan-çoğa çeviri (3B, MLX INT4 + INT8, T5 v1.1, Apache 2.0)

Speech-to-Speech ve sesli ajanlar

  • Hibiki Zero-3B — Akışlı konuşmadan konuşmaya çeviri (FR/ES/PT/DE → EN, MLX INT4 + INT8, Kyutai Moshi/Mimi yığını, CC-BY-4.0)
  • PersonaPlex — Tam çift yönlü (full-duplex) konuşmadan konuşmaya (7B, ses girişi → ses çıkışı, 18 ses ön ayarı)
  • VoiceChat 11B — Sürekli konuşma girişi, duplex metin/işlev kanalları ve EAR-TTS + nöral codec üzerinden doğrudan konuşma çıkışı sunan native MLX duplex speech-to-speech (INT5/INT8)
  • Audio2Face-3D — Konuşmayla sürülen avatar yüz animasyonu (NVIDIA Audio2Face-3D v2.3 Mark, 301 yüz katsayısı, MLX)

İyileştirme, ayırma ve ses üretimi

  • DeepFilterNet3 — Gerçek zamanlı gürültü bastırma (2.1M parametre, 48 kHz)
  • LocalVQE v1.4-AEC — Ayrı ve eşzamanlı mikrofon ile oynatma referansı akışlarından akışlı akustik yankı giderme (Core ML + yerel uyarlamalı filtre, 16 kHz, 16 ms algoritmik gecikme)
  • Kaynak Ayrıştırma — HTDemucs (Demucs v4) + Open-Unmix ile müzik kaynağı ayrıştırma (UMX-HQ / UMX-L, 4 katman: vokal/davul/bas/diğer, 44,1 kHz stereo)
  • MAGNeT — Metinden müziğe üretim (Meta MAGNeT Small 300M / Medium 1.5B, MLX INT8, 32 kHz mono'da 30 sn klipler, maskelenmiş paralel kod çözme)
  • Stable Audio 3 — Text-to-audio/music generation (Stable Audio 3 Medium, MLX INT8/INT4, 44.1 kHz stereo, variable length)
  • FlashSR — Ses süper çözünürlük (FlashSR ICASSP 2025, MLX, 48 kHz mono, 1 adımda damıtılmış difüzyon, INT4 363 MB / INT8 720 MB)

Sıra algılama, konuşmacı ayrıştırma ve konuşmacı kimliği

  • Uyandırma kelimesi — Cihaz üzerinde anahtar kelime tespiti (KWS Zipformer 3M, CoreML, 26× gerçek zaman, yapılandırılabilir anahtar kelime listesi)
  • VAD — Ses etkinlik algılama (Silero akış, Pyannote çevrimdışı, FireRedVAD 100+ dil)
  • Konuşmacı Ayrımı — Kim ne zaman konuştu (Pyannote pipeline, Neural Engine üzerinde uçtan uca Sortformer) — artık artımlı akış oturumuyla (sabit konuşmacı kimlikleri, 480 ms'de bir güncelleme)
  • Konuşmacı Gömmeleri — WeSpeaker ResNet34 (256-boyut), ReDimNet2-B6 ile adlandırılmış ses kimliği (192-boyut), CAM++ (192-boyut)

Makaleler: 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)

Haberler

Hızlı başlangıç

Paketi Package.swift dosyanıza ekleyin:

.package(url: "https://github.com/soniqo/speech-swift", branch: "main")

Yalnızca ihtiyacınız olan modülleri içe aktarın — her model kendi SPM kütüphanesidir, böylece kullanmadığınız şey için bedel ödemezsiniz:

.product(name: "ParakeetStreamingASR", package: "speech-swift"),
.product(name: "SpeechUI",             package: "speech-swift"),  // isteğe bağlı SwiftUI görünümleri

Bir ses tamponunu 3 satırda transkribe edin:

import ParakeetStreamingASR

let model = try await ParakeetStreamingASRModel.fromPretrained()
let text = try model.transcribeAudio(audioSamples, sampleRate: 16000)

Kısmi sonuçlarla canlı akış:

for await partial in model.transcribeStream(audio: samples, sampleRate: 16000) {
    print(partial.isFinal ? "FINAL: \(partial.text)" : "... \(partial.text)")
}

~10 satırda SwiftUI dikte görünümü:

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 yalnızca TranscriptionView (kesin sonuçlar + kısmi sonuçlar) ve TranscriptionStore (akış ASR adaptörü) sunar. Ses görselleştirme ve oynatma için AVFoundation kullanın.

Mevcut SPM ürünleri: Qwen3ASR, WhisperASR, MossTranscribe, Qwen3TTS, Qwen3TTSCoreML, ParakeetASR, ParakeetStreamingASR, NemotronStreamingASR, OmnilingualASR, CohereTranscribeASR, VoxtralASR, KokoroTTS, SupertonicTTS, VibeVoiceTTS, CosyVoiceTTS, VoxCPM2TTS, IndexTTS2TTS, F5TTS, HiggsTTS, ChatterboxTTS, OmniVoiceTTS, IndicMioTTS, FishAudioTTS, MagpieTTS, MagpieTTSCoreML, MAGNeTMusicGen, StableAudio3MusicGen, FlashSR, PersonaPlex, VoiceChat, CSM, Audio2Face3D, HibikiTranslate, MADLADTranslation, SpeechVAD, SpeechLanguageID, SpeechWakeWord, SpeechEnhancement, SpeechRestoration, SourceSeparation, Qwen3Chat, FunctionGemma, SpeechCore, SpeechUI, AudioCommon.

Modeller

Aşağıda kompakt bir görünüm. Boyutlar, kuantizasyonlar, indirme URL'leri ve bellek tablolarıyla tam model kataloğu → soniqo.audio/architecture.

Model Görev Backend'ler Boyutlar Diller
Qwen3-ASR Konuşma → Metin MLX, CoreML (hibrit) 0.6B, 1.7B 52
WhisperASR Speech → Text CoreML (ANE) Large-v3 Turbo Multi
MOSS Transcribe Diarize Konuşma → Metin + konuşmacı zaman damgaları CoreML / MLX 0.9B (MLX INT5/INT8; CoreML INT8/FP16) Çok dilli
Parakeet TDT Konuşma → Metin CoreML (ANE) 0.6B 25 Avrupa dili
Parakeet EOU Konuşma → Metin (akış) CoreML (ANE) 120M 25 Avrupa dili
Nemotron Streaming (Çok dilli) Konuşma → Metin (akış, noktalamalı) CoreML (ANE), MLX 0.6B 40
Nemotron Streaming (İngilizce) Konuşma → Metin (akış, noktalamalı) CoreML (ANE) 0.6B EN
Omnilingual ASR Konuşma → Metin CoreML (ANE), MLX 300M / 1B / 3B / 7B 1.672
Cohere Transcribe 2B Konuşma → Metin MLX 2B (FP16 / INT5 / INT8) 14
Voxtral Mini 3B Konuşma → Metin MLX 3B (FP16 / INT5 / INT8) 8
Qwen3-ForcedAligner Ses + Metin → Zaman damgaları MLX, CoreML 0.6B Çoklu
Qwen3-TTS Metin → Konuşma MLX, CoreML 0.6B, 1.7B 10
CosyVoice3 Metin → Konuşma MLX 0.5B 9
VoxCPM2 Metin → Konuşma (48 kHz, ses tasarımı + klonlama) MLX 2B (bf16/int8) 30
IndexTTS2 Text → Speech (zero-shot voice cloning) MLX 1.5B-class (fp16) EN/ZH
F5-TTS Text → Speech (zero-shot voice cloning) MLX 336M (fp16) EN/ZH
Higgs TTS 3 Text → Speech (conversational, zero-shot voice cloning) MLX 4B (bf16) 100+
Kokoro-82M Metin → Konuşma CoreML (ANE) 82M 10
Supertonic-3 Metin → Konuşma (44.1 kHz, flow-matching, G2P-free) CoreML (ANE) 99M 31
VibeVoice Realtime-0.5B Metin → Konuşma (uzun biçimli, çok konuşmacılı) MLX 0.5B EN/ZH
VibeVoice 1.5B Metin → Konuşma (90 dakikaya kadar podcast) MLX 1.5B EN/ZH
Magpie-TTS Multilingual Metin → Konuşma (5 hazır konuşmacı, akış) MLX / CoreML 357M (MLX INT8, CoreML INT8) 9 (CoreML, JA hariç)
Chatterbox Multilingual Metin → Konuşma (zero-shot klonlama) MLX 0.8B (fp16) 23 (HE için niqqud gerekir)
OmniVoice Metin → Konuşma (NAR difüzyon, zero-shot klonlama) MLX 0.8B (fp16 varsayılan / int8) 600+
Indic-Mio Text → Speech (Hindi/Indic, emotion tags, voice cloning) MLX fp16 Hindi / Indic
Fish Audio S2 Pro Metin → Konuşma (zero-shot klonlama, açık stil işaretleri) MLX 0.5B-class (fp16) Çok dilli
CSM Metin → Konuşma (diyalog odaklı, zero-shot klonlama) MLX 1B (int8 / fp16) EN
Qwen3.5 Chat Text → Text (LLM) MLX, CoreML 0.8B Multi
Qwen3 Dense Chat Text → Text (LLM) MLX 4B Multi
Gemma 4 Chat Text → Text (LLM) MLX E2B / E4B (4-bit) Multi
FunctionGemma Metin → Araç çağrıları (LLM) CoreML 270M EN
MADLAD-400 Metin → Metin (Çeviri) MLX 3B 400+
Hibiki Zero-3B Konuşma → Konuşma (Çeviri) MLX 3B FR/ES/PT/DE → EN
PersonaPlex Konuşma → Konuşma MLX 7B EN
VoiceChat 11B Konuşma → Konuşma + Metin MLX 11B (INT5 / INT8) EN
Audio2Face-3D Konuşma → Yüz animasyonu MLX v2.3 Mark Bağımsız
Silero VAD Ses Etkinlik Algılama MLX, CoreML 309K Bağımsız
KWS Zipformer Audio → Wake word CoreML (ANE) 3M EN/custom keywords
Pyannote VAD + Konuşmacı Ayrımı MLX 1.5M Bağımsız
Pyannote Community-1 Konuşmacı ayrıştırma + konuşmacı gömmeleri CoreML (ANE) + Swift VBx 8.35M Bağımsız
Sortformer Konuşmacı Ayrımı (E2E), artımlı akış CoreML (ANE) 117M Bağımsız
DeepFilterNet3 Konuşma İyileştirme CoreML 2.1M Bağımsız
LocalVQE v1.4-AEC Akustik Yankı Giderme CoreML + C++ 200K + 2,742 Bağımsız
Sidon Konuşma Onarımı (gürültü bastırma + yankı giderme, 48 kHz) CoreML w2v-BERT 2.0 + DAC (fp16/int8) Bağımsız
HTDemucs (Demucs v4) Kaynak Ayrıştırma MLX 168M Bağımsız
Open-Unmix Kaynak Ayrıştırma MLX 8.6M Bağımsız
MAGNeT Metin → Müzik (30s @ 32 kHz) MLX 300M / 1.5B (int4/int8) EN prompt'ları
Stable Audio 3 Text → Music/audio (44.1 kHz stereo) MLX Medium 1.4B (int4/int8) EN prompts
FlashSR Ses süper çözünürlük (48 kHz) MLX 363 MB / 720 MB (int4/int8) Bağımsız
WeSpeaker Konuşmacı Gömme MLX, CoreML 6.6M Bağımsız
SpeechBrain ECAPA VoxLingua107 Dil tanımlama MLX, CoreML 21.25M 107 dil
ReDimNet2-B6 Adlandırılmış Ses Kimliği CoreML 12.3M Bağımsız

Kurulum

Homebrew

Yerel ARM Homebrew (/opt/homebrew) gerektirir. Rosetta/x86_64 Homebrew desteklenmez.

brew install speech

Ardından:

speech transcribe recording.wav
speech transcribe recording.wav --engine cohere
speech transcribe recording.wav --engine voxtral
speech transcribe recording.wav --engine moss
speech transcribe meeting.wav --engine moss --backend mlx
speech speak "Hello world"
speech csm "Nice to meet you" --ref-audio voice.wav --ref-text "reference transcript"
speech translate "Hello, how are you?" --to es
speech respond --input question.wav --transcript
speech voice-chat
speech-server --port 8080            # yerel HTTP / WebSocket sunucusu (OpenAI-compatible /v1/realtime + /v1/audio/transcriptions)

Tam CLI referansı →

Swift Package Manager

dependencies: [
    .package(url: "https://github.com/soniqo/speech-swift", branch: "main")
]

Yalnızca ihtiyacınız olanı içe aktarın — her model kendi SPM hedefidir:

import Qwen3ASR             // Konuşma tanıma (MLX)
import WhisperASR           // Whisper Large-v3 Turbo (CoreML)
import MossTranscribe       // MOSS transcription with timestamps + speaker labels (CoreML + MLX)
import ParakeetASR          // Konuşma tanıma (CoreML, batch)
import ParakeetStreamingASR // Kısmi sonuçlar + EOU ile akış dikte
import NemotronStreamingASR // Yerel noktalama ile çok dilli akış ASR (0.6B, 40 dil)
import OmnilingualASR       // 1.672 dil (CoreML + MLX)
import CohereTranscribeASR  // Cohere Transcribe 2B (MLX, 14 dil)
import VoxtralASR           // Voxtral Mini 3B (MLX, 8 dil)
import Qwen3TTS             // Metinden konuşmaya
import CosyVoiceTTS         // Ses klonlama ile metinden konuşmaya
import VoxCPM2TTS           // Ses klonlama + ses tasarımı ile 48 kHz TTS (2B)
import IndexTTS2TTS         // Native MLX voice cloning from reference audio
import F5TTS                // Zero-shot voice cloning (DiT flow matching + Vocos)
import HiggsTTS             // Conversational TTS + cloning (Qwen3 backbone, control tags)
import CSM                  // Conversational Speech Model — text→audio + voice cloning (Sesame CSM-1B, MLX)
import KokoroTTS            // Metinden konuşmaya (iOS için hazır)
import VibeVoiceTTS         // Uzun biçimli / çok konuşmacılı TTS (EN/ZH)
import MagpieTTS            // Çok dilli TTS (NVIDIA Magpie 357M, MLX, 9 dil)
import MagpieTTSCoreML      // Magpie CoreML backend'i (hibrit CoreML + MLX, 8 dil)
import FishAudioTTS         // Ses klonlama özellikli deneysel Fish Audio S2 Pro runtime
import Qwen3Chat            // Cihaz üzerinde LLM sohbet
import FunctionGemma    // Cihaz üzerinde araç çağrı LLM'i
import MADLADTranslation    // 400+ dil arasında çoktan-çoğa çeviri
import HibikiTranslate      // Akışlı konuşmadan konuşmaya çeviri (FR/ES/PT/DE → EN)
import PersonaPlex          // Tam çift yönlü konuşmadan konuşmaya
import SpeechVAD            // VAD + konuşmacı ayrımı + gömmeler
import SpeechEnhancement    // Gürültü bastırma
import SpeechRestoration    // Konuşma onarımı — gürültü bastırma + yankı giderme (Sidon, CoreML, 48 kHz)
import SourceSeparation     // Müzik kaynak ayrıştırma (Open-Unmix, 4 katman)
import SpeechUI             // Akış transkriptleri için SwiftUI bileşenleri
import AudioCommon          // Paylaşılan protokoller ve yardımcılar

Gereksinimler

  • Swift 6+, Xcode 16+ (Metal Toolchain ile)
  • macOS 15+ (Sequoia) veya iOS 18+, Apple Silicon (M1/M2/M3/M4)

macOS 15 / iOS 18 minimum gereksinimi MLState'ten gelir — Apple'ın CoreML pipeline'larının (Qwen3-ASR, Qwen3-Chat, Qwen3-TTS) KV önbelleklerini token adımları arasında Neural Engine'de tutmak için kullandığı kalıcı ANE durum API'sı.

Kaynaktan derleme

git clone https://github.com/soniqo/speech-swift
cd speech-swift
make build

make build, Swift paketini ve MLX Metal shader kütüphanesini derler. Metal kütüphanesi GPU çıkarımı için gereklidir — onsuz çalışma zamanında Failed to load the default metallib hatası görürsünüz. Debug build'leri için make debug, test paketi için make test.

Tam derleme ve kurulum rehberi →

Demo uygulamalar

  • DictateDemo (dokümantasyon) — Canlı kısmi sonuçlar, VAD tabanlı söyleyiş sonu algılaması ve tek tıklama kopyalama ile macOS menü çubuğu akış dikte. Arka plan ajanı olarak çalışır (Parakeet-EOU-120M + Silero VAD).
  • iOSEchoDemo — iOS yankı demosu (Parakeet ASR + Kokoro TTS). Cihaz ve simülatör.
  • PersonaPlexDemo — Mikrofon girişi, VAD ve çok turlu bağlam ile konuşmacı sesli asistan. macOS. M2 Max üzerinde RTF ~0.94 (gerçek zamandan hızlı).
  • Soniqo VoiceChat CLI (kılavuz) — Canlı RNN-T altyazıları, model tabanlı sıra alma, uyarlanabilir EAR-TTS ayrıntısı ve isteğe bağlı MCP araçları sunan yerel tam çift yönlü Nemotron 11B terminal asistanı. Birlikte gelen Apple Reminders yapılandırması yalnızca oluşturma, listeleme ve güncelleme işlemlerini açar.
  • SpeechDemo — Sekmeli arayüzde dikte ve TTS sentezi. macOS.

Release derlemesinden sonra VoiceChat hatırlatıcı demosunu çalıştırın:

./.build/release/speech voice-chat \
  --model /path/to/voicechat-mlx-int5 \
  --mcp-config Examples/VoiceChatMCP/apple-reminders.json

İfade, üretilen telaffuzun bitişi ve modelin çözdüğü araç yaşam döngüsü zaman damgaları için --debug-timeline ekleyin. Araç bağımsız değişkenlerini gösterebilir; paylaşılan günlüklerde kullanmayın. Derleme ve çalışma ayrıntıları için uygulama README'lerine veya bağlantılı kılavuza bakın.

Kod örnekleri

Aşağıdaki kod parçacıkları her alan için minimum yolu gösterir. Her bölüm, yapılandırma seçenekleri, birden fazla backend, akış desenleri ve CLI tarifleriyle soniqo.audio üzerindeki tam bir rehbere bağlanır.

Konuşmadan metne — tam rehber →

import Qwen3ASR

let model = try await Qwen3ASRModel.fromPretrained()
let text = model.transcribe(audio: audioSamples, sampleRate: 16000)

Alternatif backend'ler: WhisperASR (Whisper Large-v3 Turbo, native CoreML), Parakeet TDT (CoreML, 32× gerçek zaman), Omnilingual ASR (1.672 dil, CoreML veya MLX), Akış dikte (canlı kısmi sonuçlar).

Zorunlu Hizalama — tam rehber →

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)")
}

Metinden konuşmaya — tam rehber →

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)

Alternatif TTS motorları: CosyVoice3 (akış + ses klonlama + duygu etiketleri), Kokoro-82M (iOS için hazır, 54 ses), VibeVoice (uzun biçimli podcast / çok konuşmacılı, EN/ZH), Fish Audio S2 Pro (deneysel zero-shot klonlama + köşeli parantez stil işaretleri), Ses klonlama.

Konuşmadan konuşmaya — tam rehber →

import PersonaPlex

let model = try await PersonaPlexModel.fromPretrained()
let responseAudio = model.respond(userAudio: userSamples)
// Oynatmaya hazır 24 kHz mono Float32 çıkış

LLM Sohbet — tam rehber →

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: "")
}

Çeviri — tam rehber →

import MADLADTranslation

let translator = try await MADLADTranslator.fromPretrained()
let es = try translator.translate("Hello, how are you?", to: "es")
// → "Hola, ¿cómo estás?"

Konuşma Çevirisi — tam rehber →

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, cihaz üzerinde, akışlı Mimi codec

Ses Etkinlik Algılama — tam rehber →

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") }

Konuşmacı Ayrımı — tam rehber →

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") }

Konuşma İyileştirme — tam rehber →

import SpeechEnhancement

let denoiser = try await DeepFilterNet3Model.fromPretrained()
let clean = try denoiser.enhance(audio: noisySamples, sampleRate: 48000)

Akustik yankı giderme — tam kılavuz →

import SpeechEnhancement

let aec = try await LocalVQEEchoCanceller.fromPretrained()
let cleanMicrophone = try aec.processFrame(
    microphone: microphoneFrame,
    reference: playbackReferenceFrame
)

Konuşma Onarımı — tam rehber →

Sidon ile birlikte gürültü bastırma ve yankı giderme (w2v-BERT 2.0 tahmincisi + DAC vokoderi, Core ML). Genel bir gürültü bastırıcının aksine, Sidon konuşmacı kimliğini koruyacak şekilde eğitilmiştir; bu nedenle TTS öncesinde gürültülü veya yankılı bir ses klonlama referansını temizlemek için çok uygundur. Giriş 16 kHz; çıkış 48 kHz mono'dur.

import SpeechRestoration

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

CLI'dan:

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

Ses Pipeline'ı (ASR → LLM → TTS) — tam rehber →

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, VAD tabanlı tur algılama, kesinti yönetimi ve eager STT ile gerçek zamanlı sesli ajan durum makinesidir (speech-core tarafından desteklenir). Herhangi bir SpeechRecognitionModel + SpeechGenerationModel + StreamingVADProvider bileşenini birbirine bağlar.

HTTP API sunucusu

speech-server --port 8080

OpenAI uyumlu API'lar dahil olmak üzere her modeli HTTP REST + WebSocket uç noktaları üzerinden sunar: /v1/realtime üzerindeki Realtime WebSocket ve /v1/audio/transcriptions üzerindeki transkripsiyon REST uç noktası. Bkz. Sources/AudioServer/.

Araştırma makaleleri

Mimari

speech-swift, kullanıcıların yalnızca içe aktardıkları şey için bedel ödemesi adına model başına bir SPM hedefine ayrılmıştır. Paylaşılan altyapı AudioCommon (protokoller, ses G/Ç, HuggingFace indirici, SentencePieceModel) ve MLXCommon (ağırlık yükleme, QuantizedLinear yardımcıları, SDPA çok başlı dikkat yardımcısı) içinde yer alır.

Backend'ler, bellek tabloları ve modül haritasıyla tam mimari diyagramı → soniqo.audio/architecture · API referansı → soniqo.audio/api · Benchmark'lar → soniqo.audio/benchmarks

Yerel dokümantasyon (depo):

Önbellek yapılandırması

Model ağırlıkları ilk kullanımda HuggingFace'ten indirilir ve ~/Library/Caches/qwen3-speech/ dizinine önbelleğe alınır. QWEN3_CACHE_DIR (CLI) veya cacheDir: (Swift API) ile geçersiz kılabilirsiniz. Tüm fromPretrained() giriş noktaları, ağırlıklar zaten önbellekteyse ağı atlamak için offlineMode: true parametresini de kabul eder.

Sandbox'lı iOS konteyner yolları dahil tam ayrıntılar için docs/inference/cache-and-offline.md belgesine bakın.

MLX Metal kütüphanesi

Çalışma zamanında Failed to load the default metallib görürseniz Metal shader kütüphanesi eksiktir. Manuel bir swift build sonrası make build veya ./scripts/build_mlx_metallib.sh release komutunu çalıştırın. Metal Toolchain eksikse, önce onu kurun:

xcodebuild -downloadComponent MetalToolchain

Test

make test                            # tam paket (birim + model indirmeleriyle E2E)
swift test --skip E2E                # yalnızca birim (CI için güvenli, indirme yok)
swift test --filter Qwen3ASRTests    # belirli modül

E2E test sınıfları, CI'nin --skip E2E ile bunları filtreleyebilmesi için E2E önekini kullanır. Tam test kuralı için CLAUDE.md belgesine bakın.

Katkıda bulunma

PR'lar memnuniyetle karşılanır — hata düzeltmeleri, yeni model entegrasyonları, dokümantasyon. Fork'layın, bir özellik dalı oluşturun, make build && make test çalıştırın, main'e karşı bir PR açın.

Lisans

Apache 2.0