VTrace:Phase-Driven Vocal Tuner
VTrace 0.6.0 (Dev)
VTrace는 Demucs AI 보컬 분리 모델과 함께 사용하도록 특별히 설계된 후처리 도구로, 보컬 볼륨 조절 및 자연스러운 보컬 감쇠 기능을 제공합니다.
이 파이프라인은 Demucs의 출력 구조(separated/demucs_model_name
폴더 안의 vocals.wav
와 no_vocals.wav
)를 기준으로 구축되어 있어, 위상 일관성이 유지된 보컬 추출을 완전 자동화할 수 있습니다.
주의: VTrace는 VR Arch, MDX-Net, Spleeter와 같은 다른 모델과는 직접적으로 호환되지 않습니다. 이러한 모델을 사용하려면 오디오를 수동으로 vocals
및 no_vocals
파일로 분리하고, 해당 구조에 맞게 폴더에 배치해야 합니다.
개발 배경
AI 보컬 제거 모델은 좋은 성능을 제공하지만
보컬을 완전히 제거하면 배경 악기(저음역대, 리버브, 공간계 악기)까지 손실될 수 있습니다.
보컬 추출 결과는 너무 건조하여, 실제 음원에서 들리는 자연스러운 공간감이 사라집니다.
AI 모델의 출력에 부드러운 감쇠를 적용함으로써, VTrace는 다음을 가능하게 합니다:
AI 모델 출력에 부드러운 감쇠 처리를 추가해,
- 보컬 볼륨을 자연스럽게 줄이고,
- 배경 악기를 최대한 보존하며,
- 부드러운 보컬 추출까지 가능합니다.
기능
보컬 감쇠 (Vocal Attenuation)
보컬 볼륨을 완전히 제거하지 않고 사용자가 원하는 만큼 감쇠할 수 있습니다.자연스러운 보컬 추출 (Smooth Extraction)
AI 모델의 결과물보다 자연스럽게 약간의 공간감과 함께 보컬을 추출합니다.악기 보존 (Instrumental Preservation)
AI 모델에서 발생할 수 있는 배경 악기 손실을 최소화합니다.학습 데이터 생성
보컬 감쇠 처리 과정에서 생성된 Residual Vocal은 새로운 AI 학습 데이터로 재활용할 수 있습니다.
핵심 특징
기존 AI 모델 | VTrace 추가 시 |
---|---|
보컬 완전 제거 | 보컬 볼륨 조절 (부드럽게 줄이기) |
배경 손실 있음 | 배경 악기 보존 |
깨짐/뭉개짐 가능성 있음 | 깨지지 않고 자연스러운 보컬 추출 |
동작 원리
VTrace는 AI 모델로 분리된 무보컬(instrumental) 음원과 원본(original) 음원을 혼합(blend)하여, 보컬을 완전히 제거하지 않고 볼륨을 조절(attenuation)하는 후처리 방식입니다. 또한, Residual Subtraction 및 Phase Cancel 기법을 통해 보컬 추출과 배경 복원까지 지원합니다.
핵심 아이디어
- AI 분리 모델로 얻은 Instrumental 음원은 보컬이 제거되어 있으나, 일부 음질 손실(저음역대, 공간계 악기 등)이 발생할 수 있습니다.
- 따라서 원본 음원의 보컬 성분을 감쇠(attenuate)하여 자연스러운 믹스를 만들어냅니다.
- 동시에 Residual Subtraction을 통해 보컬 성분만 추출하고, 이를 활용해 Phase Cancel 방식으로 배경 복원도 수행합니다.
수식 표현
보컬 감쇠 (Blend)
감쇠된 출력 음원 $B(t)$는 다음과 같이 계산됩니다:
\[B(t) = \alpha \cdot O(t) + (1 - \alpha) \cdot I(t)\]- $O(t)$: 원본(original) 신호
- $I(t)$: AI 모델에서 추출된 무보컬(instrumental) 신호
- $\alpha$: 보컬 감쇠 비율 (0.0 ~ 1.0)
Residual Subtraction (보컬 추출)
Residual Vocal은 다음과 같이 계산됩니다:
\[V_{\text{residual}}(t) = O(t) - I(t)\]즉, 원본에서 무보컬을 빼면 보컬 성분만 남게 됩니다.
Phase Cancel (배경 복원)
Residual Vocal을 원본에서 다시 빼면 배경(Instrumental)이 복원됩니다:
\[I_{\text{phase-cancel}}(t) = O(t) - V_{\text{residual}}(t)\]Blend Mode (가중치 계산 방식)
- Linear 모드: $w = \alpha$
- Exp 모드: $w = e^{-\alpha}$
- Log 모드: $w = \log(1 + \alpha)$
- Power 모드: $w = \alpha^{\gamma}$ (기본 $\gamma = 2$)
다양한 가중치 계산 방식으로 감쇠 곡선을 유연하게 조절할 수 있습니다.
처리 흐름
- 원본과 무보컬 음원의 샘플레이트 및 채널 수를 일치시킴
- 선택한 Blend 모드에 따라 가중치 계산
- 두 음원을 합성
- 클리핑 방지를 위해 Amplitude Scaling
- Residual Vocal 추출
- Phase Cancel (배경 복원)
- 최종 출력은
.wav
로 저장 (Normalize 처리 포함)
처리 단계 요약
처리 단계 | 역할 | 출력 파일 예시 |
---|---|---|
Blend (보컬 감쇠) | 보컬 볼륨 조절 및 믹스 생성 | *_blended.wav |
Residual Subtraction | 보컬 성분 추출 | *_vocal_residual.wav |
Phase Cancel | 배경 복원 (보컬 제거) | *_phase_cancel.wav |
사용 시나리오
보컬 볼륨을 줄여서 배경과 어우러지는 믹스 제작
보컬의 존재감은 살리되, 원곡의 배경 악기와 자연스럽게 섞이도록 처리
깨지지 않고 부드러운 보컬 추출 (감정, 발음 유지)
Residual Vocal을 활용한 데이터셋 구축 및 AI 모델 학습에 활용
샘플 결과 (alpha별 보컬 감쇠 및 추출 예시)
VTrace 샘플 결과 각 곡에 대해 alpha(보컬 감쇠 파라미터)를 다르게 설정하여, 보컬 음량과 보컬 추출 결과를 측정한 결과.
Song A: alpha별 보컬 감쇠 결과
버전 | 미리 듣기 |
---|---|
Original | |
alpha=0.5 | |
alpha=0.25 | |
alpha=0.1 | |
alpha=0.1 phase cancel vocal extract |
Song B: alpha별 보컬 감쇠 결과
버전 | 미리 듣기 |
---|---|
Original | |
alpha=0.5 | |
alpha=0.25 | |
alpha=0.1 | |
alpha=0.1 phase cancel vocal extract |
Song C: alpha별 보컬 감쇠 결과
버전 | 미리 듣기 |
---|---|
Original | |
alpha=0.5 | |
alpha=0.25 | |
alpha=0.1 | |
alpha=0.1 phase cancel vocal extract |
Song D: alpha별 보컬 감쇠 결과
버전 | 미리 듣기 |
---|---|
Original | |
alpha=0.5 | |
alpha=0.25 | |
alpha=0.1 | |
alpha=0.1 phase cancel vocal extract |
설치 방법
VTrace는 Conda 환경으로 제공됩니다. Anaconda, Miniconda
1
conda env create -f VTrace.yaml
설치가 완료되면, 다음 명령어로 환경을 활성화합니다:
1
conda activate vtrace
참고:
VTrace.yaml
은 이 프로젝트의 최상위 디렉토리에 포함되어 있습니다. 필요한 Python 버전 및 라이브러리 (numpy, librosa, soundfile, demucs 등)도 함께 설치됩니다.
실행 방법
기본 실행 명령어
1
python main.py -i <입력 폴더/파일 경로> [옵션들...]
또는 유튜브 링크를 입력하여 다운로드 + 처리:
1
python main.py -l <유튜브 링크> [옵션들...]
주요 옵션
옵션 | 설명 | 기본값 / 예시 |
---|---|---|
-i , --input | 입력 파일 또는 폴더 경로 | input/ 또는 song.wav |
-l , --link | 유튜브 링크 (MP3로 다운로드 후 자동 처리) | https://www.youtube.com/watch?v=xxxx |
-o , --output | 출력 폴더 경로 (생략 시 입력 폴더 하위에 생성됨) | results/ |
-ba , --blend_alpha | 최종 출력용 Blend 비율 (0.0 ~ 1.0). 값이 낮을수록 보컬이 더 줄고 반주가 강조됩니다. 값이 너무 낮으면 음질이 저하될 수 있습니다. | 0.1 (기본값) |
-va , --voice_alpha | 보컬 추출용 Blend 비율 (0.0 ~ 3.0). 값이 낮을수록 보컬이 강조됩니다. 값이 너무 낮으면 왜곡이 발생할 수 있습니다. | 1.0 (권장값) |
--blend-mode | 블렌드 방식 (linear , exp , log , power ) | linear (기본값: linear ) |
--demucs-model | Demucs 모델명 (예: htdemucs_ft ) | htdemucs_ft (기본값: htdemucs_ft ) |
--device | 연산 장치 선택 (cpu , cuda , mps ) | 시스템에 따라 자동 선택 |
-T , -t , --thread | 여러 곡을 병렬 처리할 프로세스 수 | 1 (기본값: 1 ) |
--cleanup | Demucs 출력 폴더 삭제 여부 | True 설정 시 삭제 |
--eval | 복원 품질 평가 실행 여부 (MSE, Cosine, STOI) | True 설정 시 실행 |
--convert_to_mp3 | 결과 파일을 MP3로 변환할지 여부 | True 설정 시 변환 |
실행 예시
폴더 전체 처리 (보컬 감쇠 70%, 로그 블렌드 모드):
1
python main.py -i songs/ -a 0.3 --blend-mode log
유튜브 링크 다운로드 후 처리 (보컬 감쇠 85%):
1
python main.py -l https://www.youtube.com/watch?v=xxxx -a 0.15
폴더 전체 처리 및 mp3 변환 + 평가 실행:
1
python main.py -i songs/ --convert_to_mp3 --eval
Apple Silicon(M1/M2)에서 MPS GPU 가속을 활용하여, 다음 명령어는 전체 폴더의 모든 곡을 8개의 병렬 프로세스로 처리하며, 다음 옵션들이 활성화됩니다:
- 사용자 지정 블렌드 설정 (
blend_alpha
,voice_alpha
) - 복원 품질 평가 (MSE, Cosine, STOI)
- MP3 포맷으로 변환
- Demucs 분리 후 임시 파일 정리
1
python main.py -i songs/ -o output/ -t 8 -ba 0.1 -va 1 --cleanup --convert_mp3 --eval --device mps
📌 위 명령어는 songs/
폴더 내 모든 오디오 파일에 대해 보컬 감쇠 및 배경음 보존 처리를 수행하며, output/
폴더에 결과를 저장합니다.
기본 설정 (config.yaml)
별도의 config.yaml
에서 기본값(알파, 블렌드 모드 등)을 설정 가능. 명령줄 옵션이 우선 적용됩니다.
요구사항
- Python >= 3.10
- 필요한 패키지: numpy, librosa, soundfile, demucs, ffmpeg, yt-dlp 등 (Conda 환경 파일
VTrace.yaml
제공)
파일 구조
VTrace/
├── main.py # VTrace 실행 메인 엔트리포인트 (CLI)
├── config_loader.py # config.yaml 로드 및 파라미터 관리
├── logger.py # 로그 설정 및 출력 관리
├── VTrace.yaml # Conda 환경 설정 파일 (의존성 관리)
├── config.yaml # VTrace 기본 설정 (alpha, blend_mode, model 등)
├── README.md # 프로젝트 설명서
├── logs/ # 로그 파일 저장 디렉토리
│
├── processors/ # VTrace 핵심 처리 모듈
│ ├── vtrace_core.py # VTrace 핵심 기능 (Residual Vocal, Phase Cancel, Blend)
│
├── separated/ # Demucs 분리 결과 저장 디렉토리 (vocals.wav, no_vocals.wav)
│
├── audio_utils/ # 오디오 유틸리티 함수 모음
│ ├── alignment.py # 오디오 위상 및 채널 정렬 함수 (align_audio, align_signals)
│ ├── audio_conversion.py # WAV → MP3 변환 함수 (convert_wav_to_mp3)
│ ├── experimental.py # 테스트/실험용 함수 (실험 중인 코드 모음)
│ ├── filters.py # 노이즈 게이트, 필터 처리 (테스트 코드 포함)
│ ├── loudness.py # Gain 조정 관련 함수 (테스트 코드 포함)
│
├── utils/ # 일반 유틸리티 함수 및 평가 모듈
│ ├── evaluate_metrics.py # MSE, Cosine, STOI 평가 메트릭 계산
│ ├── evaluation.py # 평가 파이프라인 관리 (결과 비교, 분석)
│ ├── file_utils.py # 파일/경로 처리 유틸리티 (파일 이름, 경로 등)
│ ├── youtube.py # 유튜브 다운로드 처리 모듈 (yt_dlp 연동)
버전
VTrace 0.6.0 (Dev)
결과물
- 보컬 감쇠 오디오 파일 (
*_blended.wav
,*_instrumental_phase_cancel
) - 추출된 Residual Vocal (
*_vocal_residual.wav
) - (선택) 평가 결과: MSE, Cosine, STOI
향후 계획
Residual Vocal 품질 향상을 위한 후처리 기능 추가
(타이밍 보정 등)일반 사용자용 웹기반 GUI 툴킷 제공(테스트용)
Gradio 또는 Streamlit을 사용한 경량 웹 인터페이스 제공Noise Gate 및 Smoothstep 기반 감쇠 모드 추가
더욱 세밀한 감쇠 효과 구현
🔒 라이선스
MIT License © 2025 JUNHEE LEE
라이브러리/모델 | 라이선스 | 출처 |
---|---|---|
Demucs | MIT | https://github.com/facebookresearch/demucs |