Skip to content

Karaoke Song Recommendation Service based on Timbre and Vocal Range : CAU 2024-1 Capstone Design(2)

Notifications You must be signed in to change notification settings

devJS00/cansingtone-be

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CanSingTone🎤

image

👩🏻‍💻 프로젝트 소개

사용자의 음색과 음역대를 분석하여 부르기 좋은 노래를 추천해주는 앱 서비스

2023 제1회 CAU LINC3.0 캡스톤디자인 경진대회 창업/로컬 부문 본선 진출 및 수상작

  • 중앙대학교 2024-1 캡스톤디자인(2) 프로젝트
  • 진행 기간 : 2024.3.7 ~ 2024.6.14
  • 사용자 매뉴얼 : CanSingTone_manual.pdf

👥 팀 구성

양석환 이의섭 이지수
@ysshwan147 @CHICHIT @devJS00
AI FE BE, DB, Design

🛠️ 기술 스택

BE

Spring IntelliJ IDEA MySQL AWS Swagger

FE

Flutter Dart Android Studio Figma

AI

TensorFlow

Collaboration

GitHub Notion


👷 시스템 아키텍처

image

💾 DB 구조

image

📄 API 문서

스크린샷_14-7-2024_010_15 165 137 141


📱 화면 구성

로그인 및 튜토리얼 페이지

로그인 성별 선택 선호장르 선택

메인 페이지

메인 페이지 상단 메인 페이지 하단

검색 및 플레이리스트 페이지

검색 플레이리스트

추천 페이지

테스트 전 테스트 후
음색 테스트 음색 데이터 처리 음색 추천 상세 음색 관리
음역대 테스트 음역대 데이터 전송 음역대 테스트 결과 음역대 추천 상세
종합 추천 상세

곡 상세정보 페이지

곡 상세정보 상단 곡 상세정보 하단

⚙️기능 설명

여러 사람들과 노래방에 갔을 때 음역대나 음색이 본인과 맞지 않은 노래를 선택하여 부르다가 민망함을 느끼거나, 부를 노래가 떠오르지 않아 급하게 검색해본 경험은 누구나 있을 것입니다. 노래 부르는 것을 즐기지만 본인에게 맞는 노래를 찾기 어려워 매번 부르는 노래만 부르는 사람들도 많습니다. CanSingTone 프로젝트는 노래방에서 부를 곡을 선택하는 과정에서 발생하는 불편함을 해소하고, 사용자들이 노래를 더욱 자유롭게 즐길 수 있는 기회를 제공하고자 합니다.

1️⃣ 사용자 보컬 맞춤형 노래 추천

image

사용자의 음성 데이터에 대해서 MIDI 변환으로 음역대를 분석하는 방식으로 음역대 기반 추천을, Mel-Spectrogram과 CRNN 기반의 네트워크 모델로 음색을 분석하여 유사도가 높은 노래를 반환하는 방식으로 음색 기반 추천을 제공합니다. 그리고 두 가지 추천 결과에 더해 content-based한 사용자의 취향 및 피드백을 추가로 고려한 종합 추천까지 총 세 가지 타입의 추천 서비스를 제공합니다.

음역대 기반 추천

사용자는 음색 기반 추천을 받기 위해 음색 테스트를 진행, 자유롭게 자신의 목소리를 녹음합니다. 서버로 전송된 녹음 파일은 우선 Mel-spectrogram 형태로 변환됩니다. Mel-spectrogram은 시간에 따라 서로 다른 주파수에서 달라지는 신호의 진폭을 시각적으로 나타낸 것입니다. 특정 시간 구간에서 주파수와 진폭이 기록되어 있기 때문에 소리의 파형, 즉 음색의 특징을 효과적으로 분석할 수 있는 형태라고 할 수 있습니다. 이 Mel-spectrogram을 AI 모델의 입력으로 넣으면 음색 유사도가 높은 노래들이 출력으로 나옵니다. 이 노래들을 음색 기반 추천으로서 제공합니다.

음색 기반 추천

사용자는 음색 기반 추천을 받기 위해 음색 테스트를 진행, 자유롭게 자신의 목소리를 녹음합니다. 서버로 전송된 녹음 파일은 우선 Mel-spectrogram 형태로 변환됩니다. Mel-spectrogram은 시간에 따라 서로 다른 주파수에서 달라지는 신호의 진폭을 시각적으로 나타낸 것입니다. 특정 시간 구간에서 주파수와 진폭이 기록되어 있기 때문에 소리의 파형, 즉 음색의 특징을 효과적으로 분석할 수 있는 형태라고 할 수 있습니다. 이 Mel-spectrogram을 AI 모델의 입력으로 넣으면 음색 유사도가 높은 노래들이 출력으로 나옵니다. 이 노래들을 음색 기반 추천으로서 제공합니다.

