Equal Temperament Pitch Scaling for Buchla Music Easel iProgram card
Hi Everyone!
This is my first post in the forums. I have a patch that sends OSC messages to the iProgram card of the Buchla Music Easel, and I'm having trouble figuring out how to convert midi notes to the proper scaling to get a few octaves of equal temperament intonation. I'm using a simple formula I derived from Gareth Loy's "Musimathics", which has worked well elsewhere with scaling granular synthesis grains. It isn't working at all here. The scale of received numbers for the pitch slider of the Buchla seems to be 0-4095. I've found A frequencies at 200, 800, 1400 (out of that 0-4095 range), but, when I try to plug them into the formula as a reference frequency, it's a no-go. Any ideas? Thanks in advance!!
-Tom
Here's the scaling patch:
The next time you do this, select everything in your patch and choose Copy Compressed from the Edit menu and than paste it into your posting. I've fixed it for you, but keep this in mind.
Have you looked at the mtof object, by the way? It's what most people use to derive Equal Temperament frequencies....
Thanks for fixing that for me. Yeah i use the mtof quite a lot, but for this application it doesn't really do the job. In this case, I need to output integers within a range of 0-4095 that will control the frequency of an oscillator on the music easel, so I don't need fequency anywhere in the equation. I just need to get from the pitch-class of a midi keyboard (or kslider) to something that projects equal-temperament scaling in a 0-4095 range, if that makes sense:)
Perhaps I'm misunderstanding, but if you knew what the highest frequency value you wished to reproduce was, it seems as though you could just take the output of mtof and then use a scale object to scale its output range to the 0 - 4095 range, right?
Perhaps I am confused:) but mtof is good for converting midi numbers to frequency, which is great if I want to send a frequency, which I do not. I want to send a number (max data not an msp signal). This number is received by the easel iCard and converted to voltage of the slider that controls frequency of tre vco (if that's not overly complicated. using a scale object doesn't work well for this sort of thing, because equaltemper is exponential in its scaling. That's why I use the formula in the patch, which works perfectly when shifting the pitch of grains through the chromatic array over many octaves.
maybe im missing a simple, more elegant solution, but I have gotten poor results out of the scale object with this situation
I think you might need to take another look at the scale object's refpage and helpfile. You can set it for linear or exponentials scaling (or something in between)....
I know nothing at all about that card, but here's a thought. You say that by sending it the numbers 200, 800, and 1400 you get resulting frequencies that correspond to the pitch A. (You don't say by how many octaves they're separated. For the sake of this discussion I'm going to assume one octave, but if it's two octaves, just alter the arithmetic accordingly). Observing those three numbers, you can note that they are separated by a difference of 600 each time. Divide an octave of pitch by 600, and you get a pitch difference of 2 cents per increment. Inferring from that, I would test to see if you can obtain a chromatic scale by incrementing the number in steps of 50 (200, 250, 300, 350, etc.).
Oh my. The answer was staring me right in the face and i was overcomplicating things. I was assuming that the standard formula was needed, and didn't realize that it's just a linear progression through the octaves. Thank, Christopher. It scales perfectly with increments of 50.
And, Max, I didn't realize that scale could do exponential curves, which is great to know! Here is a screen shot of the formula I had in mind, which, I believe, is still too complicated for a normal exponential curve (this is what my "equaptemp" sub-patcher accomplishes --really handy for certain situations).
Observing those three numbers, you can note that they are separated by a difference of 600 each time.
i didnt see that either, good find. all i thought was "damn, where is the rule?"