- 이전글
[작곡 인공지능 개발기] 5. LSTM 모델을 이용한 작곡 - 1
5. LSTM 모델을 이용한 작곡 - 1 에서 LSTM 모델을 이용한 작곡코드의 구현에 성공했다.
그렇게 학습된 모델에 랜덤 노트를 입력하여 출력된 미디파일을 얻을 수 있었다.
LSTM 모델로 생성한 4곡을 원곡과 비교하며 들어보자.
주로 템포가 빠르고 다양한 음역대를 가진 피아노 곡을 선정하였는데, 그 이유는 후술한다.
원곡과 생성된 미디파일의 비교
1. Beethoven: Moonlight Sonata 3rd Movement
(학습시간 : 약 4시간 반 소요)
- 원곡
- 생성된 곡
2. Rave Cyanide × Lunatic Sounds - Lost in the nowhere
(학습시간: 약 59분 소요)
- 원곡
- 생성된 곡
3. Xi vs ICE - Scherzo -pain in rain-
(학습시간 : 약 2시간 40분 소요)
- 원곡
- 생성된 곡
4. Dream - Rabpit
(학습시간 : 약 15분 소요)
- 원곡
- 생성된 곡
대중가요도 학습을 시켜보기는 했는데, 보통 특정 멜로디가 반복되는 단조로운 구조인 경우가 많아서 그런지 괜찮다 싶은 음악이 잘 나오지는 않았다. 미디파일 구하기가 어렵기도 하고.
위 곡들 중 상대적으로 많이 단조로운 4번째곡인 dream의 경우에서 이런 경우를 볼 수 있다.
학습시간이 약 15분 정도로 짧았고, 결과가 그리 좋지 못했다.
그래서 템포가 빠르고 옥타브 범위가 크며 길이가 있는 피아노 곡들을 학습시켰더니 내 딴에는 괜찮은 곡이 나온 것 같다.
그만큼 학습시간은 확실히 오래 걸리는 것 같다. 몇시간은 기본으로 가져가는 듯 하다.
한계점 및 추후에 개선하고 싶은 것들:
일단 첫째로 지금의 코드에서는 노트의 박자가 고정되어 있고, 쉼표가 들어가지 않는다.
사실 의도한 것인데, 이는 학습시간이 너무 길어지는 것을 방지하기 위해서 였다.
노트에 대한 배열과 박자에 대한 배열을 모두 입력하게 된다면 정말 오래 걸릴 것 같다.
이는 단순히 성능 좋은 컴퓨터를 활용하는 것으로 개선할 수 있기는 하다ㅋㅋㅋㅋ
둘째로, 음악의 시작과 끝이 구분되지 않는다.
일반적으로 음악작곡시 시작과 끝에서 사용하는 방식이 있을 것이다.
하지만 이를 어떻게 코드로 구현할지 감이 잘 안와서 하지 못하였다.
이는 음악공부와 ML공부를 모두 더 해봐야 해결이 가능할 것 같다.
추후에 스타일이 일정한 한 작곡가의 곡들의 미디파일을 구하고 한꺼번에 학습시킨다면,
학습된 모델로 그 스타일의 곡들을 찍어낼 수 있을 것 같아 해보려한다.
이렇게 하면 단조로운 곡을 학습한 모델이 같은 음만 반복해서 출력하는 문제도 해결할 수 있지 않을까 싶다.
그나저나 자동 작곡 알고리즘을 리듬게임에 넣어보고 싶다고 생각했었는데, 노트북으로 돌려도 몇 시간 걸리는 걸 모바일 환경에서 하기는
힘들 것 같다.
모바일 게임 유저층은 짧은 시간내에 즐길 수 있는 특유의 간편함 때문에 모바일 게임을 하는 경우가 많기 때문이다.
그래도 한 10년 뒤에 속도가 빨라져서 가능하려나?
음악성을 포기한다면 당장도 가능할거 같기는 한데, 그러면 할 이유가 없지 않나 싶다.