FM feedback
-
- KVRAF
- Topic Starter
- 1718 posts since 3 Sep, 2003
I'm planning to rework my FM synth (Piper) a little and feedback is one of the things I'd like to add.
(Amusingly it's one of a handful of my own creations I actually find myself using.)
How do you implement feedback in an FM synth? I take it you have to use a single sample delay approach?
Do you grab the feedback value pre or post envelope?
..other pointers?
Also, I am considering adding an arp that is assignable per operator. Seems like it could be pretty awesome, anyone tried anything like that?
(Amusingly it's one of a handful of my own creations I actually find myself using.)
How do you implement feedback in an FM synth? I take it you have to use a single sample delay approach?
Do you grab the feedback value pre or post envelope?
..other pointers?
Also, I am considering adding an arp that is assignable per operator. Seems like it could be pretty awesome, anyone tried anything like that?
-
Leslie Sanford Leslie Sanford https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=131095
- KVRAF
- 1596 posts since 4 Dec, 2006
I think it's something like...Rock Hardbuns wrote:How do you implement feedback in an FM synth? I take it you have to use a single sample delay approach?
Code: Select all
output = amp * sin(2 * pi * accumulator + output * fb)
I would say post. That way the envelope affects the amplitude of the feedback [edit]by affecting the amplitude of the output[/edit]. You can get those cheesy FM brass sounds that way.Do you grab the feedback value pre or post envelope?
Cool!Also, I am considering adding an arp that is assignable per operator. Seems like it could be pretty awesome, anyone tried anything like that?
I'm not aware of anyone doing that before.
-
- KVRAF
- Topic Starter
- 1718 posts since 3 Sep, 2003
Yes, that's kind of what I meant, I think. Output in this case would hold the data from the last pass, essentially working like a single sample delay. Right?Leslie Sanford wrote: I think it's something like...
Code: Select all
output = amp * sin(2 * pi * accumulator + output * fb)
When you see the diagrams, there's just an arrow going back to the input, but there is no way to do it in a single pass I would think.
Duly noted.I would say post. That way the envelope affects the amplitude of the feedback [edit]by affecting the amplitude of the output[/edit]. You can get those cheesy FM brass sounds that way.
Btw: Are you still working on the DS-8 thing? It could be cool.
- KVRAF
- 3426 posts since 15 Nov, 2006 from Pacific NW
Implementing feedback FM will result in pitch droop of the fundamental with sinusoidal FM. For those "classic" FM sounds, you want to implement PHASE modulation. The two ways of doing this:Rock Hardbuns wrote:How do you implement feedback in an FM synth? I take it you have to use a single sample delay approach?
- For a lookup table oscillator, or anything based around a waveshaped ramp, just scale your feedback signal by the desired envelope, then add it directly to the phase increment value. Make sure you add the modulation signal before the wrap-around for the ramp.
- For other FM methods (oscillating filter, modulating a delay line, etc.), just run your modulation signal through a first-order differentiator (a one-zero filter). Differentiating frequency gives you phase.
The single sample delay approach is implicit in this method - to get around this, you can oversample, and get fractions of a delay. Also, try playing around with the sign of the feedback. I'm sure there are other waveshaping and filtering tricks that can be performed on the feedback signal as well to get some nice results. High FM indices will result in aliasing, but this is part of the "classic" sound as well, and can be useful in the generation of noisy transients.
Sean Costello
-
Leslie Sanford Leslie Sanford https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=131095
- KVRAF
- 1596 posts since 4 Dec, 2006
Yeah, it's just like how we have to deal with sample delays in filters.Rock Hardbuns wrote: Yes, that's kind of what I meant, I think. Output in this case would hold the data from the last pass, essentially working like a single sample delay. Right?
When you see the diagrams, there's just an arrow going back to the input, but there is no way to do it in a single pass I would think.
Mainly as a thought experiment. I was playing around with this plugin which emulates Yamaha's 4-op FM synth chip (which I believe the DS-8 uses). I was impressed by the variety of sounds you can get using just two operators. It's been awhile since I've played with FM.Btw: Are you still working on the DS-8 thing? It could be cool.
I would love to get my hands on an actual DS-8, but I haven't seen any on ebay, and anyway I don't know if I can justify the expense.
-
- KVRAF
- Topic Starter
- 1718 posts since 3 Sep, 2003
Valhallasound >
Yes, I usually assume that FM means PM. Actual FM is so unusual.
I currently do 2x oversampling, without anti-aliasing. I find that it tends to make the aliasing noise "whiter" which can actually be a wanted artifact.
Though I am thinking of adding an optional sinc downsampler this time around.
Leslie >
Hm, that one been around forever, but I've always ignored it because of the gui. Time to give it a try perhaps.
Yes, I usually assume that FM means PM. Actual FM is so unusual.
I currently do 2x oversampling, without anti-aliasing. I find that it tends to make the aliasing noise "whiter" which can actually be a wanted artifact.
Though I am thinking of adding an optional sinc downsampler this time around.
Leslie >
Hm, that one been around forever, but I've always ignored it because of the gui. Time to give it a try perhaps.
-
Christian Schüler Christian Schüler https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=48996
- KVRist
- 266 posts since 23 Nov, 2004 from Hamburg, Germany
PM with feedback is equivalent to slanting the y-axis to the right (or left) and then reading out where the sine intersects that axis while moving it underneath. As soon as the y-axis intersects more than one point of the sine signal, you get chaotic noise. Using this analogy you can search for the correct intersection point without oversampling.
-
- KVRAF
- Topic Starter
- 1718 posts since 3 Sep, 2003
I understand what you are saying, but in practical terms, the other way was so much simpler.Christian Schüler wrote:PM with feedback is equivalent to slanting the y-axis to the right (or left) and then reading out where the sine intersects that axis while moving it underneath. As soon as the y-axis intersects more than one point of the sine signal, you get chaotic noise. Using this analogy you can search for the correct intersection point without oversampling.
I just posted this in /Instruments:
http://www.kvraudio.com/forum/viewtopic.php?t=255695
I gave up on the arp idea. Turns out I would have had to rewrite the voice logic, and I wasn't in the mood.
-
Christian Schüler Christian Schüler https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=48996
- KVRist
- 266 posts since 23 Nov, 2004 from Hamburg, Germany
Oh, you didn't want to solve this?
a * x + b = arcsin( x )
(edit: I think there is no analytic solution so a search is the only possible. So it is even the question if it turns out more efficient than oversampling)
a * x + b = arcsin( x )
(edit: I think there is no analytic solution so a search is the only possible. So it is even the question if it turns out more efficient than oversampling)