LV2 plugins not playing audio


Both gRainbow and PianoForte, which I have tried installing in both $HOME/.lv2 and /user/lib/lv2, do not play audio. You can see the routing in mix mode in the screen shot. It doesn’t put the actual plugin in the routing like it does with Reasonable Synth. I am new to Ardour so I might be doing something wrong, but the vsts that I have installed work perfectly. I am using Ardour 7.5 and have tried both ALSA and PulseAudio.

Those plugins are not loaded, and since There is no synth plugin, you won’t hear anything.

As for why instantiating those plugins fail, please check Ardour Menu > Window > Log. There might be some information there.

Some plugins only print additional information directly to standard output. You have to run Ardour from a terminal Window to get that (open a terminal and type ardour7 or Ardour7 press enter.)

If I had to guess: those plugins are not installed correctly and/or depend on some external library that is not present on you system).

I think that the plugins might just be bad, because the terminal shows that its looking for .dlls and github links.

Perhaps you downloaded a Windows build of the LV2 plugins by mistake.

Sorry, early summer heat going to my head. You would not have seen any terminal output if that was the case.
Do you have a link to where you got the LV2 plugins?

gRainbow, PianoForte.
gRainbow works as a VST3, but I wanted to try the LV2 version to see if it would work with that one. I’m not too concerned with getting PianoForte working though. Can someone send a link to an LV2 that is known to work so I can test it?

I find the same thing with Ardour 8.6 official build and self-built gRainbow plugin:

2024-05-27T18:07:41 [INFO]: gRainbow_Synth_Test-2024-05-27-18-06-26: no history file "/mnt/data/Audio/Projects/GRainbowTest/gRainbow_Synth_Test-2024-05-27-18-06-26/gRainbow_Synth_Test-2024-05-27-18-06-26.history" for this session.
2024-05-27T18:08:13 [ERROR]: LV2: Failed to instantiate plugin file:///plugins/gRainbow
2024-05-27T18:08:13 [WARNING]: Failed to add Synth Plugin to newly created track.
2024-05-27T18:10:26 [ERROR]: LV2: Failed to instantiate plugin file:///plugins/gRainbow

This is printed to the console when Ardour is started from CLI:
lilv_plugin_instantiate(): error: No plugin <file:///plugins/gRainbow> in <file:///home/chris/.lv2/gRainbow.lv2/libgRainbow.so>

I don’t think the LV2 manifest is setup correctly. When I run lv2ls every plugin has a reference which is either https:// or urn: but gRainbow is listed as: file:///plugins/gRainbow

That may not be a problem though, because lv2info doesn’t seem to have any errors:

$ lv2info file:///plugins/gRainbow
file:///plugins/gRainbow

        Name:              gRainbow
        Class:             Instrument Plugin
        Author:            StrangeLoops
        Author Email:      file:///home/chris/.lv2/gRainbow.lv2/dsp.ttl
        Author Homepage:   file:///home/chris/.lv2/gRainbow.lv2/dsp.ttl
        Has latency:       yes, reported by port 4
        Bundle:            file:///home/chris/.lv2/gRainbow.lv2/
        Binary:            file:///home/chris/.lv2/gRainbow.lv2/libgRainbow.so
        UIs:
                file:///plugins/gRainbow:UI
                        Class:  http://lv2plug.in/ns/extensions/ui#X11UI
                        Binary: file:///home/chris/.lv2/gRainbow.lv2/libgRainbow.so
                        Bundle: file:///home/chris/.lv2/gRainbow.lv2/
        Data URIs:         file:///home/chris/.lv2/gRainbow.lv2/dsp.ttl
                           file:///home/chris/.lv2/gRainbow.lv2/manifest.ttl
        Required Features: http://lv2plug.in/ns/ext/buf-size#boundedBlockLength
                           http://lv2plug.in/ns/ext/urid#map
                           http://lv2plug.in/ns/ext/options#options
        Optional Features: http://lv2plug.in/ns/lv2core#hardRTCapable
        Extension Data:    http://lv2plug.in/ns/ext/state#interface
        Presets: 
                 

        Port 0:
                Type:        http://lv2plug.in/ns/lv2core#OutputPort
                             http://lv2plug.in/ns/lv2core#AudioPort
                Symbol:      audio_out_1
                Name:        Audio Out 1
                Group:       file:///plugins/gRainbow:output_group_1
                Designation: http://lv2plug.in/ns/ext/port-groups#left

        Port 1:
                Type:        http://lv2plug.in/ns/lv2core#AudioPort
                             http://lv2plug.in/ns/lv2core#OutputPort
                Symbol:      audio_out_2
                Name:        Audio Out 2
                Group:       file:///plugins/gRainbow:output_group_1
                Designation: http://lv2plug.in/ns/ext/port-groups#right

        Port 2:
                Type:        http://lv2plug.in/ns/ext/atom#AtomPort
                             http://lv2plug.in/ns/lv2core#InputPort
                Symbol:      in
                Name:        In
                Designation: http://lv2plug.in/ns/lv2core#control

        Port 3:
                Type:        http://lv2plug.in/ns/lv2core#OutputPort
                             http://lv2plug.in/ns/ext/atom#AtomPort
                Symbol:      out
                Name:        Out
                Designation: http://lv2plug.in/ns/lv2core#control

        Port 4:
                Type:        http://lv2plug.in/ns/lv2core#ControlPort
                             http://lv2plug.in/ns/lv2core#OutputPort
                Symbol:      latency
                Name:        Latency
                Designation: http://lv2plug.in/ns/lv2core#latency
                Properties:  http://lv2plug.in/ns/lv2core#reportsLatency
                             http://lv2plug.in/ns/lv2core#connectionOptional
                             http://lv2plug.in/ns/ext/port-props#notOnGUI
                             http://lv2plug.in/ns/lv2core#integer


        Port 5:
                Type:        http://lv2plug.in/ns/lv2core#ControlPort
                             http://lv2plug.in/ns/lv2core#InputPort
                Symbol:      freeWheeling
                Name:        Free Wheeling
                Designation: http://lv2plug.in/ns/lv2core#freeWheeling
                Minimum:     0.000000
                Maximum:     1.000000
                Default:     0.000000
                Properties:  http://lv2plug.in/ns/lv2core#connectionOptional
                             http://lv2plug.in/ns/ext/port-props#notOnGUI
                             http://lv2plug.in/ns/lv2core#toggled


        Port 6:
                Type:        http://lv2plug.in/ns/lv2core#ControlPort
                             http://lv2plug.in/ns/lv2core#InputPort
                Symbol:      enabled
                Name:        Enabled
                Designation: http://lv2plug.in/ns/lv2core#enabled
                Minimum:     0.000000
                Maximum:     1.000000
                Default:     1.000000
                Properties:  http://lv2plug.in/ns/ext/port-props#notOnGUI
                             http://lv2plug.in/ns/lv2core#connectionOptional
                             http://lv2plug.in/ns/lv2core#toggled

