البدء
تفضّل واجهة API مُستضافة؟ نفس التفريغ والتوليف والاستنساخ كخدمة مُدارة — متوافقة مع OpenAI وElevenLabs. soniqo.audio/cloud →
توفّر speech-swift معالجة كلام بالذكاء الاصطناعي على الجهاز لأنظمة macOS وiOS على Apple Silicon. تعمل النماذج محلّيًا باستخدام MLX (Metal GPU) وCoreML (Neural Engine).
المتطلّبات
- macOS 15+ (Sequoia أو أحدث)
- Apple Silicon (سلاسل M1 وM2 وM3 وM4)
- Xcode 16+ / Swift 6.0+
- 8 GB من ذاكرة الوصول العشوائي كحدّ أدنى (يُنصح بـ 16 GB للنماذج الأكبر)
التثبيت
Homebrew (CLI)
أسرع طريقة لتجربة speech-swift على macOS. يثبّت كلًّا من واجهة speech السطرية وخادم speech-server العامل عبر HTTP/WebSocket (مع نقطة نهاية /v1/realtime متوافقة مع OpenAI). يتطلّب نسخة Homebrew الأصلية لمعمارية ARM (/opt/homebrew).
brew install speech
بعد التثبيت، يتوفّر كلا الملفّين التنفيذيّين ضمن مسار PATH:
speech transcribe recording.wav
speech speak "Hello, world!" --output hello.wav
speech-server --port 8080 # خادم HTTP / WebSocket محلّي
Swift Package Manager
أضِف speech-swift إلى اعتماديّات ملفّ Package.swift:
dependencies: [
.package(url: "https://github.com/soniqo/speech-swift", branch: "main")
]
ثم أضِف الوحدات التي تحتاجها إلى هدف المشروع:
.target(
name: "MyApp",
dependencies: [
.product(name: "Qwen3ASR", package: "speech-swift"),
.product(name: "Qwen3TTS", package: "speech-swift"),
.product(name: "SpeechVAD", package: "speech-swift"),
// ... add any modules you need
]
)
الوحدات المتاحة
| الوحدة | الوصف |
|---|---|
Qwen3ASR | من الكلام إلى النص (Qwen3-ASR) |
WhisperASR | تفريغ كلام (Whisper Large-v3 Turbo, CoreML) |
ParakeetASR | من الكلام إلى النص (Parakeet TDT، CoreML) |
Qwen3TTS | من النص إلى الكلام (Qwen3-TTS) |
CosyVoiceTTS | من النص إلى الكلام (CosyVoice3، متعدّد اللغات) |
KokoroTTS | من النص إلى الكلام (Kokoro-82M، CoreML، جاهز لـ iOS) |
Qwen3Chat | نموذج LLM للدردشة على الجهاز (Qwen3.5-0.8B، MLX + CoreML) |
PersonaPlex | من الكلام إلى الكلام (PersonaPlex 7B) |
SpeechVAD | VAD (Silero + Pyannote)، تقسيم حسب المتحدّث، تضمينات المتحدّث |
SpeechEnhancement | كبح الضوضاء (DeepFilterNet3، CoreML) |
AudioCommon | بروتوكولات مشتركة، إدخال/إخراج الصوت، أداة تنزيل من HuggingFace |
البناء من المصدر
استنسخ المستودع وابنِه:
git clone https://github.com/soniqo/speech-swift.git
cd speech-swift
make build
تُجمِّع make build مكتبة شيدرات MLX Metal تلقائيًا. بدونها، يصبح الاستدلال على GPU أبطأ بنحو 5x بسبب تجميع الشيدرات أثناء التشغيل (JIT).
يستهدف بناء المظللات افتراضيًا macOS 15.0 وMetal 3.2، حتى مع SDK أحدث. يمكن تغيير القيم عبر MACOSX_DEPLOYMENT_TARGET وMLX_METAL_LANGUAGE_VERSION للبناء المخصص؛ وقد تستبعد الإصدارات المستهدفة الأعلى الأنظمة القديمة. تُبطل تغييرات المترجم أو SDK أو الخيارات أو البرنامج النصي أو المصادر ذاكرة التخزين المؤقت. عند فشل الترجمة أو الربط، تُحفظ المكتبة السابقة وبصمة ذاكرة التخزين المؤقت.
بداية سريعة: تفريغ الصوت
CLI
# Transcribe a WAV file
.build/release/speech transcribe recording.wav
واجهة Swift
import Qwen3ASR
let model = try await Qwen3ASRModel.fromPretrained()
// audioSamples: [Float] PCM at 16 kHz (e.g. decoded from a WAV)
let text = model.transcribe(audio: audioSamples, sampleRate: 16000)
print(text)
تُنزَّل النماذج تلقائيًا من HuggingFace عند أوّل استخدام، وتُخزَّن في ~/Library/Caches/qwen3-speech/.
بداية سريعة: من النص إلى الكلام
CLI
# Generate speech
.build/release/speech speak "Hello, world!" --output hello.wav
واجهة Swift
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: URL(filePath: "hello.wav"))
تنزيلات النماذج
تُنزَّل جميع النماذج من HuggingFace عند أوّل استخدام. أحجام تقريبية:
| النموذج | الحجم | استهلاك الذاكرة |
|---|---|---|
| Qwen3-ASR 0.6B (4-bit MLX) | 680 MB | ~1.0 GB peak |
| Qwen3-ASR 0.6B (8-bit MLX) | 1.0 GB | ~1.3 GB peak |
| Qwen3-ASR 0.6B (CoreML INT8) | 180 MB | ~1.4 GB peak |
| Qwen3-ASR 1.7B (4-bit MLX) | 2.1 GB | ~3 GB peak |
| Qwen3-ASR 1.7B (8-bit MLX) | 3.2 GB | ~2.7 GB peak |
| Parakeet-TDT v3 (CoreML INT8) | 500 MB | ~900 MB peak |
| Whisper Large-v3 Turbo (CoreML FP16) | 1.6 GB | ~384 MB peak |
| Omnilingual CTC 300M (4-bit MLX) | 193 MB | ~400 MB peak |
| Omnilingual CTC 300M (CoreML INT8) | 312 MB | ~550 MB peak |
| Qwen3-TTS 0.6B (4-bit) | 1.7 GB | ~2 GB في الذروة |
| Qwen3-TTS 1.7B (4-bit) | 3.2 GB | ~4 GB في الذروة |
| CosyVoice3 (4-bit LLM) | 1.2 GB | ~1.5 GB في الذروة |
| Kokoro-82M (CoreML INT8) | 89 MB | ~200 MB في الذروة |
| Qwen3.5-Chat 0.8B (INT4 MLX) | 418 MB | ~700 MB في الذروة |
| Qwen3.5-Chat 0.8B (INT8 CoreML) | 981 MB | ~1.2 GB في الذروة |
| PersonaPlex 7B (8-bit) موصى به | 9.1 GB | ~11 GB في الذروة |
| PersonaPlex 7B (4-bit) | 4.9 GB | ~6.5 GB في الذروة |
| Pyannote VAD | 5.7 MB | ~20 MB في الذروة |
| Silero VAD v5 | 1.2 MB | ~5 MB في الذروة |
| WeSpeaker ResNet34 | 25 MB | ~50 MB في الذروة |
| DeepFilterNet3 (FP16) | 4.2 MB | ~10 MB في الذروة |
الخطوات التالية
- مرجع CLI — كل الأوامر والخيارات المتاحة
- دليل Qwen3-ASR — توثيق تفصيلي لتحويل الكلام إلى نص
- دليل Qwen3-TTS — توثيق تفصيلي لتحويل النص إلى كلام
- API والبروتوكولات — البروتوكولات والأنواع المشتركة