JUCE - Latest posts https://forum.juce.com Latest posts Getting void mouseMagnify() to work I understand this isn’t an audio feature but can the JUCE devs please have a look?

]]>
https://forum.juce.com/t/getting-void-mousemagnify-to-work/33295?page=2#post_22 Tue, 17 Mar 2026 14:53:51 +0000 forum.juce.com-post-305872
Shipping plugin audio samples with -73dB noise floor - acceptable or not? I’m recording at 192k, 24bit. But distributing down to 48k (or 44.1k) FLAC 24bit. To lower the noise floor I set my hardware synth master volume to around 80%, my audio interface to about 10% volume, and my SampleRobot midi trigger note to 120 velocity. This seems to give me the best noise floor.

Just wondering if distributing FLAC 24bit 44.1k or 48k is preferable?

The sounds are short plucks (from hardware synth) and percussion short hits. Normalized to -3db.

I think -73db noise floor is OK. The sounds won’t be stacked really, so the noise floor won’t pile up.

]]>
https://forum.juce.com/t/shipping-plugin-audio-samples-with-73db-noise-floor-acceptable-or-not/68484#post_3 Tue, 17 Mar 2026 14:42:15 +0000 forum.juce.com-post-305870
[GForce Software] Full-time Permanent UK-remote C++/Juce Developer needed 2026 Topics in the JUCE Jobs section of the forum are automatically closed to prevent a lot of spam replies. Please use any links in the original post to contact the poster, or use the forum’s direct messaging system.

]]>
https://forum.juce.com/t/gforce-software-full-time-permanent-uk-remote-c-juce-developer-needed-2026/68527#post_2 Tue, 17 Mar 2026 14:12:16 +0000 forum.juce.com-post-305868
[GForce Software] Full-time Permanent UK-remote C++/Juce Developer needed 2026 :rocket: We are looking for a full-time UK-based Software Developer (C++/JUCE/DSP) with ideally 2-3 years of experience and a passion for synthesisers to join our fully remote team and take the lead on developing inspiring instruments. Please share!

More info at GForce Software

Speak soon!

]]>
https://forum.juce.com/t/gforce-software-full-time-permanent-uk-remote-c-juce-developer-needed-2026/68527#post_1 Tue, 17 Mar 2026 14:12:16 +0000 forum.juce.com-post-305867
Stuttery resizing when OpenGLContext is attached Has anyone from the juce team had a chance to look at the commit yet? I tried reverting just this commit, but there are dependencies on other changes. The GUI then stops rendering altogether. I also tried rolling the branch back to the point before this change, but then I see that white rectangle again, which I described in this post Native title bar causes white rectangle before window initialisation - General JUCE discussion - JUCE.

]]>
https://forum.juce.com/t/stuttery-resizing-when-openglcontext-is-attached/68362#post_4 Tue, 17 Mar 2026 14:11:18 +0000 forum.juce.com-post-305866
Mapping a AudioParameterChoice to a Radio Button Group sensecheck Hi, I am currently struggling with the same issue here. I have one AudioParameterChoice that’s supposed to be managed by 4 mutually exclusive textButtons whose setClickingTogglesState mode i turned on (ticks don’t look good with what i’m trying to achieve and this way to do it matches exactly what I was going for). I am using setRadioGroupId to make them mutually exclusive.

However no matter how I set it up there are issues. Either the buttons don’t display the correct value or the AudioProcessorValueTreeState parameter doesn’t follow up, or the buttons don’t stay down after I clicked, etc.

More than fixing my code, i’d like to see a complete demonstration or example of how to set up radio buttons for a single parameter so I can decline and adapt it to the situations I could get myself into.

If anyone knows how to set that up, please show me. Otherwise I might be back in a few days if I figure it out myself.

]]>
https://forum.juce.com/t/mapping-a-audioparameterchoice-to-a-radio-button-group-sensecheck/18760#post_2 Tue, 17 Mar 2026 14:08:19 +0000 forum.juce.com-post-305865
DragAndDropContainer issue with SourceDetails (incl. fix) The documentation of DragAndDropTarget::SourceDetails states that localPosition may be null for calls such as isInterestedInDragSource(). Unfortunately this is exactly where this information is needed.

