البدء
تفضّل واجهة API مُستضافة؟ نفس التفريغ والتوليف والاستنساخ كخدمة مُدارة — متوافقة مع OpenAI وElevenLabs. soniqo.audio/cloud →
ثبّت أداة سطر الأوامر speech لتفريغ الصوت وإنشائه على جهاز Mac بمعالج Apple Silicon. استخدم Swift SDK لإضافة معالجة الكلام إلى تطبيقات macOS وiOS.
متطلبات أداة سطر الأوامر
- macOS 15+ (Sequoia أو أحدث)
- Apple Silicon (arm64)
- 8 GB من ذاكرة الوصول العشوائي كحدّ أدنى (يُنصح بـ 16 GB للنماذج الأكبر)
تثبيت أداة سطر الأوامر
Homebrew (CLI)
استخدم نسخة ARM الأصلية من Homebrew (/opt/homebrew) لتثبيت speech وخادم HTTP/WebSocket المسمّى speech-server.
brew install speech
speech --help
المهمة الأولى: تفريغ ملف M4A
نزّل التسجيل التجريبي، ثم فرّغه إلى نص في الطرفية:
اتصل بالإنترنت عند التشغيل الأول. ستنزّل النموذج المختار من HuggingFace وتحتفظ به في ذاكرة التخزين المؤقت على جهاز Mac. بعد الإعداد، يمكنك تفريغ التسجيلات المحلية بهذا النموذج دون اتصال بالإنترنت.
curl -fL https://soniqo.audio/audio/samples/cli/transcription-sample.m4a -o transcription-sample.m4a
speech transcribe transcription-sample.m4a --engine parakeet
تابع إلى دليل تحويل M4A إلى نص.
بداية سريعة: من النص إلى الكلام
speech speak "Hello, world!" --output hello.wav
تشغيل واجهة كلام محلية
شغّل خادم HTTP/WebSocket لاستقبال طلبات API المحلية:
speech-server --port 8080
حزمة Swift SDK
أضف وحدات Swift إلى تطبيقك لنظام macOS 15+ أو iOS 18+ باستخدام Swift Package Manager.
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 |
تفريغ الصوت باستخدام 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)
إنشاء الكلام باستخدام 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"))
البناء من المصدر
للبناء من المصدر، ثبّت Xcode 16.3+ مع Metal Toolchain وSwift 6+. استنسخ المستودع وابنِ أداة سطر الأوامر، ثم تحقّق من الملف التنفيذي داخل مجلد العمل:
git clone https://github.com/soniqo/speech-swift.git
cd speech-swift
make build
.build/release/speech --help
تُجمِّع make build مكتبة شيدرات MLX Metal تلقائيًا. بدونها، يصبح الاستدلال على GPU أبطأ بنحو 5x بسبب تجميع الشيدرات أثناء التشغيل (JIT).
يستهدف بناء المظللات افتراضيًا macOS 15.0 وMetal 3.2، حتى مع SDK أحدث. يمكن تغيير القيم عبر MACOSX_DEPLOYMENT_TARGET وMLX_METAL_LANGUAGE_VERSION للبناء المخصص؛ وقد تستبعد الإصدارات المستهدفة الأعلى الأنظمة القديمة. تُبطل تغييرات المترجم أو SDK أو الخيارات أو البرنامج النصي أو المصادر ذاكرة التخزين المؤقت. عند فشل الترجمة أو الربط، تُحفظ المكتبة السابقة وبصمة ذاكرة التخزين المؤقت.
تنزيلات النماذج
تُنزَّل النماذج تلقائيًا من HuggingFace عند أوّل استخدام، وتُخزَّن في ~/Library/Caches/qwen3-speech/.
تُنزَّل جميع النماذج من 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 في الذروة |
الخطوات التالية
- تابع إلى دليل تحويل M4A إلى نص
- مرجع CLI — كل الأوامر والخيارات المتاحة
- دليل Qwen3-ASR — توثيق تفصيلي لتحويل الكلام إلى نص
- دليل Qwen3-TTS — توثيق تفصيلي لتحويل النص إلى كلام
- API والبروتوكولات — البروتوكولات والأنواع المشتركة