Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

A python package for handling modern staff notation of music

License

NotificationsYou must be signed in to change notification settings

CPJKU/partitura

Repository files navigation

Latest ReleasePypi PackageUnittest StatusCodeCov StatusContributor Covenant

Partitura is a Python package for handling symbolic musical information. Itsupports loading from and exporting toMusicXML andMIDI files. It also supports loading fromHumdrumkern andMEI.

The full documentation forpartitura is available online atreadthedocs.org.

User Installation

The easiest way to install the package is viapip from thePyPI (PythonPackage Index):

pip install partitura

This will install the latest release of the package and will install all dependencies automatically.

Quickstart

A detailed tutorial with some hands-on MIR applications is availablehere.

The following code loads the contents of an example MusicXML file included inthe package:

importpartituraasptmy_xml_file=pt.EXAMPLE_MUSICXMLscore=pt.load_score(my_xml_file)

The partituraload_score function will import any score format, i.e. (Musicxml, Kern, MIDI or MEI) to apartitura.Score object.The score object will contain all the information in the score, including the score parts.The following shows the contents of the first part of the score:

part=score.parts[0]print(part.pretty())

Output:

Part id="P1" name="Piano" │ ├─ TimePoint t=0 quarter=12 │   │ │   └─ starting objects │       │ │       ├─ 0--48 Measure number=1 │       ├─ 0--48 Note id=n01 voice=1 staff=2 type=whole pitch=A4 │       ├─ 0--48 Page number=1 │       ├─ 0--24 Rest id=r01 voice=2 staff=1 type=half │       ├─ 0--48 System number=1 │       └─ 0-- TimeSignature 4/4 │ ├─ TimePoint t=24 quarter=12 │   │ │   ├─ ending objects │   │   │ │   │   └─ 0--24 Rest id=r01 voice=2 staff=1 type=half │   │ │   └─ starting objects │       │ │       ├─ 24--48 Note id=n02 voice=2 staff=1 type=half pitch=C5 │       └─ 24--48 Note id=n03 voice=2 staff=1 type=half pitch=E5 │ └─ TimePoint t=48 quarter=12     │     └─ ending objects         │         ├─ 0--48 Measure number=1         ├─ 0--48 Note id=n01 voice=1 staff=2 type=whole pitch=A4         ├─ 24--48 Note id=n02 voice=2 staff=1 type=half pitch=C5         ├─ 24--48 Note id=n03 voice=2 staff=1 type=half pitch=E5         ├─ 0--48 Page number=1         └─ 0--48 System number=1

Iflilypond orMuseScore are installed on the system, the following commandrenders the part to an image and displays it:

pt.render(part)

Score example

The notes in this part can be accessed through the propertypart.notes:

part.notes> [<partitura.score.Noteobjectat0x...>,<partitura.score.Noteobjectat0x...>,><partitura.score.Noteobjectat0x...>]

The following code stores the start, end, and midi pitch of the notes in a numpyarray:

importnumpyasnppianoroll=np.array([(n.start.t,n.end.t,n.midi_pitch)forninpart.notes])print(pianoroll)> [[04869]>  [244872]>  [244876]]

The note start and end times are in the units specified by thedivisions element of the MusicXML file. This element specifies theduration of a quarter note. Thedivisions value can vary within anMusicXML file, so it is generally better to work with musical time inbeats.

The part object has a property :part.beat_map that converts timelinetimes into beat times:

beat_map=part.beat_mapprint(beat_map(pianoroll[:,0]))> [0.2.2.]print(beat_map(pianoroll[:,1]))> [4.4.4.]

The following commands save the part to MIDI and MusicXML, or export it as a WAV file (usingadditive synthesis), respectively:

# Save Score MIDI to file.pt.save_score_midi(part,'mypart.mid')# Save Score MusicXML to file.pt.save_musicxml(part,'mypart.musicxml')# Save as audio file using additive synthesispt.save_wav(part,'mypart.wav')

More elaborate examples can be found in thedocumentation <https://partitura.readthedocs.io/en/latest/index.html>_.

Import other formats

ForMusicXML files do:

importpartituraasptmy_xml_file=pt.EXAMPLE_MUSICXMLscore=pt.load_musicxml(my_xml_file)

ForKern files do:

importpartituraasptmy_kern_file=pt.EXAMPLE_KERNscore=pt.load_kern(my_kern_file)

ForMEI files do:

importpartituraasptmy_mei_file=pt.EXAMPLE_MEIscore=pt.load_mei(my_mei_file)

One can also import any of the above formats by just using:

importpartituraasptany_score_format_path=pt.EXAMPLE_MUSICXMLscore=pt.load_score(any_score_format_path)

License

The code in this package is licensed under the Apache 2.0 License. For details,please see theLICENSE file.

Citing Partitura

If you find Partitura useful, we would appreciate if you could cite us!

@inproceedings{partitura_mec,  title={{Partitura: A Python Package for Symbolic Music Processing}},  author={Cancino-Chac\'{o}n, Carlos Eduardo and Peter, Silvan David and Karystinaios, Emmanouil and Foscarin, Francesco and Grachten, Maarten and Widmer, Gerhard},  booktitle={{Proceedings of the Music Encoding Conference (MEC2022)}},  address={Halifax, Canada},  year={2022}}

Acknowledgments

This project receives funding from the European Research Council (ERC) underthe European Union's Horizon 2020 research and innovation programme under grantagreement No 101019375"Whither Music?".

This work has received support from the European Research Council (ERC) underthe European Union’s Horizon 2020 research and innovation programme under grantagreement No. 670035 project"Con Espressione"and the Austrian Science Fund (FWF) under grant P 29840-G26 (project"Computer-assisted Analysis of Herbert von Karajan's Musical Conducting Style")


[8]ページ先頭

©2009-2025 Movatter.jp