ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [R] AI기반 작곡 솔루션(AI MUSIC) 재현 05
    Project/AI Music (with R) 2020. 6. 21. 01:31

    목차

     

    서론

     지난 3월부터 시작해서 4월 25일까지 약 2달간 동안 인공지능 작곡 프로그램을 재현하는 프로젝트를 수행하였다. 프로젝트는 Markov Chain을 능동적으로 익히기 위해서 수행했으며, 작곡 프로그램의 End-to-end를 설계하고 개발하는데 그 목적을 가지고 있다. 프로젝트 명칭은 AI기반 작곡 솔루션(AI MUSIC) 재현으로 하였으며, 총 5차례에 걸쳐 블로그에 설명을 나누고 있다. 이번 프로젝트를 수행하는 동안 오픈소스인 R을 활용했으며, 총 4개의 라이브러리(tuneR, showtext, ggolot2, gganimate)를 활용했다. 작곡 솔루션 AI MUSIC은 <그림 1>과 같이 Modeling 프로세스와 Compose 프로세스로 구성되어 있는데, 이는 지난 재현 02 ~ 03을 통해 설명했다. 재현 4에서는 기계음을 처리하는 방법을 제시하였고, 이번 마지막 재현에서는 화음의 활용 방안을 제시하며 프로젝트를 마무리하려고 한다.

     

    <그림 1> Markov Chain 기반 AI Composer(By Jay Data Graph)

    화음(Chord)이란?

     음악에서 높이가 다른 두 음이 동시에 울려서 발생하는 합성음으로, 단조로운 멜로디를 풍성하게하는 효과를 가지고 있다. 이러한 화음은 음을 겹치를 방법에 따라 작곡가로 하여금 자유롭게 구성할 수 있으나, 유럽의 음악사에서 사용한 것은 3개의 음을 겹친 3화음(Triad)이다. 특히, 이번 솔루션에 일반인들이 이해하기 쉬운 다이아토닉 코드(Diatonic Chord)를 기준으로 화음을 적용했다. 다이아토닉 코드는 특정 음계를 정하고, 이를 바탕으로 3도씩 쌓아 올린 형태이다. 규칙성이 쉽기 때문에 코딩으로 표현하기도 쉽다.

    <그림 2> 주요 3화음(장3화음, 단3화음, 감3화음, 증3화음)

     

     기본적으로 3화음은 화음의 기초가 되는 밑음, 3도위의 음을 제 3음 그리고 5도 위의 음을 제5음으로 구성된다. C Major triad는 도(C), 미(E), 솔(G)로 구성되어 있다. 규칙성이 반복되도록 C장조의 음계를 기준으로 화음을 생성하게 되면, 아래의 <그림 3>과 같이 C, Dm, Em, F, G, Am, Bdim의 화음을 구성할 수 있다.

    <그림 3> Chords in the keys of C major and D major

     

    화음(Chord) 적용하기

     화음을 구성하는 방식은 Modeling Process에서 생성한 Markov Chain 모형을 바탕으로 Compose Process에서 기본 멜로디를 1차로 추출한다. 이때 생성되는 멜로디는 단음으로 구성되어 있기 때문에, 소리의 풍성함을 주기 위해 화음을 적용하기로 하였다. 

     

     화음을 적용하기에 앞서 기본이 되는 base와 제 3음인 third 그리고 제 5음인 fifth까지를 하나로 구성하는 함수를 구현해두었다. 아래의 코드는 함수의 주요 내용으로 3화음을 구성하는 로직이다.

      base_id = set_note$id
      base = note_table[note_table$id == base_id,]
      third = note_table[note_table$id == base_id + 2,]
      fifth = note_table[note_table$id == base_id + 4,]
      chord = rbind(base, third, fifth)

     

     이를 바탕으로 구성한 결과가 아래의 Peaceful Feeling이라는 곡이다.

    <영상 1> Peaceful Feeling(Composed by Jay Data Graph)

    결론

     여느 프로젝트와 마찬가지로 데이터 사이언티스트들은 도메인을 이해하는 것이 가장 중요하다고 느껴지는 순간이다. AI를 이용한 작곡 솔루션을 재현하기 위해선 음악적 지식이 기초해야한다. 이를 위해서는 피아노 악보를 읽는 방법도 필요하고, 화음도 이해할 필요가 있었다. 또한, 피아노의 소리를 내기 위해 파이노의 소리 파동을 이해는 것 역시 필요했다. 프로젝트를 진행하는 과정에서 도메인을 이해하는 것 만큼 작곡 솔루션 재현을 위한 라이브러리를 발견하고 적용하는 것 역시 쉽지 않았다. 마지막으로 학습 데이터를 수집하는 과정이 정말 어려웠다. 악보를 직접 읽어서 노트를 작성하고 이를 바탕으로 예측 모델을 생성한다.

     

     향후에는 이러한 이슈들을 해결하기 위해서, 이미지 처리(Image Processing)을 활용한 악보를 자동으로 전환하는 모듈을 개발할 필요가 있다. 또한, 현재 작곡에는 박자를 수정하거나 화음을 좀 더 다체롭게 보완하기 위한 모듈이 필요하다. 마지막으로, 다른 알고리즘을 활용한 작곡 솔루션을 구성하여 AI 작곡에 적용하기 위한 최적 알고리즘을 도출할 필요가 있다.

     

     본 프로젝트를 통해 AI 작곡에 대한 이해를 제공하고, 향후 다른 알고리즘을 적용하여 AI 작곡을 하기 위한 초석으로 사용될 것을 기대한다.

    <그림 4> Jay Data Graph 링크

     

    Reference

     tuneR, https://cran.r-project.org/web/packages/tuneR/index.html

     showtext, https://cran.r-project.org/web/packages/showtext/index.html

     ggplot2, https://cran.r-project.org/web/packages/ggplot2/index.html

     gganimate, https://cran.r-project.org/web/packages/gganimate/index.html  

     3화음, https://ko.wikipedia.org/wiki/3%ED%99%94%EC%9D%8C

     C장조와 D장조의 3도 화음, http://www.opentextbooks.org.hk/ditatopic/2350

     Peaceful feeling, youtu.be/F87jc7tWAbk

     

     

    댓글

Designed by Tistory.