Spaces:
Sleeping
Sleeping
| .PHONY: help setup install compress run clean test dev check-deps status | |
| # κΈ°λ³Έ μ€μ | |
| PYTHON := uv run python | |
| UV := uv | |
| VOICEBANK_DIR := voice/hanseol CVC | |
| COMPRESSED_FILE := voice/hanseol_CVC_compressed.h5 | |
| PORT := 7860 | |
| # κΈ°λ³Έ νκ² | |
| help: ## λμλ§ μΆλ ₯ | |
| @echo "π΅ UTAU WebUI - κ°λ° νκ²½ μλν λꡬ" | |
| @echo "" | |
| @echo "π μ¬μ© κ°λ₯ν λͺ λ Ήμ΄:" | |
| @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-15s\033[0m %s\n", $$1, $$2}' | |
| @echo "" | |
| @echo "π λΉ λ₯Έ μμ:" | |
| @echo " 1. make setup # κ°λ° νκ²½ μ€μ " | |
| @echo " 2. make compress # 보μ΄μ€λ± ν¬ μμΆ" | |
| @echo " 3. make run # μΉUI μ€ν" | |
| @echo "" | |
| setup: ## κ°λ° νκ²½ μ΄κΈ° μ€μ | |
| @echo "π§ κ°λ° νκ²½μ μ€μ ν©λλ€..." | |
| @if ! command -v uv >/dev/null 2>&1; then \ | |
| echo "β uvκ° μ€μΉλμ§ μμμ΅λλ€. https://docs.astral.sh/uv/ μμ μ€μΉνμΈμ."; \ | |
| exit 1; \ | |
| fi | |
| @echo "π¦ μμ‘΄μ±μ μ€μΉν©λλ€..." | |
| $(UV) sync | |
| @echo "π νμν λλ ν 리λ₯Ό μμ±ν©λλ€..." | |
| @mkdir -p voice | |
| @echo "β κ°λ° νκ²½ μ€μ μλ£!" | |
| install: setup ## setupμ λ³μΉ | |
| check-deps: ## μμ‘΄μ± λ° νκ²½ νμΈ | |
| @echo "π νκ²½μ νμΈν©λλ€..." | |
| @echo "UV λ²μ : $$($(UV) --version 2>/dev/null || echo 'β uv μμ')" | |
| @echo "Python λ²μ : $$($(PYTHON) --version 2>/dev/null || echo 'β Python μμ')" | |
| @if [ -f "$(COMPRESSED_FILE)" ]; then \ | |
| echo "β μμΆλ 보μ΄μ€λ± ν¬: $(COMPRESSED_FILE)"; \ | |
| $(PYTHON) -c "import h5py; f=h5py.File('$(COMPRESSED_FILE)', 'r'); print(f'π λ©νλ°μ΄ν°: {dict(f[\"metadata\"].attrs)}')"; \ | |
| else \ | |
| echo "β μμΆλ 보μ΄μ€λ± ν¬κ° μμ: $(COMPRESSED_FILE)"; \ | |
| fi | |
| @if [ -d "$(VOICEBANK_DIR)" ]; then \ | |
| echo "β μλ³Έ 보μ΄μ€λ± ν¬: $(VOICEBANK_DIR) ($$(find "$(VOICEBANK_DIR)" -name "*.wav" | wc -l)κ° WAV νμΌ)"; \ | |
| else \ | |
| echo "β μλ³Έ 보μ΄μ€λ± ν¬κ° μμ: $(VOICEBANK_DIR)"; \ | |
| fi | |
| compress: ## 보μ΄μ€λ± ν¬λ₯Ό HDF5 ννλ‘ μμΆ | |
| @echo "ποΈ λ³΄μ΄μ€λ± ν¬λ₯Ό μμΆν©λλ€..." | |
| @if [ ! -d "$(VOICEBANK_DIR)" ]; then \ | |
| echo "β μλ³Έ 보μ΄μ€λ± ν¬λ₯Ό μ°Ύμ μ μμ΅λλ€: $(VOICEBANK_DIR)"; \ | |
| echo "π ν΄κ²° λ°©λ²:"; \ | |
| echo " 1. hanseol CVC 보μ΄μ€λ± ν¬λ₯Ό $(VOICEBANK_DIR) μ λ°°μΉ"; \ | |
| echo " 2. λλ λ€λ₯Έ 보μ΄μ€λ± ν¬λ₯Ό μ¬μ©νλ €λ©΄:"; \ | |
| echo " make compress VOICEBANK_DIR=your/voicebank/path"; \ | |
| exit 1; \ | |
| fi | |
| @echo "π μλ³Έ μμΉ: $(VOICEBANK_DIR)" | |
| @echo "πΎ μμΆ νμΌ: $(COMPRESSED_FILE)" | |
| $(PYTHON) -c "\ | |
| from voice_data_converter import convert_voicebank_to_compressed_format; \ | |
| success = convert_voicebank_to_compressed_format('$(VOICEBANK_DIR)', '$(COMPRESSED_FILE)'); \ | |
| print('β μμΆ μλ£!' if success else 'β μμΆ μ€ν¨')" | |
| @echo "π 보μ΄μ€λ± ν¬ μμΆμ΄ μλ£λμμ΅λλ€!" | |
| run: ## μΉUI μ€ν | |
| @echo "π UTAU WebUIλ₯Ό μμν©λλ€..." | |
| @if [ ! -f "$(COMPRESSED_FILE)" ]; then \ | |
| echo "β μμΆλ 보μ΄μ€λ± ν¬κ° μμ΅λλ€."; \ | |
| echo "π λ¨Όμ λ€μ λͺ λ Ήμ΄λ₯Ό μ€ννμΈμ: make compress"; \ | |
| exit 1; \ | |
| fi | |
| @echo "π μΉ λΈλΌμ°μ μμ http://localhost:$(PORT) μ μ΄μ΄μ£ΌμΈμ" | |
| $(PYTHON) webui.py | |
| dev: ## κ°λ° λͺ¨λλ‘ μ€ν (auto-reload) | |
| @echo "π§ κ°λ° λͺ¨λλ‘ UTAU WebUIλ₯Ό μμν©λλ€..." | |
| @if [ ! -f "$(COMPRESSED_FILE)" ]; then \ | |
| echo "β μμΆλ 보μ΄μ€λ± ν¬κ° μμ΅λλ€."; \ | |
| echo "π λ¨Όμ λ€μ λͺ λ Ήμ΄λ₯Ό μ€ννμΈμ: make compress"; \ | |
| exit 1; \ | |
| fi | |
| @echo "π μΉ λΈλΌμ°μ μμ http://localhost:$(PORT) μ μ΄μ΄μ£ΌμΈμ" | |
| @echo "π νμΌ λ³κ²½ μ μλμΌλ‘ μ¬μμλ©λλ€" | |
| $(UV) run --env GRADIO_AUTO_RELOAD=1 python webui.py | |
| test: ## μμΆλ 보μ΄μ€λ± ν¬ ν μ€νΈ | |
| @echo "π§ͺ μμΆλ 보μ΄μ€λ± ν¬λ₯Ό ν μ€νΈν©λλ€..." | |
| @if [ ! -f "$(COMPRESSED_FILE)" ]; then \ | |
| echo "β μμΆλ 보μ΄μ€λ± ν¬κ° μμ΅λλ€: $(COMPRESSED_FILE)"; \ | |
| echo "π λ¨Όμ λ€μ λͺ λ Ήμ΄λ₯Ό μ€ννμΈμ: make compress"; \ | |
| exit 1; \ | |
| fi | |
| $(PYTHON) test_compressed_voicebank.py | |
| status: ## νμ¬ μν νμΈ | |
| @echo "π UTAU WebUI μν" | |
| @echo "====================" | |
| @make check-deps | |
| @echo "" | |
| @if [ -f "$(COMPRESSED_FILE)" ] && [ -d "$(VOICEBANK_DIR)" ]; then \ | |
| echo "π λͺ¨λ μ€λΉκ° μλ£λμμ΅λλ€! 'make run'μΌλ‘ μμνμΈμ."; \ | |
| elif [ -f "$(COMPRESSED_FILE)" ]; then \ | |
| echo "β μμΆλ 보μ΄μ€λ± ν¬κ° μ€λΉλμμ΅λλ€! 'make run'μΌλ‘ μμνμΈμ."; \ | |
| elif [ -d "$(VOICEBANK_DIR)" ]; then \ | |
| echo "β οΈ λ³΄μ΄μ€λ± ν¬κ° μμ§λ§ μμΆλμ§ μμμ΅λλ€. 'make compress'λ₯Ό μ€ννμΈμ."; \ | |
| else \ | |
| echo "β 보μ΄μ€λ± ν¬κ° μμ΅λλ€. λ¨Όμ 보μ΄μ€λ± ν¬λ₯Ό μ€λΉνκ³ 'make compress'λ₯Ό μ€ννμΈμ."; \ | |
| fi | |
| clean: ## μμ νμΌ λ° μΊμ μ 리 | |
| @echo "π§Ή μμ νμΌμ μ 리ν©λλ€..." | |
| @find . -type f -name "*.pyc" -delete 2>/dev/null || true | |
| @find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true | |
| @find . -type f -name "*.tmp" -delete 2>/dev/null || true | |
| @find . -type f -name ".DS_Store" -delete 2>/dev/null || true | |
| @rm -rf .pytest_cache 2>/dev/null || true | |
| @echo "β μ 리 μλ£!" | |
| clean-all: clean ## λͺ¨λ μμ±λ νμΌ μμ (μμΆ νμΌ ν¬ν¨) | |
| @echo "ποΈ λͺ¨λ μμ±λ νμΌμ μμ ν©λλ€..." | |
| @if [ -f "$(COMPRESSED_FILE)" ]; then \ | |
| echo "β οΈ μμΆλ 보μ΄μ€λ± ν¬λ μμ λ©λλ€: $(COMPRESSED_FILE)"; \ | |
| read -p "κ³μνμκ² μ΅λκΉ? (y/N): " confirm; \ | |
| if [ "$$confirm" = "y" ] || [ "$$confirm" = "Y" ]; then \ | |
| rm -f "$(COMPRESSED_FILE)"; \ | |
| echo "β λͺ¨λ νμΌμ΄ μμ λμμ΅λλ€."; \ | |
| else \ | |
| echo "β μ·¨μλμμ΅λλ€."; \ | |
| fi \ | |
| else \ | |
| echo "β μ 리ν νμΌμ΄ μμ΅λλ€."; \ | |
| fi | |
| # κ°λ°μλ₯Ό μν μΆκ° λͺ λ Ήμ΄ | |
| update: ## μμ‘΄μ± μ λ°μ΄νΈ | |
| @echo "π¦ μμ‘΄μ±μ μ λ°μ΄νΈν©λλ€..." | |
| $(UV) sync --upgrade | |
| @echo "β μ λ°μ΄νΈ μλ£!" | |
| shell: ## νλ‘μ νΈ μ μ§μ | |
| @echo "π νλ‘μ νΈ μμ μ§μ ν©λλ€..." | |
| $(UV) shell | |
| info: ## νλ‘μ νΈ μ 보 μΆλ ₯ | |
| @echo "π UTAU WebUI νλ‘μ νΈ μ 보" | |
| @echo "============================" | |
| @echo "νλ‘μ νΈ: UTAU WebUI" | |
| @echo "μ€λͺ : νκ΅μ΄ CVC 보μ΄μ€λ± ν¬λ₯Ό μ¬μ©ν μΉ κΈ°λ° UTAU μμ± ν©μ±κΈ°" | |
| @echo "κΈ°μ μ€ν: Python, Gradio, HDF5, UV" | |
| @echo "ν¬νΈ: $(PORT)" | |
| @echo "보μ΄μ€λ± ν¬: $(VOICEBANK_DIR)" | |
| @echo "μμΆ νμΌ: $(COMPRESSED_FILE)" | |
| @echo "" | |
| @echo "π λλ ν 리 ꡬ쑰:" | |
| @find . -maxdepth 2 -type f -name "*.py" | head -10 | |
| @echo "" | |
| # μ 체 μν¬νλ‘μ° | |
| all: setup compress run ## μ 체 μ€μ λ° μ€ν (setup β compress β run) | |
| # κΈ°λ³Έ νκ²μ helpλ‘ μ€μ | |
| .DEFAULT_GOAL := help |