دليل عملي · PIPER TTS

من التسجيلات
إلى صوت.

الخطوات الأساسية لإعداد بياناتك الصوتية وتدريب نموذج Piper. قد تتغير حدود Kaggle: تحقق من حصتك قبل أي تدريب طويل.

01بنية الأرشيف

إنشاء مجموعة بيانات LJSpeech لأجل Piper TTS

صيغة LJSpeech هي الصيغة القياسية التي يتوقعها Piper. كل جملة ملف WAV مستقل، مع نصها في metadata.csv.

data.zip
├── metadata.csv   # nom_du_fichier|transcription
└── wavs/
    ├── 000001.wav
    └── ...
  1. 01

    اجمع الملفات الصوتية

    استخدم تسجيلات يجوز لك معالجتها وإعادة توزيعها. قد تكون المصادر من ويكيات الألعاب أو وسائط تملكها أو مجموعات بيانات عامة.

  2. 02

    قسم الصوت إلى جمل

    جهز ملف WAV واحدا لكل جملة. للتقسيم التلقائي أو المحاذاة، يمكنك استخدام:

    • audiosplitter · تقسيم تلقائي
    • Montreal Forced Aligner (MFA) · محاذاة قسرية
    • faster-whisper + VAD · نسخ صوتي وطوابع زمنية
    • Audacity · تقسيم يدوي للمجموعات الصغيرة
  3. 03

    إنشاء metadata.csv

    سطر واحد لكل ملف. الفاصل شريط عمودي، ويجب أن يطابق الاسم الملف الموجود في wavs/.

    000001.wav|Ceci est une phrase d'exemple.
    000002.wav|Voici une autre phrase pour l'entraînement.
  4. 04

    اضغط الأرشيف

    ضع metadata.csv ومجلد wavs/ في جذر الأرشيف.

    zip -r data.zip metadata.csv wavs/
  5. 05

    ارفع إلى Hugging Face

    أنشئ مستودع مجموعة بيانات، مثلا user/wheatley-english-ljspeech. أضف data.zip وملف README.md يتضمن الإعداد:

    ---
    configs:
    - config_name: default
      data_files:
      - split: train
        path: data.zip
    ---
  6. 06

    انشر في منتدى Piper

    أنشئ موضوعا في قناة مجموعات البيانات والتدريب مع رابط Hugging Face والوسم المناسب.

    افتح قناة Discord ↗
02KAGGLE · GPU

تدريب صوت على Kaggle

تمنح Kaggle حصة GPU لحسابك، وقد تختلف حسب التوفر. تحقق من العداد قبل بدء جلسة طويلة.

حصة GPU الأسبوعية30 h · وأحيانا أكثر

تشير Kaggle إلى أساس أسبوعي قدره 30 ساعة، قد يزيد حسب الطلب والموارد المتاحة. تُصفَّر الحصة يوم السبت عند 00:00 UTC.

المدة القصوى للجلسة12 ساعة

تشير وثائق Kaggle إلى حد متواصل قدره 12 ساعة لجلسات CPU وGPU. دفاتر CPU وحدها لا تستهلك حصة GPU، لكن مدة جلستها تبقى محدودة.

المسرع المتاحT4 x2

سحبت Kaggle مسرع Tesla P100 في 15 سبتمبر 2026. يبقى T4 x2 متاحا في الدفاتر؛ اختره لتدريب Piper بدلا من اتباع الأدلة القديمة الخاصة بـ P100.

↻

الاستئناف بعد انقطاع

غالبا ما يتجاوز التدريب الكامل 12 ساعة للجلسة الواحدة. دفتر Piper في هذا المشروع يستأنف من نقطة حفظ Hugging Face: بعد انقطاع أو نفاد الحصة، أعد تشغيله للمتابعة من آخر نقطة محفوظة.

قبل تدريب طويل

  • تحقق من الحصة المتبقية في إعدادات الدفتر أو ملفك الشخصي أو صفحة استخدام المسرعات.
  • أوقف جلسات GPU عندما لا تستخدمها.
  • استخدم T4 x2؛ لم يعد P100 متاحا على Kaggle.

قد تتغير حصص Kaggle ومسرعاتها وواجهاتها. تحقق دائما من المعلومات المعروضة في حسابك قبل التدريب.

03PIPER · LOCAL TTS

استخدام صوت Piper

