Spaces:
Running
Running
File size: 6,814 Bytes
1056960 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 | .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 |