Amplitude modulation and other fundamentals

Hello!

Reading E. Zwickers “Psychoakustik”, I thought it would be a good idea to rebuild some of the described phenomena with SC for a better understanding and cheatíng myself into using the software. I try to find clarity about some fundamental concepts of SC.

That’s for motivation.

Train of thought to my first question:

Sound is an oscillation of air-molecules around static pressure. A tone is a periodic oscillation with a given (static) frequency. The hearing sensation responds to the RMS of a soundwave. We don’t hear single cycles of a tone. What happens if every second Schwingung is damped down by 50% ? How would that sound?

After unsuccessful additive attemps I came up with this:

{SinOsc.ar(400, mul:SinOsc.kr(200, mul:0.7)).poll}.play;

In my understanding the frequency of the amplitude modulator needs to be half the frequency of the desired tone in order to reduce the amplitude of every second peak. Is that correct?
Problem: If I rise the frequency of the SinOsc and the modulating SinOsc at some point the function doesn’t produce sound but just 0’s.

In my case it’s exactly 374 Hz for the modulator. I assume this is caused by the “.kr”: That’s 1 value each 64 samples right? With a samplingrate of 48000 Hz you geht 750, divided by 2 (for Nyquists Theorem?) you get 375…?

What’s the workaround here? .ar isn’t working obivously, although I don’t fully understand why :slight_smile:

Another question: If the modulating frequency is identical to the tone the resulting tone should sound identical to the pure tone. The difference, some articats I’m hearing here is the sound of the .kr method, right?

{SinOsc.ar(300, mul:SinOsc.kr(300, mul:0.7)).poll}.play;

Thanks for your time
Chris

.ar works fine over here…

{SinOsc.ar(400, mul:SinOsc.ar(200, mul:0.1))}.play;

.kr in the argument gives me a single frequency amplitude-modulated tone, .ar gives a complex tone with a 300 and 900 Hz component?

Ahh sorry I hadn’t understood your first post properly.

If you want every second wave form to be smaller you need to multiply by a step-function

something like:

{Pulse.ar(400).range(0,SinOsc.ar(800)) * 0.1}.plot

1 Like

For amplitude modulation, you get sum and difference tones. This should be well documented online: (sin a)(sin b) = 1/2 [cos(a-b) - cos(a+b)].

If the frequencies are the same, then a-b = 0 (inaudible) and a+b = 2a = 2b, an octave higher.

The same product-of-sines formula also explains the complex tone.

At kr, 374 is approaching Nyquist at that calculation rate.

hjh

1 Like

Ps. Also, there’s a non-band limited square wave… Also, nice idea re. Zwicker, happy SuperColliding!

{
	var freq = Line.ar(800, 1200, 0.025);
	var osc = SinOsc.ar(freq, 0);
	var step1 = LFPulse.ar(freq / 2, 0, 0.5) * 0.5 + 0.5;
	var step2 = Pulse.ar(freq / 2, 0.5) * 0.5 + 0.5;
	[osc * step1, step1, osc * step2, step2] * 0.1
}.plot(0.025)

Wow mindblowing :slight_smile:
But I don‘t get what‘s the purpose of the Line Ugen in the freq variable?

He’s just showing this waveform varying over a range of frequencies! (and contrasting LFPulse and Pulse - thanks for the reminder @rdd)