- 共享引擎(app/src/main):GestureEngine 6 手势识别、AudioEngine 三层音频 (ExoPlayer BGM 交叉淡入 / 对白 ducking / SoundPool 低延迟)、Game/GameEngine 状态机接口、MainActivity 全屏封面 + TalkBack - 《声命线》storyline:末世互动广播剧,3 幕 8 抉择点 4 结局 - 《声东击西》reflex:听声辨位反应,12 波战斗 + BGM 三档 BPM 变速 - 《暗室》escape:3x3 网格密室逃脱,钥匙→铁柜→保险丝→电箱→大门谜题链 - 文档:setup(从零搭建)/ architecture(架构)/ engine-api(引擎 API)/ asset-pipeline(资产流水线)/ games/*(三款游戏设计文档) - 资产管线:Qwen3-TTS 对白 + 程序合成音效/BGM + Mureka BGM 的 gen 脚本与台账, 全部 ogg 资产入库可复现 - env.d 环境脚本:android/tts 入库;sfx/mureka 含密钥不入库,仅提交 .example.sh 模板
91 lines
2.8 KiB
Python
91 lines
2.8 KiB
Python
import torch
|
|
from stable_audio_3.interface.diffusion_cond import create_diffusion_cond_ui
|
|
from stable_audio_3 import StableAudioModel
|
|
from stable_audio_3.verbose import set_verbose
|
|
import sys
|
|
|
|
# Silence Python warnings (FutureWarning, DeprecationWarning, etc.) unless --verbose.
|
|
# Must run before any ML library imports since most warnings fire at import time.
|
|
# We keep Gradio chatter, HF/torch progress bars, and generation tqdm intact.
|
|
if "--verbose" not in sys.argv:
|
|
import os as _os
|
|
|
|
_os.environ.setdefault("PYTHONWARNINGS", "ignore")
|
|
import warnings as _warnings
|
|
|
|
_warnings.filterwarnings("ignore")
|
|
|
|
|
|
def main(args):
|
|
set_verbose(getattr(args, "verbose", False))
|
|
torch.manual_seed(42)
|
|
model_half = args.model_half
|
|
model = StableAudioModel.from_pretrained(args.model, model_half=model_half)
|
|
if args.lora_ckpt_path:
|
|
model.load_lora(args.lora_ckpt_path)
|
|
interface = create_diffusion_cond_ui(
|
|
model,
|
|
gradio_title=args.title if args.title is not None else "Stable Audio 3",
|
|
default_prompt=args.default_prompt,
|
|
)
|
|
interface.queue()
|
|
interface.launch(
|
|
share=True,
|
|
js=getattr(interface, "_sao_js", None),
|
|
theme=getattr(interface, "_sao_theme", None),
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import argparse
|
|
|
|
parser = argparse.ArgumentParser(description="Run gradio interface")
|
|
parser.add_argument(
|
|
"--model", type=str, help="Name of pretrained model", required=True
|
|
)
|
|
parser.add_argument(
|
|
"--model-config", type=str, help="Path to model config", required=False
|
|
)
|
|
parser.add_argument(
|
|
"--ckpt-path", type=str, help="Path to model checkpoint", required=False
|
|
)
|
|
parser.add_argument(
|
|
"--pretransform-ckpt-path",
|
|
type=str,
|
|
help="Optional to model pretransform checkpoint",
|
|
required=False,
|
|
)
|
|
parser.add_argument("--username", type=str, help="Gradio username", required=False)
|
|
parser.add_argument("--password", type=str, help="Gradio password", required=False)
|
|
parser.add_argument(
|
|
"--model-half",
|
|
action="store_true",
|
|
help="Whether to use half precision",
|
|
required=False,
|
|
default=True,
|
|
)
|
|
parser.add_argument(
|
|
"--title", type=str, help="Display Title top of Gradio", required=False
|
|
)
|
|
parser.add_argument(
|
|
"--lora-ckpt-path",
|
|
type=str,
|
|
nargs="*",
|
|
help="Path(s) for LoRA(s) to apply. Can specify multiple.",
|
|
required=False,
|
|
)
|
|
parser.add_argument(
|
|
"--default-prompt",
|
|
type=str,
|
|
default=None,
|
|
help="Default prompt to pre-fill in the textbox",
|
|
)
|
|
parser.add_argument(
|
|
"--verbose",
|
|
action="store_true",
|
|
default=False,
|
|
help="Print detailed load/generation progress",
|
|
)
|
|
args = parser.parse_args()
|
|
main(args)
|