Introduction
^^^^^^^^^^^^

This section covers the fundamental usage of *musicaiz*, including
a package overview, basic and advanced usage.

Quickstart
~~~~~~~~~~

The goal of musicaiz is to provide a framwork for symbolic music generation.
Musicaiz contains 3 basic modules that contains the music basic principles definitions: harmony, structure and rhythm.
There are other modules that use these definitions to plot, tokenize, evaluate and generate symbolic music data.


Analyze data
------------

Load a MIDI file:

.. code-block:: python

    from musicaiz import loaders

    # load file
    midi = loaders.Musa("../files/mozart.mid")

    # get instruments
    instruments = midi.instruments


Create data
-----------

Obtain notes that belong to a chord:

.. code-block:: python

    from musicaiz import harmony

    # Triad chord build from 1st degree of C major
    harmony.Tonality.get_chord_notes_from_degree(tonality="C_MAJOR", degree="I", scale="MAJOR")

    # Triad chord build from 1st degree of C major in dorian scale
    harmony.Tonality.get_chord_notes_from_degree(tonality="C_MAJOR", degree="I", scale="DORIAN")



Tokenize
--------

We can encode MIDI data as tokens with musicaiz. The current
implementation supports the following tokenizers:

`MMM`: Ens, J., & Pasquier, P. (2020). Mmm: Exploring conditional multi-track music generation with the transformer.

.. image:: ../images/mmm_tokens.png
	:width: 75%
	:align: center