Github:
9/20:
- Research RNNs
- Review PyTorch
10/4:
- Read Articles:
- Set up PyTorch
- To do for next week:
- Set up RNN
- parse through Nottingham Dataset
- set up RNN model
10/11:
- Imported Nottingham Dataset and parse through MIDI Files
- Set up Github repo
- To do for nest week:
- Figure out how to represent MIDI file as integer in order to best feed into an RNN
- Create RNN model
10/18:
- 2 approaches of parsing MIDI files:
- sequence of events
- possible pros:
- more free-form
- can generate own rhythm
- possible cons:
- lack of structured rhythm, e.g. 4/4, 3/4
- note-on/note-off pairs
- can be resolved by passing in notes as events rather than MIDI messages
- sequence of beats
- possible pros:
- possible cons:
- may miss off-beat notes, e.g. read quarter beats, miss some eighth notes
- To do for next week:
- build and train RNN model
- implement beat sequencer
10/25:
- implemented parse by beats
- RNN doesn't work with parsing by notes, elapsed time and note length too large compared to other values
- represented as binary value with 14 bits
- first 7 bits represent the tone
- last 7 bits represent the velocity
- implemented reconstruction
- created RNN model
- trained RNN model
- only train 10 epoch on one file
- files don't contain enough notes
- To do for next week:
- try a fixed velocity?
- ignore rests?
- train on more files and for more epochs
11/1:
- Changed representation of notes
- [note name, octave, length(if parsing by notes)]
- fixed velocity to 90
- Train RNN model
- train by beat
- often get silent MIDI file
- train by notes
- often get a single note that sustains
- Problems:
- RNN doesn't like to change values
- issue with training, works fine when untrained
- Possible fixes:
- backprop is probably sinking the params, choose a different loss function?
- use an optimizer?
- To do for next week:
- fix bugs in training
- different loss function?
- use an optimizer?
- if bugs are fixed, train on a more diverse set of files
Final:
- Somewhat fixed repetitiveness issue:
- still repetitive, but now selects from 3-4 notes instead of one
- with the exception of very low and very high notes, range of notes typically sound good together(not off-key)
- Possible future fixes:
- More complex LSTM
- restrict range of notes: keep around the middle