> GAON: Generative AI Offers Notes for your music
Table of Contents
🎵 창작의 순간마다, 당신의 선택이 [음악]이 됩니다.

가온: 음악 창작을 위한 실시간 선율 제안 AI 웹 어플리케이션
or
가온: 가장 어울리는 음으로 온전한 선율을 이어주는 AI 파트너 (HCIK 2025 Capstone Project)
GAON: Generative AI Offers Notes for your music
[!NOTICE]
아주 간혹적으로 사이트에 들어갔지만 모델이 로드가 안되는 경우가 있습니다. 다른 브라우저로 접속해보세요.
또한 프로토타입 단계이기 때문에 각종 버그를 가지고 있을 수 있습니다.
1. 가온 (GAON)?

가온 (GAON)은 딥러닝 기반 음악 언어 모델과 악보 편집 시스템을 결합하여, 사용자가 창작 과정을 주도적으로 진행할 수 있도록 돕는 웹 애플리케이션이다. 기존 AI 기반 음악 생성 모델이 완성된 결과물을 제공하는 반면, 가온은 사용자의 입력을 기반으로 실시간으로 다음 음을 예측하여 선율 창작을 보조하는 방식으로 동작한다.
1.1. 기존 음악 창작 도구와의 차이점
악보 기반의 음악 창작은 디지털 도구의 등장으로 창작 과정의 효율성과 접근성이 크게 향상되었다. MuseScore1, Sibelius2, Dorico3와 같은 전통적인 작곡 소프트웨어는 직관적인 인터페이스를 통해 사용자가 악보에 음표와 음악 기호를 입력하며, 선율과 화성을 시각적으로 조작할 수 있도록 지원해 왔다. 이러한 소프트웨어는 악보 기반 작업 환경을 통해 작곡가와 연주자가 창작 과정을 체계적으로 관리할 수 있게 했다.
한편, AI 기반 음악 창작 도구들은 전통적인 접근 방식을 넘어 새로운 창작 방식을 제시하고 있다. Bach Doodle4은 사용자의 입력을 기반으로 화음을 추가하여 바흐 스타일의 선율로 완성하며, AIVA[^aiva]는 사용자가 설정한 스타일과 조표 등을 기반으로 완성된 음악을 생성한다. 그러나 결과물 중심으로 설계되어 창작 과정 중간에 사용자가 적극적으로 개입하기 어렵고, 특정 스타일에 제한되는 한계를 가지고 있다. 마찬가지로, Six Dragons Fly Again for Web5은 제시된 악보 인터페이스를 통해 사용자가 입력한 음표를 국악풍의 관현악곡으로 변환하지만, 국악이라는 특정 스타일에 국한된 완성된 결과물을 제공한다. Hookpad Aria6와 Flow Machines7는 피아노 롤 기반의 MIDI 형식을 사용해 선율 작곡을 지원하지만, 이는 MIDI 기반의 작업을 주로 진행하는 Logic Pro8 같은 DAW 사용자에게는 친숙할지 몰라도, 악보 입력 및 편집을 선호하는 사용자에게는 직관적이지 않을 수 있다.
1.2. 딥러닝 기반 음악 창작의 새로운 접근

딥러닝 기반 음악 언어 모델과 실시간 악보 편집 시스템을 결합하여, 사용자가 직접 음표를 입력하며 나만의 새로운 음악 선율을 창작할 수 있는 새로운 접근 방식인 웹 기반 애플리케이션 가온 (GAON)을 제안한다. 이는 인공지능의 예측 능력을 활용해 사용자가 창작 과정에 주도적으로 참여할 수 있도록 설계되었다.
특히, 블록형 프로그래밍 언어인 스크래치를 활용한 초등 국악 창작 수업 방안을 제시한 기존 연구9에서 알 수 있듯이, 창작 활동은 음악 교육 현장에서 중요한 역량으로 주목받고 있다. 위 사례를 기반으로 가온은 음악 창작의 직관성과 유연성을 높이는 동시에, 교육적 활용 가능성까지 고려한 실용적인 도구로서 확장된 역할을 수행하고자 한다. 나아가, 인간과 인공지능 간의 새로운 상호작용 방식을 탐구할 기회를 제공함으로써, 음악 창작 및 교육 분야 모두에 기여할 수 있을 것으로 기대된다.
2. 가온 (GAON)의 구성