Components with a lot of graphical details use local hit detection to determine the anticipated drop action. For example, you probably don’t want to create a nested juce::Component for every note head on a staff in a notation app. The notation component will rather look for the note under the mouse and respond to isInterestedInDragSource() accordingly (e.g. expecting to drop a color swatch on the note head).

Fortunately the fix is trivial:

juce_DragAndDropContainer.cpp, line 314, ff

    while (hit != nullptr)
    {
        if (auto* ddt = dynamic_cast<DragAndDropTarget*> (hit))
        {
            auto p = hit->getLocalPoint (nullptr, screenPos);
            details.localPosition = p;
            if (ddt->isInterestedInDragSource (details))
                return std::tuple (ddt, hit, p);
        }
        hit = hit->getParentComponent();
    }

The function findTarget() operates on a copy of SourceDetails anyway, so setting localPosition immediately before calling isInterestedInDragSource() does the trick.

Please consider this fix for integration. Thank you.

]]>
https://forum.juce.com/t/draganddropcontainer-issue-with-sourcedetails-incl-fix/68525#post_1 Tue, 17 Mar 2026 08:17:25 +0000 forum.juce.com-post-305856
How do you approach persistence of audio data? In my experience FLAC is very useful to store user data in DAW sessions in a compressed format. Unless you plan for an enormous amount of long files stored in the preset/session, I thinks that would work well for most cases.

]]>
https://forum.juce.com/t/how-do-you-approach-persistence-of-audio-data/68504#post_4 Tue, 17 Mar 2026 04:54:53 +0000 forum.juce.com-post-305855
Add visual to Direct2D tree for use with WebView2? I am experimenting with the WebView2 Composition Controller for the goal of allowing the user to drag and drop files from their desktop into specific areas of my GUI. In order for the Composition Controller to work, it needs to have it’s “root visual” set which is part of the composition visual tree

See WebView2 Win32 C++ ICoreWebView2CompositionController | Microsoft Learn

Since we now use the D2D renderer which participates in the modern windows visual tree (see JUCE/modules/juce_gui_basics/native/juce_Direct2DHwndContext_windows.cpp at 501c07674e1ad693085a7e7c398f205c2677f5da · juce-framework/JUCE · GitHub ) it feels like it should be possible to create and insert another visual here that I can bind to the WebView2 Composition Controller.

Will this be made available in the future as an API, or is there a recommended path for forking my own way to get this capability?

]]>
https://forum.juce.com/t/add-visual-to-direct2d-tree-for-use-with-webview2/68518#post_1 Mon, 16 Mar 2026 23:36:22 +0000 forum.juce.com-post-305844
WebView Resize Jitter Bug Hi Anthony,

Thanks for your reply.

I’m seeing the same behaviour in Safari as well. However, Firefox seems to handle it fine.

For me it does occur regardless of which resize handle is used, but it does seem more pronounced when resizing from the top or left edges.

]]>
https://forum.juce.com/t/webview-resize-jitter-bug/68515#post_3 Mon, 16 Mar 2026 14:36:17 +0000 forum.juce.com-post-305840
WebView Resize Jitter Bug I see just as much (if not more) in Safari and Chrome (at east on macOS). It seems to only be a problem if you drag the left hand side of the window. Can you check if you’re seeing the same too? If so this might be difficult to pin down to being a JUCE issue. Interestingly though, I also have Arc installed and that seems OK.

]]>
https://forum.juce.com/t/webview-resize-jitter-bug/68515#post_2 Mon, 16 Mar 2026 14:19:28 +0000 forum.juce.com-post-305839
WebView Resize Jitter Bug I’ve noticed a resize jitter in WebBrowserComponent when resizing a window that contains it. This occurs on both macOS and Windows, within my own projects, and I’ve confirmed it also happens in the JUCE WebBrowserDemo.

When resizing:

  • If the browser content overflows on an axis, resizing appears smooth.
  • If the content has overflow: hidden on an axis, a white gap appears during resize.

For example:

  • If overflow is hidden on the X axis, a white gap appears on the right edge of the browser while resizing.
  • If overflow is hidden on the Y axis, the gap appears at the bottom edge.

To rule out background issues I tried:

  • Painting the JUCE component background black
  • Using withBackgroundColour() via withWinWebView2Options

However, the exposed area still appears white, so I’m not sure where the white background is coming from.

