Skip to content

Instantly share code, notes, and snippets.

@gpirrotta
Last active October 15, 2022 17:15
Show Gist options
  • Save gpirrotta/7ff1956e3e410c521d4976427debf5d7 to your computer and use it in GitHub Desktop.
Save gpirrotta/7ff1956e3e410c521d4976427debf5d7 to your computer and use it in GitHub Desktop.
CAD-Piano data sonification
import partitura.score as score
import partitura
import pandas as pd
part = score.Part('P0', 'Piano', quarter_duration=1250)
source =pd.read_csv('../data/gitdiff.csv')
first_song = source[source['data']=='2005-03-07']
len_song = first_song.shape[0]
half_len = int(len_song/2)
left_hand = first_song.iloc[:half_len, :].values
right_hand = first_song.iloc[half_len:, :].values
map_notes_left = {
0: {'step':'C', 'octave':4},1:{'step':'D', 'octave':4}, 2:{'step':'E', 'octave':4}, 3:{'step':'F', 'octave':4},
4:{'step':'G', 'octave':4}, 5:{'step':'A', 'octave':4}, 6:{'step':'B', 'octave':4}, 7:{'step':'C', 'octave':5},
8:{'step':'E', 'octave':5}, 9:{'step':'E', 'octave':5}, 10:{'step':'F', 'octave':5}, 11:{'step':'G', 'octave':5},
12:{'step':'A', 'octave':5}, 13:{'step':'B', 'octave':5}
}
map_notes_right = {
0: {'step':'C', 'octave':6}, 1:{'step':'D', 'octave':6}, 2:{'step':'E', 'octave':6}, 3:{'step':'F', 'octave':6},
4:{'step':'G', 'octave':6}, 5:{'step':'A', 'octave':6}, 6:{'step':'B', 'octave':6}, 7:{'step':'C', 'octave':7},
8:{'step':'E', 'octave':7}, 9:{'step':'E', 'octave':7}, 10:{'step':'F', 'octave':7}, 11:{'step':'G', 'octave':7},
12:{'step':'A', 'octave':7}, 13:{'step':'B', 'octave':7}
}
part.add(score.TimeSignature(4, 4), start=0)
start_left = 0
end_left = 0
start_right = 0
end_right = 0
for left in left_hand:
real_note_left = int(left[3]) % 14
mapping_left = map_notes_left[real_note_left]
end_left = end_left + left[4]
part.add(score.Note(id='n0', step=mapping_left['step'], octave=mapping_left['octave'], voice=1), start=start_left, end=end_left)
start_left = end_left
for right in right_hand:
real_note_right = int(right[3]) % 14
mapping_right = map_notes_right[real_note_right]
end_right = end_right + right[4]
part.add(score.Note(id='n0', step=mapping_right['step'], octave=mapping_right['octave'], voice=2), start=start_right, end=end_right)
start_right = end_right
partitura.save_score_midi(part, '../sounds/cad-piano.mid')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment