Strange results going from Windows Driver to ASIO

Hi there,

I’ve been developing an amp simulator for the better part of a year now, and when using the standalone plugin with the Windows Driver setting it sounds great, albeit only outputting from one speaker.

However, when I change it to ASIO (I’ve done all the Steinberg SDK stuff) I lose a lot of top end clarity, and there’s a weird distortion that becomes present, almost like the signal is being overloaded. This also comes out of a single speaker, although the reverb comes out of both.

I’ve used a lot of filter banks to sculpt the guitar tone, which I’ve used ProcessorDuplicator for. The only other elements in the chain are a Waveshaper using the function: x / (std::abs(x) + 1) and a Convolution module. Oh, also a JUCE’s reverb class and a few gain sections (input/output) which I’ve ranged appropriately.

I have no idea why it is doing this. The perfect result happens using the Windows Driver, but exporting the VST to Ableton and switching to ASIO yields a wooly, lifeless and farty result.

Anyone have any ideas? The code is part of a wider project that I can get in trouble for sharing, so any help would be much appreciated. Thanks.

A few questions:

  • What ASIO driver is it?
  • Has the sample rate changed?
  • Has the block size changed? (this might expose issues in the code)
  • Can you look at the result in an analyser and see if the levels or spectrum balance have changed?
  • What do you mean by exporting the VST to Ableton?

Hi there,

  • Its my Focusrite 2i2, whatever driver is used in that

  • No, I have Ableton set to 44100Hz also, although I’m using spec.sampleRate so it should line up with any rate

  • This I’m not sure about. I’m processing using context replacing, and don’t really know how I’d investigate block size…

  • I could, but if they’ve changed then that’s part of the original problem

  • By exporting I mean I’ve built the VST3 and put it into the plugins folder Ableton uses

Your description doesn’t sound particularly like a block size issue, but if you want to investigate that further you’d have to monitor the buffer sizes in each process_block() call. You could keep track of min, max, avg for instance.

Thinking about your description again, it could be a phase cancellation issue or maybe even comb filtering. Check whether you have a stereo signal being summed to mono, or if there is a delayed version of the signal being mixed in from somewhere.

I have a feeling that certain elements in the processorChain are being summed to mono despite having used processorduplicator where appropriate.

How would I check whether summing to mono is the case?

Thanks for the help, I appreciate that I’m asking a lot of questions haha

Look at the output with a goniometer - if you see a perfectly vertical line then it’s mono.

If you’re super keen you could always try testing some of the code in DSP-Testbench :slight_smile:

Awesome thank you for the suggestions.

I’ll give the Testbench a go as well as the goniometer. Hopefully they yield some direction.

All the best, I’ll keep you updated!