Pages

2018-07-15

Motivations behind Kunquat: Musical performance and time resolution

One of my goals as a tracker musician is to bring human-like expression to my music, and I like the way tracker programs provide many different controls for specifying performance details. However, trackers are mostly limited to machine-like steady rhythm, and controls to deviate from this tend to be clunky and they often lack precision.

To illustrate the problem, I would like to give some background on the nature of tracker music notation first. Consider the following comparison between sheet music notation and notation in Impulse Tracker:

An arpeggiated stack of 4ths. Left: sheet music notation, right: Impulse Tracker notation (remember that the time axis is vertical, and each horizontal row represents a duration of a 1/16th note).

Both notation styles represent the same musical idea: an arpeggiated chord. Here is an example of what it might sound like:

The notation styles are suitable for different purposes. Sheet music notation is intended for human players, who often read the notes from printed sheet while playing. Based on their experience, the players add details of natural expression to their performance, so such details can safely be omitted in the notation. This also means that there are several "correct" ways to play the section.

In contrast, tracker notation is ultimately interpreted by software in a very rigid fashion, and the notation specifies exactly how the result should be played. In the example above, all notes have their individual volume levels specified (10, 18, 13 and 10), as well as short time delays (the SD commands with values 1, 2 and 5) so that each note plays in quick succession rather than simultaneously.

Since tracker programs don't interpret music the way humans do (at least not yet) but are nevertheless designed to output music in a listenable form, it makes sense to include a lot of performance details in the notation to bring life to the music. Common such details include portamento and vibrato, and these are specified with a level of accuracy that would be unnecessary for human performers.

To get back to the limitations of typical tracker notation, consider how time is handled in the example above: We need to play each note of the arpeggiated chord with very short time intervals in between. In this case, each row in the tracker layout has a length of a 1/16th note, which is too coarse-grained for our purposes. To remedy this problem, many tracker programs support a delay command that allows more precise control over when the note starts. Still, this only increases the effective time resolution to approximately 50 ticks per second, while some playing techniques on real instruments require much more precision. Also, using separate delay commands feels disconnected from the otherwise very intuitive representation of time in tracker notation.

So, I figured that we could eliminate the concept of rows in the user interface of Kunquat, and allow the user to place their notes and effects at whatever point in time they please. Additionally, we can allow the user to zoom along the time axis in case they need more precision. Thus, our arpeggiated chord example translates to Kunquat notation as follows:

The example above in Kunquat notation. The units in time axis represent beats (4 rows in the Impulse Tracker example). Notice how more accurate positioning in the time axis has eliminated the need for delay commands.

I wanted to practise techniques involving subtle timing details (among other things), so I decided to write a cover of Asturias, a piece well-known among classical guitar players. I found the flexibility of time management in Kunquat very helpful when adjusting all the timing details that are crucial to human-like guitar performance:

2 comments:

  1. As other trackers, Kunquat seems to support also global tempo changes. What kind of rules of thumb do you have for deciding if you express a delay or slowdown as global tempo or by nudging notes down on the time axis? Do the two conflict in any way or create problems in how you organize your patterns?

    ReplyDelete
    Replies
    1. If it's the fluctuation of the underlying pulse of the music, I adjust the tempo or add pattern delay; otherwise I move the notes. The key thing is to keep the timeline consistent with the logical structure of the music (the numbers on the time axis in Kunquat indicate beats). I haven't had problems with combining these two approaches, although I do need to be mindful of where notes nearby are located whenever I add a pattern delay command.

      Delete