Add pinned local Qwen GPU voice generation and first puzzle drafts

This commit is contained in:
NINI
2026-10-05 01:17:47 +09:00
parent 729afb3da7
commit cd32491bbb
46 changed files with 3138 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
# Korean Qwen voice drafts
Status: actual local GPU synthesis and file validation completed; pronunciation, clipping at word boundaries, and voice suitability have **not been listened to or approved**. These are draft clips, not final voice assets. SFX and BGM will be supplied/selected by the user later.
## Sources and conditions
- Checked 2026-10-05 KST: [official Qwen3-TTS repository](https://github.com/QwenLM/Qwen3-TTS) and [model card](https://huggingface.co/Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice).
- Model: `Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice`, revision `0c0e3051f131929182e2c023b9537f8b1c68adfe`, Korean/Sohee, existing conda environment `qwen3-tts`. Full weights, tokenizer and processor snapshot are cached outside the repository. No model/runtime generation service is included in the game.
- Model card declares Apache-2.0. Installed qwen-tts 0.1.1 contains the Apache-2.0 code license. The actual model card and code license are recorded in `SourceAssets/Audio/Voice/licenses/`. This is a record of those published conditions, not a claim of exclusive rights to generated voices.
- Profile contains the exact prompt, seed 42, generation parameters and device/dtype/attention; no machine-specific model cache path. Initial prompt: `5~7세 아이에게 이야기하듯 따뜻하고 밝게, 천천히 또렷하게 읽어 주세요. 숫자는 정확하게 읽고 과장된 비명이나 웃음소리는 넣지 마세요.`
## Actual environment and generation evidence
Only the installed CPU torch was replaced with the official `torch==2.11.0+cu128` wheel, matching the installed torchaudio 2.11.0 version. The direct torch requirement `setuptools<82` required adjusting setuptools 83.0.0 to 81.0.0. No environment recreation or unrelated upgrades.
Python 3.12.15, qwen-tts 0.1.1, torch 2.11.0+cu128, torchaudio 2.11.0+cpu, transformers 4.57.3, soundfile 0.14.0, huggingface-hub 0.36.2. CUDA 12.8 / NVIDIA GeForce RTX 4080 SUPER. CUDA square/sum probe returned 140. Torch CUDA, qwen-tts and torchaudio imports succeeded. SDPA/bfloat16 worked for actual GPU synthesis without installing FlashAttention or SoX.
First selected sample run `20261004T161148012934Z_47f3a009`: count_01/count_04/count_07/count_10/guide_collect. Model loading 3.214 s, peak allocated GPU memory 4,232,247,296 bytes; native output 24,000 Hz mono FLOAT WAV. Each clip's exact duration, frame count, generation time and SHA-256 are in the immutable run manifest.
Expanded run `20261004T161231511126Z_aa20f404`: five prior clips reused with matching text/profile/hash; remaining numbers and guide_count actually generated. Its manifest records original run/file links, actual settings/defaults, environment, hashes and per-clip results. Successful synthesis/file validation does not imply pronunciation approval.
## Runtime draft selection
Drafts live under `Assets/MagnetismHeroes/UnityRuntime/Presentation/Audio/Voice/`. Source FLOAT WAVs remain unchanged; edited candidates use true polyphase resampling to 44,100 Hz mono PCM16, without speech trimming. The corresponding `edited/<runId>/selection.json` links original source hash and edited/runtime hash. Existing runtime files with different contents are preserved by the preparation tool until reviewed.
| ID | Duration | Status |
| --- | ---: | --- |
| count_01 | 0.56 s | T2 required draft, not listened |
| guide_collect | 2.00 s | T2 required draft, not listened |
| guide_count | 3.60 s | T2 required draft, not listened |
| count_02,03,04,06,07,08,09,10 | 0.48–1.44 s | Optional future counting drafts, not listened |
| count_05 | 9.12 s | Excluded from runtime selection; anomalous long silence and later energy, requires listening/recreation |
`count_05` retains its complete original and edited candidate for diagnosis. A single-word number longer than two seconds is blocked from draft export by the preparation tool. This threshold is a review signal, not an automated pronunciation test.
## Verification
Environment commands use the existing environment Python or `conda run --no-capture-output -n qwen3-tts`, never the global Python. Commands run at the project root:
```powershell
python -m unittest discover -s tools/audio -p 'test_*.py' -v
python tools/audio/generate_voice.py --catalog SourceAssets/Audio/Voice/voice-catalog.json --profile SourceAssets/Audio/Voice/qwen-profile.json --ids count_01,count_04,count_07,count_10,guide_collect
python tools/audio/generate_voice.py --catalog SourceAssets/Audio/Voice/voice-catalog.json --profile SourceAssets/Audio/Voice/qwen-profile.json
python tools/audio/generate_voice.py --catalog SourceAssets/Audio/Voice/voice-catalog.json --profile SourceAssets/Audio/Voice/qwen-profile.json --validate-only --manifest SourceAssets/Audio/Voice/generated/20261004T161231511126Z_aa20f404/manifest.json
```
Initial RED exit 1: generator module absent. GREEN: eight behavioral Python tests, exit 0, cover invalid catalogs, partial/current-profile validation, failed/nonfinite WAVs, missing/corrupt WAVs, changed clips/settings, hash tampering, preservation of originals, resampling and refusal to overwrite a different runtime draft. Actual sample synthesis, expanded synthesis and validation-only each exited 0. Validation-only neither loads nor downloads the model. Validation without IDs covers all currently required T2 clips; `--ids` records the narrower selected scope.
Unity `.meta` files must be generated through actual Editor import after integration; they are not handwritten. Required follow-up: listen to each selected utterance, record reviewer/date/approved hashes, review count_05 and future stage guidance, and test queue/mix playback in the Android device build.