Tham khảo CLI

Tệp thực thi speech là điểm vào chính cho mọi tác vụ xử lý giọng nói. Biên dịch bằng make build, sau đó chạy từ .build/release/speech.

transcribe

Chuyển tệp âm thanh thành văn bản.

speech transcribe <file> [options]
Tùy chọnMặc địnhMô tả
<file>Tệp âm thanh để chuyển thành văn bản (WAV, M4A, MP3, CAF)
--engineqwen3Engine ASR: qwen3, qwen3-coreml, parakeet, nemotron hoặc omnilingual
--model, -m0.6BBiến thể mô hình: 0.6B, 1.7B hoặc ID mô hình HuggingFace đầy đủ (chỉ qwen3)
--languageGợi ý ngôn ngữ (tùy chọn, bị bỏ qua bởi omnilingual)
--window10[omnilingual] Kích thước cửa sổ CoreML tính bằng giây: 5 hoặc 10
--backendcoreml[omnilingual] Backend: coreml (Neural Engine) hoặc mlx (Metal GPU)
--variant300M[omnilingual mlx] Kích thước: 300M, 1B, 3B hoặc 7B
--bits4[omnilingual mlx] Số bit lượng tử hóa: 4 hoặc 8
--streamBật chuyển âm thanh thành văn bản kiểu streaming với VAD
--max-segment10Thời lượng tối đa của một đoạn, tính bằng giây (streaming)
--partialPhát kết quả từng phần trong khi đang nói (streaming)

Ví dụ:

# Chuyển âm thanh thành văn bản cơ bản
speech transcribe recording.wav

# Dùng mô hình lớn hơn
speech transcribe recording.wav --model 1.7B

# Bộ mã hóa CoreML (Neural Engine + bộ giải mã MLX)
speech transcribe recording.wav --engine qwen3-coreml

# Dùng engine Parakeet (CoreML)
speech transcribe recording.wav --engine parakeet

# Dùng Nemotron Streaming (CoreML, tiếng Anh có dấu câu gốc)
speech transcribe recording.wav --engine nemotron                                 # theo lô
speech transcribe recording.wav --engine nemotron --stream --partial              # streaming

# Omnilingual (CoreML, 1.672 ngôn ngữ)
speech transcribe recording.wav --engine omnilingual                              # cửa sổ 10 s
speech transcribe recording.wav --engine omnilingual --window 5                     # cửa sổ 5 s

# Omnilingual (MLX, độ dài bất kỳ tới 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 kèm VAD
speech transcribe recording.wav --stream --partial

align

Căn chỉnh cưỡng bức ở cấp từ — lấy dấu thời gian chính xác cho từng từ.

speech align <file> [options]
Tùy chọnMặc địnhMô tả
<file>Tệp âm thanh
--text, -tVăn bản để căn chỉnh (nếu bỏ qua thì sẽ chuyển âm thanh thành văn bản trước)
--model, -m0.6BMô hình ASR dùng cho chuyển âm thanh: 0.6B, 1.7B hoặc ID đầy đủ
--aligner-modelID mô hình aligner cưỡng bức
--languageGợi ý ngôn ngữ

Ví dụ:

# Tự chuyển âm thanh thành văn bản rồi căn chỉnh
speech align recording.wav

# Căn chỉnh với văn bản đã biết
speech align recording.wav --text "Can you guarantee that the replacement part will be shipped tomorrow?"

speak

Tổng hợp văn bản thành giọng nói.

speech speak "<text>" [options]
Tùy chọnMặc địnhMô tả
<text>Văn bản cần tổng hợp (tùy chọn nếu dùng --batch-file)
--engineqwen3Engine TTS: qwen3, cosyvoice, voxcpm2 hoặc magpie
--output, -ooutput.wavĐường dẫn tệp WAV đầu ra
--languageenglishNgôn ngữ. Bỏ qua để dùng phương ngữ gốc của người nói khi đã đặt --speaker.
--streamBật tổng hợp dạng streaming
--voice-sampleÂm thanh tham chiếu để nhân bản giọng nói (hoạt động với cả engine qwen3cosyvoice)
--verboseHiển thị thông tin thời gian chi tiết

Tùy chọn Qwen3-TTS

