Skip to content

Latest commit

 

History

History
107 lines (82 loc) · 4.32 KB

README.md

File metadata and controls

107 lines (82 loc) · 4.32 KB

ProtoVoice Harmony Model - Inferring Harmony from a Model of Tonal Structure

A protovoice derivation and its inner structure

This project is dissertation.

To run experiments, ensure python, pip, haskell, and stack are installed:

Installation

Install Requirements:

pip3 install -r requirements.txt

Usage

Head to experiments: Run preprocess.py then experiments.py. Analysis of results is in analysis.py

preprocess.py will search for DCML style corpuses in the directory ../dcmldatasets/, so clone some repositories in that folder. Eg: ABC or the romantic piano corpus.

This project is an implementation of the protovoice model as described in:

Finkensiep, Christoph, and Martin Rohrmeier. 2021. “Modeling and Inferring Proto-Voice Structure in Free Polyphony.” In Proceedings of the 22nd International Society for Music Information Retreival Conference, 189–96. Online. DOI

It provides types and functions for representing and working with protovoice derivations, various parser implementations, plotting functionality, and a probabilistic model.

Have a look at the documentation

Overview

Library (src/)

The library part of the project (which implements the model) contains two types of modules, generic modules, which work on generic "path grammars" (with the common "outer operations" split, spread, and freeze) and modules that are specific to the protovoice grammar.

  • Common (docs) Common types and functions for representing and working with generic "path grammars" and their derivations.
  • Display (docs) Generic code for plotting path grammar derivations.
  • ChartParser (docs) A semiring chart parser that exhaustively parses a path grammar.
  • GreedyParser (docs) A greedy parser that tries to find a single parse for a path grammar by choosing the next reduction step according to a policy (e.g., randomly).
  • PVGrammar (docs) Representing protovoice derivations and their operations.

Executables (app/)

Building and Running

You can build the project with stack using:

$ stack build

Run any of the executables using:

$ stack exec {ismir2021,learn,examples,parse}

To build the documentation, run:

$ stack haddock