我想将音乐包添加到anaconda解释器.我正在使用ubuntu 14.04 64bit.我从anaconda云下载了music21-1.9.3.tar.gz.我将它解压缩到anaconda3/pkgs
ext installer.py music21 PKG-INFO setup.cfg
installer.command MANIFEST.in music21.egg-info README.md setup.py
Run Code Online (Sandbox Code Playgroud)
我在网上什么都没发现,或者没有用.我该如何安装?
我正在尝试实现一个读取 MIDI 文件并将其写回的代码。
我有以下代码来解析持续时间、音调和位置。
import music21
from music21 import *
piece=converter.parse('input.mid')
all_parts=[]
for part in piece.parts:
part_tuples=[]
try:
track_name = part[0].bestName()
except AttributeError:
track_name = 'None'
part_tuples.append(track_name)
for event in part:
for y in event.contextSites():
if y[0] is part:
offset=y[1]
if getattr(event,'isNote',None) and event.isNote:
part_tuples.append([event.quarterLength,event.pitch.midi,offset])
if getattr(event,'isRest',None) and event.isRest:
part_tuples.append([event.quarterLength,'Rest',offset])
all_parts.append(part_tuples)
Run Code Online (Sandbox Code Playgroud)
然后我进行一些转换并将其写回文件,如果音高为 -1 ('isRest') 则扩展 t (所有音符的力度设置为 90):
mt = midi.MidiTrack(1)
t=0
tLast=0
for d,p,v in converted_notes:
if p!=-1:
dt = midi.DeltaTime(mt)
dt.time = t-tLast
#add to track events
mt.events.append(dt) …
Run Code Online (Sandbox Code Playgroud) 是否有指定这应该是一个Python包可选依赖的方式被默认安装的pip
,但对于其安装不应该被认为是失败,如果不能安装它们?
我知道我可以指定install_requires
使用可以轻松安装某些可选依赖项的操作系统的90%用户安装软件包,我也知道我可以指定extra_require
用户可以声明他们想要完整安装来获取这些软件包功能,但我还没有找到一种方法来进行默认pip
安装尝试安装软件包,但如果无法安装则不会抱怨.
(我想要更新setuptools
和setup.py
for 的特定包被称为music21
95%的工具可以在没有matplotlib,IPython,scipy,pygame,一些模糊的音频工具等的情况下运行但是如果这些包有额外的能力和速度安装了软件包,我宁愿让人们默认拥有这些功能,但如果无法安装则不报告错误)
我一直在尝试加载一个 MusicXML 文件,对其进行编辑(删除几个部分),并创建一个 PDF 工作表文档 + midi/mp3,所有这些都使用 Python。
我首先查看了music21
,这会正确加载我的 MusicXML 文件,但据我所知,不会输出正确的文件(输出文件中的所有详细信息都消失了,剩下的只是注释和标题)
然后我发现abjad
这看起来很有希望。它确实输出了高质量的 ly/pdf 文件,但没有导入 musicxml。
然后,我发现Lilypond带有musicxml2ly
脚本。我能够调用它并使用sh
(很棒的lib!)在python中获取结果lilypond文件,但是abjad
lilypond
解析器不会解析它(文档说它解析lilypond的“大子集”,没有更多的精度)。
最后,我发现music21
有一个 abjad python 对象的导出器,但它似乎不再出现在代码库中,并且导出器的源代码显然只是导出了注释。
我有点别无选择,我能做些什么来实现这些目标?
(补充一点:我仍然不知道如何做第二部分,使用声音字体转到 midi/mp3,但这可能不是最难的部分。有什么建议吗?)
我试图获取所有带有持续时间(度量)的笔记。
from music21 import *
allBach = corpus.search('bach')
x = allBach[0]
p = x.parse()
partStream = p.parts.stream()
for n in p.pitches:
print "Pitch: " + str(n)
print "*************"
for n in p.notes:
print "Note: " + str(n)
#print "Duration " + str(x.parse().duration)
Run Code Online (Sandbox Code Playgroud)
上面的代码产生以下输出
Pitch: E5
Pitch: G5
Pitch: A5
Pitch: D5
Pitch: F#5
Pitch: A5
Pitch: D5
Pitch: F#5
Pitch: A5
Pitch: C6
Pitch: G4
Pitch: B4
Pitch: D5
*************
Run Code Online (Sandbox Code Playgroud)
我知道音高只是带有八度音程的音符的名称,但我试图通过其持续时间(小节)获得音符值。
另外,如果你能帮我解决这个问题,你能不能解释一下为什么 p.notes 什么都不返回。谢谢你。
是否有函数或简单的方法将流转置为给定的键?
我想在循环中使用它,例如,采用一组主要流并将所有这些流转置为 C 大调(这样我就可以对它们进行一些统计工作)。
我看到的所有移调工具都适用于音程或音调数量,而不是固定调。编写我的函数不应该那么难,但我想它必须已经完成了......谢谢
自从我开始阅读“用计算机制作音乐:Python 中的创意编程”这本书已经有几个星期了,现在我在尝试用这个库播放鼓声时陷入困境。我正在使用 Mit 的 music21 库,因为书中提出的库对我不起作用(简称为“音乐”)。这是本书用来播放低音鼓声音的代码示例:
from music import *
drumPart = Part("Drums", 0, 9)
note = Note(ACOUSTIC_BASS_DRUM, QN) # a bass drum strike
drumPhrase = Phrase()
drumPhrase.addNote(note)
drumPart.addPhrase(drumPhrase)
Play.midi(drumPart)
Run Code Online (Sandbox Code Playgroud)
我尝试在 music21 中用 Hi Hat 声音做同样的事情,但没有播放声音:
import music21
from music21 import note, stream, pitch, duration, instrument, tempo, chord
from music21.note import Note, Rest
from music21.chord import Chord
from music21 import midi
def createInstrument(instrument, midiChannel):
i = instrument
i.midiChannel = midiChannel
return i
n = Note("A2", type='quarter')
drumPart = stream.Part()
drumPart.insert(createInstrument(instrument.HiHatCymbal(), …
Run Code Online (Sandbox Code Playgroud) 我正在按照此处的说明解析 MIDI 文件。我的代码如下所示:
from music21 import converter,instrument # or import *
file = converter.parse('sample.mid')
components = []
for element in file.recurse():
components.append(element)
Run Code Online (Sandbox Code Playgroud)
该components
列表现在包含的数据如下:
<music21.stream.Score 0x7f50314ca390>,
<music21.stream.Part 0x7f50314caf10>,
<music21.instrument.Instrument Acoustic Guitar>,
<music21.instrument.Instrument Acoustic Guitar>,
<music21.tempo.MetronomeMark allegro moderato Quarter=130.0>,
<music21.meter.TimeSignature 4/4>,
<music21.note.Note E>,
<music21.note.Note B>,
<music21.note.Note E>,
<music21.note.Note B>,
<music21.note.Note E>,
<music21.note.Rest rest>,
.
.
.
<music21.chord.Chord B3 E3>,
<music21.chord.Chord B3 E3>,
<music21.chord.Chord B3 E3>,
<music21.chord.Chord B3 E3>,
<music21.chord.Chord B3 E3>,
<music21.chord.Chord B3 E3>,
<music21.chord.Chord D4 F#3>,
<music21.chord.Chord D4 …
Run Code Online (Sandbox Code Playgroud) 我正在尝试为每个笔记获取如下信息表:
Pitch - Octave - AbsoluteStart - Duration - Tied - MeterOfMeasure - Quarterlength
Run Code Online (Sandbox Code Playgroud)
对于流中的每个音符(可以包含语音等)。有没有一种简单的方法来迭代所有的笔记,所以我可以一个一个地调用这些属性?
from music21 import *
song = converter.parse('test.xml')
Run Code Online (Sandbox Code Playgroud)
我一直在尝试:
song.show('t')
Run Code Online (Sandbox Code Playgroud)
这样做的问题是缺少关键信息(持续时间等)。
ps:理想情况下,我可以对流进行预处理,以便将 Ties 视为完整的音符持续时间。我相信 Stream.stripTies 可以做到这一点。
我正在测试的 musicXML 文件是:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
<score-partwise>
<identification>
<creator type="composer">Brennan Becker</creator>
<encoding>
<software>MuseScore 2.0.3.1</software>
<encoding-date>2017-07-13</encoding-date>
<supports element="accidental" type="yes"/>
<supports element="beam" type="yes"/>
<supports element="print" attribute="new-page" type="yes" value="yes"/>
<supports element="print" attribute="new-system" type="yes" value="yes"/>
<supports element="stem" type="yes"/>
</encoding>
<source>http://musescore.com/score/2383771</source>
</identification>
<defaults>
<scaling>
<millimeters>7.05556</millimeters> …
Run Code Online (Sandbox Code Playgroud) 我已经下载了一堆 .krn 文件,我想使用 music21 将它们转换为图像 - png 或 jpg。我试过这个:
当我这样做时:
from music21 import *
op = krnfile
s = converter.parse(op)
s.show()
Run Code Online (Sandbox Code Playgroud)
我在我正在使用的 Jupyter Notebook 中看到一个很棒的图像文件,但是当我尝试像这样以编程方式保存该文件时:
s.write(fp = 'outputfile.png', fmt = 'png')
Run Code Online (Sandbox Code Playgroud)
它说:
Music21ObjectException: cannot support showing in this format yet: png
Run Code Online (Sandbox Code Playgroud)
这看起来有点奇怪,因为它显然设法制作图像以在笔记本中显示。
看起来也许我可以使用LilypondConverter.createPNG(fileName=None)
这个,但是需要安装 Lilypond 吗?我已经安装了 MuseScore2,当我调用 时它会打开s.show()
。
多谢!亚历克斯