fm with feedback

View: New views
2 Messages — Rating Filter:   Alert me  

fm with feedback

by Matthew Yee-King-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello!

Can anyone suggest how to create a simple FM circuit with modulator feedback?

I've come up with this, but the pitch does not remain constant (well that's the whole point, but you know what I mean):

SynthDef("fm_fb", {arg b_freq = 440;
  var chain, freq;
  freq = b_freq + (LocalIn.ar(1) * MouseX.kr(0, 10) * b_freq);
  chain = SinOsc.ar(freq, mul:0.3);
  LocalOut.ar(chain);
  OffsetOut.ar(0, chain);
  //Out.ar(1, SinOsc.ar(b_freq, mul:0.1));
}).play(s);

cheers

Matthew

_______________________________________________
sc-users mailing list

info (subscription, etc.): http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml
archive: http://www.listarc.bham.ac.uk/marchives/sc-users/
search: http://www.listarc.bham.ac.uk/lists/sc-users/search/

Re: fm with feedback

by volker böhm :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


On 22 Apr 2009, at 12:11, Matthew Yee-King wrote:

> Hello!
>
> Can anyone suggest how to create a simple FM circuit with modulator  
> feedback?
>
> I've come up with this, but the pitch does not remain constant  
> (well that's the whole point, but you know what I mean):
>
> SynthDef("fm_fb", {arg b_freq = 440;
>   var chain, freq;
>   freq = b_freq + (LocalIn.ar(1) * MouseX.kr(0, 10) * b_freq);
>   chain = SinOsc.ar(freq, mul:0.3);
>   LocalOut.ar(chain);
>   OffsetOut.ar(0, chain);
>   //Out.ar(1, SinOsc.ar(b_freq, mul:0.1));
> }).play(s);

if you are still interested in this -
you could try to modulate phase instead of freq to avoid the drift.

something like this:

SynthDef("fm_fb", {arg b_freq = 440;
   var chain, phas, sr, freq, fb;
    freq = MouseY.kr(50, 1000, 'exponential');
    sr = SampleRate.ir;
    fb = OnePole.ar( (LocalIn.ar(1) * MouseX.kr(0, 1.5)), 0.91);
    phas =  Phasor.ar(0, freq/sr) + fb;
    chain = SinOsc.ar(0, phas*2pi, 0.5);
    LocalOut.ar(chain);
    OffsetOut.ar(0, chain);
}).play(s);

the lowpass is just in there to dampen the high freq energy of the  
modulation signal a little.
experiment with the coef, or throw it out if you are looking for this  
very harsh sound.

because of the signal feedback the results depend heavily on the  
block size.
for minimum delay one would have to write a dedicated ugen, and i bet  
someone has already done this.

hope this helps,
volker.



_______________________________________________
sc-users mailing list

info (subscription, etc.): http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml
archive: http://www.listarc.bham.ac.uk/marchives/sc-users/
search: http://www.listarc.bham.ac.uk/lists/sc-users/search/