-
PyTorch 기반 딥러닝 모델을 Open Neural Network Exchange (ONNX) 기반의 모델로 변환
- onnxruntime-web10 라이브러리로 웹브라우저에서 별도의 인퍼런스 서버 없이 직접 인퍼런스 진행
-
Vite11 (웹앱 빌드 도구), React12 (웹 UI 제작 라이브러리), TypeScript[^typescript] (정적 타입 지원으로 코드 안정성 확보) 기반
-
악보 편집 환경 조성, 생성된 악보 렌더링 및 MIDI 재생
2.1. 딥러닝 기반 음악 언어 모델
가온은 VirtuosoTune19을 기반으로 한 음악 언어 모델을 사용했다. 기존 PyTorch20 기반 모델을 ONNX (Open Neural Network Exchange)21 포맷으로 변환하여, 웹 브라우저에서 직접 실행할 수 있도록 설계되었다. GRU 22기반 순환 신경망 모델의 특성상 계산이 현재 스텝에서 다음 스텝으로 순차적으로 진행되기 때문에 실제 사용 환경에서 지연은 거의 느껴지지 않는다. 또한, 서버리스 환경에서 클라이언트 측에서 모든 처리가 이루어지기 때문에 통신 지연이 완전히 제거되어 실시간성이 중요한 음악 창작 과정에서 비효율적이지 않고 작업을 수행할 수 있다.
torch.onnx.export(
onnx_wrapper,
(dummpy_input, dummpy_hidden),
onnx_file_name,
export_params=True,
opset_version=20, # Related to Python version
input_names=['selected_token', 'last_hidden'],
output_names=['prob', 'last_hidden_out'],
dynamic_axes={
'selected_token': {1: 'sequence_length'},
'prob': {1: 'sequence_length'},
}
)
# load onnx model & inference
ort_session = ort.InferenceSession("some_model.onnx")
ort_inputs = {
'selected_token': some_input.numpy(),
'last_hidden': some_hidden.numpy()
}
ort_outs = ort_session.run(None, ort_inputs) # array of [prob, last_hidden_out]
ONNX 모델은 ort_session.run()
을 통해서 기존에 PyTorch 모델의 forward
함수를 호출하는 것과 동일한 결과를 얻는다. 그렇기 때문에 ONNX 형식의 모델로 변환 하여 Inference를 진행해야 하는 가온의 ONNX 모델에서는 기존의 PyTorch 모델의 forward
함수를 사용한 새로운 Wrapper 클래스를 구현하여 Wrapper의 모델을 ONNX로 변환을 진행한다. 이를 통해 ONNX 모델에 입력이 주어졌을 때 Inference 결과를 진행할 수 있도록 하였다.
또한 dynamic_axes
를 통해 입력 토큰의 길이가 가변적일 때 모델의 입력 토큰 길이를 동적으로 조정할 수 있도록 하였다. 이렇게 하면 RNN 기반의 모델에서도 작동할 수 있다.
class ONNXWrapper(nn.Module):
"""
- 단일 스텝 forward로, 배치 크기를 1로 고정
- selected_token은 [1, token_dim] 형태로 입력받고, 내부에서 [1, 1, token_dim]으로 변환
- return: [prob, new_hidden]
"""
def __init__(self, some_model):
super(ONNXWrapper, self).__init__()
self.model = some_model # 이미 학습된 MeasureInfoModel
def forward(self, selected_token: torch.Tensor, last_hidden: torch.Tensor):
"""
Args:
selected_token: [1, 1, token_dim]
last_hidden: [num_layers, 1, hidden_size]
Returns:
prob: [1, 1, total_vocab] -> probability of each token applied softmax
new_hidden: [num_layers, 1, hidden_size] -> updated hidden state of GRU
"""
emb = self.model._get_embedding(selected_token)
hidden, new_hidden = self.model.rnn(emb, last_hidden) # single step forward
logit = self.model.proj(hidden)
prob = self.model._apply_softmax(logit)
return prob, new_hidden
웹 애플리케이션에서는 변환된 ONNX 모델과 [pitch, duration]
형태의 토큰을 활용해 Inference를 진행했다. 웹 애플리케이션은 [pitch, duration]
을 입력으로 받지만 Inference를 위해 header
의 정보를 기반으로 하는 globalCondition
이나 Measure
대한 정보 등의 정보들이 필요하기 때문에 Class 내부에서 필요한 정보들을 처리할 수 있도록 구현했다.
2.2. 웹 애플리케이션에서의 인터페이스

