gpt4 book ai didi

python - 使用 pygame 从流中播放 MIDI 文件

转载 作者:太空宇宙 更新时间:2023-11-04 03:32:11 25 4
gpt4 key购买 nike

我想做的是:创建一个 MIDI 文件,但只在内存中,并将其提供给 pygame.mixer.music.load()。这是我一直在尝试的(我正在使用来自 here 的 MidiFile):

import pygame.mixer
import MidiFile3
import io

pygame.mixer.init()

midi = MidiFile3.MIDIFile(1) # midi file with one track
midi.addTrackName(0,0,"Track 1") #Track Name on track 0, position 0
midi.addTempo(0,0,120) #Tempo to 120 bpm on track 0, position 0

for i in range(8):
midi.addNote(0,0,60,i,1,100) #add 8 c1-notes to the track

bytestream = io.BytesIO()
midi.writeFile(bytestream)
pygame.mixer.music.load(bytestream.getvalue())

这里我得到了错误信息

pygame.error: File path 'MThd' contains null characters

当我这样做

bytestream = open('file.mid','wb')
midi.writeFile(bytestream)
bytestream.close()
pygame.mixer.music.load('file.mid')

它按预期工作。

当然,我知道包含文件名的字符串和包含文件内容的字节串是有区别的。但是我发现了这个 Post on Daniweb它使用字节流,这个例子对我有用。

我只是想不出如何让我的例子发挥作用。

最佳答案

music.load() 函数需要一个文件名或一个文件对象。

bytestream.getvalue()是字节流的内容,看起来像一个文件名。

您必须使用文件/BytesIO 对象本身:

pygame.mixer.music.load(bytestream)

关于python - 使用 pygame 从流中播放 MIDI 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30688179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com