Week 9: Machine Generated Music
Nov 12, 2018
For the machine generated music assignment, I decided to use LSTM, introduced in class, to train on KPOP boyband songs. For this assigment, I wanted to focus on learning and practicing the flow of creating machine generated music.
When I initially started collecting data for this assignment, I realized that there are not a lot of "clean" midi notations of KPOP music, and the ones that were available for me to download / use on the MuseScore website were heavily based on popularity of certain bands. This is why I decided to use Piano Scribe to generate the midi notes. I ran 100 piano covers of the popular KPOP boyband songs through Piano Scribe. Then, I processed the midi notes in Python using the mido library. The notation that I settled on for each note was in form of
n90v62t2500
where the number after n is the midi note, the number after v is the velocity and the number after t is the start time of the note.
I ran the training model with the following parameters:
--rnn_size 256 --num_layers 2 --seq_length 64 --batch_size 32 --num_epochs 50
Using the trained model, I generated music using different parameters of: length of generation, randomness of seed, total length of generated tokens. After a number of attempts, I realized the model was not "accurate enough" and needed some constraints. I threw away tokens that didn't have all three parameters of midi note, velocity and start time. I also played around with setting constraints for the range of the start time. At first, I tried simple constraint of putting a maximum number for the start time value, then I created an array that would keep track of how many tokens were created for ranges of start times, and limited the maximum number of tokens that could be generated for each time range.
I also then played around with the tempo and the time division when creating the generated tokens back into midi notation.
Below are some of the generations using different parameters:
I then "stylized" the generations by dividing the generations into different C octaves in different channels and playing around with the bar duration fo each of the C-octave channels.
Below track is an experiment I did using different synthesizers.
The conclusion of the experiment of using LSTM model to train on KPOP songs is that 1) KPOP songs are not as "generated" or "automated" as I thought they were OR 2) it is harder than I thought to do an eloquent and accurate ML generation of music.
Complete list of songs used:
- R & V - 4 o’clock
- BTS - I Need U
- Exo - Tempo
- BTOB - Friend
- iKon - Goodbye Road
- BTS - Butterfly
- Seventeen - Mansae
- Got7 - Lullaby
- BTS - Seesaw
- BTS - Ephiphany
- BTS - Love Myself
- BTS - I’m Fine
- BTS - Idol
- Seventeen - A-teen
- Stray kids - My pace
- iKon - Killing me
- Zico - Soulmate
- Seventeen - Our dawn is hotter than day
- Seventeen - Oh my!
- Nuest - Dejavue
- BTOB - Only one for me
- Wanna One - Sandglass
- Wanna One - Light
- BTS - Airplane pt. 2
- BTS - Anpanman
- BTS - Magic Shop
- BTS - Love Maze
- BTS - The Truth Untold
- BTS - Fake Love
- Crush - Bittersweet
- Seventeen - Campfire
- BTS - Singularity
- Pentagon - Shine
- JBJ - Call your name
- BTS - Don’t leave me
- Winner - Everyday
- Wanna One - I’ll remember
- Wanna One - Boomerang
- Big Bang - Flower road
- Wanna One - I Promise U
- BTS - Save Me
- Wanna One - Nothing without you
- Seventeen - Run to you
- Seventeen - Thanks
- iKon - Love Scenario
- JBJ - My Flower
- Infinite - Tell me
- Dean - Instagram
- Exo - Universe
- BTS - Crystal snow
- Pentagon - Like This
- Wanna One - Wanna
- Wanna One - Beautiful
- Seventeen - Without you
- Seventeen - Clap
- JBJ - Fantasy
- Seventeen - Pinwheel
- BTOB - Missing you
- Nuest - Where you at
- Seventeen - Change up
- BTS - Best of Me
- BTS - DNA
- Seventeen - Pretty U
- BTS - Serendipity
- EXO - Power
- EXO - The Eve
- BTS - Love Yourself
- Big Bang - Last dance
- Taeyang - Darling
- Wanna One - Burn it up
- Wanna One - Wanna be
- Wanna One - Energetic
- Winner - Love me love me
- Nuest - Daybreak
- Nuest - If you
- Nuest - Hello
- Nuest - Love paint
- Exo - Ko ko bop
- Exo - Monster
- G-Dragon - Untitled
- Seventeen - Don’t wanna cry
- BTS - Young forever
- Winner - Fool
- Zico - She’s a baby
- Winner - Really really
- BTS - Awake
- BTS - Lost
- Highlight - Plz don’t be sad
- Henry - Girlfriend
- Got7 - Never ever
- BTS - Run
- BTOB - Someday
- BTS - Stigma
- BTS - Wings
- BTS - First Love
- BTS - Lie
- BTS - Spring day
- Block B - Yesterday
- BTS - Butterfly
- BTS - Blood, Sweat, Tears