مرجع CLI
الملف التنفيذي speech هو نقطة الدخول الرئيسية لكل مهام معالجة الكلام. ابنِه بـ make build، ثم شغّله من .build/release/speech.
transcribe
تفريغ ملفات الصوت إلى نص.
speech transcribe <file> [options]
| الخيار | القيمة الافتراضية | الوصف |
|---|---|---|
<file> | ملف الصوت المراد تفريغه (WAV, M4A, MP3, CAF) | |
--engine | qwen3 | محرك ASR: qwen3 أو qwen3-coreml أو parakeet أو nemotron أو omnilingual |
--model, -m | 0.6B | متغيّر النموذج: 0.6B أو 1.7B أو مُعرّف كامل لنموذج HuggingFace (لـ qwen3 فقط) |
--language | تلميح اللغة (اختياري، يتجاهله omnilingual) | |
--window | 10 | [omnilingual] حجم نافذة CoreML بالثواني: 5 أو 10 |
--backend | coreml | [omnilingual] الواجهة الخلفية: coreml (Neural Engine) أو mlx (Metal GPU) |
--variant | 300M | [omnilingual mlx] الحجم: 300M أو 1B أو 3B أو 7B |
--bits | 4 | [omnilingual mlx] بِتات التكميم: 4 أو 8 |
--stream | تفعيل التفريغ البثّي مع VAD | |
--max-segment | 10 | أقصى مدة للمقطع بالثواني (في البث) |
--partial | إصدار نتائج جزئية أثناء الكلام (في البث) |
أمثلة:
# Basic transcription
speech transcribe recording.wav
# Use larger model
speech transcribe recording.wav --model 1.7B
# CoreML encoder (Neural Engine + MLX decoder)
speech transcribe recording.wav --engine qwen3-coreml
# Use Parakeet (CoreML) engine
speech transcribe recording.wav --engine parakeet
# Use Nemotron Streaming (CoreML, English with native punctuation)
speech transcribe recording.wav --engine nemotron # batch
speech transcribe recording.wav --engine nemotron --stream --partial # streaming
# Omnilingual (CoreML, 1,672 languages)
speech transcribe recording.wav --engine omnilingual # 10 s window
speech transcribe recording.wav --engine omnilingual --window 5 # 5 s window
# Omnilingual (MLX, any length up to 40 s)
speech transcribe recording.wav --engine omnilingual --backend mlx # 300M @ 4-bit
speech transcribe recording.wav --engine omnilingual --backend mlx --variant 1B # 1B @ 4-bit
speech transcribe recording.wav --engine omnilingual --backend mlx --variant 3B --bits 8 # 3B @ 8-bit
speech transcribe recording.wav --engine omnilingual --backend mlx --variant 7B # 7B @ 4-bit
# Streaming with VAD
speech transcribe recording.wav --stream --partial
align
محاذاة قسرية على مستوى الكلمة — احصل على طوابع زمنية دقيقة لكل كلمة.
speech align <file> [options]
| الخيار | القيمة الافتراضية | الوصف |
|---|---|---|
<file> | ملف الصوت | |
--text, -t | النص المراد محاذاته (إن لم يُمرَّر، يُفرَّغ الصوت أولًا) | |
--model, -m | 0.6B | نموذج ASR للتفريغ: 0.6B أو 1.7B أو مُعرّف كامل |
--aligner-model | مُعرّف نموذج المحاذي القسري | |
--language | تلميح اللغة |
أمثلة:
# Auto-transcribe then align
speech align recording.wav
# Align with known text
speech align recording.wav --text "Can you guarantee that the replacement part will be shipped tomorrow?"
speak
توليف نص إلى كلام.
speech speak "<text>" [options]
| الخيار | القيمة الافتراضية | الوصف |
|---|---|---|
<text> | النص المراد توليفه (اختياري عند استخدام --batch-file) | |
--engine | qwen3 | محرك TTS: qwen3 أو cosyvoice أو voxcpm2 أو magpie |
--output, -o | output.wav | مسار ملف WAV الناتج |
--language | english | اللغة. أغفلها لاستخدام لهجة المتحدث الأصلية عند تعيين --speaker. |
--stream | تفعيل التوليف البثّي | |
--voice-sample | صوت مرجعي لاستنساخ الصوت (يعمل مع كل من محركَي qwen3 وcosyvoice) | |
--verbose | إظهار معلومات توقيت تفصيلية |
خيارات Qwen3-TTS
| الخيار | القيمة الافتراضية | الوصف |
|---|---|---|
--model | base | متغيّر النموذج: base أو customVoice أو مُعرّف HF كامل |
--speaker | صوت المتحدث (يتطلب --model customVoice) | |
--instruct | تعليمة الأسلوب (لنموذج CustomVoice) | |
--list-speakers | سرد المتحدثين المتاحين والخروج | |
--temperature | 0.3 | درجة حرارة المعاينة |
--top-k | 50 | معاينة top-k |
--max-tokens | 500 | أقصى عدد للرموز (500 = ~40 ثانية من الصوت) |
--batch-file | ملف بنص واحد لكل سطر للتوليف الدُفعي | |
--batch-size | 4 | أقصى حجم دفعة للتوليد المتوازي |
--first-chunk-frames | 3 | عدد إطارات الـ codec في أول قطعة مُبثَّة |
--chunk-frames | 25 | عدد إطارات الـ codec لكل قطعة مُبثَّة |
خيارات CosyVoice3
| الخيار | القيمة الافتراضية | الوصف |
|---|---|---|
--speakers | ربط المتحدثين للحوار متعدد المتحدثين: s1=alice.wav,s2=bob.wav | |
--cosy-instruct | تعليمة الأسلوب (تتجاوز الافتراضية). تتحكم في أسلوب الصوت لـ CosyVoice3. | |
--turn-gap | 0.2 | فجوة الصمت بين أدوار الحوار بالثواني |
--crossfade | 0.0 | تداخل التلاشي المتقاطع بين الأدوار بالثواني |
--model-id | مُعرّف نموذج HuggingFace |
خيارات VoxCPM2
| الخيار | القيمة الافتراضية | الوصف |
|---|---|---|
--voxcpm2-variant | bf16 | متغيّر التكميم: bf16 أو int8 أو int4. يُحلّ إلى aufklarer/VoxCPM2-MLX-<variant>. |
--voxcpm2-instruct | وصف صوتي بلغة طبيعية (تصميم الصوت)، مثل "a young woman, warm and gentle". | |
--voxcpm2-ref-audio | ملف صوت مرجعي للاستنساخ (أحادي القناة 16 كيلوهرتز، يُعاد تشكيله داخليًا). | |
--voxcpm2-prompt-audio / --voxcpm2-prompt-text | زوج "الاستنساخ النهائي" — مقطع مرجعي + نصه للاستنساخ مع الحفاظ على البروسودي. | |
--voxcpm2-cfg-value | 2.0 | مقياس التوجيه بدون مصنّف لمعاين الانتشار. |
--voxcpm2-timesteps | 10 | خطوات حلّال Euler لكل رقعة صوت مُولَّدة. |
--voxcpm2-max-tokens | 2000 | أقصى عدد للرقع المُولَّدة قبل التوقف القسري. |
--voxcpm2-min-tokens | 2 | أدنى عدد للرقع قبل أن يُسمح لرأس التوقف بالإطلاق. |
--seed | بذرة لمولّد MLX RNG قبل التوليف (نتائج حتمية عبر التشغيلات). |
خيارات Magpie
NVIDIA Magpie-TTS Multilingual 357M، 9 لغات مع 5 متحدثين مدمجين. اختر الواجهة الخلفية عبر --engine magpie (MLX، الافتراضي) أو --engine magpie-coreml (CoreML للنماذج الكبيرة مع قيادة MLX لـ LocalTransformer + تضمينات الصوت). راجع دليل Magpie للحصول على التفاصيل الكاملة لـ G2P لكل لغة. استنساخ الصوت غير مدعوم: ستُرفض --voice-sample و--speaker و--instruct مع خطأ مفيد يشير إلى --magpie-speaker بدلًا منها.
| الخيار | القيمة الافتراضية | الوصف |
|---|---|---|
--magpie-variant | int4 | لـ MLX فقط. التكميم: int4 (247 ميغابايت) أو int8 (411 ميغابايت). يُحلّ إلى aufklarer/Magpie-TTS-Multilingual-357M-MLX-<variant>. محرّك CoreML يستخدم حزمة CoreML بصيغة INT8 ويتجاهل هذه الراية. |
--magpie-speaker | sofia | متحدث مدمج: sofia أو aria أو jason أو leo أو john. الهوية ثابتة عبر اللغات التسع وكلا الواجهتين الخلفيتين. |
--magpie-temperature | 0.6 | درجة حرارة المعاينة (0 = جشعة). استخدم 0.6 لليابانية — الجشعة تعلَق على العبارة الأولى. |
--magpie-top-k | 80 | مرشّح top-k للمعاينة. |
--magpie-max-frames | 500 | حدّ صارم على إطارات الـ codec (~23 ثانية). |
--magpie-min-frames | 4 | أدنى عدد للإطارات قبل السماح بـ EOS. |
--magpie-prephonemized | اعتبر الإدخال تيار IPA / فونيمات؛ تخطَّ G2P لكل لغة. | |
--list-speakers | طباعة المتحدثين المدمجين الخمسة والخروج. |
تحفظات magpie-coreml: الـ NanoCodec المُرفَق مُتعقَّب عند نافذة ثابتة 64 إطارًا، لذا تُرفض --stream. الخيار --language ja يُوجَّه تلقائيًا إلى الواجهة الخلفية MLX مع ملاحظة على stderr (حزمة CoreML لا تشحن أصول مُجزّئ JA بعد). محرّك CoreML يحمّل حزمة MLX بشكل كسول عند أول توليف لقيادة LocalTransformer ومتوسط تضمينات الصوت؛ النشر النقي على CoreML مُتتبَّع كمتابعة.
أمثلة:
# Basic TTS
speech speak "Hello, world!" --output hello.wav
# Voice cloning (Qwen3-TTS)
speech speak "Hello in your voice" --voice-sample reference.wav -o cloned.wav
# Voice cloning (CosyVoice)
speech speak "Hello in your voice" --engine cosyvoice --voice-sample reference.wav -o cloned.wav
# CosyVoice multilingual
speech speak "Hallo Welt" --engine cosyvoice --language german -o hallo.wav
# Multi-speaker dialogue
speech speak "[S1] Hello there! [S2] Hey, how are you?" \
--engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o dialogue.wav
# Inline emotion/style tags
speech speak "(excited) Wow, amazing! (sad) But I have to go..." \
--engine cosyvoice -o emotion.wav
# Combined: dialogue + emotions + voice cloning
speech speak "[S1] (happy) Great news! [S2] (surprised) Really?" \
--engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o combined.wav
# Custom style instruction
speech speak "Hello world" --engine cosyvoice --cosy-instruct "Speak cheerfully" -o cheerful.wav
# Magpie multilingual TTS — same Aria voice across 9 languages
speech speak "Hello, world." --engine magpie --magpie-speaker aria \
--magpie-temperature 0 -o en.wav
speech speak "Hola mundo." --engine magpie --language es --magpie-speaker aria \
--magpie-temperature 0 -o es.wav
# Japanese needs stochastic sampling
speech speak "こんにちは世界、これは音声合成システムです。" \
--engine magpie --language ja --magpie-temperature 0.6 \
--magpie-top-k 80 --seed 42 -o ja.wav
speech speak --engine magpie --list-speakers
# Magpie CoreML backend (ANE-accelerated, 8 languages, no streaming)
speech speak "Hello world." --engine magpie-coreml --magpie-speaker aria -o en.wav
speech speak "Hola mundo." --engine magpie-coreml --language es \
--magpie-speaker leo -o es.wav
# Japanese auto-routes to MLX (CoreML bundle has no JA tokenizer)
speech speak "こんにちは。" --engine magpie-coreml --language ja -o ja.wav
# Streaming synthesis
speech speak "Long text here..." --stream
# Batch synthesis from file
speech speak --batch-file texts.txt --batch-size 4
# VoxCPM2 — 48 kHz studio output
speech speak "Hello there." --engine voxcpm2 --voxcpm2-variant int8 -o hi.wav
# VoxCPM2 — voice design
speech speak "Welcome to the show." --engine voxcpm2 \
--voxcpm2-instruct "A young woman, warm and gentle voice." -o design.wav
# VoxCPM2 — single-reference cloning
speech speak "This is a cloned voice." --engine voxcpm2 \
--voice-sample speaker.wav -o clone.wav
kokoro
توليف نص إلى كلام خفيف باستخدام Kokoro-82M على Neural Engine (CoreML). غير تراجعي — تمريرة أمامية واحدة، وزمن استجابة بحدود 45 ميلي ثانية.
speech kokoro "<text>" [options]
| الخيار | القيمة الافتراضية | الوصف |
|---|---|---|
<text> | النص المراد توليفه | |
--voice | af_heart | إعداد صوت مُسبَق (50 صوتًا متوفرًا عبر 10 لغات) |
--language | en | رمز اللغة: en, es, fr, hi, it, ja, pt, zh, ko, de |
--output, -o | kokoro_output.wav | مسار ملف WAV الناتج |
--list-voices | سرد كل الأصوات المتاحة والخروج | |
--model, -m | مُعرّف نموذج HuggingFace |
أمثلة:
# Basic Kokoro TTS
speech kokoro "Hello, world!" --voice af_heart -o hello.wav
# French voice
speech kokoro "Bonjour le monde" --voice ff_siwis --language fr -o bonjour.wav
# List all 50 voices
speech kokoro --list-voices
respond
حوار من كلام إلى كلام كامل الاتجاهين باستخدام PersonaPlex 7B.
speech respond [options]
| الخيار | القيمة الافتراضية | الوصف |
|---|---|---|
--input, -i | ملف WAV لصوت الإدخال (24 كيلوهرتز أحادي القناة) (مطلوب) | |
--output, -o | response.wav | ملف WAV لاستجابة الإخراج |
--voice | NATM0 | إعداد صوت مُسبَق (مثل NATM0 أو NATF1 أو VARF0) |
--system-prompt | assistant | إعداد مُسبَق: assistant أو focused أو customer-service أو teacher |
--system-prompt-text | نص مخصص لتعليمات النظام (يتجاوز الإعداد المُسبَق) | |
--max-steps | 200 | أقصى خطوات توليد بمعدل 12.5 هرتز (~16 ثانية) |
--stream | إصدار قطع صوت أثناء التوليد | |
--compile | تفعيل المُحوّل المُجمَّع (تسخين + دمج نواة) | |
--list-voices | سرد إعدادات الأصوات المُسبَقة المتاحة | |
--list-prompts | سرد إعدادات تعليمات النظام المُسبَقة المتاحة | |
--transcript | طباعة نص المونولوغ الداخلي للنموذج | |
--json | الإخراج بصيغة JSON (النص المُفرَّغ، زمن الاستجابة، مسار الصوت) | |
--verbose | إظهار معلومات توقيت تفصيلية |
تجاوزات المعاينة
| الخيار | القيمة الافتراضية | الوصف |
|---|---|---|
--audio-temp | 0.8 | درجة حرارة معاينة الصوت |
--text-temp | 0.7 | درجة حرارة معاينة النص |
--audio-top-k | 250 | عدد مرشحي top-k للصوت |
--repetition-penalty | 1.2 | عقوبة تكرار الصوت (1.0 = معطّلة) |
--text-repetition-penalty | 1.2 | عقوبة تكرار النص (1.0 = معطّلة) |
--repetition-window | 30 | نافذة عقوبة التكرار بالإطارات |
--silence-early-stop | 15 | إطارات الصمت قبل التوقف المبكر (0 = معطّل) |
--entropy-threshold | 0 | عتبة إنتروبيا النص للتوقف المبكر (0 = معطّلة) |
--entropy-window | 10 | خطوات متتالية منخفضة الإنتروبيا قبل التوقف المبكر |
أمثلة:
# Basic speech-to-speech
speech respond --input question.wav
# Use a female voice with compiled transformer
speech respond -i question.wav --voice NATF1 --compile
# Stream response and show transcript
speech respond -i question.wav --stream --transcript --verbose
vad
كشف النشاط الصوتي دون اتصال باستخدام تجزئة Pyannote.
speech vad <file> [options]
| الخيار | الوصف |
|---|---|
<file> | ملف الصوت المراد تحليله |
--model, -m | مُعرّف نموذج HuggingFace |
--onset | عتبة بداية الكلام |
--offset | عتبة نهاية الكلام |
--min-speech | أدنى مدة للكلام بالثواني |
--min-silence | أدنى مدة للصمت بالثواني |
--json | الإخراج بصيغة JSON |
vad-stream
كشف نشاط صوتي بثّي باستخدام Silero VAD v5. يعالج الكلام في قطع مدتها 32 ميلي ثانية.
speech vad-stream <file> [options]
| الخيار | الوصف |
|---|---|
<file> | ملف الصوت المراد تحليله |
--engine | محرّك VAD: mlx (افتراضي) أو coreml |
--model, -m | مُعرّف نموذج HuggingFace (يُختار تلقائيًا حسب المحرّك) |
--onset | عتبة بداية الكلام |
--offset | عتبة نهاية الكلام |
--min-speech | أدنى مدة للكلام بالثواني |
--min-silence | أدنى مدة للصمت بالثواني |
--json | الإخراج بصيغة JSON |
wake
كشف كلمات إيقاظ / كلمات مفتاحية على الجهاز باستخدام KWS Zipformer (3.49 مليون معامل، CoreML INT8، 26× زمن حقيقي، إنجليزي فقط).
speech wake <file> [options]
| الخيار | الوصف |
|---|---|
<file> | ملف الصوت المراد تحليله |
--keywords | كلمة مفتاحية واحدة أو أكثر. الصيغ: "hey soniqo" (BPE جشع)، "hey soniqo:0.15:0.5" (مع عتبة/تعزيز)، أو "LIGHT UP|▁ L IGHT ▁UP:0.25:2.0" (قطع BPE صريحة بأسلوب sherpa-onnx) |
--keywords-file | ملف كلمات مفتاحية، إدخال واحد لكل سطر (بنفس صياغة --keywords)؛ # للتعليقات |
--model, -m | مُعرّف نموذج HuggingFace. الافتراضي aufklarer/KWS-Zipformer-3M-CoreML-INT8 |
--json | الإخراج بصيغة JSON |
# Plain phrase, tuned defaults
speech wake recording.wav --keywords "hey soniqo"
# Explicit BPE pieces for phrases the greedy tokenizer gets wrong
speech wake recording.wav --keywords "LIGHT UP|▁ L IGHT ▁UP:0.25:2.0"
# Multiple phrases + JSON output
speech wake recording.wav \
--keywords "lovely child|▁LOVE LY ▁CHI L D:0.25:2.0" \
"for ever|▁FOR E VER:0.25:2.0" \
--json
diarize
فصل المتحدثين — تحديد من تكلّم ومتى.
speech diarize <file> [options]
| الخيار | القيمة الافتراضية | الوصف |
|---|---|---|
<file> | ملف الصوت المراد تحليله | |
--engine | pyannote | محرّك الفصل: pyannote (تجزئة + ربط المتحدثين) أو sortformer (CoreML شامل من طرف إلى طرف) |
--target-speaker | صوت تسجيل لاستخراج المتحدث المستهدف (pyannote فقط) | |
--embedding-engine | mlx | محرّك تضمين المتحدث: mlx أو coreml (pyannote فقط) |
--vad-filter | تصفية مسبقة بـ Silero VAD (pyannote فقط) | |
--rttm | الإخراج بصيغة RTTM | |
--json | الإخراج بصيغة JSON | |
--score-against | ملف RTTM مرجعي لحساب DER |
أمثلة:
# Basic diarization (pyannote, default)
speech diarize meeting.wav
# End-to-end Sortformer (CoreML, Neural Engine)
speech diarize meeting.wav --engine sortformer
# RTTM output for evaluation
speech diarize meeting.wav --rttm
# Target speaker extraction (pyannote only)
speech diarize meeting.wav --target-speaker enrollment.wav
# Score against reference
speech diarize meeting.wav --score-against reference.rttm
embed-speaker
استخراج متّجه تضمين المتحدث من الصوت.
speech embed-speaker <file> [options]
| الخيار | الوصف |
|---|---|
<file> | ملف صوت يحوي صوت المتحدث |
--engine | محرّك الاستدلال: mlx (الافتراضي) أو coreml (WeSpeaker 256 بُعدًا) أو camplusplus (CAM++ CoreML 192 بُعدًا) |
--json | الإخراج بصيغة JSON |
denoise
إزالة الضوضاء الخلفية باستخدام DeepFilterNet3 على Neural Engine.
speech denoise <file> [options]
| الخيار | القيمة الافتراضية | الوصف |
|---|---|---|
<file> | ملف الصوت المُدخَل | |
--output, -o | input_clean.wav | مسار ملف الإخراج |
--model, -m | مُعرّف نموذج HuggingFace |
مثال:
speech denoise noisy-recording.wav -o clean.wav
compose
توليد 30 ثانية من الموسيقى من مُحفّز نصي باستخدام MAGNeT على MLX.
speech compose <prompt> [options]
| الخيار | القيمة الافتراضية | الوصف |
|---|---|---|
<prompt> | مُحفّز نصي يصف الموسيقى المراد توليدها (مثل "happy rock") | |
--output, -o | magnet.wav | مسار WAV الناتج (32 كيلوهرتز أحادي القناة) |
--variant | small-int4 | متغيّر النموذج: small-int4 أو small-int8 أو medium-int4 أو medium-int8. يُحلّ إلى aufklarer/MAGNeT-{Small,Medium}-30secs-MLX-{4,8}bit. |
--temperature | 3.0 | درجة حرارة المعاينة، تُخفَّض خطّيًا لكل مرحلة. |
--top-p | 0.9 | عتبة معاينة nucleus. |
--cfg-max | 10.0 | أقصى معامل توجيه بدون مصنّف. |
--cfg-min | 1.0 | أدنى معامل CFG (يُخفَّض جنبًا إلى جنب مع جدول القناع). |
--steps | 20,10,10,10 | تكرارات فك التشفير مفصولة بفواصل لكل codebook (4 قيم). |
--seed | بذرة عشوائية لإخراج قابل للتكرار. |
أمثلة:
# Default: small-int4, ~10 s wall on M-series for a 30 s clip
speech compose "happy rock" -o happy_rock.wav
# Larger model — better prompt following, slower
speech compose "lo-fi hip hop with mellow piano" --variant medium-int4 -o lofi.wav
# Reproducible
speech compose "energetic EDM with synth lead" --seed 42 -o edm.wav