Playback cursor out of sync!

Superior Drummer 3 Help
Viewing 2 replies - 61 through 62 (of 62 total)
  • Robert
    Participant

    Dunno but maybe synchronise the visual delay to the audio latency? Something like:

    #include

    class VisualDelayAudioProcessor : public juce::AudioProcessor
    {
    public:
    VisualDelayAudioProcessor() {}
    ~VisualDelayAudioProcessor() override {}

    void prepareToPlay (double sampleRate, int samplesPerBlock) override
    {
    // Get the audio latency from the audio device (in seconds)
    audioLatencyInSeconds = getLatencySeconds();
    audioLatencyInSamples = static_cast(sampleRate * audioLatencyInSeconds);
    }

    void releaseResources() override {}

    void processBlock (juce::AudioBuffer& buffer, juce::MidiBuffer& midiMessages) override
    {
    // Process audio here (e.g., pass-through or modify audio)
    // In this example, we’re just passing the audio buffer as-is
    }

    bool isBusesLayoutSupported (const BusesLayout& layouts) const override
    {
    // We support a stereo input and output layout
    return layouts.getMainOutputChannelSet() == juce::AudioChannelSet::stereo() &&
    layouts.getMainInputChannelSet() == juce::AudioChannelSet::stereo();
    }

    const juce::String getName() const override { return “VisualDelayAudioProcessor”; }

    bool hasEditor() const override { return true; }
    juce::AudioProcessorEditor* createEditor() override { return new VisualDelayAudioProcessorEditor (*this); }

    // Get the audio latency in samples
    int getAudioLatencyInSamples() const { return audioLatencyInSamples; }

    private:
    double audioLatencyInSeconds = 0.0;
    int audioLatencyInSamples = 0;
    };

    class VisualDelayAudioProcessorEditor : public juce::AudioProcessorEditor
    {
    public:
    VisualDelayAudioProcessorEditor (VisualDelayAudioProcessor& p)
    : AudioProcessorEditor (&p), processor (p)
    {
    setSize (400, 300);

    // Set up the visual component (a simple rectangle that will move based on latency)
    addAndMakeVisible (visualDelay);
    }

    void resized() override
    {
    visualDelay.setBounds (10, 10, 50, 50); // Position of the visual object
    }

    void paint (juce::Graphics& g) override
    {
    g.fillAll (juce::Colours::black);

    // Synchronize the visual delay to the audio latency
    float delayXPosition = processor.getAudioLatencyInSamples() / 10.0f; // Scale the delay
    visualDelay.setBounds (10 + static_cast(delayXPosition), 10, 50, 50);

    g.setColour (juce::Colours::red);
    g.fillRect (visualDelay.getBounds()); // Draw the visual element
    }

    private:
    VisualDelayAudioProcessor& processor;
    juce::Rectangle visualDelay;
    };

    // Create the plugin instance
    juce::AudioProcessor* JUCE_CALLTYPE createPluginFilter()
    {
    return new VisualDelayAudioProcessor();
    }


    Operating system: macOS Sequoia (15)
    Bradley Davis
    Participant

    Thanks for the reply John,

    I appreciate you.

    I will try and minimize other big plugins while I am using the grid editor and see if it does the trick!

    Brad


    Superior Drummer 3 version: 3.3.7
    Operating system: Windows 10
Viewing 2 replies - 61 through 62 (of 62 total)

No products in the cart.

×