image

AI 모델은 사람의 고유한 특징이라고 볼 수 있는 음색을 분석하기 위해 가수 분류 모델을 활용하였습니다.[3] 해당 모델의 입출력 형태를 수정하여 음색 유사도를 확인하는데 사용할 수 있도록 하였습니다. 우선 MR 분리를 통해 목소리만 입력으로 사용될 수 있도록 했고, 가창 등장 부분 분리를 통해 노이즈를 최소화하였습니다. 또한 이는 모든 시간에서 목소리가 있기에 5초 단위로 slice를 하는 것을 가능케 했고, 5초 단위의 slice를 하나의 입력으로 사용함으로써 ‘노래’의 특징이 아닌 ‘목소리(음색)'의 특징에 집중할 수 있도록 했습니다. 이러한 입력 데이터로 모델을 학습시켜 음색에 따른 분류를 수행할 수 있도록 했습니다.

종합 추천

사용자의 플레이리스트에 있는 곡, 좋아요를 누른 곡들과 유사한 노래들을 확인합니다. 이는 사용자의 취향에 기반한 추천 곡 목록입니다. 이 목록과 음색 기반 추천곡 목록을 가중치를 주고 믹스합니다. 음역대와 선호 장르, 성별 등 사용자의 정보를 기반으로 필터링을 거쳐 최종 추천 결과를 사용자에게 제공합니다.

2️⃣ 차트 및 음역대가 비슷한 이용자들의 플레이리스트

메인 페이지의 상단에는 배너 광고를, 그 아래에 노래방 인기곡 차트와 사용자의 나이대, 성별 등을 고려한 맞춤형 차트 등을 제공합니다. 노래방 인기곡 순위는 TJ 미디어에서, 사용자 맞춤형 차트를 위한 곡 정보는 네이버 VIBE에서 크롤링해 사용합니다. 메인 페이지의 하단에 ’나와 음역대가 비슷한 유저의 플레이리스트‘를 제공합니다. 해당 플레이리스트는 사용자 음역대의 최고음과 최저음의 ±2 범위에 있는 음역대를 가진 유저들의 플레이리스트 중, 공개 상태인 플레이리스트를 랜덤으로 선정하는 방식으로 가져옵니다.

3️⃣플레이리스트

사용자가 원하는 대로 음악을 폴더에 담아 플레이리스트를 만들 수 있으며, 이를 다른 사용자와 공유할 수도 있습니다. 사용자의 '좋아요 표시한 음악' 리스트는 추천 시스템의 정확도를 높이고, 추천 리스트를 지속적으로 업데이트하는 데 활용됩니다.

4️⃣ 곡 상세정보 및 키 조정 가이드

차트, 플레이리스트, 추천 리스트 등에서 곡을 클릭하면 곡의 상세정보를 확인할 수 있습니다. 곡 제목, 아티스트, 노래방 번호 등과 함께 음원 영상, MR 영상이 제공됩니다. 또한 곡 상세정보 페이지에서 사용자가 본인의 음역대에 맞게 곡의 키를 조정하는 방법을 알려주는 가이드를 제공합니다. 키 조정 가이드의 기준은 다음과 같습니다:

  • 사용자의 음역대가 곡의 음역 내에 위치하면 음역대에 잘 맞는 곡으로 안내합니다.
  • 곡의 최고음이 사용자의 최고음보다 높은 경우, ∣곡의 최고음 – 사용자의 최고음∣만큼 키를 낮추도록 안내합니다. 단, 키를 낯췄을 때 곡의 최저음이 사용자의 최저음보다 낮아진다면 키 조정이 어려운 노래로 안내합니다.
  • 곡의 최저음이 사용자의 최저음보다 낮은 경우, ∣사용자의 최저음 – 곡의 최저음∣만큼 키를 높이도록 안내합니다. 단, 키를 높였을 때 곡의 최고음이 사용자의 최고음보다 높아진다면 키 조정이 어려운 노래로 안내합니다.

5️⃣ 곡 검색

곡에 대한 키워드 검색 및 필터링 기능을 제공합니다.

About

Karaoke Song Recommendation Service based on Timbre and Vocal Range : CAU 2024-1 Capstone Design(2)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%