<p>所以,我按照<a href="https://stackoverflow.com/questions/10983462/how-can-i-produce-real-time-audio-output-from-music-made-with-music21">this question</a>来播放<a href="http://web.mit.edu/music21/" rel="nofollow noreferrer">Music21</a>的声音,下面是代码:</p>
<pre><code>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.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(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()
</code></pre>
<p>这是回溯:</p>
<pre><code>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 . . .
</code></pre>
<p>我在Windows 7 x64上运行Python 3.4x86(Anaconda发行版)。我不知道如何解决这个问题(但可能是一些晦涩难懂的Python2.x到Python3.x不兼容问题,<em>一如既往地</em>)</p>
<p>编辑:</p>
<p>我已经按照答案中的建议编辑了导入,现在出现了一个TypeError:</p>
<p><img src="https://i.stack.imgur.com/u9PTF.png" alt="enter image description here"/></p>
<p>你建议我做什么来代替Music21的“播放音频”?(Fluidsynth或其他任何东西)。</p>