FuxCP : a constraint programming formalization of Fux’s musical theory of four-voice counterpoint
Files
Cleenewerk_15551800_dePatoul_30701900_2024.pdf
Open access - Adobe PDF
- 5.23 MB
Details
- Supervisors
- Faculty
- Degree label
- Abstract
- This thesis presents a constraint-based formalization of four-voice musical counterpoint according to the classical theory established by Johann Joseph Fux in his 1725 treatise Gradus ad Parnassum. It builds upon the theses of Thibault Wafflard and Anton Lamotte, which provided first formalizations of two and three voice counterpoint, respectively. This thesis presents a unified and completed set of mathematical rules for composing four-voice counterpoint, and a C++ constraint programming implementation of this theoretical framework using the Gecode solver. The resulting software is FuxCP, a tool meant to assist composers in writing counterpoint in the style of Fux. An interface to the C++ implementation is provided in OpenMusic, a musical composition environment based on Common Lisp. The research emphasizes the advantages of constraint programming in the context of music formalization over other approaches such as machine learning. It argues that constraint programming provides transparency and flexibility, and guarantees adherence to Fux's rules, which other methods may lack. This thesis also demonstrates the applicability of Fux's theory to an inheritance-based object-oriented implementation, while acknowledging that this paradigm can only approximate the sophisticated reality of the theory. The implemented inheritance-based structure contributes to a considerably more elegant and robust code. After presenting examples of the generated compositions, the thesis concludes by discussing the current limitations of FuxCP and proposing directions for future improvements. It emphasizes that while this work represents a crucial step in modelization, an optimization effort is now necessary to effectively navigate the vast search space and guide the solver towards optimal solutions.