تشير Kaggle إلى أساس أسبوعي قدره 30 ساعة، قد يزيد حسب الطلب والموارد المتاحة. تُصفَّر الحصة يوم السبت عند 00:00 UTC.
دليل عملي · PIPER TTS
من التسجيلات
إلى صوت.
الخطوات الأساسية لإعداد بياناتك الصوتية وتدريب نموذج Piper. قد تتغير حدود Kaggle: تحقق من حصتك قبل أي تدريب طويل.
إنشاء مجموعة بيانات LJSpeech لأجل Piper TTS
صيغة LJSpeech هي الصيغة القياسية التي يتوقعها Piper. كل جملة ملف WAV مستقل، مع نصها في metadata.csv.
data.zip
├── metadata.csv # nom_du_fichier|transcription
└── wavs/
├── 000001.wav
└── ...- 01
اجمع الملفات الصوتية
استخدم تسجيلات يجوز لك معالجتها وإعادة توزيعها. قد تكون المصادر من ويكيات الألعاب أو وسائط تملكها أو مجموعات بيانات عامة.
ابحث عن مجموعات LJSpeech في Hugging Face ↗نزل مصدر فيديو باستخدام yt-dlp - 02
قسم الصوت إلى جمل
جهز ملف WAV واحدا لكل جملة. للتقسيم التلقائي أو المحاذاة، يمكنك استخدام:
- audiosplitter · تقسيم تلقائي
- Montreal Forced Aligner (MFA) · محاذاة قسرية
- faster-whisper + VAD · نسخ صوتي وطوابع زمنية
- Audacity · تقسيم يدوي للمجموعات الصغيرة
- 03
إنشاء metadata.csv
سطر واحد لكل ملف. الفاصل شريط عمودي، ويجب أن يطابق الاسم الملف الموجود في wavs/.
000001.wav|Ceci est une phrase d'exemple. 000002.wav|Voici une autre phrase pour l'entraînement. - 04
اضغط الأرشيف
ضع metadata.csv ومجلد wavs/ في جذر الأرشيف.
zip -r data.zip metadata.csv wavs/ - 05
ارفع إلى Hugging Face
أنشئ مستودع مجموعة بيانات، مثلا user/wheatley-english-ljspeech. أضف data.zip وملف README.md يتضمن الإعداد:
--- configs: - config_name: default data_files: - split: train path: data.zip --- - 06
انشر في منتدى Piper
أنشئ موضوعا في قناة مجموعات البيانات والتدريب مع رابط Hugging Face والوسم المناسب.
افتح قناة Discord ↗
تدريب صوت على Kaggle
تمنح Kaggle حصة GPU لحسابك، وقد تختلف حسب التوفر. تحقق من العداد قبل بدء جلسة طويلة.
تشير وثائق Kaggle إلى حد متواصل قدره 12 ساعة لجلسات CPU وGPU. دفاتر CPU وحدها لا تستهلك حصة GPU، لكن مدة جلستها تبقى محدودة.
سحبت Kaggle مسرع Tesla P100 في 15 سبتمبر 2026. يبقى T4 x2 متاحا في الدفاتر؛ اختره لتدريب Piper بدلا من اتباع الأدلة القديمة الخاصة بـ P100.
الاستئناف بعد انقطاع
غالبا ما يتجاوز التدريب الكامل 12 ساعة للجلسة الواحدة. دفتر Piper في هذا المشروع يستأنف من نقطة حفظ Hugging Face: بعد انقطاع أو نفاد الحصة، أعد تشغيله للمتابعة من آخر نقطة محفوظة.
قبل تدريب طويل
- تحقق من الحصة المتبقية في إعدادات الدفتر أو ملفك الشخصي أو صفحة استخدام المسرعات.
- أوقف جلسات GPU عندما لا تستخدمها.
- استخدم T4 x2؛ لم يعد P100 متاحا على Kaggle.
قد تتغير حصص Kaggle ومسرعاتها وواجهاتها. تحقق دائما من المعلومات المعروضة في حسابك قبل التدريب.
استخدام صوت Piper
ثبت Piper، واحصل على ملفي الصوت المختار، ثم ولد ملف WAV محليا. تستخدم الأوامر أدناه النسخة التي تصونها Open Home Foundation.
- 01
تثبيت Piper
يتوزع Piper كحزمة Python. الأدلة القديمة التي تستخدم مستودع rhasspy/piper أو أرشيفه الثنائي تشير إلى الإصدار التاريخي.
python -m pip install piper-ttspython -m piper.download_voices en_US-lessac-medium - 02
تنزيل صوت
اختر صوتا من الفهرس ونزل نموذج ONNX وملف إعداد JSON المرافق. احتفظ بالملفين معا؛ مسار JSON هو مسار النموذج متبوعا بـ .json.
voice.onnx
voice.onnx.json - 03
توليد ملف WAV
نزل أولا صوتا من فهرس Piper، أو استبدل الاسم أدناه بمسار ملف .onnx الخاص بك.
python -m piper -m ./voice.onnx -f output.wav -- "Bonjour, ceci est un test." - 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 - 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) - 06
مع Home Assistant
يتصل Home Assistant بـ Piper عبر Wyoming. أضف Piper في الإعدادات، قسم الأجهزة والخدمات، ثم استخدم الإجراء tts.speak مع كيان Piper TTS.
إعداد Piper في Home Assistant ↗مع Node-RED
تعذر تأكيد حزمة node-red-contrib-piper-tts المذكورة في بعض الأدلة ضمن الفهرس العام. أحد الخيارات هو استدعاء أمر Piper من عقدة Exec المدمجة؛ كيّف المسارات والأذونات مع تثبيتك.
- 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."
دمج Piper في مشروع Node.js باستخدام pipertts
يتيح pipertts استخدام Piper في Node.js، مع كتابة الملفات أو إرجاع الصوت في الذاكرة. الوضع الموصى به هو PiperNativeTTS: استدلال أصلي بالكامل داخل العملية (ONNX مع جسر espeak مترجم)، دون Python، أسرع بنحو 10 مرات من الغلاف. تبقى الأصوات (.onnx مع .onnx.json) ملفات منفصلة.
- 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 - 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); - 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 }); - 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() الوصول منخفض المستوى، جملة بجملة.
- 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");