This is the file path which ardour complained about:
$ ls -lh /home/chris/.lv2/gRainbow.lv2/libgRainbow.so
-rwxr-xr-x. 1 chris chris 32M May 27 17:56 /home/chris/.lv2/gRainbow.lv2/libgRainbow.so

So I don’t know. Does not look like all the other plugins in the output of lv2ls, but I don’t know enough about the LV2 specs to know if that is expected to cause this problem or not.

That looks fine. file:// is a valid URI and the .ttl checks out.

Can you check for any missing libraries in the binary:

ldd /home/chris/.lv2/gRainbow.lv2/libgRainbow.so

and for detailed information:

objdump -T /home/chris/.lv2/gRainbow.lv2/libgRainbow.so

PianoForte appears to be a LV2 plugin for Windows per the link you provided.

I don’t see any errors called out:

$ ldd /home/chris/.lv2/gRainbow.lv2/libgRainbow.so
        linux-vdso.so.1 (0x00007ffdab7fc000)
        libasound.so.2 => /lib64/libasound.so.2 (0x00007fd99e61a000)
        libfreetype.so.6 => /lib64/libfreetype.so.6 (0x00007fd99d137000)
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fd99ce00000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fd99cd1d000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fd99d10a000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fd99cb30000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fd99e75a000)
        libz.so.1 => /lib64/libz.so.1 (0x00007fd99e5f7000)
        libbz2.so.1 => /lib64/libbz2.so.1 (0x00007fd99d0f6000)
        libpng16.so.16 => /lib64/libpng16.so.16 (0x00007fd99d0bc000)
        libharfbuzz.so.0 => /lib64/libharfbuzz.so.0 (0x00007fd99ca1a000)
        libbrotlidec.so.1 => /lib64/libbrotlidec.so.1 (0x00007fd99d0ae000)
        libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x00007fd99c8cd000)
        libgraphite2.so.3 => /lib64/libgraphite2.so.3 (0x00007fd99d08e000)
        libbrotlicommon.so.1 => /lib64/libbrotlicommon.so.1 (0x00007fd99d06b000)
        libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007fd99c831000)

I don’t really know what I am looking for in the output of objdump. The beginning is all entries similar to this:

