This documentation describes how to use packages of the JuliaMusic, which are about reading, manipulating and saving data related with music, and are written in the Julia programming language. Most of the functionality comes in the form of the MIDI format which is described later on this page.

Latest News

Humanizing: humanize!

The current documentation was built with the following package versions

using Pkg
Pkg.status(["MIDI", "MotifSequenceGenerator",
            "MusicManipulations", "MusicVisualizations"],
            mode = PKGMODE_MANIFEST, io=stdout
      Status `~/work/JuliaMusic_documentation.jl/JuliaMusic_documentation.jl/docs/Manifest.toml`
  [f57c4921] MIDI v2.0.3
  [7d228ccb] MotifSequenceGenerator v1.0.0
  [274955c0] MusicManipulations v1.6.3
  [8e838768] MusicVisualizations v0.2.6

using Literate.jl and Documenter.jl. The documentation is written and maintained by George Datseris.

Getting Started

The current documentation assumes that you are already familiar with the MIDI format and the Julia language. After you have installed Julia, you can install the packages you'd like by pressing ] in the Julia REPL (to access the package manager mode) and then add MIDI MusicManipulations. To learn a bit more about the MIDI format you can see the MIDI: The least you need to know section. The Overview section displays the offered functionality of JuliaMusic.


If you used MIDI.jl or MusicManipulations.jl in research that resulted in publication, then please cite our paper using the following BibTeX entry:

  doi = {10.21105/joss.01166},
  url = {},
  year  = {2019},
  month = {mar},
  publisher = {The Open Journal},
  volume = {4},
  number = {35},
  pages = {1166},
  author = {George Datseris and Joel Hobson},
  title = {{MIDI}.jl: Simple and intuitive handling of MIDI data.},
  journal = {The Journal of Open Source Software}

You can get an idea of the scientific projects that these software are used here:



MIDI.jl is a module that defines fundamental types like tracks, reading/writing functionality, note functionality and other basic stuff.

  1. Basic MIDI structures : The API of basic types like midi files and tracks, as well as IO. Various utility functions are included as well.
  2. Notes : The Note construct describes a music note. Many convenience tools are also provided in the same page, like e.g. turning a note pitch to a string like A♯3.


The MusicManipulations.jl package has more advanced functionality about note processing, data extraction, quantizing and other similar processes that related to music data.

  1. Note Tools for easy handling of notes.
  2. Quantizing & Humanizing for quantizing and classifying notes on a given grid.
  3. Music data extraction.


This functionality allows you to either print MIDI data into a music score using musescore, or plot notes directly like a "piano roll" with the customizable function noteplotter.


MotifSequenceGenerator.jl is a very simple module that does a very simple thing: based on a pool of motifs with specified lengths, it makes a random sequence out of them so that the sequence also has a specified length!

  1. Motif sequence generation introduces the module and has a basic usage example.
  2. Music motifs applies this to notes.

Becoming a better drummer blog

This section of the documentation is more like a blog than a documentation. In these pages I describe how I use the packages of JuliaMusic, and the programming language Julia, to help myself become a better drummer.