> Six Dragons Fly Again: 인터랙티브 웹 어플리케이션
Table of Contents
💡 For the English version of this post, please refer to the link.
Abstract
Six Dragons Fly Again은 15세기 한국 궁중 음악 중 전승이 끊긴 치화평과 취풍형을 복원하고 공유하기 위해 연구된 딥러닝 모델이다. 그리고 우리는 이를 보여주는 생성 모델을 갖춘 인터랙티브 웹 어플리케이션을 완성했다. 모델 연구 프로젝트는 15세기 멜로디를 부활시키는 데 초점을 맞추는 동안, 우리의 웹 어플리케이션 프로젝트는 웹 데모를 통해 사용자가 자신의 멜로디를 입력하고 한국 전통 음악 합주곡을 만들 수 있는 것에 초점을 맞추었다. 인터랙티브 웹 어플리케이션은 웹 인터페이스, API 서버 및 추론 서버 세 가지 구성 요소로 이루어져 있다. Six Dragons Fly Again 모델의 참조 코드를 기반으로 새로운 음표 입력 인터페이스, 생성 요청을 위한 대기열 시스템 및 인퍼런스 서버를 구현했다. 이를 통해 전 세계 연구자들이 우리의 인터랙티브 웹 어플리케이션을 통해 한국 전통 음악을 생성함으로써 한국 전통 음악을 탐구할 수 있게 되었다.
1. Introduction
🐉 Six Dragons Fly Again:
Reviving 15th-Century Korean Court Music with Transformers and Novel Encoding
15세기 《용비어천가》 기반의 궁중 음악 중 전승이 끊긴 취풍형을 딥러닝을 통해 연주 가능한 합주곡으로 복원
-
《용비어천가》기반으로 노래하여 추는 춤인 〈봉래의 (鳳來儀)〉는 〈여민락〉, 〈치화평〉 그리고 〈취풍형〉이 존재
- 여민락 (與民樂): 백성과 함께 즐기다
- 치화평 (致和平): 평화를 이룩하다
- 취풍형 (醉豊亨): 풍요를 누린다
- 세종대왕의 애민 정신이 담긴 음악, 15세기에 제작
-
현대까지 악곡이 전승이 된 〈여민락〉과 달리 〈치화평〉과 〈취풍형〉은 《세종실록악보》에서 노래 악보만 남아있는 상태
-
광학 인식 기술 (Optical Music Recognition, OMR)로 악보를 학습, Transformer 기반의 딥러닝 모델을 통해 〈치화평〉과 〈취풍형〉을 연주 가능한 합주곡으로 복원하는 프로젝트를 진행
- 〈치화평〉과 〈취풍형〉의 정간보 악보를 토대로 주선율인 피리 선율을 먼저 생성한 이후 피리 선율을 바탕으로 대금, 해금, 피리,아쟁, 가야금, 거문고의 악기 선율을 완성
- 모델에 대한 자세한 내용은 다음 논문(Six Dragons Fly Again: Reviving 15th-Century Korean Court Music with Transformers and Novel Encoding)을 참고하면 좋다!
국립 국악원 프로젝트로 시작
세계적인 음악정보검색 학회인 2024 ISMIR Conference에서 베스트 페이퍼 후보로 선정 (11월 논문 발표 예정)
2024년 6월 2일 국립국악원 풍류사랑방에서 〈인공지능 고음악 복원 성과 발표 및 시연회〉 진행
2024년 5월 14일 세종대왕 탄신 기념으로 경복궁에서 국립 국악원의 연주와 함께 AI로 복원한 치화평 · 취풍형 초연
2. Interactive Web Application
[Six Dragons Fly Again for Web: Interactive Web Application]
인터랙티브 웹 어플리케이션 제작 전담: Web Application, API Server 그리고 Inference Server 제작 및 배포
전세계의 연구자 등이 인터랙티브한 웹 어플리케이션을 통해서 궁중 음악을 생성해보며 한국 전통 음악을 탐구할 수 있는 기회 제공
- six-dragons-fly-again.site을 통해 웹 어플리케이션을 이용할 수 있다.
2.1 Related Work and Motivation
2.1.1. Bach Doodles
- MIR (Music Information Retrieval) 분야에서 한 획을 그었다고 생각하는 웹 어플리케이션은 바로 'Bach Doodles'이라 생각한다.
- 구글에서 만든 이 웹 데모든 바흐의 탄생일인 3월 21을 맞이해 2019년에 구글 마젠타의 'Coconet'을 활용해 제작한 웹 어플리케이션
Bach Doodles Features
- 바흐가 작곡한 306편의 악곡을 기반으로 사용자의 입력 멜로디의 패턴을 인식해 어울리는 바흐 풍의 화음을 만들어내는 기능
- 쉬운 악보 입력 인터페이스
- MIDI 파일 / 오디오 파일로 다운로드 가능
2.2. Features of Six Dragons Fly Again for Web
피리 선율을 입력받아 정악풍의 선율로 변환하고, 대금, 피리, 해금, 아쟁, 가야금 그리고 거문고까지 6개의 악기에 대한 합주 선율을 생성 결과를 제공하는 웹 어플리케이션
- 마우스와 키보드로 악보를 입력할 수 있는 인터페이스
- 3/8박자로 이루어진 선율에서 생성을 위해 10개의 마디를 4번 반복하여 입력하는 기능과 40개의 마디를 작성하는 기능을 제공
- 선율 생성 결과를
.mid
형식의 MIDI 악보 파일로 다운로드 가능 - 선율 생성 결과를 웹 어플리케이션에서 들어볼 수 있는 기능
3. Methodology
- Inference Server: Python, PyTorch + FastAPI ➡️ Beam Cloud 배포
- Inference Server에 사용되는 딥러닝 모델의 선율 생성 기능은 모델 연구진의 코드를 활용하여 진행
- API Server: Go + Gin ➡️ docker를 사용하여 fly.io 배포
- Web Application: Vite, React, TypeScript, TailwindCSS + abcjs ➡️ Vercel 배포
3.1. Web Application
Vite, React, TypeScript + abcjs
➡️ Vercel에 배포
3.1.1 SMuFL 기반 음표 입력 인터페이스
- 기존의 음표 입력 라이브러리를 사용하지 않고 오선줄부터 붙임줄까지 직접 구현
- 간결한 UI를 가지고 사용이 쉽거나 입력한 결과에 대해
[Index, MIDI Pitch, Duration]
형태로 편히 바꿀 수 있는 라이브러리가 없다 생각하여 기존의 라이브러리를 열심히 고치는 것 보다는 직접 구현하는 방향으로 진행
- 간결한 UI를 가지고 사용이 쉽거나 입력한 결과에 대해
- 음악 기호 표현은 SMuFL (Standard Music Font Layout)과 'Bravura Font' 사용
- 음표나 높은음자리표 등의 음악 기호는 직접 배치
- 정악에 사용되는 음계가 정해져있기 때문에 사용할 수 있는 음정을 표시하여 사용자가 인지할 수 있도록 함
- 현재 마디를 넘어가는 음표에 대해 음표의 길이를 나누고 마디 건너서 붙임줄로 표시하는 기능 추가
- 음표를 입력한 데이터는
[Index, MIDI Pitch, Duration]
형태로도 저장
3.1.2 마우스와 키보드를 이용한 악보 입력
- 마우스로 음표를 클릭하거나 키보드로 음표를 있도록 설계
- 사용법(How to Use)을 통해 사용자가 사용법을 익힐 수 있도록 기능을 추가
3.1.3 선율 생성을 돕는 현재 입력한 박자와 마디 수 표시
- 기본 선율 생성을 위해서는 3/8박자에서의 10마디, 총 8분음표 30개(
♪×30
)가 필요하기 때문에 현재 입력한 박자와 마디 수를 표기하는 기능 제공- 기본 선율 생성 (
×4
): 10마디를 4번 반복하여 진행 - 확장 선율 생성 (
×1
): 40마디를 작성하여 진행
- 기본 선율 생성 (
3.1.4 합주 선율 생성 결과 악보 생성 및 MIDI 파일과 미리듣기 제공
-
abcjs를 사용하여 악보를 표기하고, MIDI 파일을 생성하여 들을 수 있도록 함
- 음표에 대해 악보를 표시하고 MIDI Sound를 제공하는 라이브러리는
abcjs
가 제일 적합하다고 판단 - 라이브러리를 사용하기 위해서는 알파벳과 숫자 그리고 특수 문자로 이루어진 abc 표기법의 악보가 필요함
- 음표에 대해 악보를 표시하고 MIDI Sound를 제공하는 라이브러리는
-
입력을 통해 얻게 되는 생성된 선율의 결과는
[Index, MIDI Pitch, Duration]
을 가진 배열의 형태- 이를 위해 생성 결과를
abc 표기법
으로 변환하는 함수 작성하여abcjs
를 통해 악보를 표시하고 MIDI 파일을 생성하여 들을 수 있도록 함
- 이를 위해 생성 결과를
abcjs
에서는.mid
파일로 저장할 때30/8
박자를 지원하지 않아 기본 박자인4/4
박자로 변환되어 저장
3.2. API Server
Go + Gin
➡️ docker를 사용하여 fly.io에 배포
3.2.1. Why Go? & 대기열 및 예상 소요시간 제공 시스템
- 기존에는 Python 기반의 Inference Server와 Web Application이 존재했었다.
- Inference Server를 무료 티어로 사용하고 있는데, 동시에 여러 생성 요청을 처리할 때 하나 빼고 다른 요청이 대기열에 들어가는 문제가 발생
- 얼마만큼 기다려야 하는지에 대한 정보를 사용자에게 제공하지 않아 사용자가 불편함을 느낄 수 있다고 생각이 들었음
∴ 대기열의 순번과 예상 소요시간을 제공하는 API Server를 만들어 사용자에게 정보를 제공하기로 결정
- Python에서
asyncio
와 같은 라이브러리를 이용해서 새로 서버를 추가하지 않고 서버를 구축할 수도 있었지만, 제출 기한이 존재하는 시간 문제상 기존에 알고 있던 Go의 멀티스레딩을 활용하기로 결정
3.2.2. Features
- Web Application에서 생성 요청을 받아 Inference Server로 전달
- JWT를 사용하여 사용자 인증 (이용자마다 새로운 JWT를 발급하는 방식이 아닌 고정된 JWT를 사용)
- 생성 요청마다 고유의
JobID
를 갖고 대기열에 추가, 대기열의 순번과 예상 소요시간을 제공- Web Application에서는 1초마다 API Server에 요청을 보내 예상 소요시간을 업데이트하며 현재 대기열의 정보를 받아옴
- 현재 생성 차례가 되면 Inference Server로 전달하고 결과를 받아 Web Application으로 전달
- 기다리던 사용자가 생성 요청을 취소하면 대기열에서 제거 (2024/10)
- 기존의
Channel
을 사용한 방식에서 대기열Job
을 제거하는 방식보다는Context
를 사용하여 취소하는 방식으로 변경
- 기존의
- 웹 프레임워크 없이 구현 ➡️ Gin을 사용하여 API Server 재구축 (2024/10)
- fly.io 배포를 위해 Dockerfile 작성
3.3. Inference Server
Python, PyTorch + FastAPI
➡️ Beam Cloud에 배포
- Web Application에서온
[Index, MIDI Pitch, Duration]
정보를 이용해 해당 음악 생성 모델이 사용하는 ‘Jeonggan-like Encoding’ 방식을 따를 수 있도록 변환 과정 진행 - Inference Server에 사용되는 딥러닝 모델의 선율 생성 기능은 모델 연구진의 코드를 활용
- 모델이
[Index, MIDI Pitch, Duration]
형태의 데이터를 입력으로 받아[Index, MIDI Pitch, Duration]
형태의 데이터를 출력으로 내보내는 형태로 구성
- 모델이
- 10(
15)시간의 무료 티어를 제공하는 Beam Cloud사용- 배포 서비스가 v1에서 v2로 업데이트되면서 기존의 배포 정보를 사용할 수 없어 새롭게 배포 진행 (2024/10)
3.4. Enhanced User Experience
UX 디자이너와 협업하여 더 직관적인 UI 적용으로 사용자 경험을 개선
4. Conclusion
'Six Dragons Fly Again' 프로젝트는 인공지능이 문화를 의미 있게 보존하는 방법을 보여준다. 광학 음악 인식(OMR)과 Transformer 기반 딥러닝 모델을 사용하여 15세기 한국 궁중 음악을 재현하고 전 세계 사람들이 인터랙티브 웹 사이트를 통해 탐색할 수 있도록 만들었다. 이 어플리케이션은 연구자 등의 사용자에게 15세기 궁중 음악의 버전을 즉시 탐색하고 만들 수 있는 독특한 기회를 제공한다. 한국의 음악 유산에 대해 더 많이 배우면 사용자는 이러한 역사적 작품을 다시 살려내는 데 적극적으로 참여할 수 있을 것이다.
이 프로젝트가 사용자 중심의 인터랙티브한 경험을 통해 역사 음악에 대한 접근성과 흥미를 높이고 문화유산에 대한 깊은 감상과 이해를 증진할 수 있다는 것을 보여줌으로써 향후 AI 기반 문화 보존에 대한 방법에 영감을 주기를 바란다.