# New plugin: PianoRes, for adding damper resonance to sampled pianos

**URL:** <https://discourse.zynthian.org/t/new-plugin-pianores-for-adding-damper-resonance-to-sampled-pianos/13099>\
**Category:** Related Projects\
**Tags:** soundfont, sfizz\
**Created:** [May 5, 2026, 4:14am UTC](https://discourse.zynthian.org/t/new-plugin-pianores-for-adding-damper-resonance-to-sampled-pianos/13099 "2026-05-05T04:14:00Z")\
**Posts on this page:** 14\
**Page:** 3

<div class="post-metadata">

**Author:** ![hannesmenzel](https://discourse.zynthian.org/user_avatar/discourse.zynthian.org/hannesmenzel/32/13014_2.png) [@hannesmenzel](https://discourse.zynthian.org/u/hannesmenzel)\
**Post date:** [July 27, 2026, 3:51pm UTC](https://discourse.zynthian.org/t/new-plugin-pianores-for-adding-damper-resonance-to-sampled-pianos/13099/41 "2026-07-27T15:51:27Z")

</div>

> [@riban](#):
>
> I believe that JUCE supports mapping text value to float values

Yes, but I guess these are “dummy” enums mapped to “dummy” integer values distributed over the range of normalized floating point parameters. Like 0.f - 0.5f = int=1 = “off” and are likely only display values reported to the host. Same with scaled float parameters (like 20Hz to 20.000 Hz with 500 Hz in the middle mapped to normalized float).

I must confess I’m more into Iplug than JUCE, but am pretty sure different plugin formats internally only accept normalized values.

> **[VST 3 SDK: Parameter Class Reference](https://steinbergmedia.github.io/vst3_doc/vstsdk/classSteinberg_1_1Vst_1_1Parameter.html)**

---

<div class="post-metadata">

**Author:** ![jofemodo](https://discourse.zynthian.org/user_avatar/discourse.zynthian.org/jofemodo/32/2_2.png) [@jofemodo](https://discourse.zynthian.org/u/jofemodo)\
**Post date:** [July 27, 2026, 6:56pm UTC](https://discourse.zynthian.org/t/new-plugin-pianores-for-adding-damper-resonance-to-sampled-pianos/13099/42 "2026-07-27T18:56:15Z")

</div>

If JUCE team want to support embedded devices that use audio plugins, they should add support for the LV2 special features that allow separation between DSP and GUI. Supporting text parameters is a “must” for this. If the other plugin formats don’t support this, it’s because these plugin formats are not designed to be used in embedded devices (headless). Currently, the only audio-plugin format that fully works for embedded devices is LV2.

I don’t think it’s something really difficult to implement, they simply need good reasons to do it 😉

Regards,

---

<div class="post-metadata">

**Author:** ![hannesmenzel](https://discourse.zynthian.org/user_avatar/discourse.zynthian.org/hannesmenzel/32/13014_2.png) [@hannesmenzel](https://discourse.zynthian.org/u/hannesmenzel)\
**Post date:** [July 27, 2026, 7:00pm UTC](https://discourse.zynthian.org/t/new-plugin-pianores-for-adding-damper-resonance-to-sampled-pianos/13099/43 "2026-07-27T19:00:39Z")

</div>

> [@jofemodo](#):
>
> they should add support for the LV2 special features that allow separation between DSP and GUI

> **[Distributed Plugins](https://github.com/iPlug2/iPlug2/wiki/Distributed-Plugins)**
>
> C++ Audio Plug-in Framework for desktop, mobile, xr and web - iPlug2/iPlug2

Long ago I was into this that much, but Iplug2 supported something like distributed plugins for web audio modules (like plugins in your browser) and possibly vst3.

---

<div class="post-metadata">

**Author:** ![jofemodo](https://discourse.zynthian.org/user_avatar/discourse.zynthian.org/jofemodo/32/2_2.png) [@jofemodo](https://discourse.zynthian.org/u/jofemodo)\
**Post date:** [July 27, 2026, 7:09pm UTC](https://discourse.zynthian.org/t/new-plugin-pianores-for-adding-damper-resonance-to-sampled-pianos/13099/44 "2026-07-27T19:09:12Z")

</div>

If this were true, then VST3 may support text parameters. If not, how can you tell the DSP what samples, neural models or IR to load?

AFAIK, VST3 doesn’t support text parameters, so this supposedly “GUI separation” only works partially. Same than some JUCE plugins work in zynthian while they don’t need to load samples, IRs, neural models, etc. If you want to do so, then you need the native GUI.

Regards,

---

<div class="post-metadata">

**Author:** ![jlearman](https://discourse.zynthian.org/letter_avatar_proxy/v4/letter/j/a698b9/32.png) [@jlearman](https://discourse.zynthian.org/u/jlearman)\
**Post date:** [July 27, 2026, 7:13pm UTC](https://discourse.zynthian.org/t/new-plugin-pianores-for-adding-damper-resonance-to-sampled-pianos/13099/45 "2026-07-27T19:13:01Z")

</div>

According to Google AI,

> To pass literal text or binary data blocks from the editor (controller) to the DSP (processor), VST3 relies on **asynchronous messaging via connection points**. [[1](https://github.com/vvvv/VL.Audio.VST), [2](https://www.kvraudio.com/forum/viewtopic.php?t=550116&start=345)]

---

<div class="post-metadata">

**Author:** ![hannesmenzel](https://discourse.zynthian.org/user_avatar/discourse.zynthian.org/hannesmenzel/32/13014_2.png) [@hannesmenzel](https://discourse.zynthian.org/u/hannesmenzel)\
**Post date:** [July 27, 2026, 7:15pm UTC](https://discourse.zynthian.org/t/new-plugin-pianores-for-adding-damper-resonance-to-sampled-pianos/13099/46 "2026-07-27T19:15:14Z")

</div>

> [@jofemodo](#):
>
> If this were true, then VST3 may support text parameters. If not, how can you tell the DSP what samples, neural models or IR to load?

It might be that here separation doesn’t mean that one part can work without the other. I’m pretty sure vst3 parameters do not support text.

Anyway, I really want to make clear that I fully support the idea, I was just thinking about what the assumption that LV2 is the only plugin format supporting parameters of any other type than float/double means for a cross platform cross format framework.

---

<div class="post-metadata">

**Author:** ![jlearman](https://discourse.zynthian.org/letter_avatar_proxy/v4/letter/j/a698b9/32.png) [@jlearman](https://discourse.zynthian.org/u/jlearman)\
**Post date:** [July 27, 2026, 7:20pm UTC](https://discourse.zynthian.org/t/new-plugin-pianores-for-adding-damper-resonance-to-sampled-pianos/13099/47 "2026-07-27T19:20:56Z")

</div>

According to [JeffMcClintock](https://forum.juce.com/u/jeffmcclintock), his GMPI Plugin SDK supports it. (Why we need another format I do not know.)

---

<div class="post-metadata">

**Author:** ![jofemodo](https://discourse.zynthian.org/user_avatar/discourse.zynthian.org/jofemodo/32/2_2.png) [@jofemodo](https://discourse.zynthian.org/u/jofemodo)\
**Post date:** [July 27, 2026, 7:30pm UTC](https://discourse.zynthian.org/t/new-plugin-pianores-for-adding-damper-resonance-to-sampled-pianos/13099/48 "2026-07-27T19:30:16Z")

</div>

> [@hannesmenzel](#):
>
> It might be that here separation doesn’t mean that one part can work without the other. I’m pretty sure vst3 parameters do not support text.

Touché! Then, we could say that VST3 has partial support for GUI / DSP separation. And of course, this is better than not supporting it at all.

In the other hand LV2 has full support for GUI / DSP separation because it supports text parameters, among other features like banks/presets, etc.

Cheers!

---

<div class="post-metadata">

**Author:** ![hannesmenzel](https://discourse.zynthian.org/user_avatar/discourse.zynthian.org/hannesmenzel/32/13014_2.png) [@hannesmenzel](https://discourse.zynthian.org/u/hannesmenzel)\
**Post date:** [July 27, 2026, 7:38pm UTC](https://discourse.zynthian.org/t/new-plugin-pianores-for-adding-damper-resonance-to-sampled-pianos/13099/49 "2026-07-27T19:38:35Z")

</div>

> [@jofemodo](#):
>
> Touché!

😵

While I understand why the ability for text parameters supports headless plugin usage, I didn’t fully understand why the DSP/UI separation is necessary for it. But I get the basic point. But I guess it would be at least necessary that whenever you give the ability to load a file in juce (juce::file; juce::filechoser or the lot) that it is handled by the UI in other plugin formats, but can somehow auto-create a textual parameter in LV2 on compile time.

---

<div class="post-metadata">

**Author:** ![jlearman](https://discourse.zynthian.org/letter_avatar_proxy/v4/letter/j/a698b9/32.png) [@jlearman](https://discourse.zynthian.org/u/jlearman)\
**Post date:** [July 27, 2026, 7:41pm UTC](https://discourse.zynthian.org/t/new-plugin-pianores-for-adding-damper-resonance-to-sampled-pianos/13099/50 "2026-07-27T19:41:49Z")

</div>

As I said above, VST3 allows separation using async messaging.

However, JUCE doesn’t provide access to this.

---

<div class="post-metadata">

**Author:** ![hannesmenzel](https://discourse.zynthian.org/user_avatar/discourse.zynthian.org/hannesmenzel/32/13014_2.png) [@hannesmenzel](https://discourse.zynthian.org/u/hannesmenzel)\
**Post date:** [July 27, 2026, 8:19pm UTC](https://discourse.zynthian.org/t/new-plugin-pianores-for-adding-damper-resonance-to-sampled-pianos/13099/51 "2026-07-27T20:19:50Z")

</div>

> [@jlearman](#):
>
> As I said above, VST3 allows separation using async messaging.

I don’t think this applies to the problem to be solved, because it seems to me that these IMessages allow communication between editor and processor, also for state serialization, but do not have anything to do with string parameters. The links you provided seem like being about controlling a vst3 plugin with midi data. While not having much expertise about the matter it seems more like an internal messaging system between processor and editor and the question of when an information is transferred in a realtime audio situation.

---

<div class="post-metadata">

**Author:** ![jlearman](https://discourse.zynthian.org/letter_avatar_proxy/v4/letter/j/a698b9/32.png) [@jlearman](https://discourse.zynthian.org/u/jlearman)\
**Post date:** [July 28, 2026, 4:35pm UTC](https://discourse.zynthian.org/t/new-plugin-pianores-for-adding-damper-resonance-to-sampled-pianos/13099/52 "2026-07-28T16:35:38Z")

</div>

See `IAttributeList::setString()`

AU3 also supports distributed UI/DSP, but CLAP doesn’t.

---

<div class="post-metadata">

**Author:** ![jlearman](https://discourse.zynthian.org/letter_avatar_proxy/v4/letter/j/a698b9/32.png) [@jlearman](https://discourse.zynthian.org/u/jlearman)\
**Post date:** [August 8, 2026, 12:04am UTC](https://discourse.zynthian.org/t/new-plugin-pianores-for-adding-damper-resonance-to-sampled-pianos/13099/53 "2026-08-08T00:04:25Z")

</div>

> [@jofemodo](#):
>
> Perhaps you could fork some of them (x42 plugins are probably my favorites and they use zita-convolver implementation)

Sadly, this plugin (the stereo-\>stereo one) gets overruns on my Pi5 with 2 128-byte buffers.  
Maybe fewer than the original PianoRes, but … they happen. They happen even with Dry signal level at -60dB (the default, where the code is a bit quicker) and regardless of the setting for “Buffered/Latent Convolution” (which I don’t pretend to understand or know which should be more efficient.

I think the issue is that sfizz uses a lot of CPU. Plugging this on a leaner source might not have the issue.

Anyway, I’m getting a copy of the X42 convolver to work (respond to sustain pedal) but I’m seeing overruns. Later I’ll compare it with the JUCE plugin, probably using a MIDI sequence to make all things equal.

Sigh.

BTW, I’m seeing that the LV2 connect\_port routine is being called continuously, for each of the 4 audio channels (2 in , 2 out.) I noticed it when I put debug prints in the code and ran zynthian from terminal.

[PS]  
OOPS: the overruns were from a version that I compiled as root on Zynthian, which sets CXXFLAGS and due to how the makefile is written, overrides the optimizations. No idea whether this happens with the built-in version, but I know how to check and will do so later.

---

<div class="post-metadata">

**Author:** ![jlearman](https://discourse.zynthian.org/letter_avatar_proxy/v4/letter/j/a698b9/32.png) [@jlearman](https://discourse.zynthian.org/u/jlearman)\
**Post date:** [August 9, 2026, 10:32pm UTC](https://discourse.zynthian.org/t/new-plugin-pianores-for-adding-damper-resonance-to-sampled-pianos/13099/55 "2026-08-09T22:32:37Z")

</div>

More efficient version, called zPianoRes:

> **[Release v0.0.2 - Alpha · jlearman/zPianoRes](https://github.com/jlearman/zPianoRes/releases/tag/v0.0.2)**
>
> Alpha release
> For Zynthian on Raspberry Pi.
> All you need is the zPianoRes-v0.0.2-zyn-lv2.zip file. Follow the instructions in the included readme file to install on Zynthian.
> See this repo's READM...

A little fiddlier to set up, until I can figure out how to have a default IR loaded.

[Previous page](https://discourse.zynthian.org/t/new-plugin-pianores-for-adding-damper-resonance-to-sampled-pianos/13099.md?page=2)
