Internal sample rate conversion, plugin sample rates, etc

I have a signal chain which is not used for performance, unless recorded music playback is considered “performance.” Latency is not an issue. I’d like to understand when and how GP does sample rate conversion.

If I set the sample rate to 88200 Hz in the “Audio Properties…” menu, and the Windows playback device is not playing at that rate, does GP resample it? Even if the sample rate is the same, does GP change the sample type (bit depth, int16, float, double, etc) to something other than the input device’s bit depth?

How does GP negotiate sample rates and bit depth with and between plugins? Can it ask for the same rate as set in audio properties, or does it use something else internally? Assuming plugins may or may not support the desire sample rate, what does GP do? Can resampling be avoided?

What sample rate and type are used for the output? Can the input and output rates be set to different values? Ditto for bit depth/type.

Finally, which sample rate converter (OSS codebase such as SSRC, home grown, etc) does GP use. Is it user-configurable? Is there any way to select dither PDFs or noise shaping curves? Numeric precision?

Thanks,

  • Eric

It doesn’t do sample rate conversion!

You specify what sample rate in GP you want from the list of rates that the audio interface claims it supports and GP will then tell the audio interface to run at that rate.
Plugins have to run at that same sample rate, that’s how it works. If the plugin doesn’t support the desired rate, you’re out of luck.

Not sure what you’re trying to do but this is how audio plugins work in general.

1 Like

It may be that simple, but may not be, which is why I ask.

For example, and IIRC, Pro Tools AAE locks the sample rate for each processing graph (plugins, etc, per track and bus, etc) at a single, consistent session sample rate. (TDM, as used in their older products, doesn’t even specify the data format for each device’s time slice in the stream.) On the other hand, it converts all input data to float: either single 32-bit or double 64-bit precision. Additionally, it can negotiate with VST3 plugins, so that a high precision 64-bit session may convert to 32-bit for a plugin that only accepts single precision. Complicating matters, some plugins with optional “high precision” modes may resample 32-bit inputs and use 64-bit at higher sample rates internally. I don’t know if they’d advertise 64-bit only in the setup negotiation and PT would do the SRC.

There might be sample rate or format conversion in GP for other reasons to, such as to ensure reliability on low power CPUs. Anything is possible.

I don’t want to dismiss your answer out of hand, dhj. But I must ask if you’re one of the developers who knows the code. I have no idea who’s who in this community.

Thanks,

  • Eric

He is the owner and also the lead developer (although some parts are partly delegated to a small number of very good developers).

He really knows the ins and outs

4 Likes

Thanks, @Frank1119. I’ll mark it as the solution.

That’s what you think!

Actually, I consider Eldad (@dadi) to be the lead developer these days and he beats me up quite regularly :grimacing:

2 Likes

It is!

Actually, I’m rather baffled as to why you ask. What are you trying to do where such things would be relevant?

I’m evaluating GP as a VST host to improve poor quality recordings on the fly. Remastering on the fly? And for the fun of it – the Dorrough meter plugin atop the rack makes me happy!

There are umpteen possible stages in the signal chain where SRC could kick in. I don’t want quantization noise, or any other artifacts caused by, for example, poor/no anti-aliasing filters, to accumulate unless absolutely necessary. There’s no noisy live music venue with less-than-optimal acoustics to mask low level garbage.

Here’s the signal chain at the moment:

music server/streaming (roon)
 -> LAN (RAAT)
 -> roon bridge (to wasapi)
 -> virtual cable (VAC)
 -> GP 
 -> virtual cable (VAC)
 -> preamp (camillaDSP)
 -> virtual cable (VAC)
 -> speaker crossover, 2->8 channels (camillaDSP)
 -> VB-Matrix (eight channel wasapi -> ASIO)
 -> SSL 18 (ASIO in/analog out)
 -> eight amp channels
 -> stereo speakers and sub(s)

I’ve managed to get this running under Windows glitch-free with everything locked at 24/88200 and roon doing the SRC up front as necessary. Every other VST host I evaluated besides GP has either been inappropriate for my purpose(s), or was unreliable.

What about the internal sample format? float? double? int? variable?

I put it to the test: GP uses, as far as I can tell, floating point with single precision.

Yes, what @dhj and @Frank1119 wrote is correct.
There is no SRC, all internal audio routings process the same SR using float 32bit.

The only exception where SRC is used is on streaming audio with external DAW using GP Relayer plugin. If the SR mismatches between the instances, then SRC automatically applied behind the scenes. But that is relevant only to GP Relayer plugin.

3 Likes