ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [R] AI기반 작곡 솔루션(AI MUSIC) 재현 03
    Project/AI Music (with R) 2020. 5. 31. 02:56


    목차



    서론


     두 차례에 걸쳐 AI기반 작곡 솔루션에 대한 이론과 Markov Chain Model 기반의 인공지능 작곡 솔루션(AI MUSIC) 연구 모형의 모델을 생성하는 과정을 살펴보았다. Markov Chain 기반 AI Composer 연구모형에 대한 간단한 리뷰를 하자면, <그림 1>과 같이 모델을 생성하는 과정(Modeling Process)과 모델을 기반으로 작곡을 하는 과정(Compose Process)으로 구성되어 있다. 지난번에 이어 세번째로 소개하고자 하는 부분은 생성된 모델을 기반으로 작곡하는 과정을 재현하고자 한다.


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



    Modeling Process


     비행기를 기반으로 Markov Chain Model을 구성한 결과는 <그림 2>와 같다. Matrix의 왼쪽 label은 현재 상태를 의미하고, Matrix의 상단 label은 미래 상태를 의미한다. 

    # 악보를 계이름과 박자로 변환
    # airplane = list(c("4E","3/16"),c("4D","1/16"), c("4C","1/8"), c("4D","1/8"),
    #                 c("4E","1/8"), c("4E","1/8"), c("4E","1/4"),
    #                 c("4D","1/8"), c("4D","1/8"), c("4D","1/4"),
    #                 c("4E","1/8"), c("4E","1/8"), c("4E","1/4"),
    #                 c("4E","3/16"),c("4D","1/16"), c("4C","1/8"), c("4D","1/8"),
    #                 c("4E","1/8"), c("4E","1/8"), c("4E","1/4"),
    #                 c("4D","1/8"), c("4D","1/8"), c("4E","3/16"), c("4D","1/16"),
    #                 c("4C","1/2"))
    


     

     

     음정

    박자 


    <그림 2> "비행기"의 계이름과 박자를 기반으로 구성한 Matrix


     첫번째 행의 첫번째 열은 4C(4옥타브 도)가 나왔을 경우 4C가 온 경우가 4회 발생되었다는 것을 의미한다. 이를 이용해서 다음 멜로디가 어떤 계이름과 반자를 가지고 있을지 예측하는 Markov Chain Model이 생성된다. 다음은, 해당 모델이 나오도록 생성한 스크립트이다.

    •  vec1은 음정을 예측하는 확률 매트릭스
    # vec1 = data.frame()
    # # for(i in 1:(length(airplane)-1)) # { # s_sca = data.frame(table(airplane[[i]][1], # airplane[[i+1]][1])) # vec1 = rbind(vec1, s_sca)
    # } # # vec1 = data.frame(matrix(table(vec1), nrow = nrow(table(vec1)),
    # byrow = T, # dimnames = list(rownames(table(vec1)),colnames(table(vec1)))), # stringAsFactors = F)
    •  vec2는 박자를 예측하는 확률 매트릭스
    # vec2 = data.frame()
    # # for(i in 1:(length(airplane)-1)) # { # s_sca = data.frame(table(airplane[[i]][2], # airplane[[i+1]][2])) # vec2 = rbind(vec2, s_sca)
    # } # # vec2 = data.frame(matrix(table(vec2), nrow = nrow(table(vec2)),
    # byrow = T, # dimnames = list(rownames(table(vec2)),colnames(table(vec2)))), # stringAsFactors = F)


    Compose Process


     인공지능 작곡 솔루션(AI MUSIC)을 재현하기 위한 과정 중에서 Modeling Process 과정을 수행하며, 확률 모형을 구성하였다. 이를 바탕으로 우리는 멜로디를 예측하는 로직을 구현할 필요가 있으며, 이러한 과정을 Compose Process라고 한다. 다음은 Modeling Process를 기반으로 시작점을 입력하여 다음에 올 음정을 추출하는 로직이다.

    # 시작점 설정(음정과 박자)
    # start = c("4C", "1/16")
    # # 첫 음으로 다음에 올 음정 예측
    # vec1_prob = vec1[rownames(vec1)==start[1],]
    # # colnames(vec1_prob) = gsub("X","", colnames(vec1_prob)) # colnames(vec1_prob) = gsub("\\.","#",colnames(vec1_prob)) # # if(nrow(vec1_prob)>0){ # sum_prob = sum(vec1_prob) # prob_list = unlist(vec1_prob/sum_prob) # next_sca = sample(1:ncol(vec1), # size = 1, # replace = F, # prob = prob_list) # }else next_sca = sample(1:ncol(vec1), # size = 1, # replace = F)


     음정과 함께 오게될 박자 역시 예측이 필요하기에 다음과 같은 로직을 사용한다.

    # vec2_prob = vec2[rownames(vec2)==start[2],]
    # colnames(vec2_prob) = gsub("X","", colnames(vec2_prob))
    # colnames(vec2_prob) = gsub("\\.","/",colnames(vec2_prob))
    #
    #
    # if(nrow(vec2_prob)>0){
    #    sum_prob = sum(vec2_prob)
    #    prob_list = unlist(vec2_prob/sum_prob)
    #    next_dura = sample(1:ncol(vec2),
    #                       size = 1,
    #                       replace = F,
    #                       prob = prob_list)
    # }else next_dura = sample(1:ncol(vec2),
    #                          size = 1,
    #                          replace = F)


     최종적으로 음과 박자를 예측한 결과물을 조합해서 나온 결과는 다음과 같다. 들리는 소리가 다소 불편할 수 있으며, 이는 기본적으로 기계음의 파동을 그대로 사용하고 있기 때문이다. 이는 파동의 형태를 변형하는 과정에서 개선이 가능하다.


    <그림 3> Modeling Process와 Compose Process를 지나 생성된 영상



    Lesson Learned


     인공지능 작곡 솔루션(AI MUSIC)을 재현하기 위한 과정 중에서 Compose Process를 소개했다. 이를 위해 R을 활용해서 AI Composer를 재연한 소스 코드를 리뷰하였다. 지난 두 게시물에서 작곡 솔루션을 이해하기 위한한 이해와 모델에 대해 설명했으며, Markov Chain 기반 AI Composer의 Modeling Process를 재연하는 과정을 설명했다. 이번 게시물에서는 앞선 모델을 기반으로 작곡하기 위한 모듈을 소개했다. 현재까지 작업한 영상은 아래의 <그림 4>를 클릭하면 Youtube로 연결된다.

     Modeling Process를 구성하기 위해서 데이터를 수집해야하나, 음악에 대한 저작권에 대한 이슈는 계속해서 남아있다. 저작권은 저작자의 사후 70년까지 보장하고 있어서 대부분의 클래식 음악의 저작권은 소멸되어있으나, 새롭게 편곡하여 지휘를 하거나 편곡을 하면 새로운 저작권이 탄생되고, 이러한 과정에 따라 새로운 저작권이 탄생된다. 이를 저작인접권이라고 하며, 관련된 이해관계가 필요하다.


    <그림 4> Jay Data Graph 링크



    Reference

     국가법령정보센터, "저작권법", http://www.law.go.kr/lsInfoP.do?lsiSeq=211523&efYd=20200527#0000, 법령, 2020-05

     대구콘서트하우스, "클래식 음악 상식 :: 클래식음악에도 저작권이 있을까요?", https://blog.naver.com/citizen77_/221881156535, 블로그, 2020-03

     Jay Data Graph, "AI Music - Single Melody", https://youtu.be/q77JuP4iYVY, Youtube, 2020-03


    댓글

Designed by Tistory.