상세 컨텐츠

본문 제목

노래 음정 분석 웹앱 만들기|음역·피치 정확도 자동 측정

앱 개발

by 뮤네바 2026. 9. 18. 11:09

본문

반응형
SMALL

녹음한 노래를 다시 들으면 ‘뭔가 불안하다’는 느낌은 드는데, 정확히 어느 구간이 흔들렸는지 찾기는 쉽지 않다. 그래서 지금 만들고 있는 Vocal Studio의 첫 기능은 화려한 AI 코치보다 먼저, 노래를 숫자로 확인하는 보컬 분석에 집중했다.

이번 MVP에서 확인하는 것

사용자가 녹음 파일을 올리면 음역, 음정 정확도, 피치 안정성, 약한 구간을 계산한다. 결과 화면에서는 가장 먼저 연습할 한 가지도 함께 보여준다. 한 번에 많은 조언을 늘어놓기보다 다음 녹음에서 바로 고쳐볼 항목 하나를 남기는 방식이다.

분석 과정은 이렇게 구성했다

웹에서 받은 오디오는 먼저 ffprobe로 파일을 확인한다. 이후 FFmpeg로 16kHz 모노 WAV로 바꾸고, 별도의 Python 작업자가 피치를 분석한다. 웹 서버와 분석 작업을 분리한 이유는 긴 음원 때문에 화면이 멈추는 일을 줄이고, 실패한 작업을 다시 처리하기 위해서다.

피치 검출은 NumPy로 구현한 YIN 방식을 사용했다. 생성형 AI가 결과를 추측하게 하기보다, 음정과 음역처럼 측정 가능한 값은 같은 입력에 같은 결과가 나오도록 만드는 편이 낫다고 판단했다. AI는 나중에 결과를 쉬운 말로 설명하는 역할에 더 가깝게 둘 생각이다.

테스트하면서 드러난 한계

깨끗한 사인파 테스트에서는 E2부터 A5까지 중앙 오차가 약 0.02~2.9센트였고 옥타브 오류는 없었다. 잡음비가 20dB와 10dB일 때도 중앙 오차는 각각 약 0.5센트와 4.3센트 수준이었다. 하지만 잡음비 5dB에서는 옥타브 오류가 75%까지 올라갔다. 실제 방에서 녹음할 때 반주와 생활 소음이 너무 크면 결과를 그대로 믿기 어렵다는 뜻이다.

이 실패 수치를 숨기지 않고 녹음 가이드에 반영하려 한다. 마이크를 입에 너무 붙이지 않고, 반주 볼륨을 낮추고, 짧은 구간부터 분석하는 식이다.

약한 구간을 찾는 방법

약한 구간은 두 단계로 나눈다. 먼저 음정이 크게 벗어나거나 흔들림이 큰 프레임을 찾고, 서로 가까운 프레임을 하나의 연습 구간으로 묶는다. 그래야 0.1초 단위의 잘게 쪼개진 경고 대신 “이 부분을 다시 불러보자”는 실제 연습 단위가 된다.

서비스 운영도 함께 고려했다

가입 시 10크레딧을 주고, 분석을 시작한 음원 길이에 따라 크레딧을 차감한다. 작업이 한 번 재시도된 뒤에도 실패하면 자동 환불하도록 기록을 남겼다. 지금은 SQLite와 로컬 저장소로 MVP를 검증하고 있지만, 사용량이 늘면 데이터베이스와 파일 저장소를 분리할 예정이다.

아직 기준 멜로디가 없는 녹음은 가장 가까운 반음 기준으로만 정확도를 계산한다. 리듬 분석과 키 이동 감지는 다음 단계다. 그래도 ‘잘 불렀다/못 불렀다’는 막연한 평가 대신, 다음 연습 지점을 찾는 도구라는 첫 목표에는 조금씩 가까워지고 있다.

반응형
LIST

관련글 더보기