Coconet

counterpoint by convolution: a generative model for partial score completion

View the Project on GitHub

We'll showcase Coconet tackling a variety of tasks. We also embed samples from related work to allow for comparisons.

Adding a twist to the ending of Ode to Joy - a new harmonization experiment

Original Ode to joy melody

Harmonization of original melody by Coconet


Ode to joy melody with a twist at the end

Harmonization of original melody by Coconet


Rewriting

Primed with a Bach chorale from validation set. Coconet rewrites voice-by-voice as follows:
First, condition on all by once voice and rewrite the missing voice using Gibbs. Then, pick another random voice to rewrite conditoning on the new voice along with the remaining original voices. Repeat until all voices are generated.

The source Bach chorale

Rewritten by Coconet



The source Bach chorale

Rewritten by Coconet



Unconditioned, generated using Gibbs sampling (multiple rewrites)

Generated completely from scratch, from empty pianoroll.



[Cover your ears!] Unconditioned, generated with ancestral sampling (one pass), not as good

Generated completely from scratch, from empty pianoroll.



Harmonization

Primed with chorale melody from validaiton set.

Melody from Bach chorale

Harmonized by Coconet



Melody from Bach chorale

Harmonized by Coconet



For ease of comparison, we are embedding samples from related work below.


Unconditioned samples from [Boulanger- Lewandowski et al., 2012]




Unconditioned samples from BachBot [Liang, 2016]



Harmonization samples from BachBot [Liang, 2016]




Harmonization samples from DeepBach [Hadjeres and Pachet, 2016]

The melody is from the "Wer nur den lieben Gott läßt walten" (He who allows dear God to rule him), a 1641 hymn by Georg Neumark. The harmonization is by DeepBach and the recording is performed by Emmanuel Deruty.

Two more harmonizations examples on a different melody, "God Save the Queen."