diff --git a/source/AYUGens/sc/AY.sc b/source/AYUGens/sc/AY.sc index 93eb0f50a..c3eac8a03 100644 --- a/source/AYUGens/sc/AY.sc +++ b/source/AYUGens/sc/AY.sc @@ -16,9 +16,11 @@ AY : UGen { *categories { ^ #["UGens>Oscillators"] } - *freqtotone { |freq| - // Approximate empirical... - //^(109300 / (freq - 3.70727)) - ^(110300 / (freq - 0.5)) + *freqtotone { |freq, sampleRate| + var chipTactsPerOutCount; + sampleRate = sampleRate ?? { Server.default.sampleRate }; + // this mirrors ayemu's internal calculation of ChipTacts_per_outcount + chipTactsPerOutCount = 1773400.div(sampleRate).div(8); + ^(sampleRate * chipTactsPerOutCount / (2 * freq)).round } } diff --git a/source/AYUGens/sc/HelpSource/Classes/AY.schelp b/source/AYUGens/sc/HelpSource/Classes/AY.schelp index b922019e5..8a0dd07a5 100644 --- a/source/AYUGens/sc/HelpSource/Classes/AY.schelp +++ b/source/AYUGens/sc/HelpSource/Classes/AY.schelp @@ -99,6 +99,12 @@ general add controls for the resulting signal METHOD::freqtotone converts a frequency value to something appropriate for the strong::tonea::, strong::toneb:: and strong::tonec:: inputs. +ARGUMENT::freq +the frequency value in Hertz. + +ARGUMENT::sampleRate +sample rate for the frequency conversion. default is strong::Server.default.sampleRate::. + EXAMPLES:: CODE::