For comparison, this behaviour does not occur in Firefox or other browsers, where resizing the same content remains smooth without exposing a background gap.

I’ve tested this with JUCE 8.0.12 and the latest develop branch, and both exhibit the same behaviour.

I’ll attach an MP4 demonstrating the issue.

Has anyone else experienced this, or found any workarounds?

]]>
https://forum.juce.com/t/webview-resize-jitter-bug/68515#post_1 Mon, 16 Mar 2026 14:08:40 +0000 forum.juce.com-post-305838
About juce::String thread-safety status Thanks, but without any guarantee that it remains true in the future (even if it is almost sure it would), that’s hazardous IMHO to rely on it. I have a workaround ; but it would rely on moved juce::Stringdestruction to be thread-safe ; i’m sure it is ; but not guaranteed neither. :grin:

]]>
https://forum.juce.com/t/about-juce-string-thread-safety-status/68503#post_3 Mon, 16 Mar 2026 13:18:44 +0000 forum.juce.com-post-305837
How do you approach persistence of audio data? 6 minutes of stereo sound at 48 kHz is roughly 33 MB of data. If you store this inside the plug-in’s state, it gets saved inside the user’s project.

33 MB isn’t such a big deal, although DAWs might store the project’s plug-in state as base64-encoded binary data in an XML file, for example, which makes it more like 50 MB.

If the user has recorded less than 6 minutes, it will be worth storing only the actual data they recorded, not the whole buffer. This will make the project file smaller and saving faster.

A DAW such as REAPER will ask the plug-in to save itself every time the user changes a parameter, so ideally you want this to be fast enough to be unnoticeable.

The alternative is to store the recorded sound inside a file somewhere, but this would be outside of the DAW’s project file and the user will have to manage these files manually. You could make a folder named after your plug-in and store the recordings inside that folder. However, if the user moves the DAW project to a different computer, they would also have to copy the folder with these recordings.

(It would be nice if plug-in APIs could tell the host that a plug-in wants to store a file as part of the project, but that doesn’t exist, AFAIK.)

]]>
https://forum.juce.com/t/how-do-you-approach-persistence-of-audio-data/68504#post_3 Mon, 16 Mar 2026 12:51:57 +0000 forum.juce.com-post-305835
What is the best way to draw a Spectrogram using JUCE painting calls? There’s this saying going around about premature optimization. The my advice would be: build something simple that works first, then test and measure to find out whether you have a problem that needs solving.

The trick I mentioned doesn’t work with log scaling. But for that it may be a good solution to pre-warp the spectral data before turning it into an image.

]]>
https://forum.juce.com/t/what-is-the-best-way-to-draw-a-spectrogram-using-juce-painting-calls/68499#post_8 Mon, 16 Mar 2026 07:53:02 +0000 forum.juce.com-post-305798
Logic revalidating plugin on each run The version number for the AU version doesn’t come out the same, it will get converted to a Hex Integer in any case. Here is the relevant part of my .plist file:

<key>AudioComponents</key>
	<array>
		<dict>
			<key>version</key>
			<integer>132776192</integer>
		</dict>
	</array>

I don’t have a version number that is consistently causing rescans. We are not able to reproduce the issue, but a few users on older systems reported that Logic needs to rescan each time. So I thought it might be related to that version number failing when getting parsed. I can’t think of anything else, any ideas? Our plugins pass auval fine, they also pass the Logic scan fine, but for some reason they get rescanned on each run…

]]>
https://forum.juce.com/t/logic-revalidating-plugin-on-each-run/52683#post_8 Mon, 16 Mar 2026 07:50:30 +0000 forum.juce.com-post-305797
About juce::String thread-safety status The reference counter is a std::atomic<int> (see the StringHolder struct in juce_String.cpp), so I would assume that this makes it thread safe in the same way that std::shared_ptr or juce::ReferenceCountedObject is thread safe. Incrementing and decrementing should be safe across threads, but copying and assigning should be locked, as you mentioned.

]]>
https://forum.juce.com/t/about-juce-string-thread-safety-status/68503#post_2 Mon, 16 Mar 2026 06:48:04 +0000 forum.juce.com-post-305796
VST3 plugin GUI eats keyboard messages in desktop application One work around I think not 100% using a midi keyboard component should capture keypresses .

