مرجع CLI

الملف التنفيذي speech هو نقطة الدخول الرئيسية لكل مهام معالجة الكلام. ابنِه بـ make build، ثم شغّله من .build/release/speech.

transcribe

تفريغ ملفات الصوت إلى نص.

speech transcribe <file> [options]
الخيارالقيمة الافتراضيةالوصف
<file>ملف الصوت المراد تفريغه (WAV, M4A, MP3, CAF)
--engineqwen3محرك ASR: qwen3 أو qwen3-coreml أو parakeet أو nemotron أو omnilingual
--model, -m0.6Bمتغيّر النموذج: 0.6B أو 1.7B أو مُعرّف كامل لنموذج HuggingFace (لـ qwen3 فقط)
--languageتلميح اللغة (اختياري، يتجاهله omnilingual)
--window10[omnilingual] حجم نافذة CoreML بالثواني: 5 أو 10
--backendcoreml[omnilingual] الواجهة الخلفية: coreml (Neural Engine) أو mlx (Metal GPU)
--variant300M[omnilingual mlx] الحجم: 300M أو 1B أو 3B أو 7B
--bits4[omnilingual mlx] بِتات التكميم: 4 أو 8
--streamتفعيل التفريغ البثّي مع VAD
--max-segment10أقصى مدة للمقطع بالثواني (في البث)
--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, -m0.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)
--engineqwen3محرك TTS: qwen3 أو cosyvoice أو voxcpm2 أو magpie
--output, -ooutput.wavمسار ملف WAV الناتج
--languageenglishاللغة. أغفلها لاستخدام لهجة المتحدث الأصلية عند تعيين --speaker.
--streamتفعيل التوليف البثّي
--voice-sampleصوت مرجعي لاستنساخ الصوت (يعمل مع كل من محركَي qwen3 وcosyvoice)
--verboseإظهار معلومات توقيت تفصيلية

خيارات Qwen3-TTS

الخيارالقيمة الافتراضيةالوصف
--modelbaseمتغيّر النموذج: base أو customVoice أو مُعرّف HF كامل
--speakerصوت المتحدث (يتطلب --model customVoice)
--instructتعليمة الأسلوب (لنموذج CustomVoice)
--list-speakersسرد المتحدثين المتاحين والخروج
--temperature0.3درجة حرارة المعاينة
--top-k50معاينة top-k
--max-tokens500أقصى عدد للرموز (500 = ~40 ثانية من الصوت)
--batch-fileملف بنص واحد لكل سطر للتوليف الدُفعي
--batch-size4أقصى حجم دفعة للتوليد المتوازي
--first-chunk-frames3عدد إطارات الـ codec في أول قطعة مُبثَّة
--chunk-frames25عدد إطارات الـ codec لكل قطعة مُبثَّة

خيارات CosyVoice3

الخيارالقيمة الافتراضيةالوصف
--speakersربط المتحدثين للحوار متعدد المتحدثين: s1=alice.wav,s2=bob.wav
--cosy-instructتعليمة الأسلوب (تتجاوز الافتراضية). تتحكم في أسلوب الصوت لـ CosyVoice3.
--turn-gap0.2فجوة الصمت بين أدوار الحوار بالثواني
--crossfade0.0تداخل التلاشي المتقاطع بين الأدوار بالثواني
--model-idمُعرّف نموذج HuggingFace

خيارات VoxCPM2