Tùy chọnMặc địnhMô tả
--modelbaseBiến thể mô hình: base, customVoice hoặc ID mô hình HF đầy đủ
--speakerGiọng người nói (yêu cầu --model customVoice)
--instructChỉ thị về phong cách (mô hình CustomVoice)
--list-speakersLiệt kê các giọng có sẵn rồi thoát
--temperature0.3Nhiệt độ lấy mẫu
--top-k50Lấy mẫu Top-k
--max-tokens500Số token tối đa (500 = ~40s âm thanh)
--batch-fileTệp chứa mỗi dòng một văn bản để tổng hợp theo lô
--batch-size4Kích thước lô tối đa để tạo song song
--first-chunk-frames3Số frame codec trong chunk streaming đầu tiên
--chunk-frames25Số frame codec mỗi chunk streaming

Tùy chọn CosyVoice3

Tùy chọnMặc địnhMô tả
--speakersÁnh xạ người nói cho hội thoại nhiều người: s1=alice.wav,s2=bob.wav
--cosy-instructChỉ thị về phong cách (ghi đè mặc định). Điều khiển phong cách giọng nói cho CosyVoice3.
--turn-gap0.2Khoảng lặng giữa các lượt trong hội thoại, tính bằng giây
--crossfade0.0Crossfade chồng giữa các lượt, tính bằng giây
--model-idID mô hình HuggingFace

Tùy chọn VoxCPM2

Tùy chọnMặc địnhMô tả
--voxcpm2-variantbf16Biến thể lượng tử hóa: bf16, int8 hoặc int4. Tương ứng với aufklarer/VoxCPM2-MLX-<variant>.
--voxcpm2-instructMô tả giọng nói bằng ngôn ngữ tự nhiên (thiết kế giọng), ví dụ "một phụ nữ trẻ, ấm áp và dịu dàng".
--voxcpm2-ref-audioTệp âm thanh tham chiếu để nhân bản (16 kHz mono, sẽ được lấy mẫu lại nội bộ).
--voxcpm2-prompt-audio / --voxcpm2-prompt-textCặp "nhân bản tối ưu" — đoạn tham chiếu + bản chép của nó để nhân bản giữ nguyên ngữ điệu.
--voxcpm2-cfg-value2.0Tỉ lệ classifier-free guidance cho bộ lấy mẫu diffusion.
--voxcpm2-timesteps10Số bước solver Euler trên mỗi patch âm thanh được tạo.
--voxcpm2-max-tokens2000Số patch tối đa trước khi buộc dừng.
--voxcpm2-min-tokens2Số patch tối thiểu trước khi cho phép đầu dừng kích hoạt.
--seedSeed RNG của MLX trước khi tổng hợp (kết quả nhất quán giữa các lần chạy).

Tùy chọn Magpie

NVIDIA Magpie-TTS Multilingual 357M, 9 ngôn ngữ với 5 giọng dựng sẵn. Chọn backend bằng --engine magpie (MLX, mặc định) hoặc --engine magpie-coreml (CoreML cho mô hình lớn với MLX đảm nhiệm LocalTransformer + embedding âm thanh). Xem hướng dẫn Magpie để biết chi tiết phân tách G2P theo từng ngôn ngữ. Không hỗ trợ nhân bản giọng nói: --voice-sample, --speaker--instruct sẽ bị từ chối kèm thông báo hữu ích trỏ tới --magpie-speaker.

Tùy chọnMặc địnhMô tả
--magpie-variantint4Chỉ dùng cho MLX. Lượng tử hóa: int4 (247 MB) hoặc int8 (411 MB). Tương ứng với aufklarer/Magpie-TTS-Multilingual-357M-MLX-<variant>. Engine CoreML dùng bundle CoreML INT8 và bỏ qua cờ này.
--magpie-speakersofiaGiọng dựng sẵn: sofia, aria, jason, leo hoặc john. Bản sắc giọng đồng nhất trên cả 9 ngôn ngữ và cả hai backend.
--magpie-temperature0.6Nhiệt độ lấy mẫu (0 = greedy). Dùng 0.6 cho tiếng Nhật — greedy bị kẹt ở cụm đầu tiên.
--magpie-top-k80Bộ lọc top-k cho lấy mẫu.
--magpie-max-frames500Giới hạn cứng số frame codec (~23 s).
--magpie-min-frames4Số frame tối thiểu trước khi cho phép EOS.
--magpie-prephonemizedCoi đầu vào là luồng IPA / phoneme; bỏ qua G2P theo từng ngôn ngữ.
--list-speakersIn 5 giọng dựng sẵn rồi thoát.

