我需要遍历给定的目录,因为将 midi 文件从它们各自的键转换为通用键 (C)。我怎样才能在python中做到这一点?
当前代码:
这将用于转调播放每个 midi 文件的键,以便每个文件都是通用键。这是因为如果每个 MIDI 文件位于不同的键中,模型将输出一个包含听起来不悦耳的指令的 MIDI 文件。
import music21 as m21
import glob
def main():
#Get midi files
fileHandler = FileHandler("./BluesMidi")
nonTransposedMidi = fileHandler.GetSongFromDirectory()
#print(nonProcessedMidi) prints a list of midi files
transposer = TransposeMidiKey(nonTransposedMidi)
transposer.TransposeMidi()
class FileHandler:
#Attributes
songs = []
#Constructor
def __init__(self, filePath):
self._filePath = filePath
#Properties
#Methods
def GetSongFromDirectory(self):
for i in glob.iglob(self._filePath + '/*.mid'):
self.songs.append(i)
return self.songs
def CreateNewTransposedMidi():
pass
class TransposeMidiKey:
#Attributes
#Constructor
def __init__(self, nonTransposedMidi):
self._nonTransposedMidi = nonTransposedMidi
#Properties
#Methods
def TransposeMidi(self):
for i in self._nonTransposedMidi:
# Change midi into stream objects
musicScorData = m21.converter.parse(i)
# Find current key of each midi file
key = musicScorData.analyze('key')
# Print the key and the mode (major or minor)
#print(key.tonic.name, key.mode)
# If the key is already major
if key.mode == 'major':
# Transpose it into the key of C
interval = m21.interval.Interval(key.tonic, m21.pitch.Pitch('C'))
if __name__=='__main__':
main()