Skip to content

Instantly share code, notes, and snippets.

View bearpelican's full-sized avatar

Andrew Shaw bearpelican

View GitHub Profile
@bearpelican
bearpelican / Roman2Symbol_test_case.ipynb
Created February 28, 2019 23:26
Chord change after adding: `scale = [s+sec_offset for s in scale]`
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
# Data
midi_files = get_files(midi_path, '.mid', recurse=True)
data = MusicDataBunch.from_files(midi_files, data_path, processors=[Midi2ItemProcessor()])
# Model
learn = music_model_learner(data, arch=TransformerXL, config=default_config())
# Train
learn.fit_one_cycle(4)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
f = midi_path/'La Bamba - Ritchie Valen - Chorus.mid'
item = MusicItem.from_file(f, data.vocab)
seed_item = item.trim_to_beat(6); seed_item.show()
pitch_temp, dur_temp = (1.1, 0.4) # Controls amount of prediction randomness
pred, full = learn.predict(seed_item, n_words=400, temperatures=(pitch_temp, dur_temp),
top_k=24, top_p=0.7)
full.show()
# Let's create a partial progression I-V-vi
p = music21.stream.Part()
p.append(music21.chord.Chord('C4 E4 G4', type='half')) # I
p.append(music21.chord.Chord('G3 B3 D4', type='half')) # V
p.append(music21.chord.Chord('A3 C4 E4', type='half')) # vi
s = music21.stream.Score([p])
chord_item = MusicItem.from_stream(s, vocab)
chord_item.show()
_, full = learn.predict(chord_item, n_words=10, temperatures=(0.5,0.5))
full.show()
class MultiTransformer(nn.Module):
"Multitask Transformer for training mask, next word, and sequence 2 sequence"
def __init__(self, encoder, decoder, head, mem_len):
super().__init__()
self.encoder = encoder
self.decoder = decoder
self.head = head
self.default_mem_len = mem_len
self.current_mem_len = None
item = MusicItem.from_file('data/single_bar_example.mid', MusicVocab.create())
item.to_text()
<MidiFile 2 tracks
<MidiTrack 0 -- 44 events
<MidiEvent DeltaTime, t=0, track=0, channel=None>
<MidiEvent SEQUENCE_TRACK_NAME, t=None, track=0, channel=None, data=b'Piano'>
<MidiEvent DeltaTime, t=0, track=0, channel=None>
<MidiEvent PROGRAM_CHANGE, t=None, track=0, channel=1, data=0>
<MidiEvent DeltaTime, t=0, track=0, channel=None>
<MidiEvent PITCH_BEND, t=None, track=0, channel=1, parameter1=0, parameter2=64>
<MidiEvent DeltaTime, t=0, track=0, channel=None>
<MidiEvent PROGRAM_CHANGE, t=None, track=0, channel=1, data=0>