الخيارالقيمة الافتراضيةالوصف
--voxcpm2-variantbf16متغيّر التكميم: 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-value2.0مقياس التوجيه بدون مصنّف لمعاين الانتشار.
--voxcpm2-timesteps10خطوات حلّال Euler لكل رقعة صوت مُولَّدة.
--voxcpm2-max-tokens2000أقصى عدد للرقع المُولَّدة قبل التوقف القسري.
--voxcpm2-min-tokens2أدنى عدد للرقع قبل أن يُسمح لرأس التوقف بالإطلاق.
--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-variantint4لـ MLX فقط. التكميم: int4 (247 ميغابايت) أو int8 (411 ميغابايت). يُحلّ إلى aufklarer/Magpie-TTS-Multilingual-357M-MLX-<variant>. محرّك CoreML يستخدم حزمة CoreML بصيغة INT8 ويتجاهل هذه الراية.
--magpie-speakersofiaمتحدث مدمج: sofia أو aria أو jason أو leo أو john. الهوية ثابتة عبر اللغات التسع وكلا الواجهتين الخلفيتين.
--magpie-temperature0.6درجة حرارة المعاينة (0 = جشعة). استخدم 0.6 لليابانية — الجشعة تعلَق على العبارة الأولى.
--magpie-top-k80مرشّح top-k للمعاينة.
--magpie-max-frames500حدّ صارم على إطارات الـ codec (~23 ثانية).
--magpie-min-frames4أدنى عدد للإطارات قبل السماح بـ 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>النص المراد توليفه
--voiceaf_heartإعداد صوت مُسبَق (50 صوتًا متوفرًا عبر 10 لغات)
--languageenرمز اللغة: en, es, fr, hi, it, ja, pt, zh, ko, de
--output, -okokoro_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, -oresponse.wavملف WAV لاستجابة الإخراج
--voiceNATM0إعداد صوت مُسبَق (مثل NATM0 أو NATF1 أو VARF0)
--system-promptassistantإعداد مُسبَق: assistant أو focused أو customer-service أو teacher
--system-prompt-textنص مخصص لتعليمات النظام (يتجاوز الإعداد المُسبَق)
--max-steps200أقصى خطوات توليد بمعدل 12.5 هرتز (~16 ثانية)
--streamإصدار قطع صوت أثناء التوليد
--compileتفعيل المُحوّل المُجمَّع (تسخين + دمج نواة)
--list-voicesسرد إعدادات الأصوات المُسبَقة المتاحة
--list-promptsسرد إعدادات تعليمات النظام المُسبَقة المتاحة
--transcriptطباعة نص المونولوغ الداخلي للنموذج
--jsonالإخراج بصيغة JSON (النص المُفرَّغ، زمن الاستجابة، مسار الصوت)
--verboseإظهار معلومات توقيت تفصيلية

تجاوزات المعاينة

الخيارالقيمة الافتراضيةالوصف
--audio-temp0.8درجة حرارة معاينة الصوت
--text-temp0.7درجة حرارة معاينة النص
--audio-top-k250عدد مرشحي top-k للصوت
--repetition-penalty1.2عقوبة تكرار الصوت (1.0 = معطّلة)
--text-repetition-penalty1.2عقوبة تكرار النص (1.0 = معطّلة)
--repetition-window30نافذة عقوبة التكرار بالإطارات
--silence-early-stop15إطارات الصمت قبل التوقف المبكر (0 = معطّل)
--entropy-threshold0عتبة إنتروبيا النص للتوقف المبكر (0 = معطّلة)
--entropy-window10خطوات متتالية منخفضة الإنتروبيا قبل التوقف المبكر

أمثلة:

# 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>ملف الصوت المراد تحليله
--enginepyannoteمحرّك الفصل: pyannote (تجزئة + ربط المتحدثين) أو sortformer (CoreML شامل من طرف إلى طرف)
--target-speakerصوت تسجيل لاستخراج المتحدث المستهدف (pyannote فقط)
--embedding-enginemlxمحرّك تضمين المتحدث: 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, -oinput_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, -omagnet.wavمسار WAV الناتج (32 كيلوهرتز أحادي القناة)
--variantsmall-int4متغيّر النموذج: small-int4 أو small-int8 أو medium-int4 أو medium-int8. يُحلّ إلى aufklarer/MAGNeT-{Small,Medium}-30secs-MLX-{4,8}bit.
--temperature3.0درجة حرارة المعاينة، تُخفَّض خطّيًا لكل مرحلة.
--top-p0.9عتبة معاينة nucleus.
--cfg-max10.0أقصى معامل توجيه بدون مصنّف.
--cfg-min1.0أدنى معامل CFG (يُخفَّض جنبًا إلى جنب مع جدول القناع).
--steps20,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