MidiFrames class¶
[1]:
import miditapyr
import subprocess
Create an object of class MidiFrames¶
First define the path where the file is stored. We’ll use the one in the package. But you can also pass your own:
[2]:
test_mid = miditapyr.get_test_midi_file(as_string=True)
Create an object mf of class MidiFrames by reading in the test midi file from the package:
[3]:
mf = miditapyr.MidiFrames(test_mid)
Modify midi data¶
Define function to set the volume of the notes to the maximum (127):
[4]:
def mod_fun(df):
df.loc[df['velocity'] >= 0, 'velocity'] = 127
return df
modify unnested midi frame:
[5]:
midi_frame_unnested_mod = mod_fun(mf.midi_frame_unnested.df)
Update the midi_frame_unnested attribute of mf:
[6]:
mf.midi_frame_unnested.update_unnested_mf(midi_frame_unnested_mod)
mf.midi_frame_unnested.df
[6]:
| i_track | meta | type | name | time | note | velocity | channel | tempo | numerator | denominator | clocks_per_click | notated_32nd_notes_per_beat | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | True | track_name | drum-t1-1-t1 | 0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| 1 | 0 | False | note_on | NaN | 0 | 43.0 | 127.0 | 9.0 | NaN | NaN | NaN | NaN | NaN |
| 2 | 0 | False | note_on | NaN | 0 | 39.0 | 127.0 | 9.0 | NaN | NaN | NaN | NaN | NaN |
| 3 | 0 | False | note_on | NaN | 0 | 36.0 | 127.0 | 9.0 | NaN | NaN | NaN | NaN | NaN |
| 4 | 0 | True | set_tempo | NaN | 0 | NaN | NaN | NaN | 666666.0 | NaN | NaN | NaN | NaN |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 263 | 2 | False | note_off | NaN | 31 | 59.0 | 127.0 | 15.0 | NaN | NaN | NaN | NaN | NaN |
| 264 | 2 | False | note_off | NaN | 9 | 67.0 | 127.0 | 15.0 | NaN | NaN | NaN | NaN | NaN |
| 265 | 2 | False | note_on | NaN | 266 | 62.0 | 127.0 | 15.0 | NaN | NaN | NaN | NaN | NaN |
| 266 | 2 | False | note_off | NaN | 5 | 62.0 | 127.0 | 15.0 | NaN | NaN | NaN | NaN | NaN |
| 267 | 2 | True | end_of_track | NaN | 1 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
268 rows × 13 columns
All the velocities were set to 127.
Write back to midi file¶
By calling write_file() a modified midi file will be created with the passed file name string:
[7]:
mf.write_file('test_out_file.mid')
We’ll transform the file to wav and mp3. By uncommenting the second line of the first command you can use an sf2 soundfont file:
[8]:
%%script false --no-raise-error
# (hack to not run this cell)
# save to wav:
subprocess.run(['fluidsynth',
# '/path/to/your/sounfont/file.sf2',
'-F',
'test_out_file.wav',
'test_out_file.mid'])
# transform wav to mp3:
subprocess.run(['lame',
'test_out_file.wav',
'test_out_file.mp3'])
[10]:
import IPython
IPython.display.Audio(url = 'https://raw.githubusercontent.com/urswilke/miditapyr/master/docs/source/notebooks/test_out_file.mp3')
[10]: