5.6 KiB
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 and model card.
- Model:
Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice, revision0c0e3051f131929182e2c023b9537f8b1c68adfe, Korean/Sohee, existing conda environmentqwen3-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:
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.