I had this issue a long time ago trying to make it act like Ableton style keypress to midi notes . I never resolved it, but it definitely does work with native windows . Maybe try to wrap just that portion that displays the plugins in native windows for each platform .

You should definitely disable that when it’s loaded in a daw as the keystrokes may collide .

]]>
https://forum.juce.com/t/vst3-plugin-gui-eats-keyboard-messages-in-desktop-application/68017#post_14 Mon, 16 Mar 2026 05:00:00 +0000 forum.juce.com-post-305795
How do you approach persistence of audio data? Best way would be to store it in the preset and let the user decide if they want to also keep the buffer I think.

Keep it in the plugin memory the entire time until they are ready to commit then restore the buffer from the preset.

I would think with each session you would end up taking up a lot disk space unless they were temporary files, but temp files I assume will get deleted at some point by the OS.

]]>
https://forum.juce.com/t/how-do-you-approach-persistence-of-audio-data/68504#post_2 Mon, 16 Mar 2026 01:06:40 +0000 forum.juce.com-post-305794
What is the best way to draw a Spectrogram using JUCE painting calls? That’s a good point! I need to be more careful about this. Perhaps using a FIFO to pass image strips from a background thread to paint()? I will try to do this.

]]>
https://forum.juce.com/t/what-is-the-best-way-to-draw-a-spectrogram-using-juce-painting-calls/68499#post_7 Sun, 15 Mar 2026 21:36:20 +0000 forum.juce.com-post-305790
ValidateMyPlugin.com — website to validate your vst3 and audio units Shame the site is down now :frowning:

]]>
https://forum.juce.com/t/validatemyplugin-com-website-to-validate-your-vst3-and-audio-units/52302?page=2#post_22 Sun, 15 Mar 2026 21:24:39 +0000 forum.juce.com-post-305789
Question about SamplerPlugin Example What is the purpose of the readerFactory in the processor side when the data model stores the readerFactory as well . And all the cloning .

]]>
https://forum.juce.com/t/question-about-samplerplugin-example/68510#post_1 Sun, 15 Mar 2026 21:08:11 +0000 forum.juce.com-post-305788
Data race in Spectrum Analyser Tutorial?
jonagon:

Is it true that you shouldn’t access an atomic in the audio thread?

A variable marked as atomic does not guarantee it’s lock-free, so I can understand why people say something like that. But it only happens in some rare situations, such as unaligned memory from a packed struct, or a large struct marked as atomic, not primitive variables. You can see the notes I wrote here: https://mu.krj.st/ctrl/#atomic-variables

In those cases, libatomic implements the access using a mutex, which is not real-time safe. It’s recommended to check atomic_is_lock_free.

]]>
https://forum.juce.com/t/data-race-in-spectrum-analyser-tutorial/65715?page=2#post_28 Sun, 15 Mar 2026 20:35:49 +0000 forum.juce.com-post-305787
What is the best way to draw a Spectrogram using JUCE painting calls? Updating an image in real-time might not be very efficient in Direct2D though, as it will have to go back and forth between RAM and VRAM. Maybe doing image strips of a given width would be more efficient?

]]>
https://forum.juce.com/t/what-is-the-best-way-to-draw-a-spectrogram-using-juce-painting-calls/68499#post_6 Sun, 15 Mar 2026 18:38:23 +0000 forum.juce.com-post-305783
How do you approach persistence of audio data? Hi, I’m new to JUCE development and I have a question about how best to approach storing recorded audio data between DAW sessions.

I’m working on a plugin similar to a live looper pedal. It records incoming audio samples in a single std::vector<float>.The vector has a fixed maximum size that is defined at initialization, about enough for 6 minutes of audio at 48 kHz.

The audio data is never stored on disk, so any recording is lost when the plugin session ends. Now I want to make sure that the recorded audio is stored on disk so that the sample memory persists between DAW sessions.

I can expand on the details and access patterns used with the samples vector if it helps. I didn’t want to bloat this post with too much information up front.

