使用Python创建MIDI文件

6 投票
3 回答
9955 浏览
提问于 2025-04-17 01:09

基本上,我想从头开始制作MIDI文件,并把它们放到网上。我对使用不同的编程语言都很开放,但我更喜欢用Python(这两种语言中的一种,如果这有什么区别的话)。我想知道应该用哪个库。提前谢谢你们!

3 个回答

-2

Perl 这个编程语言有一个叫做 MIDI::Simple 的模块。我记得在已经不再出版的《Perl期刊》中看到过一篇关于它的文章:

http://www.foo.be/docs/tpj/issues/vol4_1/tpj0401-0018.html

0

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如说,当你在写代码时,可能会发现某些功能没有按照你的预期工作。这种情况下,很多人会去网上寻找答案,像是在StackOverflow这样的平台上提问。

在提问的时候,最好能把你的问题描述得清楚一些。比如,你可以告诉别人你在做什么,遇到了什么问题,以及你尝试过哪些解决方法。这样,其他人才能更好地理解你的情况,并给出有用的建议。

另外,分享一些代码片段也是很重要的。这样别人可以看到你的代码是怎么写的,可能会更容易找到问题所在。记得把代码格式化好,这样看起来会更清晰。

总之,提问的时候要尽量详细,这样才能提高得到帮助的机会。

from midiutil import MIDIFile

def create_midi(chord_progression, file_name='jazz_piano_progression.mid', tempo=120):
    # Create a MIDI file
    midi = MIDIFile(1)
    midi.addTempo(0, 0, tempo)

    # Define the chords and their durations
    chords = [
        {'pitch': [60, 63, 67, 70], 'duration': 4},  # Cm7
        {'pitch': [65, 68, 72, 75], 'duration': 4},  # Fm7
        {'pitch': [70, 74, 77, 81], 'duration': 4},  # Bb7
        {'pitch': [64, 68, 71, 75], 'duration': 4}   # Ebmaj7
    ]

    time = 0
    for chord in chords:
        for pitch in chord['pitch']:
            midi.addNote(0, 0, pitch, time, chord['duration'], 100)
        time += chord['duration']

    # Save the MIDI file
    with open(file_name, 'wb') as midi_file:
        midi.writeFile(midi_file)

# Generate MIDI file with the specified chord progression
create_midi([{'Cm7': ['C', 'E♭', 'G', 'B♭']},
             {'Fm7': ['F', 'A♭', 'C', 'E♭']},
             {'Bb7': ['B♭', 'D', 'F', 'A♭']},
             {'Ebmaj7': ['E♭', 'G', 'B♭', 'D']}
             ], 'jazz_piano_progression.mid', tempo=120)
9

看起来这就是你想要的内容:

简单的跨平台MIDI库,适用于Python

MidiUtil可以用Python创建MIDI文件。

撰写回答