Lưu ý về magpie-coreml: NanoCodec đi kèm được trace ở cửa sổ cố định 64 frame, vì vậy --stream bị từ chối. --language ja tự định tuyến sang backend MLX kèm ghi chú trên stderr (bundle CoreML chưa kèm tài nguyên tokenizer JA). Engine CoreML tải lười bundle MLX ở lần tổng hợp đầu tiên để vận hành LocalTransformer và trung bình hóa embedding âm thanh; triển khai thuần CoreML đang được theo dõi như một mục tiếp theo.

Ví dụ:

# TTS cơ bản
speech speak "Hello, world!" --output hello.wav

# Nhân bản giọng (Qwen3-TTS)
speech speak "Hello in your voice" --voice-sample reference.wav -o cloned.wav

# Nhân bản giọng (CosyVoice)
speech speak "Hello in your voice" --engine cosyvoice --voice-sample reference.wav -o cloned.wav

# CosyVoice đa ngôn ngữ
speech speak "Hallo Welt" --engine cosyvoice --language german -o hallo.wav

# Hội thoại nhiều người nói
speech speak "[S1] Hello there! [S2] Hey, how are you?" \
    --engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o dialogue.wav

# Thẻ cảm xúc/phong cách inline
speech speak "(excited) Wow, amazing! (sad) But I have to go..." \
    --engine cosyvoice -o emotion.wav

# Kết hợp: hội thoại + cảm xúc + nhân bản giọng
speech speak "[S1] (happy) Great news! [S2] (surprised) Really?" \
    --engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o combined.wav

# Chỉ thị phong cách tùy chỉnh
speech speak "Hello world" --engine cosyvoice --cosy-instruct "Speak cheerfully" -o cheerful.wav

# Magpie TTS đa ngôn ngữ — cùng giọng Aria trên 9 ngôn ngữ
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
# Tiếng Nhật cần lấy mẫu ngẫu nhiên
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

# Backend Magpie CoreML (tăng tốc ANE, 8 ngôn ngữ, không 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
# Tiếng Nhật tự định tuyến sang MLX (bundle CoreML không có tokenizer JA)
speech speak "こんにちは。" --engine magpie-coreml --language ja -o ja.wav

# Tổng hợp dạng streaming
speech speak "Long text here..." --stream

# Tổng hợp theo lô từ tệp
speech speak --batch-file texts.txt --batch-size 4

# VoxCPM2 — đầu ra studio 48 kHz
speech speak "Hello there." --engine voxcpm2 --voxcpm2-variant int8 -o hi.wav

# VoxCPM2 — thiết kế giọng nói
speech speak "Welcome to the show." --engine voxcpm2 \
    --voxcpm2-instruct "A young woman, warm and gentle voice." -o design.wav

# VoxCPM2 — nhân bản từ một tham chiếu
speech speak "This is a cloned voice." --engine voxcpm2 \
    --voice-sample speaker.wav -o clone.wav

kokoro

TTS nhẹ dùng Kokoro-82M trên Neural Engine (CoreML). Không tự hồi quy — một lần forward duy nhất, độ trễ ~45ms.

speech kokoro "<text>" [options]
Tùy chọnMặc địnhMô tả
<text>Văn bản cần tổng hợp
--voiceaf_heartGiọng dựng sẵn (50 giọng trên 10 ngôn ngữ)
--languageenMã ngôn ngữ: en, es, fr, hi, it, ja, pt, zh, ko, de
--output, -okokoro_output.wavĐường dẫn tệp WAV đầu ra
--list-voicesLiệt kê tất cả giọng có sẵn rồi thoát
--model, -mID mô hình HuggingFace

Ví dụ:

# Kokoro TTS cơ bản
speech kokoro "Hello, world!" --voice af_heart -o hello.wav

# Giọng Pháp
speech kokoro "Bonjour le monde" --voice ff_siwis --language fr -o bonjour.wav

# Liệt kê toàn bộ 50 giọng
speech kokoro --list-voices

respond