ثبت Piper، واحصل على ملفي الصوت المختار، ثم ولد ملف WAV محليا. تستخدم الأوامر أدناه النسخة التي تصونها Open Home Foundation.

  1. 01

    تثبيت Piper

    يتوزع Piper كحزمة Python. الأدلة القديمة التي تستخدم مستودع rhasspy/piper أو أرشيفه الثنائي تشير إلى الإصدار التاريخي.

    python -m pip install piper-tts
    python -m piper.download_voices en_US-lessac-medium
  2. 02

    تنزيل صوت

    اختر صوتا من الفهرس ونزل نموذج ONNX وملف إعداد JSON المرافق. احتفظ بالملفين معا؛ مسار JSON هو مسار النموذج متبوعا بـ .json.

    voice.onnx
    voice.onnx.json
  3. 03

    توليد ملف WAV

    نزل أولا صوتا من فهرس Piper، أو استبدل الاسم أدناه بمسار ملف .onnx الخاص بك.

    python -m piper -m ./voice.onnx -f output.wav -- "Bonjour, ceci est un test."
  4. 04

    قراءة النص من ملف

    python -m piper -m ./voice.onnx -f output.wav --input-file mon_texte.txt

    بث الصوت الخام للتشغيل

    يعتمد معدل العينات على الصوت. تحقق من voice.onnx.json وغيّر 22050 عند الحاجة.

    echo "Bonjour." | python -m piper -m ./voice.onnx --output-raw | aplay -r 22050 -f S16_LE -c 1 -t raw
  5. 05

    من Python

    import wave
    from piper import PiperVoice
    
    voice = PiperVoice.load("./voice.onnx")
    with wave.open("output.wav", "wb") as wav_file:
        voice.synthesize_wav("Bonjour le monde.", wav_file)
  6. 06

    مع Home Assistant

    يتصل Home Assistant بـ Piper عبر Wyoming. أضف Piper في الإعدادات، قسم الأجهزة والخدمات، ثم استخدم الإجراء tts.speak مع كيان Piper TTS.

    إعداد Piper في Home Assistant ↗

    مع Node-RED

    تعذر تأكيد حزمة node-red-contrib-piper-tts المذكورة في بعض الأدلة ضمن الفهرس العام. أحد الخيارات هو استدعاء أمر Piper من عقدة Exec المدمجة؛ كيّف المسارات والأذونات مع تثبيتك.

  7. 07

    ضبط الناتج

    تعتمد الجودة جزئيا على بيانات التدريب والصوت المختار. قيمة length-scale الأعلى تبطئ الكلام، والقيمة الأدنى تسرعه. يغيّر noise-scale وnoise-w تنوع الصوت المولد.

    python -m piper -m ./voice.onnx --length-scale 1.5 --noise-scale 0.667 --noise-w 0.8 -f lent.wav -- "Texte lent."
    python -m piper -m ./voice.onnx --length-scale 0.7 --noise-scale 0.667 --noise-w 0.8 -f rapide.wav -- "Texte rapide."
04NODE.JS · TYPESCRIPT

دمج Piper في مشروع Node.js باستخدام pipertts

يتيح pipertts استخدام Piper في Node.js، مع كتابة الملفات أو إرجاع الصوت في الذاكرة. الوضع الموصى به هو PiperNativeTTS: استدلال أصلي بالكامل داخل العملية (ONNX مع جسر espeak مترجم)، دون Python، أسرع بنحو 10 مرات من الغلاف. تبقى الأصوات (.onnx مع .onnx.json) ملفات منفصلة.

  1. 01

    تثبيت الاعتماديات

    يذكر التوثيق Node.js 18+ وTypeScript 5+. لا يحتاج الوضع الأصلي إلى شيء آخر: تكفي عملية npm install. يتطلب وضع الغلاف التقليدي (PiperTTS عبر python3 -m piper) لغة Python ووحدة Piper إضافة إلى ذلك. قد يؤدي الاختيار بمعرف الفهرس إلى تنزيل النموذج وإعداده في models/.

    npm install pipertts
    # mode wrapper uniquement : python3 -m pip install piper-tts
  2. 02

    بداية سريعة مع صوت من الفهرس

    import { PiperNativeTTS, resolveModelPathFromOptions } from "pipertts";
    import * as fs from "node:fs";
    
    const modelPath = await resolveModelPathFromOptions({
      model: "en_US-lessac-medium",
      modelsDir: "./models",
    });
    const tts = await PiperNativeTTS.load({ modelPath });
    
    const { audio } = await tts.synthesize("Hello from Piper.");
    fs.writeFileSync("./hello.wav", audio);
  3. 03

    استخدام نموذج محلي

    لصوت نزلته يدويا، مرر مسار ملف ONNX. يجب وضع ملف .onnx.json المرافق بجانبه؛ ويمكنك تحديد configPath إذا كان موضعه مختلفا.

    import { PiperNativeTTS } from "pipertts";
    
    const tts = await PiperNativeTTS.load({
      modelPath: "./models/my-voice.onnx",
    });
    const { audio, sampleRate } = await tts.synthesize("Hello.", { speakerId: 0 });
  4. 04

    الواجهة والصيغ

    ترجع synthesize() القيم audio (Buffer) وsampleRate وtext؛ ويكتب outputFile على القرص أيضا. الخيارات: speakerId (متعدد الأصوات والأنماط)، وlengthScale (أكبر من 1 يبطئ الكلام وأصغر من 1 يسرعه)، وnoiseScale وnoiseWScale وsentenceSilence وnormalizeAudio وvolume وoutputFormat (wav أو raw أو mp3 أو ogg أو opus). يملك mp3 وopus حلولا JS خالصة؛ ويتطلب ogg أداة FFmpeg. تتيح phonemize() وsynthesizeChunks() الوصول منخفض المستوى، جملة بجملة.

  5. 05

    الغلاف القديم (PiperTTS)

    يطلق PiperTTS الأمر python3 -m piper، عملية لكل تركيب: أبطأ بنحو 10 مرات، ويخصص للبيئات التي لا يعمل فيها المحرك الأصلي. يتطلب Python ووحدة Piper.

    import { PiperTTS } from "pipertts";
    
    const tts = await PiperTTS.create({
      modelPath: "./models/en_US-lessac-medium.onnx",
    });
    await tts.synthesizeToFile("Hello from the legacy wrapper.", "./hello.wav");