Oscillator amplitude below 100 Hz

I built a sine sweep utility to test some plug-ins for aliasing and distortion and noticed a “buglet”. The amplitude of sine waves with a frequency less than about 100 Hz is less than full-amplitude. The amplitude ramps up from 20 Hz to about 100 Hz and then is dead even. There is a about a 6 db ramp from the amplitude at 20 Hz to when it reaches full amplitude.

I am not sure what the exact frequency is where it reaches full amplitude.

@taylor: is this a known thing.

Is it expected?

I’m curious, how this being measured?

Also is this just the OSC node or is the phasor-based waveforms also affected?

I have used both the OSC node and Basic Vco module.

I first noticed it by sweeping the frequency from 20 Hz to 16 kHz and recording it. Nothing in the patch changes the amplitude. The amplitude shift is obvious if you record it to disk and open in s sample editor. The amplitude is perfectly level through most of the range.

You could also compare a constant sine at say 20 or 50 Hz and ones at higher frequencies.

Give it a try and let me see if you see anything different.

I was testing within Audulus and was not able to replicate.

Are you recording through an audio interface or as a plug-in?

My hypothesis if you are recording through an interface is there might be some energy lost from the high pass filter keeping the signal AC-coupled.

1 Like

I am recording in AUM direct from the Audulus output to file. So it isn’t going through an interface. I’ll test your hypothesis by recording to other apps as well and using a test tone file in AUM’s file player to see if it also changes just by passing through AUM.

Can you try recording your tones to file in a similar way?

1 Like

If you are using the factory “speaker” module as the output rather than the Speaker node or DAC node, there is a DCblocker node inline with the audio which rolls off low frequency response. Connect your oscillator directly to the DAC node.

3 Likes

Thanks! That was the problem. Using the DAC for output solved it. It never occurred to me to look inside the speaker module…and it might not have occurred to me that DCblocker would have that effect. Good to know.

Ah I fell asleep. :zzz: but I am happy to see that it was likely a DC-blocker in the chain somewhere :slight_smile:

I was doing some testing using AUM and Audiobus 3 and did notice that the response of level meter in AUM seems to be a bit low below about 50 Hz. In comparison the level meter in Audiobus 3 shows Audulus as dead flat from 0 Hz up.

1 Like

Fwiw, I wasn’t going by the meters. I was looking at the rendered file. Using the DAC, the sweep file is perfectly level. Another interesting thing is that the speaker node seems to introduce some artifacts (seems to be both harmonic distortion and maybe a wee bit of aliasing) near its maximum setting with loud signals. I am not 100% certain of that but some anomalies in a spectrogram app appear when I use the speaker mode and not with dac node output.

You probably want to attenuate the output of the oscillator somewhat before creating the sweep. The oscillator node is anti-aliased but that wouldn’t be applicable to a sine in any case. Since a sweep is essentially FM of the oscillator however, you will inevitably create some sidebands. I would think that the speaker node and DAC run the same code, but I can’t really say for certain. The speaker node will be deprecated in A4 so it’s probably a good idea to use the ADC and DAC nodes in any case.

1 Like

Fwiw, unattenuated through the DAC results in what I expect. The sweep is slow. So, no sidebands are created. I was previously running through the input/output modules (not node) that have the speaker icon.

Is there straightforward math to map the osc amplitude input to a minus dB number when using amplitude less than 1?

I want to build some simple tools for audio analysis.

You might find this useful. I took it out of my liner-exponential VCA module. It has a range of -120 to +3 dB gain:
34%20PM
I split the formula to get a dB readout. The expression for gain in dB is gain = 20log10(Vout/Vin)
gain in dB.audulus (4.4 KB)

1 Like

Thanks so much!

Thanks. Follow-up question. Do you have any idea how the amplitude input values for the osc node map to dB?

For the sake of cleanness, I am trying to do as little manipulation of the OSC node’s output as possible.

The dB levels as reported by Twisted Wave.

At 1, the level is 0db (maximum possible digital level)
At 0.9, the level reads 0.92
At 0.75, the level is -2.5
At 0.725, the level is -2.79
At .70, the level is -3.1
At 0.5 the level is -6.02
At 0.2, the level is -14

The dB scale is logarithmic. If 1 is your 0 reference then g = 20log10(a) or 10^(g/20) = a where g is gain in dB and a = amplitude. -6 dB is 0.5
15%20PM
There is also a dBA scale which is frequency weighted to more closely resemble human hearing response.

1 Like

Thanks so much.