사용자의 입력은 [pitch, duration, offset, slur]
등으로 구성된 Token 형태로 구조화를 진행하였다. 구조화 된 토큰의 집합은 ONNX 딥러닝 모델 인퍼런스, 선율 편집 화면, 악보 렌더링 및 MIDI 재생 등 다양한 기능에 활용된다.
type NoteToken = {
// Note Information
pitch: number, // midi pitch
duration: number,
offset: number,
slur: "none" | "start" | "end" | "continue",
// Score Position
isSelected: boolean,
barIndex: number,
rowIndex: number,
columnIndex: number,
line: number | undefined,
space: number | undefined,
// ...
}
- 선율 편집 환경에서의 smplr -> 현재 선택된 음표의
pitch
이용 - 완성된 악보 렌더링 abcjs ->
[pitch, duration]
이용하여 선율을 ABC 형식으로 변환하고(직접 구현) abcjs를 통해 악보를 렌더링 - ONNX 모델을 활용한 인퍼런스 ->
[pitch, duration]
을 입력으로 하는 ONNX 모델의 Class 활용 slur
프로퍼티를 통해 악보에서 붙임표를 표시할 때 사용
2.2.2. 음표 입력 상호작용
가온 (GAON)은 직관적인 악보 입력 시스템을 제공
사용자는 키보드 방향키 또는 단축키를 이용하여 쉽게 음표를 입력하거나 수정 가능

↑
↓
/W
X
: 음높이 변경←
→
/A
D
: 음표 선택 이동q
e
: 음의 길이 변경[0~9]
: AI 추천 음표 선택z
: 음표 삭제Enter
또는c
: 음표 추가 또는 복제s
: 창작 결과 보기h
: 사용법
MuseScore
처럼 상하좌우 방향키를 사용해 음표를 선택하고 조정할 수 있는 직관적인 방식을 유지하면서도, 별도의 음표 입력 모드 버튼 없이 현재 선택된 음표의 위치에 따라 자동으로 편집 모드 또는 생성 모드로 전환되도록 설계했다. 선택한 음표가 이미 입력된 음표라면 수정 및 복제가 가능하며, 선택한 위치가 입력된 음표 다음이라면 새로운 음표를 선택하고 추가할 수 있다. 이를 통해 사용자는 입력 모드를 전환할 필요 없이 음표 수정 및 추가를 유연하게 수행할 수 있다.
사용자가 작업 방식에 맞게 마우스 혹은 키보드를 입력 도구로 선택하여 효율적으로 음악을 창작할 수 있게 설계했다.
2.2.2. 선율 렌더링

앞서 말했듯이 가온 (GAON)은 abcjs와 smplr를 활용해 사용자의 선율을 처리하여 진행한다. abcjs는 사용자가 입력한 선율을 ABC기보법으로 변환하여 악보를 렌더링하거나 MIDI 파일로 변환하며, 이를 통해 시각적·청각적 피드백을 제공했으며, smplr는 입력된 노트의 피아노 소리를 실시간으로 재생해 사용자와의 상호작용을 지원한다.
이러한 라이브러리를 사용함으로써 애플리케이션에서는 [그림 3]와 같이 입력된 선율을 바탕으로 악보를 시각화하고, 재생 및 저장 기능을 제공한다.
사용자가 마주하게 될 음표 입력 시스템은 입력한 선율에 대한 정보를 추론하거나 악보를 렌더링하는 등 다양한 기능에 용이하게 활용할 수 있도록 직접 구현한 점이 특징이다. 또한 음악 기호 표현은 SMuFL (Standard Music Font Layout)
을 사용하였으며, 사용자가 음을 선택하거나 현재 음표의 높이를 변경할 때 해당 음에 대한 피아노 소리를 제공하여 직관성을 높혔다.
2.2.3. 딥러닝 기반 예측 시스템 적용

