[linux-audio-dev] XAP: Pitch control

David Olofson david at olofson.net
Mon Dec 9 10:38:00 UTC 2002


On Monday 09 December 2002 15.59, Steve Harris wrote:
> On Mon, Dec 09, 2002 at 02:48:10PM +0100, David Olofson wrote:
> > > For an apregiate in 12 tne you just add 1/12 per semitone, not
> > > 1.0, I dont think thats hard.
> >
> > Well, yes - but did you get the actual point; that linear pitch
> > may not be all that useful to plugins that don't care about the
> > details of your scales?
>
> OK, I think I must be missing something.
>
> I dont see how a plugin can usfully process and note information
> without any explicit knowledge of the scale (execpt for some
> trivial cases, eg. octave shift, 5ths), but those can be handled in
> linear pitch too.

You can do a lot more than that even with just integer MIDI pitch, at 
least if you assume that the scale in use is *somewhat* similar to 
12tET. Even if some notes in the scale deviate a bit from the pitch 
they have in the 12tET scale, basic 12 tone theory still applies - 
and that's what the vast majority of harmonizers, autocomp units and 
whatnot are based on.

So, why force these plugins to look at the scale in use, convert 
linear pitch into note pitch, process that, and then look at the 
scale and convert note pitch back into linear pitch for proper 
playback? They *could*, but IMHO, it should be optional, since it 
should be easy enough to have separate converter plugins for this.


> I guess you can do something if its an equal tepmered scale, and
> you dont know the note/octave division, but isn't that an unusual
> case?

Yes, probably. That would be 16 tone scales and that kind of stuff - 
but even then, the *actual* problem is still there: You cannot know 
for sure what linear pitch values mean in terms of tones in the 
current scale, unless you have a description of that scale at hand. 
If the linear pitch of a note is more than 50 cents off from the 
corresponding tone in the corresponding ET scale, you get the wrong 
note.


> Granted if you have some way of expressing scale information then
> note data makes things easier, but we dont (AFAIK). It sounds like
> a hard problem.

That's why simple plugins should not be forced to worry about it.

As to scale information, that's basically something that's built into 
sequencers, scale converters and that kind of plugins. The 
implementation may be the definition, or the implementation might 
convert according to a scale definition loaded from a file of some 
(non-)standard format.

However, it doesn't matter. If you deal only with 12tET, all you need 
is that multiplication or division by (1.0/12.0), if even that. 
(Linear pitch is still just linear pitch, and most synths should 
probably just use that.)

Synths could chose not to have note_pitch controls at all (host or 
user throws in a suitable converter), to have note_pitch and built-in 
12tET conversion (or more advanced converters) or to have *only* 
note_pitch and some kind of note->pitch conversion. Anything will 
work, and should be easy enough to deal with.


> If you allow note data then you still have to provide some
> mechanism/information for oscialtors to convert this back to a
> frequency, and doesnt this nullify the point?

No, because a synth is not *required* to have note_pitch inputs. It's 
considered an integrated bonus feature, if found on a synth. *If* a 
synth has note_pitch input, the synth could be seen as having builtin 
scale converters - which is something you might just as well plug in 
in between the synth and the event source. (Which would allow you to 
have different senders playing the same channel of the same synth 
with different scales, BTW. :-)

Same thing applies to sequencers. Normally, you'd probably want a 
sequencer to "think" in terms of note_pitch, so you can tweak scales 
without destructively (and potentially irreversibly) modifying the 
database. However, since you'll normally connect a sequencer directly 
to a synth (and synths usually want linear_pitch), it might make 
sense to throw in a scale converter on each output channel. (Or a 
single global one, or whatever.) But that'd also be a bonus feature, 
since you might as well output *only* note_pitch, and then just throw 
in your favourite scale converter/generator plugin whenever you want 
or need to give some synth linear_pitch rather than note_pith.


//David Olofson - Programmer, Composer, Open Source Advocate

.- The Return of Audiality! --------------------------------.
| Free/Open Source Audio Engine for use in Games or Studio. |
| RT and off-line synth. Scripting. Sample accurate timing. |
`---------------------------> http://olofson.net/audiality -'
.- M A I A -------------------------------------------------.
|    The Multimedia Application Integration Architecture    |
`----------------------------> http://www.linuxdj.com/maia -'
   --- http://olofson.net --- http://www.reologica.se ---



More information about the Linux-audio-dev mailing list