프론트엔드와 백엔드로 분리된 노래방 음정 점수 측정 시스템입니다.
music_score/
├── app.py # 백엔드 서버 (Flask)
├── requirements.txt # Python 패키지 의존성
├── README.md # 이 파일
├── templates/ # HTML 템플릿 (Jinja2)
│ └── index.html
└── static/ # 정적 파일 (CSS, JS, 이미지 등)
├── css/
│ └── style.css
├── js/
│ └── script.js
└── assets/
└── music1.mp4
python -m venv venvWindows (PowerShell):
venv\Scripts\activateWindows (Git Bash):
source venv/Scripts/activateMac/Linux:
source venv/bin/activatepip install -r requirements.txt음악 파일을 분석하여 타임라인별 목표 음정 데이터를 생성해야 합니다:
python analyze_music.py이 스크립트는 static/assets/music1.mp4를 분석하여 static/assets/music_pitch_data.json 파일을 생성합니다.
python app.py서버가 정상적으로 실행되면 다음 메시지가 출력됩니다:
* Running on http://127.0.0.1:5000
서버가 실행되면 브라우저에서 다음 주소로 접속하세요:
http://localhost:5000
- 브라우저에서
http://localhost:5000접속 - "시작" 버튼 클릭
- 마이크 권한 허용 (브라우저에서 권한 요청 팝업이 나타남)
- 음악이 재생되면서 실시간으로 음정 점수가 측정됩니다
- "중지" 버튼으로 중단, "리셋" 버튼으로 초기화
음정 분석 및 점수 계산
Request Body:
{
"audioData": [0.1, 0.2, 0.3, ...], # Float32Array를 배열로 변환
"sampleRate": 44100,
"targetPitch": 440 # 옵션: 목표 음정 (Hz)
}Response:
{
"success": true,
"userPitch": 440,
"targetPitch": 440,
"score": 100,
"accuracy": 100
}- Python 3.8+ - 프로그래밍 언어
- Flask - 웹 서버 프레임워크
- Flask-CORS - Cross-Origin Resource Sharing 처리
- NumPy - 수치 연산
- SciPy - 과학 계산 (신호 처리)
- HTML5 - 마크업
- CSS3 - 스타일링
- JavaScript (Vanilla) - 클라이언트 사이드 로직
- Web Audio API - 오디오 처리 및 분석
- 🎵 음악 파일 재생 (MP4)
- 🎤 실시간 마이크 입력
- 🔊 실시간 음정 분석 (Autocorrelation 알고리즘)
- 📊 원본 음악과 사용자 음성의 음정 비교
- 🎯 센트 단위 기반 점수 계산
- 📈 실시간 피치 그래프 시각화
- 🎨 노래방 스타일 UI
- Python 3.8 이상 버전 필요
- 최신 브라우저(Chrome, Edge, Firefox)에서 사용 권장
- HTTPS 또는 localhost 환경에서 마이크 접근 가능
- 마이크 권한이 필요합니다
- 브라우저 개발자 도구 열기 (F12)
- Console 탭 확인
- "시작" 버튼 클릭
- 콘솔에 나타나는 메시지/에러 확인
콘솔에서 확인할 내용:
- "시작 버튼 클릭됨" 메시지가 나타나는지
- 에러 메시지가 있는지
- "getUserMedia 호출 중..." 이후 무슨 일이 일어나는지
Chrome:
- 주소창 왼쪽의 자물쇠 아이콘 클릭
- "사이트 설정" 클릭
- "마이크" 옵션을 **"허용"**으로 변경
- 페이지 새로고침 (F5)
전역 Chrome 설정:
chrome://settings/content/microphone접속- "사이트에서 마이크 사용 전에 권한 요청" 체크 확인
- Windows 설정 (Win + I) > 개인 정보 > 마이크
- "앱이 마이크에 액세스하도록 허용" 활성화
- "마이크에 액세스할 수 있는 앱 선택"에서 Chrome 확인
TROUBLESHOOTING.md 파일을 참고하세요.
librosa 설치에 문제가 있는 경우:
pip install --upgrade pip
pip install librosa또는 librosa 없이도 작동하도록 requirements.txt에서 제거 가능합니다 (현재 코드는 librosa를 사용하지 않음).