Создайте файл MIDI и воспроизводите его, не сохраняя его на диске.

Я нашел этот модуль, который может создавать MIDI-файлы.

Я могу воспроизводить выходной файл, используя pygame mixer.music , но если я пытаюсь играть без сохранения в файл (играть в объект), он не работает, я получаю

pygame.error: Не удалось прочитать из RWops

,

Я пробовал использовать StringIO без успеха. Я получаю ту же ошибку выше.

Кто-нибудь знает какой-либо модуль, который может играть на MIDI-объектах, может быть, создать их тоже?

вы помните, чтобы перемотать свой буфер StringIO?

Я прошел все шаги, которые вы сделали, и получил ту же ошибку. Затем я выследил библиотеку RWops в sourceforge (датирован 2006 годом) и был готов обвинить ее.

то после успеха с объектами в модуле tempfile я попробовал ByteIO из модуля IO. Они оба работали, но я искал (0) с ними перед загрузкой.

Поэтому я вернулся в StringIO и сделал поиск (0) перед загрузкой, и успех!

Вот отредактированная и сжатая модификация образца из midutil:

from midiutil.MidiFile import MIDIFile from StringIO import StringIO # CREATE MEMORY FILE memFile = StringIO() MyMIDI = MIDIFile(1) track = 0 time = 0 channel = 0 pitch = 60 duration = 1 volume = 100 MyMIDI.addTrackName(track,time,"Sample Track") MyMIDI.addTempo(track,time,120) # WRITE A SCALE MyMIDI.addNote(track,channel,pitch,time,duration,volume) for notestep in [2,2,1,2,2,2,1]: time += duration pitch += notestep MyMIDI.addNote(track,channel,pitch,time,duration,volume) MyMIDI.writeFile(memFile) # PLAYBACK import pygame import pygame.mixer from time import sleep pygame.init() pygame.mixer.init() memFile.seek(0) # THIS IS CRITICAL, OTHERWISE YOU GET THAT ERROR! pygame.mixer.music.load(memFile) pygame.mixer.music.play() while pygame.mixer.music.get_busy(): sleep(1) print "Done!"