ONNX
포맷으로 변환된 딥러닝 기반 음악 언어 모델을 onnxruntime-web
을 활용하여 웹 애플리케이션에서 직접 추론할 수 있도록 구현했다. 사용자가 현재까지 입력한 선율을 기반으로 모델이 예측한 결과 중 확률이 높은 상위 10개를 [그림 4]와 같은 형태로 화면에 표시한다. 이를 통해 사용자는 예측된 음표를 참고하거나 선택하여 창작 과정을 유연하게 이어 나갈 수 있었다.
특히, 예측 음표는 음표 입력창 아래에 나열되어 있으며, 사용자는 해당 음표를 클릭하거나 번호를 키보드로 입력하여 선택할 수 있다. 선택된 음표는 현재 선율 뒤에 자동으로 추가되며, 사용자가 음표를 편집할 경우 수정된 선율에 따라 모델의 예측 결과가 즉각적으로 업데이트되며 실시간으로 애플리케이션과 상호작용이 가능하다.
3. 결론 및 향후 발전 방향
- 사용자의 창의성을 해치지 않는 선에서 AI의 보조로 작곡 능력 향상
- 리코더 및 단소 연주, 가사 창작 연계 등의 방향으로 초·중등 음악 창작 교육 도구로 활용 가능
- 하나의 음을 예측하는 것을 넘어 선율 흐름을 예측하고 근거나 의미를 설명하여 사용자의 음악적 이해도를 향상시킬 수 있는 도구로 발전 가능
딥러닝 기술과 악보 편집 기능을 결합한 웹 애플리케이션, 가온 (GAON)을 개발하여, 인공지능이 보조적인 역할을 통해 사용자가 선율을 완성할 수 있도록 지원하는 새로운 방식을 설계했다. 기존의 완성형 음악 생성 접근법과 달리, 본 시스템은 사용자의 입력에 따라 실시간으로 딥러닝 모델이 예측한 음표들을 제안하며 창작 과정의 직관성과 유연성을 강화했다. 특히, 별도의 서버 없이 웹 브라우저에서 모델을 직접 실행할 수 있도록 설계하여 실시간성과 접근성을 극대화하였으며, 효율적인 음표 입력 시스템을 통해 사용자 경험을 개선할 수 있다.
가온 (GAON)은 서강대학교 아트&테크놀로지 RESEARCH SHOWCASE 2024에서 시연되었으며, 음악 창작뿐만 아니라 음악 교육 및 학습 도구로서도 높은 활용 가능성을 보여주었다. 사용자가 창작 과정에서 주도적으로 참여하고 인공지능이 이를 보조하는 방식을 통해, 사용자가 직관적이고 창의적인 음악 창작 과정을 경험할 수 있었다. 향후 다성부 작곡 지원, 사용자 선호 스타일 반영 등 기능 확장을 통해 음악 창작 및 교육 분야에서 더욱 폭넓은 기여를 할 것으로 기대할 수 있다.
Footnotes
-
C. A. Huang et al., "The Bach Doodle: Approachable music composition with machine learning at scale," ISMIR 2019. ↩
-
D. Han, M. Gotham, D. Kim, H. Park, S. Lee, and D. Jeong, “Six dragons fly again: Reviving 15th-century korean court music with transformers and novel encoding,” in In Proceedings of the 25th International Society for Music Information Retrieval Conference (ISMIR), 2024. ↩
-
C. Donahue, S. Wu, Y. Kim, D. Carlton, R. Miyakawa, and J. Thickstun, “Hookpad Aria: A Copilot for Songwriters,” in In Proceedings of the 25th International Society for Music Information Retrieval Conference (ISMIR), 2024. ↩
-
김경태, “스크래치를 활용한 초등 국악 창작 수업 방안 탐구,” 국악교육연구, vol. 18, pp. 27–50, 2024 ↩
-
Tailwind CSS - Rapidly build modern websites without ever leaving your HTML ↩
-
D. Jeong, “Virtuosotune: Hierarchical melody language model,” IEIE Transactions on Smart Processing & Computing, vol. 12, no. 4, pp. 329–333, 2023. ↩
-
K. Cho, B. van Merriënboer, C. Gulcehre, D. Bah-danau, F. Bougares, H. Schwenk, and Y. Bengio, “Learning phrase representations using RNN encoder–decoder for statistical machine translation,” in Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing (EMNLP). Association for Computational Linguistics, 2014, pp. 1724–1734. ↩