swift 使用Audiokit动态创建MIDI文件

ut6juiuv  于 2023-01-25  发布在  Swift
关注(0)|答案(1)|浏览(150)

bounty将在2天后过期。回答此问题可获得+50声望奖励。Mr_P希望引起更多人对此问题的关注:一定有办法8·)很想解决这个问题

我目前正在使用以下方法播放歌曲中的符干:
1.将stem_01.mp3加载到AKAudioFile中
1.将AKAudioFile添加到AKMIDIS采样器
1.将AKMIDIS采样器添加到AKMixer
1.重复1-3以确定股骨柄数量
1.使用自定义MIDI文件创建AKSequencer:此MIDI文件为歌曲中的每个茎都有一个单独的轨道。MIDI文件中的每个轨道上都有一个音符(在C3上),该音符在歌曲的持续时间内持续。
1.我为每个词干向AKSequencer添加一个新音轨,并使用音序器控制词干的播放
我的问题是:有没有办法自动创建这个MIDI文件。我知道词干的数量,和歌曲的持续时间;我可以动态创建Audiokit启用AKSequencer所需的MIDI文件吗?
任何想法或想法,这是最受欢迎的,因为它将保存大量的手工工作时,添加新的歌曲。😎谢谢!

dced5bon

dced5bon1#

是的,可以自动创建用于AKSequencer的MIDI文件。一种方法是使用MIDI库(如python-midi或mido)编程创建MIDI文件。
下面是一个示例,说明您如何使用python-midi资源库来创建MIDI文件,其中每个词干都有一个单独的轨道,每个轨道上有一个音符,该音符在歌曲的持续时间内持续:

from midiutil import MIDIFile

# Number of stems in the song
num_stems = 5
# Duration of the song in beats
song_duration = 128

# Create a new MIDI file
mf = MIDIFile(num_stems)

# Set the tempo (bpm)
mf.addTempo(0, 0, 120)

# Add a track for each stem
for i in range(num_stems):
    mf.addTrackName(i, 0, "Stem {}".format(i + 1))
    mf.addNote(i, 0, 60, 0, song_duration, 100)

# Write the MIDI file to disk
with open("song.mid", "wb") as outf:
    mf.writeFile(outf)

然后,您可以在AKSequencer中使用创建的song.mid文件,并且可以使用歌曲的茎干数和持续时间作为变量来动态创建midi文件。
也可以使用其他库,如mido、music 21或pretty_midi,它们也支持在Python中创建和编辑MIDI文件。
确保你已经安装并导入了python-midi库。

  • 然而,值得注意的是,示例代码是一个基本示例,它不会涵盖所有可能的情况。还值得使用AKSequencer测试创建的MIDI文件,以确保它在您的特定用例中按预期工作。还值得注意的是,此代码创建了一个MIDI文件,每个音轨上有一个音符事件。这样产生的声音将是单声道而不是复音。如果您想创建更复杂的MIDI文件,您可以添加更多的事件,如和弦、力度和弯曲。*

相关问题