My OS X Programming Blog
Mac OS X Cocoa and CoreMIDI Programming
About Andrew Choi


MIDI Programs

MIDI File Player (External Device)

MIDI Destination Pop-Up Button

MIDI File Player (Internal Synth)

MusicSequence Sample Code

MIDI File Writer

MIDI Name Document Parser

NameConfigSetup

Fish Creek MIDI Framework

MidnamUtility

SysExSenderX

Other Programs

FCBlogEditor

FCBlog and Patch

Chinese Checkers Program

jyut6 ping3 Cantonese Input Method

Cocoa Sample Programs

Syntax Coloring Using Flex

NSTextField and Undo

NSToolbar

Implementing File Import

Launch Application and Open URL

Saving Uncommitted Text Field Edits

Algorithms

Jazz Chord Analysis as Optimization

Optimal Line Breaking for Music

Optimal Chord Spacing

   

A blog where I will write mostly about programming in Cocoa and CoreMIDI, and experiences from my ports of Emacs and XEmacs to the Mac OS.

Objects for Chord Sequence Analysis
Friday January 30, 2004

I’m getting ready to write some code to experiment with the analysis of chord sequences. Pachet’s paper An Object-Oriented Representation of Pitch-Classes, Intervals, Scales and Chords: the Basic MusES describes a very nice and complete design of object representation for chord sequences and related objects. MusES was written in Smalltalk so my first task will be to convert his classes to C++.

Meanwhile I’ve finished reading most of the other papers that I’ve collected on chord analysis. Unfortunately they aren’t that useful (so it’s not worth citing them). I’ve also used up all the toner on my printer so perhaps it’s time to start writing some programs :-).

Rule-Based vs. Grammar-Based Tonality Analysis
Thursday January 29, 2004

I read some of Pachet’s other papers hoping to find more information on how rules are used in analyzing jazz chord progressions. Unfortunately I didn’t find much more information than I already have yesterday.

When I was reading about analysis of jazz chord progressions, a paper by Steedman was referenced quite often. It doesn’t seem to be available on-line. From some of his notes and other papers, I gathered that he represented chord substitutions using a set of (context-sensitive) grammar rules. Because his rules only deal with jazz blues, they aren’t very useful for my purpose.

I got my own idea on chord tonality analysis today. For each chord in a sequence (e.g., Dm7), find the set of scales (e.g., C major, F major, and Bb major) that may be played over it. Then find scales common to consecutive sequences of chords that minimize modulations. It appears this will reduce the number of rules that will be needed for further processing.

Analyzing Chord Sequences
Wednesday January 28, 2004

The first step in generating a walking bassline from a given chord sequence might be to analyze the tonality of each chord. I read the paper Computer Analysis of Jazz Chord Sequences: Is Solar a Blues? by Pachet today. It poses the problem in concrete terms, as a hierarchical decomposition of the chord sequence into a known set of “shapes”. It also describes in some detail the representation of “analysis objects”, design and representation of rules that are applied to recognize shapes, and circular view of a sequence. Unfortunately other than saying that production rules are used in a “proof” by forward chaining, nothing is said about the strategies used in prioritizing them.

Also reading A Meta-Level Architecture for Analysing Jazz Chord Sequences and Representing Knowledge Used by Jazz Musicians, both by Pachet, helps a little, where it was said that there are meta-rules and rule packs. Unfortunately these papers didn’t get into too much details. You may also be interested in Pachet’s other papers.

Temporal Musical Objects and Reasoning
Tuesday January 27, 2004

I read the paper Representing Temporal Musical Objects and Reasoning in the MusES System by Pachet, Ramalho, Carrive, and Cornic today. It talks about the design of a hierarchy of classes for representing knowledge in tonal music. Objects of these classes are ones that a program such as an automatic accompaniment generator might need to manipulate. There’s also a more detailed explanation of PACT’s which were used in the Ramalho-Ganascia paper. The ideas in this paper were implemented in a system called MusES. It doesn’t appear that its code is publicly available. In any case it was written in Smalltalk. Not a language I want to use. It might be interesting to implement such a set of classes in C++ or Python. Surely the world needs a freely available class library for reasoning about jazz harmony in a modern programming language.

I also read the paper BoB: an Interactive Improvisational Music Companion by Thom. It was again a very high-level description of a program that claims to be able to "trade fours" with a jazz improviser. It wasn’t really that informative for my purpose (which is to generate, say, walking basslines and comping from a chord grid). Perhaps I’ll skim through her (very long) thesis tomorrow to see if there’s anything useful. Pachet also has a few other papers on temporal musical objects which might be interesting.

Automatic Accompaniment
Monday January 26, 2004

I’m interested in programs that’ll generate music played by a jazz rhythm section given, say, the chord sequence of a song. A number of commercial products will do that: Band-in-a-Box, MiBAC JAZZ, Jammer Pro, and Onyx Arranger. There’s also the GPL program Pymprovisator.

I have earlier versions of the first two programs, so I’m able to play with these. But I’m really more interested in studying how these programs work. I found a tutorial (part 1 and part 2) on using the StyleMaker utility to edit BIAB styles. From it one can deduce that BIAB uses a rather simple strategy for generating the accompaniment and depends on meticulous fine-tuning of “styles” to get results that sound realistic.

I then read the papers An Artificially Intelligent Jazz Performer by Ganascia, Ramalho, and Rolland, and Simulating Creativity in Jazz Performance by Ramalho and Ganascia. These are very high-level descriptions of how automatic accompaniment programs might be implemented and structured. A lot of details such as the exact rules (called PACT’s) that were used were left out. One thing useful about the papers are they point to the work of Pachet on knowledge representation, which I’ll look into and report back tomorrow.

January 2004
Sun Mon Tue Wed Thu Fri Sat
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Dec  Feb

xml

Search this blog with


Lists

Less-Known Facts About Emacs

Emacs Rants

Chinese Restaurants in Calgary

Calgary/Banff Tourist Attractions

C++ Reading List

Science Fiction Series

Top-10 Reason I Stopped Working on Emacs

Top-10 Types of Questions I Get About Emacs

10 Defining Moments as Programmer


Misc

Carbon XEmacs

Emacs for Mac OS X


Copyright © 2003, 2004, 2005 Andrew Choi (Contact Information). Created with FCBlog