118 lines
3.7 KiB
Python
118 lines
3.7 KiB
Python
#!/usr/bin/env python3
|
|
"""XL turbo (4B DiT) — новый вдохновляющий трек для Ника."""
|
|
import os
|
|
import sys
|
|
import time
|
|
|
|
for v in ['http_proxy', 'https_proxy', 'HTTP_PROXY', 'HTTPS_PROXY', 'ALL_PROXY']:
|
|
os.environ.pop(v, None)
|
|
|
|
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
|
|
sys.path.insert(0, PROJECT_ROOT)
|
|
|
|
from loguru import logger
|
|
from acestep.handler import AceStepHandler
|
|
from acestep.inference import GenerationParams, GenerationConfig, generate_music
|
|
|
|
SAVE_DIR = os.path.join(PROJECT_ROOT, "output", "personal_new")
|
|
|
|
CAPTION = (
|
|
"An uplifting, cinematic pop-rock anthem with a powerful male vocal. "
|
|
"Building drums, bright synth pads, soaring electric guitar, emotional "
|
|
"and hopeful mood. Anthem-like chorus, sense of a new dawn and forward "
|
|
"motion, determined and inspiring."
|
|
)
|
|
|
|
LYRICS = """[Intro]
|
|
|
|
[Verse]
|
|
Рассвет на стекле, в окне уже не тьма
|
|
Я снова здесь, я снова в борьбе
|
|
Прошлые ошибки — лишь следы на пути
|
|
Я не сдамся, я иду вперёд
|
|
|
|
[Pre-Chorus]
|
|
Пусть руки дрожат, но в груди огонь
|
|
Я не сломан — я только в пути
|
|
|
|
[Chorus]
|
|
Восход, восход — я иду навстречу свету
|
|
Восход, восход — хоть и трудно порой
|
|
Я ещё здесь, я ещё в строю
|
|
И мой путь только начинается
|
|
|
|
[Verse]
|
|
Дорога длинная, впереди много гор
|
|
Но каждый восход делает сильнее меня
|
|
Я не один, я веду этот бой
|
|
За себя и за тех, кто со мной
|
|
|
|
[Chorus]
|
|
Восход, восход — я иду навстречу свету
|
|
Восход, восход — хоть и трудно порой
|
|
Я ещё здесь, я ещё в строю
|
|
И мой путь только начинается
|
|
|
|
[Bridge]
|
|
Не бойся рассвета, он снова придет
|
|
Не бойся пути — он твой
|
|
|
|
[Chorus]
|
|
Восход, восход — я иду навстречу свету
|
|
Восход, восход — хоть и трудно порой
|
|
Я ещё здесь, я ещё в строю
|
|
И мой путь только начинается
|
|
|
|
[Outro]"""
|
|
|
|
|
|
def main():
|
|
os.makedirs(SAVE_DIR, exist_ok=True)
|
|
|
|
logger.info("Инициализация DiT handler (acestep-v15-xl-turbo, cuda:0)...")
|
|
t0 = time.time()
|
|
dit = AceStepHandler()
|
|
status, ok = dit.initialize_service(
|
|
project_root=PROJECT_ROOT,
|
|
config_path="acestep-v15-xl-turbo",
|
|
device="cuda",
|
|
offload_to_cpu=True,
|
|
)
|
|
if not ok:
|
|
logger.error(f"DiT init failed: {status}")
|
|
sys.exit(1)
|
|
logger.info(f"DiT loaded за {time.time() - t0:.1f}s — {status}")
|
|
|
|
params = GenerationParams(
|
|
task_type="text2music",
|
|
thinking=False,
|
|
caption=CAPTION,
|
|
lyrics=LYRICS,
|
|
vocal_language="ru",
|
|
bpm=128,
|
|
keyscale="F major",
|
|
timesignature="",
|
|
duration=150,
|
|
inference_steps=8,
|
|
guidance_scale=1.0,
|
|
seed=-1,
|
|
)
|
|
config = GenerationConfig(batch_size=1, audio_format="wav")
|
|
|
|
logger.info("Генерация на GPU (замер времени)...")
|
|
t0 = time.time()
|
|
result = generate_music(dit, None, params, config, SAVE_DIR)
|
|
elapsed = time.time() - t0
|
|
|
|
if result.success:
|
|
logger.info(f"OK за {elapsed:.1f}s")
|
|
for a in result.audios:
|
|
logger.info(f" -> {a.get('path')}")
|
|
else:
|
|
logger.error(f"FAILED за {elapsed:.1f}s — {result.status_message}")
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|