I’m wondering how an experienced JUCE developer would approach persisting this kind of audio data between DAW sessions. I am fairly new to plugin development so I don’t have an intuition for what is a good or bad approach. Any advice you can provide would be greatly appreciated.

]]>
https://forum.juce.com/t/how-do-you-approach-persistence-of-audio-data/68504#post_1 Sun, 15 Mar 2026 16:29:17 +0000 forum.juce.com-post-305773
About juce::String thread-safety status I have read-only copies of juce::String passed (safely with a lock) between two threads. Is the release guaranteed thread-safe (ala std::shared_ptr)? I can not find an explicit answer into the forum/documentation.

]]>
https://forum.juce.com/t/about-juce-string-thread-safety-status/68503#post_1 Sun, 15 Mar 2026 15:56:12 +0000 forum.juce.com-post-305772
What is the best way to draw a Spectrogram using JUCE painting calls?
hugoderwolf:

You could just render the colormap to a juce::Image in memory (at one pixel per time-frequency bin, and of course it makes sense to cache the already colormapped frames) and then draw it with a transform, which will then interpolate (gets you the gradients for free basically). But you should check on your target platforms whether it behaves as expected. The actual interpolation will be done (I think) by CoreGraphics / Direct2D and thus pretty fast. But I guess it might even be more efficient than drawing hundreds of gradients even with a software renderer.

Sure. I will try several approaches to see which is more reliable or consumes less CPU. I will definitely use a juce::Image in cache. One pixel per bin + Transformation seems to be a good idea, but it might not work well for log-scale freq axis? Technically I can also reduce the number of gradients using some explicit interpolation/smoothing methods. I will report it back if I get a practical implementation.

And thanks for the suggestions regarding Pro Tools. Somehow I messed up Pro Tools installation on my M chip MacBook :slight_smile: I should definitely contact the customer service sooner.

]]>
https://forum.juce.com/t/what-is-the-best-way-to-draw-a-spectrogram-using-juce-painting-calls/68499#post_5 Sun, 15 Mar 2026 12:54:55 +0000 forum.juce.com-post-305763
What is the best way to draw a Spectrogram using JUCE painting calls? You could just render the colormap to a juce::Image in memory (at one pixel per time-frequency bin, and of course it makes sense to cache the already colormapped frames) and then draw it with a transform, which will then interpolate (gets you the gradients for free basically). But you should check on your target platforms whether it behaves as expected. The actual interpolation will be done (I think) by CoreGraphics / Direct2D and thus pretty fast. But I guess it might even be more efficient than drawing hundreds of gradients even with a software renderer.

Plan some extra time to test this on ProTools (macOS). It does some weird things that I’ve seen no other hosts do.

YMMV, I used this trick to some extent and it works well enough for those cases, but I haven’t fully investigated the ins and outs of this approach.

]]>
https://forum.juce.com/t/what-is-the-best-way-to-draw-a-spectrogram-using-juce-painting-calls/68499#post_4 Sun, 15 Mar 2026 12:38:17 +0000 forum.juce.com-post-305762
What is the best way to draw a Spectrogram using JUCE painting calls? Thanks. I would stay with JUCE painting calls cause there are several elements that would take me forever to translate to OpenGL. Your idea seems to be close to cached image + gradient approach. I might try it first :slight_smile:

]]>
https://forum.juce.com/t/what-is-the-best-way-to-draw-a-spectrogram-using-juce-painting-calls/68499#post_3 Sat, 14 Mar 2026 23:27:40 +0000 forum.juce.com-post-305757
What is the best way to draw a Spectrogram using JUCE painting calls? If you are using OpenGL you could use a 2D texture, update successively horizontal lines of that texture (modulo width) and render texture so that the new line is always at the right edge of your frame. Works nicely and requires very little CPU/GPU.

]]>
https://forum.juce.com/t/what-is-the-best-way-to-draw-a-spectrogram-using-juce-painting-calls/68499#post_2 Sat, 14 Mar 2026 22:21:11 +0000 forum.juce.com-post-305756
What is the best way to draw a Spectrogram using JUCE painting calls? Hi! I am planning to add a rolling Spectrogram to one of my plugin. To make it clear, it is something like below, copied from a paper.

I know how to transfer the data from the audio thread to a background and how to forward the FFT. The problem is how to choose a proper way to reduce the pressure of the message thread:

  • should I draw each horizontal line as hundreds of rectangles or as a whole gradient?
  • should I cache the image and only updates the new line?

In general, I would assume a structure like this:

void background_thread_run() {
    fft.forward();
    lock_scope(mutex);
    // update some drawing things, like images/gradients/rectangle lists
}

