我需要在给定的目录中循环,将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()
目前没有回答
相关问题 更多 >
编程相关推荐