[chuck-users] phase modulation and hard sync?
mario buoninfante
mario.buoninfante at gmail.com
Mon Jun 5 02:13:16 EDT 2017
Hi Alexandre,
mea culpa, you were right about the modulation index using Phasor! :D
here we are the 2 implementation, one with Phasor and SinOsc sync(1) (in
the previous mail I said sync(2) but I meant sync(1) ), and one without
Phasor but just with 2 SinOsc:
Phasor phasor => Gain g => SinOsc carrier => dac;
SinOsc mod => g;
carrier.sync(1);
phasor.freq(100);
modInd(5,200); //change parameters here and listen the result
while( true ){
second => now;
}
fun void modInd( int i, int fm ){ //arguments: modulation index,
modulation frequency
float am;
i/6.283185307 => am;
mod.freq(fm);
mod.gain(am);
}
////////////////////////////////////////////////////////
////////////////////////////////////////////////////////
// m = mod osc; c = carrier osc;
SinOsc m => Gain g => SinOsc c => dac;
Step cm => g; //cm = carrier freq in Hz
while( true ){
modInd(5, 200); //change parameters here and listen the result
cm.next(100);
second => now;
}
fun void modInd( float i, float f ){ //arg: modInd, freq mod
float am;
i*f => am; //(modInd = Am/Fm), then (Am = modInd*Fm)
m.freq(f);
m.gain(am);
}
On 04/06/17 22:44, Alexandre Torres Porres wrote:
> 2017-06-04 13:59 GMT-03:00 mario.buoninfante
> <mario.buoninfante at gmail.com <mailto:mario.buoninfante at gmail.com>>:
>
> Now 2pi is needed only if you deal with a ramp, with a phasor.
> Cause Phasor*2pi gives you a sine. If you already have a sine
> there is no need to use 2pi.
>
> Hi, let me try to be clearer. Phasor * 2pi going through a sine
> function gives you a sine wave. SinOsc can also be drive by a Phasor.
> Such as this.
>
> Phasorp => SinOscosc => dac;
>
> 440=>p.freq;
>
> 1=>osc.sync;
>
> 4::second=> now;
>
>
> In this case, you get a sine wave and you don't need to multiply the
> phasor by 2pi, because the input is normalized, from 0-1
>
>
> What I was trying to say is that if you have a modulating index in
> phase modulation, and you want to replicate it in frequency
> modulation, you alsop need to multiply it by 2pi.
>
> I'm not challenging the math or equations, just adding an
> implementation detail in Chuck code. I know I wasn't clear about it,
> sorry. Hope it's clear now.
>
> But my main point was something else. It is true that if you multiply
> the index value by the modulation frequency value, such as in your
> code, you sort of get a similar behaviour than you'd get with phase
> modulation. But there's another detail missing if you're to really
> convert it.
>
> One thing about this conversion is that the waveform/function of the
> modulation signal needs to also be adjusted. In terms of sine waves,
> if you have the phase signal being modulated by a sine wave, you need
> to modulate the frequency with a cosine wave.
>
> With other waveforms it gets more complicated. By the way, the rule of
> thumb (multiply the index by the frequency) also changes, that is
> important to note as well.
>
> My main point is just that it's just best to implement via phase
> modulation, if that's the behaviour you want.
>
> cheers
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cs.princeton.edu/pipermail/chuck-users/attachments/20170605/6e904559/attachment.html>
More information about the chuck-users
mailing list