簡體   English   中英

Music21 Midi錯誤:類型對象'_io.StringIO'沒有屬性'StringIO'。 怎么解決?

[英]Music21 Midi Error: type object '_io.StringIO' has no attribute 'StringIO'. How to fix it?

所以,我已經按照這個問題來播放Music21的聲音了,這里是代碼:

from music21 import *
import random

def main():

#  Set up a detuned piano 
#  (where each key has a random 
#  but consistent detuning from 30 cents flat to sharp)
#  and play a Bach Chorale on it in real time.


    keyDetune = []
    for i in range(0, 127):
        keyDetune.append(random.randint(-30, 30))

    b = corpus.parse('bach/bwv66.6')
    for n in b.flat.notes:
        n.microtone = keyDetune[n.midi]
    sp = midi.realtime.StreamPlayer(b)
    sp.play()

    return 0

if __name__ == '__main__':

    main()

這是追溯:

Traceback (most recent call last):
  File "main.py", line 49, in <module>
    main()
  File "main.py", line 44, in main
    sp.play()
  File "G:\Development\Python Development\Anaconda3\lib\site-packages\music21\mi
di\realtime.py", line 104, in play
    streamStringIOFile = self.getStringIOFile()
  File "G:\Development\Python Development\Anaconda3\lib\site-packages\music21\mi
di\realtime.py", line 110, in getStringIOFile
    return stringIOModule.StringIO(streamMidiWritten)
AttributeError: type object '_io.StringIO' has no attribute 'StringIO'
Press any key to continue . . .

我在Windows 7 x64上運行Python 3.4 x86(Anaconda Distribution)。 我不知道如何解決這個問題(但可能是一些模糊的Python 2.x到Python 3.x不兼容問題, 一如既往

編輯:

我按照答案中的建議編輯了導入,現在我得到了一個TypeError:

在此輸入圖像描述

你建議我做什么作為Music21的“播放音頻”的替代方案? (Fluidsynth或其他任何東西)。

你可能是對的......我認為錯誤可能實際上在Music21中,它處理StringIO

Python 2有StringIO.StringIO ,而

Python 3有io.StringIO

music21\\midi\\realtime.py但是如果你看一下music21\\midi\\realtime.py中的import語句

try:
    import cStringIO as stringIOModule
except ImportError:
    try:
        import StringIO as stringIOModule
    except ImportError:
        from io import StringIO as stringIOModule

最后一行是導入io.StringIO ,因此稍后調用stringIOModule.StringIO()失敗,因為它實際上調用了io.StringIO.StringIO

我會嘗試將import語句編輯為:

    except ImportError:
        import io as stringIOModule

並看看是否修復它。

return stringIOModule.StringIO(streamMidiWritten)AttributeError:type object'_io.StringIO'沒有屬性'StringIO'按任意鍵繼續。

請@Ericsson,只需從返回值中刪除StringIO,就可以了。

它現在將是:return stringIOModule(streamMidiWritten)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM