Abstract: Chord Progressions (CP) constitute a fundamental element within musical compositions. Skillful application of harmonies can captivate audiences through the colors and emotions they elicit. While existing research has predominantly focused on generating stylistically coherent CPs and accompaniments, relatively few studies have delved into the optimization of generating specific CPs of interest across diverse harmonic contexts. On this basis, this study aims to address this gap by fine-tuning a foundational CP model using datasets generated through three distinct strategies. Subsequently, the performances of the strategies are compared using both existing and novel evaluation metrics. According to the analysis, the results reveal that the model fine-tuned using the third strategy demonstrates proficiency in producing the target CPs across diverse contexts and modes of generation in a musically coherent manner. This approach opens up avenues for creative learning and sharing of stylistic chord progressions through exchanging customized fine-tuned chord models.
conda create -n chordsense python=3.11 -y
conda activate chordsense
pip install -r requirements.txt
In this text-based interactive demo, you will be asked to enter Harte-style chord symbols, such as C:maj, E:min, etc. The program with gives you a suggestion about the next chord with a confidence score. You may either take the advice or ignore it completely. The program will keep track of all the chords you have entered and print them out in the end.
Program Arguments:
- ckpt_path: path to the torch model checkpoint. It can be downloaded with the link below.
- tokenizer_path
- device
python textui.py \
--ckpt_path=[CKPT_PATH] \
--tokenizer_path=[TOKENIZER_PATH] \
--device=[DEVICE]
There are three types of chord notations involved in this project.
- Harte notation
- E.g. C:maj(*3)/5
- Tokenized chord symbol
- E.g. C, maj7, add, #9, /, 3
- Chord Attribute (used for n-gram comparison)
- E.g. [[C, maj], [E, min]]
Can we have machines inspire us about harmonic choices in real-time during improvisation?
I want to create a simple GUI that performs chord identification per beat with a predetermined bpm. The program then predicts the next chord based on the history of identified chord symbols.