Kulitta

Last modified: Feb 21, 2017 @ 10:49 pm

News:

What is Kulitta?

Kulitta is a framework for automated music composition that can also be configured to run as a standalone AI for generating music in a particular style. The system is currently implemented in Haskell, although a Python implementation for some parts of the system is also in progress. Here are two examples of compositions created with Kulitta:

A short piece generated by Kulitta.

A longer piece using Kulitta for algorithmic composition.

Page Navigation:
System Overview
Composing with Kulitta
Publications, Posters, & Technical Reports
Implementation and Installation Instructions
Real-Time Interactive Work
Empirical Assessment
Related Pages

 

System Overview

The focus of my dissertation at Yale was the development of a framework and artificial intelligence for music composition called Kulitta. Kulitta addresses the task of musical composition in the Western classical sense, which is at the level of a paper score. Kulitta uses generative grammars to create abstract musical structure, which is then progressively refined using mathematical models of harmony called chord spaces. Finally, style-specific foreground algorithms turn those harmonies into a particular type of music, such as a classical chorale or a bossa nova. Kulitta is highly modular, and modules tallKulitta can also learn from existing music, deriving information about its abstract harmonic rules to help build a musical grammar that is representative of the style.

kulitta_diagram
Kulitta’s high-level architecture.

 

Because Kulitta’s output is at the level of a paper score as shown in the figure below, it must to be further interpreted in some way in order to be heard.

finalmusic
A score-level representation of a phrase generated by Kulitta.

 

Currently, Kulitta only considers the most essential features of a score, such as when to play which pitches and how long they should last. Features like dynamics and other performance-related expressive concepts are not yet included, although one of the examples further down on this page (Random Number Seed 6 in C Minor) was further processed through a separate, performance algorithm I wrote to add some of these.

Composing with Kulitta

Kulitta can be configured as a stand-alone music generating machine for a particular style (see my software page for a GUI interface for Kulitta that accomplishes this), or the system can be used more like a programming library for algorithmic composition in a text editor. The following two pieces are examples of Kulitta being used as an algorithmic composition tool.

  • Piano composition performed by me (paper score by Kulitta, June 2014). PDF Score. The code for this composition is in PianoComposition.lhs within the Kulitta version 1.1 implementation download.
  • Vesicularia (January 2015). Composed in a text editor using Kulitta as an algorithmic composing tool and rendered to audio with analog and digital synthesizers. Source code for this composition is included with the download of Kulitta version 2.0.
vesicularia_workflow

Here are other examples on SoundCloud of output produced by Kulitta. For each of these, Kulitta created the score as a MIDI file. The MIDI files were then loaded into Cakewalk Sonar and rendered to audio using virtual instruments.

  • Classical with algorithmic performance
  • Classical with a “flat” or inexpressive performance (no dynamics)
  • Jazz
  • Modern/Contemporary with manually added volume changes in the rendered audio

The following is an example score produced by an early version of Kulitta. You can hear this piece here and view the score as a pdf here.

tggg2

Publications, Posters, & Technical Reports

Implementation and Installation Instructions

Please note: Kulitta is a work in progress and is subject to updates and additions over time, and backwards compatibility is not currently a priority. Newer versions of the Kulitta library and even newer versions of Kulitta’s dependencies may break programs that rely on older versions. For algorithmic compositions, this means that the piece may change substantially even if it still compiles! 

Instructions for Installing Kulitta (page) – go here for setup instructions for downloading and installing Kulitta on your computer. The page contains links for setting up all of Kulitta’s dependencies in addition to Kulitta.

Implementation links:

  • Kulitta’s Implementation on GitHub. Kulitta’s complete implementation in installable format using cabal (part of Haskell Platform). Requires Euterpea 2.0 and Haskell Platform 2014 or 7.10.3.
  • Algorithmic Compositions using Kulitta. This repository contains the source code for pieces like Tourmaline along with the required portions of Kulitta as they were at the time the composition was written.
  • Previous Kulitta versions, which are stable for older Haskell Platform and Euterpea versions, but no longer being updated:
    • Kulitta_2.0.1.06 – Euterpea 1.1.1 and Haskell Platform 2014/7.10.3 compatible. Not in installable format.
    • Kulitta 1.1 – Euterpea 1.0 and Haskell Platform 2014 compatible version of the original dissertation code. Not in installable format.

Real-Time Interactive Work

An early version of Kulitta was used in an interactive setting using two programs: one to create abstract chord progressions and another to interpret them. The second program can also respond to user input from any MIDI input device (in other words, a human can “play” this program as well). You can listen to an example of the output these programs create here:

realtime1_smrealtime2_sm

If you want to try out these programs, they are available as compiled executables for Windows HERE.

Empirical Assessment

As part of my dissertation, Kulitta’s performance was evaluated using a participant study. This study was conducted online and asked participants on Amazon’s Mechanical Turk (MTurk) to rate on a 7-point Likert scale whether they thought each of a collection of 40 musical phrases was created by a human or computer. For details on the study’s design and results, see Chapter 9 of my dissertation. From the dissertation:

Kulitta’s phrases performed surprisingly well in this experiment. The fact that Kulitta averaged on the human side of the scale suggests that the system may have passed a more standard Turing test with a binary answering scheme rather than a Likert scale. However, the Likert scale provided important information about Kulitta’s performance that would have been lost with a binary system. Kulitta’s placement relative tot eh Bach and Random scores shows that, although Kulita was clearly more similar to Bach, there is also plenty of room for improvement.

Due to bandwidth and security issues, public versions of these experiments have been taken offline.

Related pages:

  • My Compositions Using Euterpea and Kulitta. Examples of past and current compositions created using, Kulitta, other methods of algorithmic composition, and aspects of the Euterpea library.
  • Euterpea Website. All about Euterpea, a library for representing musical structures in Haskell. Kulitta uses Euterpea as part of the music creation process.
  • Yale Haskell Group Home Page. All about the Yale Haskell Group, which I was involved in as a graduate student and postdoc at Yale while developing Kulitta.