[AI랑] 작곡 (1)
위의 코드를 사용해 Pysynth, Pyknon, 마르코프 체인을 사용하여 들려준 음악과 비슷하게 작곡을 하도록 시켜보았으나, 인공지능에게 음악을 들려줄 때 Matrix 형태로 음계를 다 입력해야 하고(두 번째 이미지의 song 부분) 또 우리가 원하는 학습 진행이 어려운 관계로 구글에서 제공하는 Magenta를 사용하기로 했다.
Megenta 사용
magenta/magenta
Magenta: Music and Art Generation with Machine Intelligence - magenta/magenta
github.com
마젠타는 학습이 완료된 다양한 모델을 제공하고 있지만, AI랑은 곡의 장르가 동요로 좁혀져있는 만큼 수집한 데이터셋(MIDI 파일)을 기반으로 Melody RNN을 학습시키고자 한다.
Building your Dataset
github.com/magenta/magenta/blob/master/magenta/scripts/README.md
magenta/magenta
Magenta: Music and Art Generation with Machine Intelligence - magenta/magenta
github.com
마젠타는 MIDI 파일이 아닌 NoteSequence라는 데이터 포맷을 사용한다. NoteSequence는 빠르고 효율적인 프로토콜 버퍼로, MIDI 파일보다 사용하기 쉽다고 한다. 따라서 이전에 수집한 약 120곡 가량의 MIDI 파일을 NoteSequences 파일 형식으로 변환하고, 이를 훈련시키고자 한다.
이 프로젝트는 사용자에게 분위기를 입력받은 후에 그에 맞는 동요를 제공해줄 예정이므로, 훈련 데이터셋을 3가지 분위기로 나누었다. 그리고 이를 위의 코드를 참조하여 NoteSequences로 바꾼다.
다음 커맨드를 사용하면 (여기서 input_dir은 미디 파일이 들어있는 폴더) notesequences.tfrecord 파일이 tmp 디렉토리 안에 생성된다. *프로젝트가 포함되어 있는 루트 디렉토리에서 돌려야함
convert_dir_to_note_sequences \
--input_dir=DIRECTORY/CONTAINING/MIDI/FILES \
--output_file=tmp/notesequences.tfrecord \
--recursive
그러면 다음과 같은 오류가 뜨면서 convert_dir_note_sequences에 빨간 줄이 생긴다...
File "<ipython-input-8-f8fb97ccb972>", line 9
convert_dir_to_note_sequences --input_dir=INPUT_DIRECTORY --output_file=SEQUENCES_TFRECORD --recursive ^ SyntaxError: can't assign to operator
이 부분을 해결하면 이후에 노트 시퀀스로 eval_ratio를 0.1로 둔 상태에서 예제를 생성할 것이다. 이후엔 훈련시키는 일만 남았다.