python - Music21 Python 库将只输出钢琴声音
问题描述
我正在使用 Music21 库,并且希望听到乐器中的每首曲目都应该从我的 jupyter 笔记本(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>
在我的笔记本中,以防其他人遇到此问题。
解决方案
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 文件的库。
推荐阅读
- ios - 触摸图像视图并在固定位置上绕圈移动
- camunda - 使用 Camunda-bpm-reactor 的任务分配电子邮件
- r - 在R bookdown中折叠一般文本
- reactjs - 道具更改后再次反应调用API?
- c# - .net Core 将 csproj 文件解析为对象
- postgresql - 在 postgres 中生成从 0001 到某些东西的系列
- jquery - JQuery numbered ids
- microsoft-graph-api - graph.windows 和 graph.Microsoft 有什么区别
- php - php 二维数组根据key的值进行排序分组
- node.js - 在同一个 Azure Web 应用中部署 Angular 6 应用和 Web API