البدء
توفّر speech-swift معالجة كلام بالذكاء الاصطناعي على الجهاز لأنظمة macOS وiOS على Apple Silicon. تعمل النماذج محلّيًا باستخدام MLX (Metal GPU) وCoreML (Neural Engine).
المتطلّبات
- macOS 15+ (Sequoia أو أحدث)
- Apple Silicon (سلاسل M1 وM2 وM3 وM4)
- Xcode 15.4+ / 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 soniqo/tap/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", from: "0.0.9")
]
ثم أضِف الوحدات التي تحتاجها إلى هدف المشروع:
.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) |
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).
بداية سريعة: تفريغ الصوت
CLI
# Transcribe a WAV file
.build/release/speech transcribe recording.wav
واجهة Swift
import Qwen3ASR
let model = try await Qwen3ASRModel.loadFromHub()
let result = try await model.transcribe(audioFile: "recording.wav")
print(result.text)
تُنزَّل النماذج تلقائيًا من HuggingFace عند أوّل استخدام، وتُخزَّن في ~/Library/Caches/qwen3-speech/.
بداية سريعة: من النص إلى الكلام
CLI
# Generate speech
.build/release/speech speak "Hello, world!" --output hello.wav
واجهة Swift
import Qwen3TTS
let model = try await Qwen3TTSModel.loadFromHub()
let audio = try await model.speak("Hello, world!")
try audio.write(to: "hello.wav")
تنزيلات النماذج
تُنزَّل جميع النماذج من HuggingFace عند أوّل استخدام. أحجام تقريبية:
| النموذج | الحجم | استهلاك الذاكرة |
|---|---|---|
| Qwen3-ASR 0.6B (4-bit) | 680 MB | ~2.2 GB في الذروة |
| Qwen3-ASR 0.6B (8-bit) | 1.0 GB | ~2.5 GB في الذروة |
| Qwen3-ASR 1.7B (4-bit) | 2.1 GB | ~4 GB في الذروة |
| Parakeet-TDT (CoreML INT8) | 500 MB | ~600 MB في الذروة |
| 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 والبروتوكولات — البروتوكولات والأنواع المشتركة