Files
MagnetismHeroes/docs/qwen-voice-register.md
T

5.6 KiB
Raw Blame History

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, 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:

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.