void paint(juce::Graphics &g) {
    try_lock_scope(mutex);
    // if try lock succeeds, actual draw here
}

I notice that drowaudio/module/dRowAudio/gui/dRowAudio_Sonogram.cpp at 1d6e9efe1bd2edaeff8917b15424083bf652ec46 · drowaudio/drowaudio · GitHub uses the cached image + rectangles way. There are also some discussions here: Best method for sonogram display? .

]]>
https://forum.juce.com/t/what-is-the-best-way-to-draw-a-spectrogram-using-juce-painting-calls/68499#post_1 Sat, 14 Mar 2026 18:28:08 +0000 forum.juce.com-post-305755
Keyboard focus lost and KeyCommands stop working after instantiating an AUv3 in a JUCE-based host on iOS Hi JUCE Team,

I’m experiencing an issue with KeyCommands on iOS. When an AUv3 plugin is instantiated in my host, the application seems to lose keyboard focus, causing the key commands to stop working. They only start working again after I tap somewhere on the screen.

I tested with the latest Audio Plugin Host (develop branch) to see if the issue was related to how I manage them but I discovered it happens there too.

Could you please run some tests to investigate the cause of this issue?
If you need anything from my side, please don’t hesitate to ask.

I look forward to your response.
Best,
Samuele

]]>
https://forum.juce.com/t/keyboard-focus-lost-and-keycommands-stop-working-after-instantiating-an-auv3-in-a-juce-based-host-on-ios/68497#post_1 Sat, 14 Mar 2026 13:19:28 +0000 forum.juce.com-post-305751
Shipping plugin audio samples with -73dB noise floor - acceptable or not? I guess that depends on how noisy the original synth is. Some classics are quite noisy.

A -73 dB noise floor corresponds to a sampling bit depth of about 12 bits, which isn’t uncommon for older gear.

I don’t know about the -3 dB noise reduction. If this is for a synth, it probably won’t sit at full volume in the mix anyway.

]]>
https://forum.juce.com/t/shipping-plugin-audio-samples-with-73db-noise-floor-acceptable-or-not/68484#post_2 Sat, 14 Mar 2026 11:54:58 +0000 forum.juce.com-post-305748
JUCE / C++ Developer Needed – Real-Time DAW Collaboration Plugin (Paid Contract) Topics in the JUCE Jobs section of the forum are automatically closed to prevent a lot of spam replies. Please use any links in the original post to contact the poster, or use the forum’s direct messaging system.

]]>
https://forum.juce.com/t/juce-c-developer-needed-real-time-daw-collaboration-plugin-paid-contract/68490#post_2 Sat, 14 Mar 2026 07:23:40 +0000 forum.juce.com-post-305739
JUCE / C++ Developer Needed – Real-Time DAW Collaboration Plugin (Paid Contract) Hello,

I’m looking for an experienced JUCE / C++ developer to help build an MVP of a VST3 plugin focused on real-time collaboration between DAWs.

Requirements:

  • Strong C++

  • Experience building VST3 plugins with JUCE

  • Understanding of real-time audio constraints

  • Experience with networking (low latency preferred)

  • Mac + Windows build support

This is a based paid contract engagement with potential for long-term involvement.

Thanks,
Gideon

]]>
https://forum.juce.com/t/juce-c-developer-needed-real-time-daw-collaboration-plugin-paid-contract/68490#post_1 Sat, 14 Mar 2026 07:23:39 +0000 forum.juce.com-post-305737
UI flickers white squares on Windows Puts me in mind of this issue: Native title bar causes white rectangle before window initialisation - General JUCE discussion - JUCE

When I was seeing that, it was a white square in the middle of the component while the message queue was getting choked up during initialisation. You seem to be getting a similar artefact in one component, but partially masked by another one which draws over it. But then there are some other flickers as well…

]]>
https://forum.juce.com/t/ui-flickers-white-squares-on-windows/68483#post_2 Sat, 14 Mar 2026 01:41:00 +0000 forum.juce.com-post-305733
Shipping plugin audio samples with -73dB noise floor - acceptable or not? I’m multisampling my hardware synth and putting some of those in my plugin.

After a lot of experimenting with synth volume, and Sample Robot, I’m getting my samples in at 192k 24 bit. And I plan to convert them down to 44.1khz FLAC (or 48k..not sure yet)

