Music21 Python 库将只输出钢琴声音

Posted

技术标签:

【中文标题】Music21 Python 库将只输出钢琴声音【英文标题】:Music21 Python Library will only output Piano sounds 【发布时间】:2019-08-11 20:28:45 【问题描述】:

我正在使用 Music21 库,并且希望听到乐器中的每首曲目都应该在我的 jupyter notebook (IPython) 中播放。

我可以成功地将不同曲目上的音乐输出到一个midi文件并通过胆怯播放,但我无法从IPython播放器中听到除了钢琴(midiProgram = 0)之外的任何曲目。

我目前在 Ubuntu 18.04 上使用 music21 v5.7.0。我还能够在我的 Mac 系统上复制它。

我尝试将流写入 MIDI 文件而不是在笔记本中显示,但我只能听到生成的 MIDI 文件中调整后的乐器。

from music21 import *

core_corp = corpus.corpora.CoreCorpus()
bach_piece = core_corp.search('bwv120.8-a')[0].parse()

bach_piece.show("midi")

for el in bach_piece.recurse():
    if 'Instrument' in el.classes:
        el.activeSite.replace(el, instrument.Trumpet())

bach_piece.show("midi")

我希望在第二个 show() 调用中听到所有小号声音,但仍然只能听到钢琴。但是,当我使用胆怯打开生成的 MIDI 文件时,我可以听到它们都是喇叭声。

挖掘了一些源代码,我希望它与由javascript生成的midiPlayer或base64编码的midi文件的解码有关,但我在这里没有任何专业知识。

任何帮助将不胜感激,我目前的解决方法就是使用

!timidity <path to file>

在我的笔记本中,以防其他人遇到此问题。

【问题讨论】:

midi 播放器可能没有正确加载小号乐器——您可能需要在 music21j 中指定。下一个版本的music21将会有一个全新的MIDI播放器,基于新的midicube.js播放,所以等待它工作的时间不会太长。 很高兴听到,谢谢@MichaelScottCuthbert! 【参考方案1】:

Jupyter Notebook 的 MIDI 播放器有问题,而不是 Music21。当您使用正确的 MIDI 播放器编写和播放 MIDI 文件时,您可以听到所有乐器的声音。 用于编写 MIDI 文件:

stream1 = converter.parse('d:/musicxml_folder/Rondo_Alla_Turca.xml')
stream1.write('midi', 'd:/musicxml_folder/Rondo_Alla_Turca.mid')

为了播放 MIDI 文件,我使用 Windows Media Player。当我在 Pycharm IDE 中这样做时

stream1.show('midi')

Windows 媒体播放器打开。如果您想在另一个环境中听到 MIDI 文件的声音,您可以使用可以播放 MIDI 文件的库。

【讨论】:

以上是关于Music21 Python 库将只输出钢琴声音的主要内容,如果未能解决你的问题,请参考以下文章

如何从 music21 乐谱中获取所有钢琴部分?

music21:从平面乐谱中获取 midi 声音的声音/程序/乐器?

music21 :给定 midi 输入,输出正确拼写的音高和八度数

C# Winform 程序 使用电脑自带的喇叭,输出报警声?

PortAudio:通过调用函数播放多个生成的声音

电钢琴 琴键上所有的sol和ci没有声音