chinese-tts

Chinesische Textnormalisierung und Sprachsynthese, damit Programme chinesischen Text (mit englischen Wörtern, Zahlen, Links, Code) vorlesen können.

O que é chinese-tts?

Dieses Skill ist speziell für die chinesische Text-zu-Sprache (TTS) konzipiert und löst die komplexe Herausforderung, dass Zahlen, Einheiten, Jahreszahlen, Telefonnummern, URLs und andere nicht-wörtliche Elemente korrekt ausgesprochen werden. Es bietet eine vollständige Pipeline von der Textnormalisierung (TN) über die Satzsegmentierung bis hin zur Sprachsynthese. Der Fokus liegt auf Streaming-TTS, wo es die Sätze erst nach der Normalisierung trennt, um Fehler wie die Aufteilung von Links oder das falsche Lesen von Bereichen zu vermeiden. Das Skill enthält eine umfangreiche Regelreferenz, 139 goldene Testfälle und ein Prüfskript, um die Implementierung zu validieren. Es behandelt auch ingenieurtechnische Aspekte wie Latenz, Caching, Abbruch, Fallback-Engines und den Umgang mit GPU-Speicher. Dieses Skill ist ideal für Entwickler, die Sprachassistenten, KI-Charaktere, Hörbücher oder andere TTS-Anwendungen mit chinesischem Text erstellen und sicherstellen möchten, dass Zahlen, Daten und Links korrekt vorgelesen werden.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/RedCarpG/redcarpg-skills/tree/HEAD/skills/chinese-tts

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Chinesische Sprachsynthese: Textnormalisierung und Ingenieurwesen

Dieses Skill stammt von einem KI-Schreibtischhaustier (siehe „Quelle und Wartung“ am Ende), das ständig spricht: Claude antwortet im Stream, jeder Satz wird an einen lokalen TTS-Engine übergeben und vorgelesen. Die folgenden Regeln sind alle getestet, die Zahlen sind gemessen.

Ein Grundsatz: Die Aussprache wird auf dieser Ebene korrigiert, der Engine obliegt nur die Aussprache. Wenn man es der Engine überlässt, ändert sich die Aussprache durch den Engine-Wechsel; wenn man ein fertiges TN-System einsetzt, gibt es auch ein paar Stellen, die schlechter werden. Fertige Systeme (wetext, PaddleSpeech) dienen zum Vergleich und zur Ergänzung der Regeln.

Ablauf

Streaming-Text des Modells
  → ① Filterung: Entfernen von Dekorationen, Emojis, Listensymbolen; Codeblöcke, Tabellen, Links durch einen Satz ersetzen (beim Streaming müssen aufgetrennte erkannt werden)
  → ② Aussprache-Transformation: Zahlen, Zeitangaben, Einheiten, Symbole, Aussprache-Ersetzungstabelle (beim Streaming Grenzen beachten)
  → ③ Satzsegmentierung: Erster Absatz bis zum ersten Komma, danach bei über 40 Zeichen am Komma trennen
  → ④ Synthese: Nur etwa 20 Sekunden vor dem vorgelesenen Teil vorausberechnen; beim Abbruch die Inferenz wirklich stoppen

Die Reihenfolge darf nicht geändert werden: Erst Aussprache-Transformation, dann Satzsegmentierung. Beim Testen mit falscher Reihenfolge drei Fehler aufgetreten:

OriginalErgebnis (falsche Reihenfolge)Problem
下午14:30开会下午14: / 30开会Doppelpunkt als Komma erkannt, Zeitangabe getrennt
看这里:https://…/pull/7 就行https: / //…/pull/7 就行Link zerschnitten, Adresse buchstabiert
大概3~5天大概35天~ als Dekoration entfernt, „fünfunddreißig Tage“ gelesen

Der halbe Doppelpunkt : wird nur als Komma betrachtet, wenn ein Leerzeichen folgt.