Hội thoại giọng nói tới giọng nói full-duplex bằng PersonaPlex 7B.

speech respond [options]
Tùy chọnMặc địnhMô tả
--input, -iTệp WAV âm thanh đầu vào (24kHz mono) (bắt buộc)
--output, -oresponse.wavTệp WAV phản hồi đầu ra
--voiceNATM0Giọng dựng sẵn (ví dụ NATM0, NATF1, VARF0)
--system-promptassistantPreset: assistant, focused, customer-service, teacher
--system-prompt-textVăn bản system prompt tùy chỉnh (ghi đè preset)
--max-steps200Số bước tạo tối đa ở 12.5Hz (~16s)
--streamPhát các chunk âm thanh trong khi tạo
--compileBật transformer đã biên dịch (warmup + kernel fusion)
--list-voicesLiệt kê các giọng dựng sẵn
--list-promptsLiệt kê các preset system prompt
--transcriptIn văn bản độc thoại nội tâm của mô hình
--jsonXuất dạng JSON (bản chép, độ trễ, đường dẫn âm thanh)
--verboseHiển thị thông tin thời gian chi tiết

Ghi đè lấy mẫu

Tùy chọnMặc địnhMô tả
--audio-temp0.8Nhiệt độ lấy mẫu cho âm thanh
--text-temp0.7Nhiệt độ lấy mẫu cho văn bản
--audio-top-k250Top-k ứng viên cho âm thanh
--repetition-penalty1.2Phạt lặp lại cho âm thanh (1.0 = tắt)
--text-repetition-penalty1.2Phạt lặp lại cho văn bản (1.0 = tắt)
--repetition-window30Cửa sổ phạt lặp lại tính bằng frame
--silence-early-stop15Số frame im lặng trước khi dừng sớm (0 = tắt)
--entropy-threshold0Ngưỡng entropy văn bản để dừng sớm (0 = tắt)
--entropy-window10Số bước entropy thấp liên tiếp trước khi dừng sớm

Ví dụ:

# Giọng nói tới giọng nói cơ bản
speech respond --input question.wav

# Dùng giọng nữ với transformer đã biên dịch
speech respond -i question.wav --voice NATF1 --compile

# Stream phản hồi và hiển thị bản chép
speech respond -i question.wav --stream --transcript --verbose

vad

Phát hiện hoạt động giọng nói ngoại tuyến dùng phân đoạn Pyannote.

speech vad <file> [options]
Tùy chọnMô tả
<file>Tệp âm thanh cần phân tích
--model, -mID mô hình HuggingFace
--onsetNgưỡng onset (bắt đầu giọng nói)
--offsetNgưỡng offset (kết thúc giọng nói)
--min-speechThời lượng giọng nói tối thiểu, tính bằng giây
--min-silenceThời lượng im lặng tối thiểu, tính bằng giây
--jsonXuất dạng JSON

vad-stream

Phát hiện hoạt động giọng nói dạng streaming dùng Silero VAD v5. Xử lý giọng nói theo các chunk 32ms.

speech vad-stream <file> [options]
Tùy chọnMô tả
<file>Tệp âm thanh cần phân tích
--engineEngine VAD: mlx (mặc định) hoặc coreml
--model, -mID mô hình HuggingFace (tự chọn theo engine)
--onsetNgưỡng onset
--offsetNgưỡng offset
--min-speechThời lượng giọng nói tối thiểu, tính bằng giây
--min-silenceThời lượng im lặng tối thiểu, tính bằng giây
--jsonXuất dạng JSON

wake

Phát hiện từ đánh thức / từ khóa trên thiết bị bằng KWS Zipformer (3.49M tham số, CoreML INT8, 26× thời gian thực, chỉ tiếng Anh).

speech wake <file> [options]
Tùy chọnMô tả
<file>Tệp âm thanh cần phân tích
--keywordsMột hoặc nhiều từ khóa. Định dạng: "hey soniqo" (BPE greedy), "hey soniqo:0.15:0.5" (kèm ngưỡng/boost), hoặc "LIGHT UP|▁ L IGHT ▁UP:0.25:2.0" (mảnh BPE rõ ràng kiểu sherpa-onnx)
--keywords-fileTệp từ khóa, mỗi mục một dòng (cú pháp giống --keywords); dùng # cho chú thích
--model, -mID mô hình HuggingFace. Mặc định là aufklarer/KWS-Zipformer-3M-CoreML-INT8
--jsonXuất dạng JSON
# Cụm từ đơn giản, mặc định đã tinh chỉnh
speech wake recording.wav --keywords "hey soniqo"