Anyway, this noise floor question is one I’ve been wrestling with. My synth sample I am high passing at 48hz, and low passing at 18khz.

I am normalizing to -3dB, and then LP HP, and my noise floor is -73dB. Is this acceptable? I took a profile of the noise in Izotope RX (7 Standard) and if I apply a -3dB noise reduction my noise floor is -80dB. Trouble is, I don’t want to take any good frequencies out of my sample body, so might not bother with the spectral noise reduction.

Just wondering what you thought of my workflow (my target 44.1 or 48 bitrate(??), normalizing to -3db, and noise floor etc.)?

My plugin won’t stack sounds, its more like a mono arp kind of thing.

]]>
https://forum.juce.com/t/shipping-plugin-audio-samples-with-73db-noise-floor-acceptable-or-not/68484#post_1 Fri, 13 Mar 2026 22:58:55 +0000 forum.juce.com-post-305728
UI flickers white squares on Windows Lastest develop, user report, I haven’t reproduced yet. Anybody else seeing this?

Refx2 IMG 1208

Refx3 IMG 1207

]]>
https://forum.juce.com/t/ui-flickers-white-squares-on-windows/68483#post_1 Fri, 13 Mar 2026 22:28:34 +0000 forum.juce.com-post-305727
Dsp steps I don’t think you’ll find any help in these forums. Most members are against AI-generated content. Not only is your problem not interesting to them, but the fact that every single post you have written is also generated by AI is a big turn-off.

Nobody here is interested in solving AI-related problems. You let a plagiarism machine generate garbage and then wonder how to improve the output to be less garbage.

At that point, it’s too late.

]]>
https://forum.juce.com/t/dsp-steps/67794#post_17 Fri, 13 Mar 2026 22:17:00 +0000 forum.juce.com-post-305726
Dsp steps Thanks for sharing the link. The video seems to focus on automated mastering services, which isn’t quite the problem space I’m looking at.

I’m not trying to automate mastering or improve mixes in a general sense. The question I’m exploring is narrower: whether small perceptual improvements can be made on a finished stereo render using lightweight DSP (e.g., dynamic spectral shaping) to reduce upper-band harshness or fatigue in AI-generated material when stems aren’t available.

So the interest is really about the limits of post-render DSP, rather than mastering automation.

]]>
https://forum.juce.com/t/dsp-steps/67794#post_16 Fri, 13 Mar 2026 20:34:38 +0000 forum.juce.com-post-305725
Cubase strangeness We still have this code added to our Juce repos (which we have to update every time we update Juce for a project) :

        /** The time actually provided by the host. May be negative, as opposed to timeInSamples */
        info.actualTimeInSamples = processContext.projectTimeSamples;


]]>
https://forum.juce.com/t/cubase-strangeness/68408#post_7 Fri, 13 Mar 2026 18:26:28 +0000 forum.juce.com-post-305723
Logic revalidating plugin on each run If your version is 2026.1 that change shouldn’t have any change on the version number reported, it looks like it would only have a change if you had four parts to the version number. As you have two parts, I would expect the version number to come out the same?

Have you got a version number that is consistently causing rescans? it should be repeatable for everybody. If so, is 2026.1 an example of a version causing this issue? Maybe it requires a specific Logic or auval version (in which case maybe logic or the auval version installed are at fault?)

I assume 2026.1 comes out as 0x07EA0100? I think it should be split like so

0xAAAABBCC where

  • A represents the Major version (in this case 2026), converted to hex (0x07EA)
  • B represents the Minor version (in this case 1), converted to hex (0x01)
  • C represents the Patch version (in this case 0), converted to hex (0x00)

This does mean there are limits to the numbers but 2026.1 should be fine, and even if it wasn’t I would have hoped that any change in the version number would only result in the plugin being scanned once?

Something in the back of my mind is telling me that I recall some issue in which going to a lower version caused an issue. However, IIRC the issue was that the plugin wasn’t being scanned rather than it was continuously being scanned, and this would have been a long time ago!

The thing I reported about a version number of 0 was something Apple told me about. The idea is that you can set the version number to 0 during development (or for debug builds) and then your plugin should always be scanned.

