Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python midi从midi中提取鼓音符_Python_Midi - Fatal编程技术网

使用python midi从midi中提取鼓音符

使用python midi从midi中提取鼓音符,python,midi,Python,Midi,我正在尝试读取一个midi文件,并仅使用python midi生成另一个带有鼓音符的midi。代码如下: pattern = midi.read_midifile(IN_PATH+file) out_p = midi.Pattern() out_t = midi.Track() out_p.append(out_t) for track in pattern: for e in track: if not(isinstance(e, midi.NoteEvent

我正在尝试读取一个midi文件,并仅使用python midi生成另一个带有鼓音符的midi。代码如下:

 pattern = midi.read_midifile(IN_PATH+file)

 out_p = midi.Pattern() 
 out_t = midi.Track()  
 out_p.append(out_t)

 for track in pattern:
 for e in track:
      if not(isinstance(e, midi.NoteEvent) and e.channel!=9):
             out_t.append(e)

  eot = midi.EndOfTrackEvent(tick=1)
  out_t.append(eot)

  midi.write_midifile(OUT_PATH+file, out_p)
基本上,我只是附加鼓音符和其他MIDI事件。但是,移动其他音符会导致一些计时问题,因为当我将鼓音符加载到DAW上时,它们似乎与网格不对齐。我试过使用
模式。使_ticks\u abs
无效


如何在没有计时问题的情况下删除不需要的音符?

有相反的问题,删除所有鼓线,但解决方案是(使用漂亮的midi)


希望这是适合某人的可接受解决方案

是否要将所有曲目合并到单个输出曲目中?不一定
import pretty_midi as pm

sound = pm.PrettyMIDI("MyMidiSong.midi")

# check all songs, remove the not in case you want to remove all drums
# instead of including all drums
drum_instruments_index = [i for i, inst in enumerate(sound.instruments) if not inst.is_drum]
# remove all non drums, from the sorted such that no conflicting indexes
for i in sorted(drum_instruments_index, reverse=True):
    del sound.instruments[i]
sound.write('MyDrumOnlyMidi.midi')