Streaming-Grenzen beachten

Ein ganzer Satz kann richtig sein, aber im Stream nicht. Beim zeichenweisen Stream wird „工作了26年“ als „26 Jahre“ und „80年代“ als „80er Jahre“ gelesen, weil die nachfolgenden Zeichen noch nicht da sind; „-10°C“ wird als englischer Originaltext gelesen.

  • Nach einer Zahl 2 Zeichen warten, bevor sie ausgegeben wird; Einheiten mit Leerzeichen müssen erkannt werden (跑了 5 erst halten, auf km warten).
  • Beim nächsten Absatz die letzten paar Zeichen des vorherigen Absatzes mitnehmen (um „了 26 年“ zu erkennen, muss man das vorherige „了“ sehen).
  • Maximal 200 Zeichen halten, bei Codeblöcken und Tabellen maximal 4000 Zeichen, bei Erreichen der Grenze freigeben.
  • Jeder Test wird sowohl „zeichenweise“ als auch „als ganzer Satz“ durchgeführt, die Ergebnisse müssen identisch sein.

Regelsuche (siehe references/rules.md für Details)

KategorieBeispieleAussprache
Jahreszahlen2026年、2026届、26年见Stellenweise: zweinullzweiundsechzig Jahr, zweinullzweiundsechzig Jahrgang, zweisechzig Jahr sehen
Anzahlen工作了26年、80年代、26年前Als Zahl: sechsundzwanzig Jahre, achtziger Jahre, sechsundzwanzig Jahre vor
NummernTelefonnummer, Code, 编号27149, 房间1201Stellenweise, 1 als „yao“, Bindestrich und Leerzeichen Pause
Fünfstellige Zahlen95588 / 价格 12999Keine Mengenangabe, nicht mit 0 endend, nicht vor Geld → Nummer; sonst als Menge
Netzjargon666、2333、520 alleinstehend / 666个赞、花了888Stellenweise / als Menge (nur feste Liste)
2 vor Einheiten2个、2L、2℃Zwei (liǎng) Stück, zwei (liǎng) Liter; außer Temperatur: zwei (èr) Grad Celsius
Einheiten60km/h、3kWh、5min、10mgSechzig Kilometer pro Stunde, drei Kilowattstunden, fünf Minuten, zehn Milligramm
Nicht umwandelbare Einheiten4g网络、5A景区、16GBOriginal an Engine übergeben
Bereich, Prozent3~5%、3-5km、-1.5~2Drei bis fünf Prozent, drei bis fünf Kilometer, minus eins Komma fünf bis zwei
Uhrzeit14:30、13:00、9:05Vierzehn Uhr dreißig, dreizehn Uhr, neun Uhr null fünf (24-Stunden-Format)
Datum, Bruch10/26 交 / 有7/12的观众Zehnter Oktober / Fünf Siebtel der Zuschauer (nur als Bruch, wenn „von“ oder „ungefähr“ davor)
Symbole#15、2x、x3、100wNummer 15, doppelt, mal drei, eine Million

Prüfung mit goldenen Fällen

references/golden-cases.json enthält 115 ganze Fälle und 24 Streaming-Fälle, die alle vom Ursprungsprojekt validiert wurden. scripts/check-tn.mjs testet Ihre Implementierung damit:

node scripts/check-tn.mjs ./my-tn.mjs                  # Modul exportiert normalize(text) und (optional) createStream()
node scripts/check-tn.mjs ./my-tn.mjs --only 号码      # Nur eine Gruppe testen
  • Beim Vergleich werden Leerzeichen und häufige Satzzeichen ignoriert, nur die Aussprache wird verglichen. Fälle mit note sind „Referenz“, werden nur gemeldet, nicht als Fehler gezählt.
  • Verwenden Sie es als Akzeptanzlinie beim Schreiben neuer TN-Regeln; führen Sie es nach Regeländerungen aus, um zu verhindern, dass eine Korrektur eine andere Stelle beschädigt.
  • Bei strittigen Aussprachen (z. B. „dieser Computer 12999“ wird als Nummer behandelt) hat das Ursprungsprojekt die Entscheidung akzeptiert. Wenn Ihr Produkt eine andere Aussprache wünscht, ändern Sie die Fälle und notieren Sie den Grund neben dem Fall.

Fehlerhafte Aussprache suchen

Vier Kategorien: Aussprache nicht vorher festgelegt; Homophone vom Modell falsch geraten; Referenzaufnahme fehlerhaft; zufällig (einfach erneut abspielen).

Verwenden Sie die aktuelle Stimme und zwei andere Stimmen für denselben Satz: wenn alle Stimmen am gleichen Zeichen falsch liegen, Aussprache-Ersetzungstabelle hinzufügen; wenn nur eine Stimme seltsam klingt, Stimme wechseln. Protokollieren Sie jedes Mal Originaltext und umgewandelte Aussprache in einer JSONL-Datei, um später nachschlagen zu können.

Ingenieurwesen (siehe references/engines.md)

  • Latenz des ersten Satzes: Erster Absatz nur bis zum ersten Komma. Bei Matcha 0,65 Sekunden nach Erreichen des ersten Zeichens wird der erste Audioblock ausgegeben.
  • Effizienteste Beschleunigung ist Caching: Bei nicht synthetisierten Sätzen braucht CosyVoice 2,6–3 Sekunden für den ersten Block, bei Cache-Treffer 6 Millisekunden. Sobald der Benutzer spricht, vorab synthetisierte Füllwörter („ähm“, „lass mich überlegen“) generieren.
  • Abbruch muss die Inferenz wirklich stoppen: vLLM bei Verbindungsabbruch abort_request, sonst wartet der nächste Satz 4,9 Sekunden (nach Optimierung 0,8–1,7 Sekunden).
  • Englisch wird still übersprungen: Manche Engines lesen GitHub, PR, % nicht; nach Engine-Upgrades Englisch erneut validieren.
  • Fallback-Audioquelle: Wenn die Hauptquelle nicht bereit ist oder beim ersten Satz einen Fehler macht, auf Fallback umschalten; Fehler während des Vorlesens nicht wiederholen. Ein HTTP-Status „up“ bedeutet nicht, dass das Modell geladen ist; bei 503 wiederholen.

Quelle und Wartung

  • Quelle: Cirra (KI-Schreibtischhaustier, RedCarpG/cirra-deskpet) und sein Sprachdienst cirra-voice, 2026-10 bis 2026-11.
    • Code: sidecar/src/tts/speech/ (numbers.ts、units.ts、links.ts、filter.ts、overrides.ts、speech.test.ts)、sidecar/src/tts/splitter.ts、sidecar/src/tts/pronunciations.ts.
    • Dokumentation: docs/speech.md、docs/speech-tn.md (119 Vergleichssätze)、docs/tts.md、docs/voices.md、docs/voice-chat.md、docs/voice-chat-2.md、docs/voice-install.md、docs/perf-checkup.md.
    • Erfahrungen: lessons/chinese-tts.md im privaten Repo (https://github.com/RedCarpG/redcarpg-skills-private/blob/main/lessons/chinese-tts.md).
  • Ursprung: skills/chinese-tts/ im RedCarpG/redcarpg-skills. Die Kopie in ~/.claude/skills/ ist eine Installationskopie, nicht direkt ändern. references/golden-cases.json wurde am 2026-11-10 aus Cirras speech.test.ts mit einem Skript extrahiert, die beiden synchronisieren sich nicht automatisch.
  • Änderungen:
    • Im redcarpg-skills Repo ändern, per PR; Versionsnummer in manifest.json erhöhen, nach Bestehen von node scripts/validate.mjs releasen (Tag chinese-tts-v<Version>), dann lokale Kopie neu installieren. Vorher lessons/chinese-tts.md auf neue Einträge prüfen, die aufgenommen werden können.
    • Bei Änderungen an Cirras TN-Regeln die goldenen Fälle neu extrahieren (Methode: aus speech.test.ts die [Original, Aussprache] Paare der readNumbers-Gruppe und der „Streaming“-Gruppe lesen), und mit Cirras erstelltem sidecar/dist/tts/ Adaptermodul check-tn.mjs ausführen; sollten alle bestanden werden.
    • Die Messwerte der Engines (Latenz, Echtzeitfaktor, VRAM) wurden 2026-10 auf einem Rechner mit 8 GB VRAM und CPU ohne VNNI gemessen. Bei Hardwarewechsel neu messen.
  • Änderungsprotokoll:
    • 2026-11-12 · 1.0.0, in redcarpg-skills öffentlich veröffentlicht. Absolute Pfade entfernt, Quellprojekt als Link geschrieben; Inhalt unverändert.
    • 2026-11-10 · Cirra · Erste Version: Ablauf und Reihenfolge, Streaming-Grenzen, Regelsuche und Details, Fehlersuche, Engine-Ingenieurwesen; 139 goldene Testfälle und check-tn.mjs (mit Cirras Implementierung getestet, alle bestanden); zwei Test-Prompts in evals/.

Individual skills in this repo

This repo contains 5 individual skills — each has its own dedicated page.

frontend-verification

改完网页/前端界面(CSS、布局、组件、动画、响应式、深色模式、打印)之后怎样验证并拿出证据:先用内置浏览器预览,覆盖不到时用无头 Chrome 截图或读 DOM(预览面板被隐藏、批量截多个视口、要先进入某个状态、要拿 DOM 结果),附可直接运行的 shot.sh / shot.mjs 脚本。还收录无头 Chrome 的坑(requestAnimationFrame 动画停在第一帧、375 宽被撑成 500、深色模式跟随系统)、字体不显示或像宋体的排查、整页截图里滚动动画区块空白、vitest 排除 .claude worktree,以及桌面/手机/英文/繁體/深浅色/打印的核对清单。只要改了界面、要截图、要查响应式或深色模式、动画不动,或者准备说“界面改好了”,就用这个 skill,哪怕用户只说“看看效果”。Use after any UI/CSS/layout/animation change to verify it, take screenshots at several viewports, check dark mode / mobile / print, or debug animations frozen in headless Chrome.

immersive-cultural-ui

做重氛围、带东方古典或神秘学气质的沉浸式网页:深色夜空、细金线、薄雾、宣纸纹理、竖排中文、书法批注、景深视差、开场时逐层亮起。适用于命理排盘(八字、紫微、占星、塔罗)、黄历与二十四节气、星图、典籍诗词、博物馆展品、节庆和有仪式感的产品页。只要用户想要「有氛围、沉浸、古风、国风、东方、神秘、仪式感」的页面,或者要竖排、书法字体、星空、水墨、宣纸效果,即使没有点名风格,也用这个 skill。它提供一套带具体数值的风格配方(天书),装饰、动效、竖排和字体的做法,可复用代码和交付前检查清单。和 web-design-engineer 配合:那边管通用流程,这里管这一种风格。Also use for English requests for immersive, mystical, Chinese-classical, almanac, astrology, tarot or museum-exhibit pages.

RedCarpG/animation-capture

把会动的东西按固定时间一帧一帧录下来,做成左右对比的 GIF 或逐帧对照图,给人验收、对比改动前后、放进说明或 PR:网页的 CSS 过渡和动画、element.animate()、requestAnimationFrame 写的 JS 动画、canvas 游戏、three.js / VRM 角色、PixiJS / Live2D 角色都适用。附脚本:record.mjs(无头 Chrome + 假时钟,页面不用改,渲染多慢时间轴都准,两次录的逐帧一样)、make_gif.py(几个变体并排、标签、共用调色板)、clock-shim.js。还讲先逐帧记数值再录 GIF、开关前后怎么做变体、怎么取景,以及实测过的坑(Chrome 虚拟时间不可靠、等加载时别推时钟、Vite 首次打开会刷新页面、Live2D 运行库要先加载、无头 Chrome 用完要关、别人模型的许可)。只要用户想「录个 GIF」「做个动图给我看」「对比一下改之前和改之后的动画」「把动作录下来」「验收一下动画效果」,或者要给动画、动效、角色动作拿出能看的证据,就用这个 skill,即使没提 GIF。Also use for English requests to record an animation as frames or a GIF, make a before/after comparison of motion, or capture deterministic frames from a web page, canvas, three.js, VRM or Live2D scene.

RedCarpG/live2d-vrm-animation

在网页或桌面应用里让 Live2D(Cubism,PixiJS)和 VRM(three.js + @pixiv/three-vrm)角色动起来:加载顺序、程序姿势和动作片段互相覆盖、在物理之前叠加、VTube Studio 模型补齐(没有 Idle、没眨眼、头角度是物理输出、8K 贴图、包围盒被特效带偏)、动作通道和定住、表情存取和道具冲突、three.js AnimationMixer 的坑(不写没变的值、LoopOnce 提前关掉)、程序「带动层」让手 K 和 AI 动作不僵、动捕片段只取上半身、弹簧骨骼延迟和跟节拍、裙子穿模、让 AI 生成表情和动作的数据格式与校验规则,以及逐帧记录的验证方法。只要用户在做虚拟形象、桌宠、VTuber 工具、数字人,提到 Live2D、Cubism、model3.json、motion3、exp3、physics3、VTube Studio、VRM、VRMA、three-vrm、Mixamo、动捕、SpringBone,或者抱怨「动作一顿一顿的」「动作僵」「手放下又抬起来闪一下」「头不跟着动」「定不住」「表情看不出来」「做动作脸上没表情」「手指僵、直板手」「托腮够不到下巴」「眼睛呆、一直盯着」「腿站不稳、脚滑」,就用这个 skill。Also use for English requests about animating Live2D or VRM avatars, procedural idle motion, physics, expressions, or AI-generated character motions.

vrm-model-conversion

把带骨架的 3D 人物模型(FBX、PMX/MMD、XPS、glTF/GLB、.blend;来自 Mixamo、MMD、Unity/VRChat、Daz Genesis、Auto-Rig Pro、Rigify、3ds Max Biped、游戏提取)在 Blender 后台转成 VRM 1.0,给 three-vrm 网页、桌宠、VTuber 软件、VRChat 外的应用用。管:解压和挑哪份源文件、各格式怎么导入、骨头名自动对应到 VRM 标准骨骼、A-pose 转 T-pose、表情(已有形态键直接绑;只有脸部骨头的烘成形态键)、头发和衣服的弹簧骨骼(没有物理骨的就加骨链、按位置重新分权重)、碰撞体、MToon 材质和发片透明、贴图缩小、VRM meta 和许可,以及一份检查清单。附可复用的 Blender 脚本 vrm_kit.py(参数化,不写死文件名)、模板 build_template.py、不用 Blender 的检查脚本 inspect_vrm.py。只要用户想「把这个模型转成 VRM」「这个 FBX/PMX 能不能给 three-vrm 用」「给模型加表情、加头发物理、加弹簧骨」「VRM 的表情不动、头发不飘、裙子穿模、碰撞体没用」「下载了个模型想当桌宠/虚拟形象」,就用这个 skill,即使没说 VRM。Also use for English requests to convert FBX/PMX/glTF/blend avatars to VRM, set up VRM expressions, spring bones or colliders, or debug a VRM export from Blender.

Habilidades Relacionadas