I can’t think of anything else that would cause it to continuously scan.

]]>
https://forum.juce.com/t/logic-revalidating-plugin-on-each-run/52683#post_7 Fri, 13 Mar 2026 18:11:03 +0000 forum.juce.com-post-305722
Logic revalidating plugin on each run Thanks for getting back to me. Interestingly we still have users reporting this, mostly on older systems.
Maybe this commit is related?

Our versions are formatted like this: year.version (for example 2026.1). This is getting quite a large number when converted to a hex integer - could this be the cause?

]]>
https://forum.juce.com/t/logic-revalidating-plugin-on-each-run/52683#post_6 Fri, 13 Mar 2026 17:26:39 +0000 forum.juce.com-post-305721
Dsp steps adding low-pass filter at 20Hz would produce the most natural result

]]>
https://forum.juce.com/t/dsp-steps/67794#post_15 Fri, 13 Mar 2026 10:24:20 +0000 forum.juce.com-post-305714
Logic revalidating plugin on each run Can’t remember precisely but I think in my case it was related to the version issue Anthony mentioned.

]]>
https://forum.juce.com/t/logic-revalidating-plugin-on-each-run/52683#post_5 Fri, 13 Mar 2026 10:22:26 +0000 forum.juce.com-post-305713
JUCE8 rotated Font-rendering bug with OpenGL (fixed) Update: This problem has been solved in juce.

]]>
https://forum.juce.com/t/juce8-rotated-font-rendering-bug-with-opengl-fixed/68240#post_2 Fri, 13 Mar 2026 10:09:25 +0000 forum.juce.com-post-305711
Logic revalidating plugin on each run Did this solve your issue? We also get reports of plugins getting revalidated on each run and we also pass auval just fine…

]]>
https://forum.juce.com/t/logic-revalidating-plugin-on-each-run/52683#post_4 Fri, 13 Mar 2026 06:24:38 +0000 forum.juce.com-post-305707
Data race in Spectrum Analyser Tutorial?

Makes sense! Since you are pulling elapsed * sample_rate samples from processor FIFO every editor timer fire, are you using an atomic index pointing to the end of the most recently written FIFO data that updates every block

No, I use an abstract FIFO, similar to juce::AbstractFifo to wrap the buffer. As far as I know you need at least two atomics for an abstract FIFO. Only in such way I can pull arbitrary number of samples from the FIFO, in a safe way.

]]>
https://forum.juce.com/t/data-race-in-spectrum-analyser-tutorial/65715?page=2#post_27 Fri, 13 Mar 2026 00:26:34 +0000 forum.juce.com-post-305701
Dsp steps Follow-up: perceptual DSP intervention on finished stereo mixes

A few months ago I asked about improving listening comfort in AI-generated music using post-render DSP. Since then I’ve narrowed the scope considerably.

The question is no longer about “fixing” vocals or source separation. I’m only interested in whether a small perceptual improvement band exists when working strictly on a finished stereo mix.

Constraints:

Input: rendered stereo track with embedded vocals

No stems available

No source separation or ML reconstruction

Processing must be lightweight deterministic DSP

No structural remixing or editing

The observation prompting the question is that many AI-generated tracks exhibit upper-band vocal harshness / spectral edge that creates listening fatigue even when the musical content is otherwise acceptable.

Core question:

When operating only on the final stereo signal, is there a meaningful perceptual improvement band where constrained DSP (e.g. dynamic spectral shaping, de-harshing, masking-aware processing) can reduce perceived harshness or fatigue without introducing obvious artefacts?

I’m not expecting a universal solution—just curious whether developers working on audio effects have encountered similar limits or techniques when dealing with mixed stereo material.

Interested in any thoughts from people who build or work on perceptual audio processors.

]]>
https://forum.juce.com/t/dsp-steps/67794#post_14 Thu, 12 Mar 2026 23:11:42 +0000 forum.juce.com-post-305700
A question about midi lane accessibility from a plugin I can image some DAWs might use the operating system’s drag-and-drop API when dropping MIDI clips into other windows. Your plugin could the receive it (probably as a MIDI file) via juce::DragAndDropTarget.

Though I tested it in Reaper, Ableton Live and FL Studio on Windows and none of them does this.

]]>
https://forum.juce.com/t/a-question-about-midi-lane-accessibility-from-a-plugin/68455#post_2 Thu, 12 Mar 2026 19:36:48 +0000 forum.juce.com-post-305687