# Mảnh BPE rõ ràng cho các cụm mà tokenizer greedy hiểu sai
speech wake recording.wav --keywords "LIGHT UP|▁ L IGHT ▁UP:0.25:2.0"

# Nhiều cụm từ + đầu ra JSON
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

Phân tách người nói — xác định ai nói lúc nào.

speech diarize <file> [options]
Tùy chọnMặc địnhMô tả
<file>Tệp âm thanh cần phân tích
--enginepyannoteEngine phân tách: pyannote (phân đoạn + nối chuỗi người nói) hoặc sortformer (end-to-end CoreML)
--target-speakerÂm thanh đăng ký để trích xuất người nói mục tiêu (chỉ pyannote)
--embedding-enginemlxEngine tạo embedding người nói: mlx hoặc coreml (chỉ pyannote)
--vad-filterLọc trước bằng Silero VAD (chỉ pyannote)
--rttmXuất ở định dạng RTTM
--jsonXuất dạng JSON
--score-againstTệp RTTM tham chiếu để tính DER

Ví dụ:

# Phân tách cơ bản (pyannote, mặc định)
speech diarize meeting.wav

# Sortformer end-to-end (CoreML, Neural Engine)
speech diarize meeting.wav --engine sortformer

# Xuất RTTM để đánh giá
speech diarize meeting.wav --rttm

# Trích xuất người nói mục tiêu (chỉ pyannote)
speech diarize meeting.wav --target-speaker enrollment.wav

# Chấm điểm so với tham chiếu
speech diarize meeting.wav --score-against reference.rttm

embed-speaker

Trích xuất vector embedding người nói từ âm thanh.

speech embed-speaker <file> [options]
Tùy chọnMô tả
<file>Tệp âm thanh chứa giọng người nói
--engineEngine suy luận: mlx (mặc định), coreml (WeSpeaker 256 chiều) hoặc camplusplus (CAM++ CoreML 192 chiều)
--jsonXuất dạng JSON

denoise

Loại bỏ tiếng ồn nền bằng DeepFilterNet3 trên Neural Engine.

speech denoise <file> [options]
Tùy chọnMặc địnhMô tả
<file>Tệp âm thanh đầu vào
--output, -oinput_clean.wavĐường dẫn tệp đầu ra
--model, -mID mô hình HuggingFace

Ví dụ:

speech denoise noisy-recording.wav -o clean.wav

compose

Tạo 30 giây nhạc từ một prompt văn bản dùng MAGNeT trên MLX.

speech compose <prompt> [options]
Tùy chọnMặc địnhMô tả
<prompt>Prompt văn bản mô tả bản nhạc cần tạo (ví dụ "happy rock")
--output, -omagnet.wavĐường dẫn WAV đầu ra (32 kHz mono)
--variantsmall-int4Biến thể mô hình: small-int4, small-int8, medium-int4 hoặc medium-int8. Tương ứng với aufklarer/MAGNeT-{Small,Medium}-30secs-MLX-{4,8}bit.
--temperature3.0Nhiệt độ lấy mẫu, giảm tuyến tính theo từng stage.
--top-p0.9Ngưỡng nucleus sampling.
--cfg-max10.0Hệ số classifier-free guidance tối đa.
--cfg-min1.0Hệ số CFG tối thiểu (giảm dần cùng lịch trình mask).
--steps20,10,10,10Số bước giải mã trên mỗi codebook, cách nhau bởi dấu phẩy (4 giá trị).
--seedSeed ngẫu nhiên để đầu ra có thể tái lập.

Ví dụ:

# Mặc định: small-int4, ~10 s trên chip dòng M cho đoạn 30 s
speech compose "happy rock" -o happy_rock.wav

# Mô hình lớn hơn — bám prompt tốt hơn, chậm hơn
speech compose "lo-fi hip hop with mellow piano" --variant medium-int4 -o lofi.wav

# Có thể tái lập
speech compose "energetic EDM with synth lead" --seed 42 -o edm.wav