I've been thinking about the Plectrum tracks and how to use them from the perspective of a guitar player.
Since a number of characteristics are not related to guitar per se I introduce the concept of
sounding instruments. These are instruments that produce a sound that sustains until actively terminated. Examples are harp, xylophone and tubular bells. In this group I include plucked string instruments like guitar, ukulele and mandolin, since they have similar sounding behaviour, even though they have the additional property that sounds are terminated implicitly by plucking a different finger position on the same string.
Thinking the way MMA works,
patterns can be used to define when sounds must be made. Patterns map the plucking of a string in time. For the actual sound, the pattern is applied to an enumeration of strings/positions, a
chord. Positions play a role guitar-like instruments; real sounding instruments only have open strings (or bells, etc.) and hence no chords. (Yes,a harp can change tuning but that's no problem.)
Here we encounter a problem when trying to realize this with MMA. Patterns are defined in grooves, and to switch patterns we must switch grooves. In the current implementation, switching grooves mutes all sounds, something we do not want.
As stated above, patterns map the plucking of a string in time. On beat 1 pluck string 5, on beat 2 pluck string 3, on 3 pluck string 1, etc. This can be easily realized, MMA provides everything already.
Begin Plectrum
Voice NylonGuitar
Sequence {
1.0 0 5:80;
2.0 0 3:80;
3.0 0 1:80;
}
End
Suggested enhancement: Allow strings to be specified by (extended) ranges, e.g.
'1-3',
'1,2,3',
'1,3-5' and so on.
A special form of pattern is the strum, where plucking starts at the indicated time and the plucks are evenly distributed.
Sequence {
1.0 30 80 70 60 40 30 20 ; // decrease volumes on strings this way
}
Suggested enhancement: Allow strings to be specified by (extended) ranges, but order matters. E.g.
'1,3,2' will sound strings 1, 3 and 2 in that order,
'1,5-3' will sound strings 1, 5, 4, 3 in that order, and so on.
Suggested enhancement: Use fractions for strum values. For example, in a 3/4 signature, the sequence
'1 3/6 6:90 1-5:80' would mean that the 6 plucks are distributed over the 3 beats. Effectively, the number evaluates to a beat offset. Also, since we can control the order of the plucks there is no need for negative strum values. The example sequence
'1 3/6 6:90 1-5:80' is equivalent to:
Sequence {
1.0 0 6:90;
1.5 0 1:80;
2.0 0 2:80;
2.5 0 3:80;
3.0 0 4:80;
3.5 0 5:80;
}
But the most powerful and intuitive way of describing plucked strings, especially on guitar-like intruments, is the tablature (see
https://en.wikipedia.org/wiki/Tablature#Guitar_tablature). This is completely alien to MMA, since it combines strings, positions and timestamps in one, MMA separates positions and timestamps (patterns) from strings (chords) by design. I'm currently not sure how to bring tablature to MMA...
I developed a prototype (in perl) that supports the pluck, strum and tablature as described above. From experimenting I must say that I do like the tablature approach but I'd never let go of the pluck and strums.
Just some musings... Ideas?