DYNAMIC SYMBOL TABLE:
0000000000000000      DF *UND*  0000000000000000 (GLIBC_2.2.5) getpeername
0000000000000000      DF *UND*  0000000000000000  Base        FT_Select_Charmap
0000000000000000      DF *UND*  0000000000000000 (GLIBCXX_3.4) _ZNSoC1EPSt15basic_streambufIcSt11char_traitsIcEE
0000000000000000      DF *UND*  0000000000000000 (GLIBC_2.2.5) lround
0000000000000000      DF *UND*  0000000000000000 (GLIBCXX_3.4) _ZNKSt9basic_iosIcSt11char_traitsIcEE5widenEc
0000000000000000      DF *UND*  0000000000000000 (GLIBCXX_3.4.21) _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9push_backEc
0000000000000000      DF *UND*  0000000000000000 (GLIBCXX_3.4) _ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate
0000000000000000      DF *UND*  0000000000000000 (GLIBC_2.2.5) pthread_attr_setschedpolicy
0000000000000000      DF *UND*  0000000000000000 (ALSA_0.9)   snd_pcm_link
0000000000000000      DF *UND*  0000000000000000 (GLIBC_2.2.5) iswalpha
0000000000000000      DF *UND*  0000000000000000 (GLIBC_2.2.5) strdup
0000000000000000      DF *UND*  0000000000000000 (GLIBCXX_3.4.21) _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4swapERS4_
0000000000000000      DF *UND*  0000000000000000 (GLIBC_2.2.5) fdopen
0000000000000000      DF *UND*  0000000000000000 (GLIBC_2.2.5) feof
0000000000000000      DF *UND*  0000000000000000 (GLIBCXX_3.4) _ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev
0000000000000000      DF *UND*  0000000000000000 (GLIBC_2.2.5) asinf
0000000000000000      DF *UND*  0000000000000000 (GLIBC_2.3.3) nftw
0000000000000000      DF *UND*  0000000000000000 (CXXABI_1.3) __cxa_begin_catch
0000000000000000      DF *UND*  0000000000000000 (GLIBC_2.33) stat
0000000000000000      DF *UND*  0000000000000000 (ALSA_0.9)   snd_ctl_card_info_get_id
0000000000000000      DF *UND*  0000000000000000 (GLIBCXX_3.4.11) __once_proxy
0000000000000000      DF *UND*  0000000000000000 (GLIBC_2.2.5) symlink
0000000000000000      DF *UND*  0000000000000000 (GLIBC_2.2.5) wcscmp
0000000000000000      DF *UND*  0000000000000000 (ALSA_0.9)   snd_pcm_writei
0000000000000000      DF *UND*  0000000000000000 (GLIBC_2.2.5) realloc
0000000000000000      DF *UND*  0000000000000000 (CXXABI_1.3.9) _ZdlPvm
0000000000000000      DF *UND*  0000000000000000 (GLIBCXX_3.4) _ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode
0000000000000000      DF *UND*  0000000000000000 (ALSA_0.9.0rc4) snd_pcm_hw_params_get_channels_min
0000000000000000      DF *UND*  0000000000000000 (GLIBCXX_3.4) _ZNSt9exceptionD2Ev
0000000000000000      DF *UND*  0000000000000000 (GLIBC_2.2.5) access
0000000000000000      DF *UND*  0000000000000000 (GLIBC_2.2.5) ioctl
0000000000000000      DF *UND*  0000000000000000 (GLIBCXX_3.4.21) _ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1ERKNSt7__cxx1112basic_stringIcS1_SaIcEEESt13_Ios_Openmode
0000000000000000      DF *UND*  0000000000000000 (GLIBCXX_3.4.20) _ZSt24__throw_out_of_range_fmtPKcz
0000000000000000      DF *UND*  0000000000000000 (GLIBC_2.35) hypot
0000000000000000      DF *UND*  0000000000000000 (GLIBCXX_3.4) _ZNSt15basic_streambufIcSt11char_traitsIcEE6setbufEPcl
0000000000000000      DF *UND*  0000000000000000 (GLIBC_2.29) exp
0000000000000000      DF *UND*  0000000000000000 (GLIBC_2.29) log

Thanks for checking.

I do. The plugin is dynamically linked and depends on external system-wide libs. That calls for trouble.

I was thinking about detailed info about missing symbols. and I see two potential issues. The plugin was compiled to only work on very recent Linux distros (GLIBC_2.35).

and it does not expose an entry-point. There should be a symbol lv2_descriptor - like:

000000000000ad00 g    DF .text	000000000000001f  Base        lv2_descriptor

Since that is missing, the plugin cannot be instantiated.

I compiled that plugin, so I will check to see if there are options to link statically. I did not see a description of what compilation options the project built binaries use.

I suspect that no lv2_descriptor is probably the main problem, that does not seem like changing configuration options will cure that.
The plugin aippears to use the JUCE framework, I thought that JUCE would provide the necessary framework code for the various plugin formats, but perhaps there was a mistake in the plugin implementation of the JUCE requirements.

A self compiled gRainbow works fine with a self compiled Ardour here.

But after running cmake you have to edit gRainbow_artefacts/JuceLibraryCode/JuceLV2Defines.h and change JucePlugin_LV2URI “/plugins/gRainbow” to JucePlugin_LV2URI “file://plugins/gRainbow”

Cmake even warns about it :
CMake Warning at external/JUCE/extras/Build/CMake/JUCEUtils.cmake:981 (message):
LV2URI should be well-formed with an ‘http’ prefix. Check the LV2URI argument to juce_add_plugin.

Thank you for pointing that out, I had the compile running in a background window and did not notice that message.

I filed two tickets with the project, one for incorrect URI and one to request static linking by default:

After looking more closely I also noticed this:

libglib-2.0.so.0 => /lib64/libglib-2.0.so.0

That is part of GTK2, does using that library, even linked statically, cause the same problems referred to when pointing out that GTK and QT should not be used for plugins?