Giter Club home page Giter Club logo

lsp-plugins's Introduction

ABOUT

LSP (Linux Studio Plugins) is a collection of open-source plugins currently compatible with CLAP, LADSPA, LV2, VST2/LinuxVST, VST3 and JACK standalone formats.

The basic idea is to fill the lack of good and useful plugins under the GNU/Linux platform.

After some contributions to other open source projects the decision was made to implement separate and independent plugin distribution.

All supplementary information you will find on official web site: https://lsp-plug.in/

Note that after 1.2.0 release the lsp-plugins repository was decomposed into multiple subprojects. As a result, it is the repository without any code and for build purposes it gathers source code as dependencies from another repositories which are located here: https://github.com/lsp-plugins/

LICENSING

The LSP project is an open-source project and cares about quality of developed software.

Still there is no absolute warranty about stability of the software on different platforms so you're using this software on your own risk.

The project also does encourage donations that can be submitted here:

Licensed under the terms of GNU Lesser Public License v3 (LGPLv3):

For more information about licensing, please read COPYING and COPYING.LESSER.

SYSTEM REQUIREMENTS

Current matrix of hardware architecture and platform (OS) support is:

  ┌───────────┬───────────┬─────────┬─────────┐
  │Arch / OS  │ GNU/Linux │ FreeBSD │ Windows │
  ╞═══════════╪═══════════╪═════════╪═════════╡
  │aarch64    │     F     │    E    │    U    │
  ├───────────┼───────────┼─────────┼─────────┤
  │armv5t     │     C     │    C    │    U    │
  ├───────────┼───────────┼─────────┼─────────┤
  │armv6-a    │     E     │    E    │    U    │
  ├───────────┼───────────┼─────────┼─────────┤
  │armv7-ar   │     E     │    E    │    U    │
  ├───────────┼───────────┼─────────┼─────────┤
  │i586       │     F     │    E    │    E    │
  ├───────────┼───────────┼─────────┼─────────┤
  │loongarch32│     C     │    U    │    U    │
  ├───────────┼───────────┼─────────┼─────────┤
  │loongarch64│     C     │    U    │    U    │
  ├───────────┼───────────┼─────────┼─────────┤
  │ppc64      │     C     │    U    │    U    │
  ├───────────┼───────────┼─────────┼─────────┤
  │riscv-64   │     C     │    U    │    U    │
  ├───────────┼───────────┼─────────┼─────────┤
  │s390x      │     C     │    U    │    U    │
  ├───────────┼───────────┼─────────┼─────────┤
  │x86_64     │     F     │    E    │    E    │
  └───────────┴───────────┴─────────┴─────────┘ 

The table legend is the following:

  • F - Full support.
  • C - The code does compile, not enough knowledge about it's correct work.
  • E - Experimental support, not enough feedback from users.
  • U - Unknown, the code may be built but the correctness of it's work has not been tested.
  • N - No support, the code may compile but the work has not been tested.

Note that minimum supported Windows version is Windows Vista.

Supported plugin formats:

  • CLAP (full support);
  • GStreamer (experimental support);
  • JACK standalone (full support)
  • LADSPA (partial support: not supported by plugins that use MIDI or file loading due to LADSPA plugin format restrictions);
  • LV2 (full support);
  • VST2/LinuxVST (full support);
  • VST3 (full support).

The Linux distribution requirements:

  • glibc >= 2.19
  • libsndfile >= 1.0.25
  • libcairo >= 1.14
  • libfreetype >= 2.10
  • libGL

Known list of supported plugin hosts:

  • Ardour
  • Bitwig Studio
  • Carla
  • Mixbus
  • Qtractor
  • Reaper
  • Renoise
  • Tracktion

VERSIONING

Binary releases contain all possible plugins in one bundle. The binaries are packaged into archive named according to the following format:

  lsp-plugins-<format>-<major>.<minor>.<micro>-<platform>-<arch>.tar.gz

The property is the format of plugins, currently available:

  • clap - plugins in CLAP format;
  • doc - documentation;
  • gst - plugins in GStreamer format;
  • jack - standalone version of plugins that require JACK server for execution;
  • ladspa - plugins in LADSPA format (not all plugins due to format's restriction);
  • lv2 - plugins in LV2 format;
  • src - source code;
  • vst2 - plugins in VST 2.4 format;
  • vst3 - plugins in VST3 format.

Property 'arch' contains short name of architecture the binaries are build for. Properties 'major', 'minor' and 'micro' form the version of release. If the version is odd, it contains mostly bug-fixes and patches for the plugin modules. The even 'micro' version of plugins contains new features and, in most cases, new plugin series. The history of changes may be seen in attached CHANGELOG.txt.

Source code is also ready for building, see 'BUILDING' section for details.

INSTALLATION

Binary distributions are ready to launch, just copy them to the appropriate directory.

Releases containing odd number in minor version provide only enhancements and critical fixes for the previous release.

IMPORTANT FOR VST INSTALLATIONS: If you deploy plugins as a subdirectory of your VST2 directory, the subdirectory should contain substring 'lsp-plugins'. Otherwise plugins won't find the VST2 core library. Please notice that '~' means user's home directory.

For Linux/FreeBSD

The usual directories for CLAP are:

  • /usr/lib/clap
  • /usr/local/lib/clap
  • /usr/lib64/clap
  • /usr/local/lib64/clap
  • ~/.clap

The usual directories for JACK core library are:

  • /usr/lib
  • /usr/local/lib
  • /lib
  • /usr/lib64
  • /usr/local/lib64
  • /lib64

The usual directories for JACK binaries are:

  • /usr/bin
  • /usr/local/bin
  • /bin
  • /usr/sbin
  • /usr/local/sbin
  • /sbin

The usual directories for GStreamer core library:

  • /usr/lib
  • /usr/local/lib
  • /lib
  • /usr/lib64
  • /usr/local/lib64
  • /lib64

The usual installation directory for GStreamer plugins can be obtained by the following command:

pkg-config --variable=pluginsdir gstreamer-1.0

The usual directories are the following:

  • /usr/lib64/gstreamer-1.0
  • /usr/lib/gstreamer-1.0
  • /usr/local/lib64/gstreamer-1.0
  • /usr/local/lib/gstreamer-1.0

The usual directories for LADSPA are:

  • /usr/lib/ladspa
  • /usr/local/lib/ladspa
  • /usr/lib64/ladspa
  • /usr/local/lib64/ladspa
  • ~/.ladspa

The usual directories for LV2 are:

  • /usr/lib/lv2
  • /usr/local/lib/lv2
  • /usr/lib64/lv2
  • /usr/local/lib64/lv2
  • ~/.lv2

The usual directories for VST 2.x/LinuxVST are:

  • /usr/lib/vst
  • /usr/local/lib/vst
  • /usr/lib64/vst
  • /usr/local/lib64/vst
  • ~/.lxvst
  • ~/.vst

The usual directories for VST 3.x are:

  • /usr/lib/vst3
  • /usr/local/lib/vst3
  • /usr/lib64/vst3
  • /usr/local/lib64/vst3
  • ~/.vst3

For Windows

The usual directory for LV2 binaries is:

  • C:\Program Files\Common Files\LV2

The usual directory for VST2 binaries is:

  • C:\Program Files\Common Files\VST

The usual directory for VST3 binaries is:

  • C:\Program Files\Common Files\VST3
  • C:\Program Files (x86)\Common Files\VST3 - for 32-bit plugins on 64-bit Windows.

The usual directory for CLAP binaries is:

  • C:\Program Files\Common Files\CLAP

BUILDING

You may build plugins from scratch.

The build process doesn't differ much for GNU/Linux, FreeBSD or Windows. Build of JACK standalone versions for Windows is yet not supported.

For successful build for Linux/FreeBSD you need the following packages to be installed:

  • gcc >= 4.7 OR clang >= 10.0.1
  • gcc-c++ >= 4.7 OR clang-c++ >= 10.0.1
  • libgcc_s1 >= 5.2
  • libstdc++-devel >= 4.7
  • libsndfile-devel >= 1.0.25
  • libcairo-devel >= 1.14
  • php >= 5.5.14 (for documentation)
  • jack-devel >= 1.9.5 (for JACK)
  • libiconv (for FreeBSD)
  • libGL-devel >= 11.2.2
  • gstreamer >= 1.20 (for GStreamer)
  • gstreamer-plugins-base >= 1.20 (for GStreamer)

For Windows build, the following software needs to be installed:

  • MinGW/MinGW-W64 >= 7.0
  • Git >= 2.8 (optional)
  • PHP >= 5.5.14
  • GNU Make >= 4.2

To perform toolchain setup for Windows, you may perform the following steps:

To build the project from archive with source code, the following sequence of commands should be performed:

  make clean
  make config
  make
  make install

To build the project from GIT repository, the additional 'make fetch' command should be issued to obtain all source code dependencies:

  make clean
  make config
  make fetch
  make
  make install

For Windows, the make install command creates 'INSTALL' subdirectory and places the plugin content into desired folders.

By default, all supported formats of plugins are built. The list of modules for build can be adjusted by specifying FEATURES variable at the configuration stage:

  make config FEATURES='lv2 vst2 ui doc'

Available options are:

  • clap - CLAP plugin binaries;
  • doc - HTML documentation;
  • gst - GStreamer plugin binaries;
  • jack - JACK plugin binaries;
  • ladspa - LADSPA plugin binaries;
  • lv2 - LV2 plugin binaries;
  • ui - build plugins wih UI support;
  • vst2 - VST2/LinuxVST plugin binaries;
  • vst3 - VST2 plugin binaries;
  • xdg - the X11 desktop integration icons.

By default plugins use '/usr/local' path as a target directory for installation. To override this path, the PREFIX variable can be overridden:

  make config PREFIX=/usr

To build binaries for debugging, use the following commands:

  make config DEBUG=1

To build binaries for testing (developers only), use the following commands:

  make config TEST=1

To install plugins at the desired root directory, the DESTDIR variable can be specified:

  make install DESTDIR=<installation-root>

To install only specific formats, use INSTALL_FEATURES option:

  make install INSTALL_FEATURES=lv2

To build standalone source code package, the following commands can be issued:

  make config
  make distsrc

After that, a stanalone archive with source code will be created in the .build directory.

For more build options, issue:

  make help

DEBUGGING

For debugging and getting crash stack trace with Ardour, please follow these steps:

  • Open console
  • Run ardour from console with --gdb option
  • After gdb starts, issue 'run' command
  • Do usual stuff to reproduce the problem
  • After Ardour crashes, type 'thread apply all bt' in console and attach the output to the bug report.

KNOWN PROBLEMS

unclutter

People using the unclutter tool reported spontaneous freeze of the UI for LSP Plugins. The unclutter tool is pretty rare and has not been updated over the years. So it does not follow the latest changes made for X.Org. The problem can be solved by switching to unclutter-xfixes tool which works pretty OK with LSP UI.

gstreamer

There is no good support of MIDI interface in GStreamer now. Even if MIDI-based plugins are available for GStreamer, there is no guarantee that they will fully work.

Wayland and XWayland

LSP Plugins don't support Wayland protocol at this moment and are required to run under XWayland if Wayland is used as a system compositor. The implementation of XWayland is still imperfect and there are known cases where it can cause several problems with graphics.

There are several reasons why LSP Plugins don't support Wayland at this moment:

  • It's a new protocol, and adding it's support requires some time;
  • It provides some backward compatibility with X11, and the lack of Wayland support is not so critical;
  • Only few plugin formats and DAWs support Wayland at this moment. CLAP is the only known plugin format that supports Wayland and the Presonus Studio for Linux is the only DAW that requires Wayland as a must.

If you meet problems using LSP Plugins with Wayland, please consider switching back to X11.

3D backend not working

This is the typical problem of interacting of the GUI with additional library that performs 3D rendering. The reason can be:

  • the library is missing in standard system libraries or nearby the plugin's binareis.
  • the provided version of the library does not matched the required one by the UI.

The short way to diagnose that the library was not found or not accepted by the UI is just to visit the MENU -> 3D rendering (visible only for plugins that use 3D rendering) and ensure that there are no available items in the submenu.

To solve the problem, you need:

  • ensure that the liblsp-r3d-glx library is present in /usr/lib or in /usr/local/lib system paths OR:
  • ensure that the liblsp-r3d-glx library is placed nearby the plugin's binaries if you have some custom installation of the bundle (for example, in your HOME directory);
  • ensure that the version of the liblsp-r3d-glx is matching to installed binaries;
  • install the proper version of the library to the usual place if at least one of the checks above were not fulfilled.

TESTING

Since release 1.1.4 there is implemented testing subsystem that allows:

  • perform manual tests (mtest module);
  • perform automated unit testing (utest module);
  • perform automated single-core performance testing (ptest module).

Manual tests are semi-automated or not automated at all. You may launch these tests to perform manual interaction with system or for retrieving some text data for further processing.

Unit tests are completely automated and check that the produced result is correct for the specific input data. By default unit tests are launched in separate processes and utilize all CPU cores for maximum performance. The status of each unit test is collected during execution and list of all failed tests are printed after completion.

Performance tests measure performance of some function/module under different conditions, gather final statistics and output them in a table format. These tests are very useful for measuring single-core performance of different modules and functions and performing code optimizations.

To build testing subsystem, issue the following commands: make clean make config TEST=1 make

After build, we can launch the test binary by issuing command: .build/host/lsp-plugin-fw/lsp-plugins-test

This binary provides simple command-line interface, so here's the full usage:
USAGE: {utest|ptest|mtest} [args...] [test name...] First argument: utest Unit testing subsystem ptest Performance testing subsystem mtest Manual testing subsystem Additional arguments: -a, --args [args...] Pass arguments to test -d, --debug Disable time restrictions for unit tests for debugging purposes -e, --execute Launch tests specified after this switch -f, --fork Fork child processes (opposite to --nofork) -h, --help Display help -i, --ignore Ignore tests specified after this switch -j, --jobs Set number of job workers for unit tests -l, --list List all available tests -mt, --mtrace Enable mtrace log -nf, --nofork Do not fork child processes (for better debugging capabilities) -nt, --nomtrace Disable mtrace log -o, --outfile file Output performance test statistics to specified file -s, --silent Do not output additional information from tests -t, --tracepath path Override default trace path with specified value -v, --verbose Output additional information from tests

Each test has fully-qualified name separated by dot symbols, tests from different test spaces (utest, ptest, mtest) may have similar fully-qualified names.

To obtain a list of all unit tests we can issue: .build/host/lsp-plugin-fw/lsp-plugins-test utest --list

And then we can launch all complex number processing unit tests and additionally 'dsp.mix' unit test: .build/host/lsp-plugin-fw/lsp-plugins-test utest dsp.complex.* dsp.pcomplex.* dsp.mix

If we don's specify any unit test name in argument, then all available unit tests will be launched.

To start debugging of some unit test, you need to pass additional arguments: .build/host/lsp-plugin-fw/lsp-plugins-test/lsp-plugins-test utest --nofork --debug --verbose

Because unit tests are short-time fully-automated tests, they are parallelized and executed by default by number_of_cores*2 processes. To disable this, we specify option --nofork. Also, unit test execution time is limited by 5 seconds by default, so when debugging, our tests will be killed. That's why we specify --debug option to disable time control. Option --verbose allows to output additional information by the unit test that is turned off by default.

We also can use performance tests to obtain full performance profile of target machine. Because performance tests in most cases take much time for gathering statistics, the final statistics for each test can be saved in a separate file by specifying --outfile option: .build/host/lsp-plugin-fw/lsp-plugins-test ptest -o performance-test.log

Manual tests are mostly designed for developers' purposes.

SAST TOOLS

The Code of the project has been verified by the following SAST tools:

  • PVS-Studio - static analyzer for C, C++, C#, and Java code.

TROUBLESHOOTING

Because there are many GNU/Linux distributions and software configurations, and, possible, internal bugs, plugins may have bad performance or even crash. The good way to find the solutiong is to submit a bug or crash report. This section describes the way to give detailed information to developers.

To submit a good bug or crash report, you should answer these questions:

  • Did you use the previous version of plugins? If yes, did they properly work and have you properly uninstalled the previous version?
  • What version of plugins caused a crash? Was it LV2, LinuxVST, LADSPA or standalone package?
  • Did you try standalone version of plugins? Did they crash, too?
  • What CPU and memory configuration do you use? This can be done by issuing 'cat /proc/cpuinfo' and 'free' commands.
  • What Linux distribution do you use? This may be done by issuing 'uname -a' and 'cat /etc/issue' commands.
  • What version of required (see 'INSTALLATION') packages are present in your system?
  • Provide the full list (besides LSP Plugins) of plugins that you used in your host.
  • If possible, provide the stack trace of the crash, given by GDB. See 'PROFILING / DEBUGGING' section for details.
  • If plugins have serious performance regression, please provide profiling file. See 'PROFILING / DEBUGGING' section for details.
  • If the plugin behaves incorrectly, there is also good reason to provide the dump of internal state of the plugin which can be performed by selectecting the 'Dump for debug' menu item from the main menu. The internal state of the plugin will be saved into the 'test-dumps' subdirectory of the system temporary directory.

CONTACTS

There is possible to submit feature requests and bugs on the GitHub.com page of the project: https://github.com/sadko4u/lsp-plugins/issues

Sourceforge.net page of the project: https://sourceforge.net/p/lsp-plugins/tickets/

You may contact us on the special feedback page: https://lsp-plug.in/?page=feedback

Hope you have enjoyed our work!

lsp-plugins's People

Contributors

alaviss avatar bor-t avatar brunovernay avatar chrisanthropic avatar dvzrv avatar ignotus666 avatar johanneslorenz avatar kyrios123 avatar logarithmus avatar marcan avatar sadko4u avatar snd1 avatar totalcaesar659 avatar trebmuh avatar wargreen avatar xeonacid avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lsp-plugins's Issues

trigger MIDI crashes Ardour

Trigger MIDI (mono) crashes Ardour.

The GDB log below was created by starting ardour, creating new session, adding mono track, and adding the trigger midi mono to that track (which crashed ardour).

Here is the log: gdb1.txt

Multiband Compressor: make the UI morereadable

I think I've found a simple way to make the UI easier to navigate:

selection_743

Simply make every other row of controls brighter, this way the user can easier follow what he's looking for.

I find myself always spending a few seconds looking at the array of knobs, trying to see what I'm looking for.

I think this could help a lot, allowing users to work faster (and also avoid mistakes).

If this works, I think it'd be awesome to propagate such changes to other LSP plug-ins aswell, as I feel it's a common problem with them.

EQ - Low Shelf filter not working correctly

Good evening,

I am using PulseEffects which is using lsp-plugins to handle the equalizier.
One thing I noticed is that the low shelf filter is behaving weird in that it seems to have a way higher gain than I actually set it to.

For example, I have a EQ profile that an acoustic laboratory made for me with their software.
It includes a low shelf filter with a certain frequency, q-factor and gain. Those settings work fine under e.g. Windows. How ever, with lsp-plugins / pulseeffects it doesn't.
The EQ Profile is shown as .pdf here (14 bands in total):
https://www.dropbox.com/s/k7wry3s24r2y8sc/Sennheiser%20HD800S%20%2318002%20pt1.pdf?dl=0
https://www.dropbox.com/s/way36c2dofncrvc/Sennheiser%20HD800S%20%2318002%20pt2.pdf?dl=0

There is already a ticket on the github of pulseeffects:
wwmm/easyeffects#421

Any ideas?

MIDI Utilities Feature Request

@sadko4u I've made the email an issue for ease of communication and discussion.
I have a mockup of what features would be included in this plugin. This is not how the plugin will be styled, but just what features and GUI widgets for each.
midi override mockup

Where do I start this feature?

Strange tags in DAWs

I notice that LSP plugins are classified in curious ways by many Digital Audio Workstation like Ardour or Reaper or host (Jalv.select).

  • In Ardour, Parametric Equalizer plugins (lv2) are in 'Analyser' category and not in 'Equaliser'.
    If 'analyser' button in the Ardour's plug-in manager window is not 'ON', Parametric Equalizers are not found by name's search (lv2).
    All LSP gates, Expanders and Limiters are in 'Dynamic' but there are 'Gate', 'Expander' and 'Limiter' categories. Impulse Reverb and Response plugins are tagged as 'Converter' (and not 'Reverb'),
    All Ladspa are tagged 'unknow' and LinuxVST 'LXVST' (maybe Ardour's devs choices).

  • in Reaper, all Compressors, Limiters, Gates, Expanders and Dynamic Processor are in 'Mastering', Delay Compensators and Slapback Delays in 'Room'.

  • in jalv.select, Gates, Impulse Reverbs , Expanders and Limiters are in 'Dynamic' category, but there are 'gate', 'reverb', 'expander' and 'limiter' categories.

During build: Generating resource file lsp-plugins/.build/src/res/xml_resource.cpp runs forever

-------------------------------------------------------------------------------
Building binaries
  target architecture : x86_64
  target platform     : Linux
  target system       : Linux
  modules             : ladspa lv2 vst jack profile src doc
-------------------------------------------------------------------------------
Building core
  g++ ICanvas.cpp
  g++ ITask.cpp
  g++ io/InputStreamReader.cpp
  g++ io/FileReader.cpp
  g++ io/StringWriter.cpp
  g++ io/FileWriter.cpp
  g++ io/Reader.cpp
  g++ io/IOutputStream.cpp
  g++ io/charset.cpp
  g++ io/Writer.cpp
  g++ io/StringReader.cpp
  g++ io/IInputStream.cpp
  g++ IExecutor.cpp
  g++ LSPString.cpp
  g++ envelope.cpp
  g++ IWrapper.cpp
  g++ filters/DynamicFilters.cpp
  g++ filters/FilterBank.cpp
  g++ filters/Equalizer.cpp
  g++ filters/Filter.cpp
  g++ types.cpp
  g++ debug.cpp
  g++ windows.cpp
  g++ midi.cpp
  g++ util/ShiftBuffer.cpp
  g++ util/Color.cpp
  g++ util/Oscillator.cpp
  g++ util/Crossover.cpp
  g++ util/Dither.cpp
  g++ util/SyncChirpProcessor.cpp
  g++ util/Analyzer.cpp
  g++ util/Counter.cpp
  g++ util/ResponseTaker.cpp
  g++ util/LatencyDetector.cpp
  g++ util/Oversampler.cpp
  g++ util/Sidechain.cpp
  g++ util/Randomizer.cpp
  g++ util/Bypass.cpp
  g++ util/MeterGraph.cpp
  g++ util/Delay.cpp
  g++ util/Convolver.cpp
  g++ sampling/Sample.cpp
  g++ sampling/SamplePlayer.cpp
  g++ plugin.cpp
  g++ IPort.cpp
  g++ dynamics/Expander.cpp
  g++ dynamics/Limiter.cpp
  g++ dynamics/Gate.cpp
  g++ dynamics/DynamicProcessor.cpp
  g++ dynamics/Compressor.cpp
  g++ alloc.cpp
  g++ files/config/IConfigHandler.cpp
  g++ files/config/IConfigSource.cpp
  g++ files/AudioFile.cpp
  g++ files/lspc/LSPCChunkWriter.cpp
  g++ files/lspc/LSPCAudioWriter.cpp
  g++ files/lspc/LSPCChunkReader.cpp
  g++ files/lspc/LSPCChunkAccessor.cpp
  g++ files/lspc/LSPCAudioReader.cpp
  g++ files/config.cpp
  g++ files/LSPCFile.cpp
files/LSPCFile.cpp: In member function ‘lsp::status_t lsp::LSPCFile::open(const char*)’:
files/LSPCFile.cpp:58:13: warning: ignoring return value of ‘ssize_t read(int, void*, size_t)’, declared with attribute warn_unused_result [-Wunused-result]
         read(fd, &hdr, sizeof(lspc_root_header_t));
         ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
files/LSPCFile.cpp: In member function ‘lsp::status_t lsp::LSPCFile::create(const char*)’:
files/LSPCFile.cpp:102:14: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’, declared with attribute warn_unused_result [-Wunused-result]
         write(fd, &hdr, sizeof(lspc_root_header_t));
         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  g++ files/3d/ObjFileParser.cpp
  g++ files/3d/IFileHandler3D.cpp
  g++ files/Model3DFile.cpp
  g++ 3d/TraceMap3D.cpp
  g++ 3d/RayTrace3D.cpp
  g++ 3d/Object3D.cpp
  g++ 3d/TraceCapture3D.cpp
  g++ 3d/Scene3D.cpp
  g++ 3d/RaySource3D.cpp
  g++ NativeExecutor.cpp
  g++ fade.cpp
  g++ buffer.cpp
  g++ ITrigger.cpp
  g++ status.cpp
  g++ interpolation.cpp
  ld core.o
Building metadata
  g++ expander.cpp
  g++ spectrum_analyzer.cpp
  g++ impulse_reverb.cpp
  g++ trigger.cpp
  g++ comp_delay.cpp
  g++ oscillator.cpp
  g++ metadata.cpp
  g++ limiter.cpp
  g++ impulse_responses.cpp
  g++ mb_compressor.cpp
  g++ profiler.cpp
  g++ developers.cpp
  g++ phase_detector.cpp
  g++ slap_delay.cpp
  g++ ports.cpp
  g++ experimental.cpp
  g++ graph_equalizer.cpp
  g++ sampler.cpp
  g++ compressor.cpp
  g++ gate.cpp
  g++ latency_meter.cpp
  g++ nonlinear_convovler.cpp
  g++ para_equalizer.cpp
  g++ dyna_processor.cpp
  ld metadata.o
Building dsp
  g++ dsp.cpp
  g++ bits.cpp
  g++ native.cpp
  g++ x86.cpp
x86.cpp: In function ‘dsp::info_t* x86::info()’:
x86.cpp:388:17: warning: ignoring return value of ‘int asprintf(char**, const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
         asprintf(&model, "vendor=%s, family=0x%x, model=0x%x", cpu_vendors[f.vendor], int(f.family), int(f.model));
         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  g++ sse.cpp
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse/filters/static.h: Assembler messages:
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse/filters/static.h:648: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse/filters/static.h:649: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse/filters/static.h:764: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse/filters/static.h:765: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse/filters/dynamic.h:684: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse/filters/dynamic.h:685: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse/filters/dynamic.h:686: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse/filters/dynamic.h:804: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse/filters/dynamic.h:805: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse/filters/dynamic.h:813: Warning: missing operand; zero assumed
  g++ sse2.cpp
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse2/graphics.h: Assembler messages:
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse2/graphics.h:653: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse2/graphics.h:654: Warning: missing operand; zero assumed
  g++ sse3.cpp
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse3/filters/static.h: Assembler messages:
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse3/filters/static.h:545: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse3/filters/static.h:546: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse3/filters/static.h:585: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse3/filters/static.h:586: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse3/filters/static.h:615: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse3/filters/static.h:616: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse3/filters/static.h:662: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse3/filters/static.h:663: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse3/filters/dynamic.h:282: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse3/filters/dynamic.h:283: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse3/filters/dynamic.h:322: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse3/filters/dynamic.h:323: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse3/filters/dynamic.h:353: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse3/filters/dynamic.h:354: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse3/filters/dynamic.h:401: Warning: missing operand; zero assumed
/home/rt/work/lsp-plugins/include/dsp/arch/x86/sse3/filters/dynamic.h:402: Warning: missing operand; zero assumed
  g++ sse4.cpp
  g++ avx.cpp
  g++ avx2.cpp
  ld dsp.o
Building utils
  g++ resource_gen.cpp
resource_gen.cpp: In function ‘int lsp::scan_directory(const char*, const char*, lsp::cvector<lsp::resource_t>&)’:
resource_gen.cpp:408:21: warning: ignoring return value of ‘int asprintf(char**, const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
             asprintf(&realpath, "%s" FILE_SEPARATOR_S "%s", basedir, path);
             ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
resource_gen.cpp:446:29: warning: ignoring return value of ‘int asprintf(char**, const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
                     asprintf(&subdir, "%s" FILE_SEPARATOR_S "%s", path, ent->d_name);
                     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
resource_gen.cpp: In function ‘lsp::resource_t* lsp::create_xml_resource(const char*, const char*, size_t)’:
resource_gen.cpp:326:21: warning: ignoring return value of ‘int asprintf(char**, const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
             asprintf(&ptr, "%s" FILE_SEPARATOR_S "%s", path, name);
             ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
resource_gen.cpp:337:17: warning: ignoring return value of ‘int asprintf(char**, const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
         asprintf(&dst, "%08x", int(id));
         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
  g++ lv2_genttl.cpp
lv2_genttl.cpp: In function ‘void lsp::gen_plugin_ttl(const char*, const plugin_metadata_t&, const char*)’:
lv2_genttl.cpp:829:21: warning: ignoring return value of ‘int asprintf(char**, const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
             asprintf(&ui_uri, LSP_PLUGIN_UI_URI(lv2, "%s"), m.lv2_uid);
             ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
lv2_genttl.cpp:830:21: warning: ignoring return value of ‘int asprintf(char**, const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
             asprintf(&plugin_uri, LSP_PLUGIN_URI(lv2, "%s"), m.lv2_uid);
             ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  g++ vst_genmake.cpp
vst_genmake.cpp: In function ‘int lsp::gen_cpp_file(const char*, const plugin_metadata_t*, const char*, const char*)’:
vst_genmake.cpp:27:35: warning: ‘__builtin___snprintf_chk’ output may be truncated before the last format character [-Wformat-truncation=]
         snprintf(fname, PATH_MAX, "%s/%s", path, cppfile);
                                   ^~~~~~~
In file included from /usr/include/stdio.h:862,
                 from vst_genmake.cpp:3:
/usr/include/bits/stdio2.h:64:35: note: ‘__builtin___snprintf_chk’ output 2 or more bytes (assuming 4097) into a destination of size 4096
   return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
          ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        __bos (__s), __fmt, __va_arg_pack ());
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  g++ jack_genmake.cpp
jack_genmake.cpp: In function ‘int lsp::gen_cpp_file(const char*, const plugin_metadata_t*, const char*, const char*)’:
jack_genmake.cpp:24:35: warning: ‘__builtin___snprintf_chk’ output may be truncated before the last format character [-Wformat-truncation=]
         snprintf(fname, PATH_MAX, "%s/%s", path, cppfile);
                                   ^~~~~~~
In file included from /usr/include/stdio.h:862,
                 from jack_genmake.cpp:3:
/usr/include/bits/stdio2.h:64:35: note: ‘__builtin___snprintf_chk’ output 2 or more bytes (assuming 4097) into a destination of size 4096
   return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
          ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        __bos (__s), __fmt, __va_arg_pack ());
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  g++ gen_php.cpp
  g++ gen_resources.exe
  g++ lv2_genttl.exe
  g++ vst_genmake.exe
  g++ jack_genmake.exe
  g++ gen_php.exe
Generating PHP file plugins.php
Writing file /home/rt/work/lsp-plugins/.build/plugins.php
Building doc
Preparing PHP documentation generator
Generating HTML documentation
  mkdir html
  mkdir html/plugins
  mkdir html/development
  php index.html
  php html/overview.html
  php html/licensing.html
  php html/requirements.html
  php html/installation.html
  php html/controls.html
  php html/plugins/compressor_lr.html
  php html/plugins/compressor_ms.html
  php html/plugins/compressor_mono.html
  php html/plugins/compressor_stereo.html
  php html/plugins/comp_delay_mono.html
  php html/plugins/comp_delay_stereo.html
  php html/plugins/comp_delay_x2_stereo.html
  php html/plugins/dyna_processor_lr.html
  php html/plugins/dyna_processor_ms.html
  php html/plugins/dyna_processor_mono.html
  php html/plugins/dyna_processor_stereo.html
  php html/plugins/expander_lr.html
  php html/plugins/expander_ms.html
  php html/plugins/expander_mono.html
  php html/plugins/expander_stereo.html
  php html/plugins/gate_lr.html
  php html/plugins/gate_ms.html
  php html/plugins/gate_mono.html
  php html/plugins/gate_stereo.html
  php html/plugins/graph_equalizer_x16_lr.html
  php html/plugins/graph_equalizer_x16_ms.html
  php html/plugins/graph_equalizer_x16_mono.html
  php html/plugins/graph_equalizer_x16_stereo.html
  php html/plugins/graph_equalizer_x32_lr.html
  php html/plugins/graph_equalizer_x32_ms.html
  php html/plugins/graph_equalizer_x32_mono.html
  php html/plugins/graph_equalizer_x32_stereo.html
  php html/plugins/impulse_responses_mono.html
  php html/plugins/impulse_responses_stereo.html
  php html/plugins/impulse_reverb_mono.html
  php html/plugins/impulse_reverb_stereo.html
  php html/plugins/latency_meter.html
  php html/plugins/limiter_mono.html
  php html/plugins/limiter_stereo.html
  php html/plugins/multisampler_x12_do.html
  php html/plugins/multisampler_x12.html
  php html/plugins/multisampler_x24_do.html
  php html/plugins/multisampler_x24.html
  php html/plugins/multisampler_x48_do.html
  php html/plugins/multisampler_x48.html
  php html/plugins/mb_compressor_lr.html
  php html/plugins/mb_compressor_ms.html
  php html/plugins/mb_compressor_mono.html
  php html/plugins/mb_compressor_stereo.html
  php html/plugins/oscillator_mono.html
  php html/plugins/para_equalizer_x16_lr.html
  php html/plugins/para_equalizer_x16_ms.html
  php html/plugins/para_equalizer_x16_mono.html
  php html/plugins/para_equalizer_x16_stereo.html
  php html/plugins/para_equalizer_x32_lr.html
  php html/plugins/para_equalizer_x32_ms.html
  php html/plugins/para_equalizer_x32_mono.html
  php html/plugins/para_equalizer_x32_stereo.html
  php html/plugins/phase_detector.html
  php html/plugins/profiler_mono.html
  php html/plugins/profiler_stereo.html
  php html/plugins/sampler_mono.html
  php html/plugins/sampler_stereo.html
  php html/plugins/sc_compressor_lr.html
  php html/plugins/sc_compressor_ms.html
  php html/plugins/sc_compressor_mono.html
  php html/plugins/sc_compressor_stereo.html
  php html/plugins/sc_dyna_processor_lr.html
  php html/plugins/sc_dyna_processor_ms.html
  php html/plugins/sc_dyna_processor_mono.html
  php html/plugins/sc_dyna_processor_stereo.html
  php html/plugins/sc_expander_lr.html
  php html/plugins/sc_expander_ms.html
  php html/plugins/sc_expander_mono.html
  php html/plugins/sc_expander_stereo.html
  php html/plugins/sc_gate_lr.html
  php html/plugins/sc_gate_ms.html
  php html/plugins/sc_gate_mono.html
  php html/plugins/sc_gate_stereo.html
  php html/plugins/sc_limiter_mono.html
  php html/plugins/sc_limiter_stereo.html
  php html/plugins/sc_mb_compressor_lr.html
  php html/plugins/sc_mb_compressor_ms.html
  php html/plugins/sc_mb_compressor_mono.html
  php html/plugins/sc_mb_compressor_stereo.html
  php html/plugins/slap_delay_mono.html
  php html/plugins/slap_delay_stereo.html
  php html/plugins/spectrum_analyzer_x1.html
  php html/plugins/spectrum_analyzer_x12.html
  php html/plugins/spectrum_analyzer_x16.html
  php html/plugins/spectrum_analyzer_x2.html
  php html/plugins/spectrum_analyzer_x4.html
  php html/plugins/spectrum_analyzer_x8.html
  php html/plugins/trigger_midi_mono.html
  php html/plugins/trigger_midi_stereo.html
  php html/plugins/trigger_mono.html
  php html/plugins/trigger_stereo.html
  php html/video.html
  php html/development/versioning.html
  php html/development/building.html
  php html/development/debug.html
  php html/development/testing.html
  php html/development/eclipse.html
  php html/troubleshooting.html
Building plugins
  g++ expander.cpp
  g++ spectrum_analyzer.cpp
  g++ impulse_reverb.cpp
  g++ trigger.cpp
  g++ declipper.cpp
  g++ comp_delay.cpp
  g++ oscillator.cpp
  g++ limiter.cpp
  g++ mb_compressor.cpp
  g++ profiler.cpp
  g++ phase_detector.cpp
  g++ slap_delay.cpp
  g++ impulse_responses.cpp
  g++ experimental.cpp
  g++ graph_equalizer.cpp
  g++ sampler.cpp
  g++ compressor.cpp
  g++ gate.cpp
  g++ latency_meter.cpp
  g++ nonlinear_convolver.cpp
  g++ para_equalizer.cpp
  g++ dyna_processor.cpp
  ld plugins.o
Building ui
  g++ IUIWrapper.cpp
  g++ graphics.cpp
  g++ ui_locale.cpp
  g++ ui_builder.cpp
  g++ serialize.cpp
  g++ XMLHandler.cpp
  g++ common.cpp
  g++ XMLParser.cpp
  g++ plugin_ui.cpp
Building ws
  g++ ISurface.cpp
  g++ IDisplay.cpp
  g++ INativeWindow.cpp
  g++ IEventHandler.cpp
  g++ IClipboard.cpp
Building x11
  g++ X11Clipboard.cpp
  g++ X11Display.cpp
  g++ X11Atoms.cpp
  g++ X11CairoSurface.cpp
  g++ decode.cpp
  g++ X11Window.cpp
  g++ X11CairoGradient.cpp
  ld ws_x11_core.o
  ld ws_core.o
Building tk
  g++ basic/LSPWidgetContainer.cpp
  g++ basic/LSPWidgetProxy.cpp
  g++ basic/LSPWidget.cpp
  g++ basic/LSPComplexWidget.cpp
  g++ widgets/dialogs/LSPMessageBox.cpp
  g++ widgets/dialogs/LSPFileDialog.cpp
  g++ widgets/LSPButton.cpp
  g++ widgets/LSPHyperlink.cpp
  g++ widgets/LSPLed.cpp
  g++ widgets/LSPMeter.cpp
  g++ widgets/LSPListBox.cpp
  g++ widgets/LSPGroup.cpp
  g++ widgets/LSPComboBox.cpp
  g++ widgets/LSPEdit.cpp
  g++ widgets/LSPMountStud.cpp
  g++ widgets/LSPSaveFile.cpp
  g++ widgets/graph/LSPBasis.cpp
  g++ widgets/graph/LSPMarker.cpp
  g++ widgets/graph/LSPFrameBuffer.cpp
  g++ widgets/graph/LSPText.cpp
  g++ widgets/graph/LSPGraphItem.cpp
  g++ widgets/graph/LSPDot.cpp
  g++ widgets/graph/LSPMesh.cpp
  g++ widgets/graph/LSPAxis.cpp
  g++ widgets/graph/LSPCenter.cpp
  g++ widgets/LSPGraph.cpp
  g++ widgets/LSPCell.cpp
  g++ widgets/LSPLabel.cpp
  g++ widgets/LSPSeparator.cpp
  g++ widgets/LSPWindow.cpp
  g++ widgets/LSPMenuItem.cpp
  g++ widgets/LSPAudioFile.cpp
  g++ widgets/LSPScrollBar.cpp
  g++ widgets/LSPFader.cpp
  g++ widgets/LSPBox.cpp
  g++ widgets/LSPKnob.cpp
  g++ widgets/LSPIndicator.cpp
  g++ widgets/LSPFraction.cpp
  g++ widgets/LSPSwitch.cpp
  g++ widgets/LSPGrid.cpp
  g++ widgets/LSPMenu.cpp
  g++ widgets/LSPComboGroup.cpp
  g++ widgets/LSPAlign.cpp
  g++ util/LSPFileFilter.cpp
  g++ util/LSPItem.cpp
  g++ util/LSPTextCursor.cpp
  g++ util/LSPItemList.cpp
  g++ util/LSPSurface.cpp
  g++ util/LSPWindowActions.cpp
  g++ util/LSPTextLines.cpp
  g++ util/LSPFont.cpp
  g++ util/LSPTextSelection.cpp
  g++ util/LSPColor.cpp
  g++ util/LSPTextClipboard.cpp
  g++ util/LSPKeyboardHandler.cpp
  g++ util/LSPPadding.cpp
  g++ util/LSPSizeConstraints.cpp
  g++ util/LSPItemSelection.cpp
  g++ util/LSPFileMask.cpp
  g++ util/LSPWidgetFont.cpp
  g++ util/LSPWidgetColor.cpp
  g++ sys/LSPDisplay.cpp
  g++ sys/LSPSlot.cpp
  g++ sys/LSPSlotSet.cpp
  g++ sys/LSPTimer.cpp
  g++ sys/LSPClipboard.cpp
  g++ sys/LSPTheme.cpp
  g++ tk.cpp
  g++ helpers/draw.cpp
  ld tk_core.o
Building ctl
  g++ CtlColor.cpp
  g++ CtlCell.cpp
  g++ CtlPortListener.cpp
  g++ CtlComboBox.cpp
  g++ CtlMarker.cpp
  g++ CtlSwitch.cpp
  g++ CtlHyperlink.cpp
  g++ CtlPortAlias.cpp
  g++ CtlAudioFile.cpp
  g++ CtlComboGroup.cpp
  g++ CtlBasis.cpp
  g++ CtlDot.cpp
  g++ ctl.cpp
  g++ CtlExpression.cpp
  g++ CtlPluginWindow.cpp
  g++ CtlEdit.cpp
  g++ CtlBox.cpp
  g++ CtlGroup.cpp
  g++ CtlConfigSource.cpp
  g++ CtlConfigHandler.cpp
  g++ CtlButton.cpp
  g++ CtlCenter.cpp
  g++ CtlGraph.cpp
  g++ CtlPathPort.cpp
  g++ CtlLabel.cpp
CtlLabel.cpp: In member function ‘void lsp::ctl::CtlLabel::commit_value()’:
CtlLabel.cpp:186:58: warning: ‘__builtin___snprintf_chk’ output may be truncated before the last format character [-Wformat-truncation=]
                         snprintf(a_text, sizeof(a_text), "%s%c%s", buf, (bSameLine) ? ' ' : '\n', (u_name != NULL) ? u_name : "" );
                                                          ^~~~~~~~
In file included from /usr/include/stdio.h:862,
                 from /home/rt/work/lsp-plugins/include/core/debug.h:12,
                 from /home/rt/work/lsp-plugins/include/ui/ws/ws.h:12,
                 from /home/rt/work/lsp-plugins/include/ui/tk/tk.h:17,
                 from /home/rt/work/lsp-plugins/include/ui/ctl/ctl.h:21,
                 from CtlLabel.cpp:8:
/usr/include/bits/stdio2.h:64:35: note: ‘__builtin___snprintf_chk’ output 2 or more bytes (assuming 129) into a destination of size 128
   return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
          ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        __bos (__s), __fmt, __va_arg_pack ());
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  g++ CtlScrollBar.cpp
  g++ CtlFrameBuffer.cpp
  g++ CtlAlign.cpp
  g++ CtlWidget.cpp
CtlWidget.cpp: In member function ‘virtual void lsp::ctl::CtlWidget::end()’:
CtlWidget.cpp:143:25: warning: ignoring return value of ‘int asprintf(char**, const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
                 asprintf(&str, ":%s ieq %d", pVisibilityID, int(nVisibilityKey));
                 ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  g++ CtlLed.cpp
CtlLed.cpp: In member function ‘virtual void lsp::ctl::CtlLed::end()’:
CtlLed.cpp:120:25: warning: ignoring return value of ‘int asprintf(char**, const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
                 asprintf(&str, ":%s ieq %d", pPort->id(), int(fKey));
                 ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  g++ CtlValuePort.cpp
  g++ CtlPortHandler.cpp
  g++ CtlListBox.cpp
  g++ CtlSaveFile.cpp
  g++ CtlText.cpp
  g++ CtlKnob.cpp
  g++ CtlIndicator.cpp
  g++ CtlSeparator.cpp
  g++ CtlRegistry.cpp
  g++ CtlSwitchedPort.cpp
  g++ CtlFraction.cpp
  g++ CtlPort.cpp
  g++ CtlFader.cpp
  g++ CtlControlPort.cpp
  g++ CtlGrid.cpp
  g++ CtlMeter.cpp
CtlMeter.cpp: In member function ‘virtual void lsp::ctl::CtlMeter::end()’:
CtlMeter.cpp:228:25: warning: ignoring return value of ‘int asprintf(char**, const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
                 asprintf(&str, ":%s >= 0.5", pActivityID[i]);
                 ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  g++ CtlMesh.cpp
  g++ CtlTempoTap.cpp
  g++ parse.cpp
  g++ CtlPadding.cpp
  g++ CtlAxis.cpp
  ld ctl_core.o
  ld ui_core.o
Generating XML resources
Generating resource file ......../lsp-plugins/.build/src/res/xml_resource.cpp

seems to run in an endless loop

A lot of build errors on FreeBSD

Missing #include <sys/syslimits.h>:

profiler.cpp:106:35: error: use of undeclared identifier 'PATH_MAX'
            strncpy(sFile, fname, PATH_MAX);
                                  ^

Also missing isinff.

Also this error:

profiler.cpp:744:9: error: cannot initialize object parameter of type 'lsp::ITask' with an expression of type 'lsp::profiler_mono::Saver'
        pSaver->reset();
        ^~~~~~

FreeBSD 11.2 amd64, compiler is clang-6.

Can't access remote directories

When loading a preset or impulse response or other file, I need to open it using the file explorer dialog of the plugins, and I'm having problems when accessing remote directories in my home directory.

I have most of my files on a server, whose directories are mounted in my home directory via sshfs on my small home network. This works great 99% of the time - I rarely, if ever, have any hickups when accessing them from the desktop computer. For example, I often save large images from The Gimp, or music projects from Reaper this way - running the app on the desktop computer and saving the data on the server. As far as the desktop applications are concerned, the remote directories are no different from local directories (?).

But in the file dialogs in lsp plugins, the remotely mounted directories in my home dir either don't show up, or don't lead anywhere. Sometimes when selecting them, the whole dialog just closes.

Any ideas?

I'm happy to do some testing, provide logs, etc. if you help me get started.

Thanks!

Loading IR freezes Reaper (1.1.7)

I'm using Reaper and everything was fine until the 1.1.7 release. With the latest update if I try to load an IR using the IR Loader the whole DAW just freezes and I'm forced to kill it.

[ERR] Could not find LSP JACK core library

Many thanks for open open-sourcing lsp-plugins!

I'm trying to package them for NixOS.
The LADSPA and LV2 plugins are working, but the standalone jack gives the above error.
That's probably because NixOS uses non-standard paths, so we don't have /usr/lib, for example.
I've tried to patch the Makefile and /include/container/jack/main.h, but it's not working yet.

Where else is defined where these libraries are found?
Am I missing something?

Multiband Compressor Solo

Hey

The solo button of the 'Multiband Compressor Mono/Stereo x8' doesn't work as expected.
If I solo a specific band, let's say the bass #0 band, I should only hear that band exclusively, only the very low frequencies, yet I hear some much higher frequencies as well. They are much quieter but still audible.
This problem is true for all the other bands as well but this is the most noticeable one.
If you solo an inactive band, you shouldn't hear anything, should you?!

Add verbose build flag, or otherwise make it possible to see the compiler calls

Right now it is not possible to see what the compiler is doing behind the scenes.

I have a few flags I always put in packages for kxstudio (like hide all symbols), but right now it is not possible to see if they are actually in use unless I patch out a bunch of makefile lines.
(I pretty much already confirmed the custom flags are NOT being used)

I have a build issue regarding the tests that right now I can't simply debug. (might be my fault, I have no idea...)
Tried a few things to see the actual g++ args but failed.

Issue with jalv

Testing with jalv, reporting here:

  • jalv.gtk: segfault
  • jalv.gtk3: works with a generic UI
  • jalv.qt5: the UI is that small that it displays only a little part of the UI - can't resize it
  • jalv -s: works fine but the GUI can't be closed

This test was done with http://lsp-plug.in/plugins/lv2/dyna_processor_lr and I've been seeing the same with other (random) LSP plugins.

drag&drop function in the samplers

Hello, dear Sadko! :)
Once I was asking about the sample pre-listening possibility in the samplers (through the feedback function in your site http://lsp-plug.in/?page=feedback). May be it could be not so complicated to add a drag&drop function from Adrour's import window or from any file manager (like Nautilus, Thunar etc. in Linux), instead of making a preview function in the sampler's browser? Sorry if my question is stupid - I'm not a programmer, just an idea...
(At this time I browse my samples in the Ardour's import window, simultaneously opening the sampler's browser and find the sample there.)
Many thanks! :)

Build warning (single one multiple times) regarding unused result

Building lsp-plugins I get a build warning repeated several times.

/Shared/Personal/FOSS/Repo/Debian-Plugins/lsp-plugins-src-1.1.7/include/container/jack/main/posix.h: In function ‘int (* lsp::lookup_jack_main(void**, const char*))(const char*, int, const char**)’:
/Shared/Personal/FOSS/Repo/Debian-Plugins/lsp-plugins-src-1.1.7/include/container/jack/main/posix.h:78:73: warning: ignoring return value of ‘int asprintf(char**, const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
             asprintf(&ptr, "%s" FILE_SEPARATOR_S "%s", path, de->d_name);

This spams the build log, there's really a lot of them..

Using Ubuntu 14.04, gcc-4.8.5 (for generic kxstudio packages)

Please don't generally require OpenGL when only tests use it

Only tests use it:

$ grep -r GL/ work | grep inclu
work/lsp-plugins-e29c646/src/test/mtest/core/geometry3d.cpp:#include <GL/gl.h>
work/lsp-plugins-e29c646/src/test/mtest/core/geometry3d.cpp:#include <GL/glx.h>
work/lsp-plugins-e29c646/src/test/mtest/core/geometry3d.cpp:#include <GL/glu.h>

But the root Makefile requires it unconditionally:

$ grep -r OPENGL work/
work/lsp-plugins-e29c646/Makefile:export OPENGL_HEADERS   = $(shell pkg-config --cflags gl glu)
work/lsp-plugins-e29c646/Makefile:export OPENGL_LIBS      = $(shell pkg-config --libs gl glu)
work/lsp-plugins-e29c646/src/container/Makefile:  LIBS                   += $(OPENGL_LIBS)
work/lsp-plugins-e29c646/src/core/Makefile:	@$(CC) -o $(@) -c $(FILE) -fPIC $(CPPFLAGS) $(CFLAGS) $(INCLUDE) $(OPENGL_HEADERS) 
work/lsp-plugins-e29c646/src/test/Makefile:	@$(CC) -o $(@) -c $(FILE) -fPIC $(CPPFLAGS) $(CFLAGS) $(INCLUDE) $(OPENGL_HEADERS) 

Please only require it in the test folder.

malloc.h file not found

After downloading the repo and navigating to the folder, I ran make and got this error:
/lsp-plugins-master/include/core/sugar.h:11:10: fatal error: 'malloc.h' file not found #include <malloc.h> ^~~~~~~~~~
maybe this is related? RIOT-OS/RIOT#2361

Bypass not working in the multiband compressor

When I enable "Bypass" it sounds like the effect is still doing it's work. Only when I do "Bypass" in Ardour itself it does indeed work and I can compare what the compressor is actually doing to the dry signal.

Package sndfile was not found

Package sndfile was not found in the pkg-config search path.
Perhaps you should add the directory containing sndfile.pc' to the PKG_CONFIG_PATH environment variable No package 'sndfile' found Package sndfile was not found in the pkg-config search path. Perhaps you should add the directory containing sndfile.pc'
to the PKG_CONFIG_PATH environment variable
No package 'sndfile' found

Build binaries with full relro by default (and consider PIE)

Hi!
I'm currently preparing to move lsp-plugins to Arch Linux' [community] repository.
However, during packaging I encountered the following: None of the (standalone) binaries have full RELRO.

It would be good to enable that by default! For the time being: How do I achieve that using the Makefile? I've had a few goes at it, but couldn't find the proper entry point, as it seemed non-trivial to change in the Makefile using sed.

Additionally, it would be great, if you'd considered adding PIE, too.

I build with:

  # setting paths
  # removing /usr/local/lib from RPATH
  sed -e '/BIN_PATH/ s|/usr/local|/usr|' \
      -e '/LIB_PATH/ s|/usr/local|/usr|' \
      -e '/DOC_PATH/ s|/usr/local|/usr|' \
      -e '/LD_PATH/ s|:/usr/local/lib||' \
      -e "/export SO_FLAGS/ s|$| $LDFLAGS|" \
      -i Makefile
  make
  make test
  .build/lsp-plugins-test utest --nofork --debug --verbose
  make DESTDIR="$pkgdir/" install

Here's my build log, in case you're interested:
lsp-plugins-relro.txt

It will also show you unused shared libraries (e.g. libpthread.so.0).

UI control text does not render

Testing with 1.1.4, control text is not rendering. When starting, for example, lsp-plugins-limiter-mono in standalone mode, only Limiter and Signal group labels are rendered but no other text is shown. After first launching the plugin, a small popup appears above the plugin UI with a black screen and a white bar:

screenshot

  • Each plugin seems to work and responds to control changes (after dismissing the blank popup).
  • Observed with every plugin that I have tried.
  • No crashes or other odd behavior is observed.
  • Same result whether running as standalone, LV2 (in Ardour) and as VST (in Reaper).
  • Same result when using an earlier version (1.1.0).
  • Same result whether using pre-built binaries or building from source.
  • No build errors when building from source.

Host info:

  • Slackware64 14.2 (Linux 4.4.14)
  • Window manager: XFCE 4.12.0
  • XFCE default theme loaded. Also tried other themes.
  • x86_64 Intel(R) Core(TM) i7-3770K
  • No other VST plugins installed. Some LV2 are installed (Carla, gx_*, and Invada), but I get the same result whether these are present or not.

Memory usage:

           total        used        free         shared  buff/cache   available
Mem:       16349904     2023184     6451080      239588     7875640    13580272
Swap:      39450708         256    39450452

Packages Installed:

  • gcc 5.5.0
  • jack 1.9.12
  • lv2 1.12.0
  • ladspa 1.13
  • expat 2.2.2
  • sndfile 1.0.26
  • cairo 1.14.6
  • glu 9.0.0
  • libGL 11.2.2 (Slackware mesa package)
  • php 5.6.38

Trace output when built with make trace is attached below (running /usr/local/bin/lsp-plugins-limiter-mono as before).

There is an error message about loading the global configuration file, but that file was created (though empty) at $HOME/.config/lsp-plugins/lsp-plugins.cfg and it has user (not root) read permissions.

trace-output.txt

cross compilation

I'm trying to build a debian package for the LSP plugins. This is done with the pbuilder tool which provides a chrooted environment. Building the 64 bits package on a 64 bits system works as expected. But when trying to build the 32 bits package, it looks like the LSP auto-detection system still consider that it is building on a 64 bits host as indicated by this comment:

Building binaries for target architecture: x86_64

and thus lead to an error when building with this kind of things:

/usr/include/features.h:364:25: fatal error: sys/cdefs.h: No such file or directory
 #  include <sys/cdefs.h>
                         ^

or

/usr/include/c++/6/cmath:41:28: fatal error: bits/c++config.h: No such file or directory
 #include <bits/c++config.h>
                            ^

Would you have any recommendation/idea?

Impulse Reverb Stereo Crashing Ardour

It seems that the Impulse Reverb Stereo (latest version) plugin keeps crashing Ardour in my most recent project.

It would work when I loaded a session, but trying to edit it would crash the session. I was using it with OwnHammer IRs (cabinet simulation) and some 3Sigma IR reverbs.

(I am not sure if related, but I was also having some "random" (not consistent) segmentation faults on start up. They seem to have gone away after I removed all LSP plugins from the session.)

Here is a GDB log from one of these crashes: https://pastebin.com/Si2YrmPY

I have a snapshot of the session with all LSP plugins. So, let me know if I can provide any more info.

(Ardour 5.12 from KXStudio repos, running on Debian Sid.)

lsp-plugins incompatible to jack1 (due to jack_midi_reset_buffer)

As noted in my other issue, I'm about to move lsp-plugins to the [community] repository on Arch Linux. During packaging another thing stroke me as fairly odd: lsp-plugins can only be compiled using jack2! This is something that should be circumvented at all costs, as (in theory) jack1 and jack2 are in feature parity.
The problem seems to be the use of jack_midi_reset_buffer, which afaik will be removed in a future release of jack2! It's not safe to rely on it.

Here's my build output, when building with jack1:
lsp-plugins-jack1.txt

Wrong use of CFLAGS vs CXXFLAGS

CFLAGS is the variable used for building C code.
CXXFLAGS is used for C++.

lsp-plugins consists mostly of C++ code, but I see only CFLAGS is used.
Please switch to use CXXFLAGS instead.

install_foo functions install every option

build_foo works, install_foo will try to install (and compile if not compiled) all modules. (Ignore the missing JACK stuff below, I'm trying to build without JACK support) removing the all parameter seems to help.

make -j5 -l16 install_lv2 
Package jack was not found in the pkg-config search path.
Perhaps you should add the directory containing `jack.pc'
to the PKG_CONFIG_PATH environment variable
No package 'jack' found
Package jack was not found in the pkg-config search path.
Perhaps you should add the directory containing `jack.pc'
to the PKG_CONFIG_PATH environment variable
No package 'jack' found
-------------------------------------------------------------------------------
Building binaries
  target architecture : x86_64
  target platform     : Linux
  target system       : Linux
  modules             : ladspa lv2 vst jack profile src doc
-------------------------------------------------------------------------------

Import settings from terminal

Add ability to import settings from terminal like:

 $ lsp-plugins-para-equalizer-x16-mono --import ~/lsp-settings/eq.cfg

Invalid TLS certificate on lsp-plugin.in

The current TLS certificat used on https://lsp-plug.in is not valid (but it used to be!):

lsp-plug.in uses an invalid security certificate. The certificate is not trusted because the issuer certificate is unknown. The server might not be sending the appropriate intermediate certificates. An additional root certificate may need to be imported. The certificate is only valid for . The certificate expired on 5 April 2011, 01.15.59 GMT+2. The current time is 30 December 2018, 17.13. Error code: SEC_ERROR_UNKNOWN_ISSUER

missing or hidden LADSPA descriptor

I'm forwarding a user-report from Ardour IRC:

Ran AV Linux updates about a week ago, now having errors in Ardour. Anyone know the answer? Errors are:

LADSPA: module "/usr/lib/ladspa/lsp-plugins-ladspa.so" has no descriptor function.
'ladspa_descriptor': /usr/lib/ladspa/lsp-plugins-ladspa.so: undefined symbol: ladspa_descriptor

I am not sure if this is specific to AVLinux, or if it is an upstream issue, but I thought I'll leave a note for it to not be forgotten.

Flaky test: "Testing bswap i32 for 13 elements"

When building 1.1.4 and also 1.1.5 I sometimes run into flaky tests:

Testing bswap i32 for 12 elemens
TestUnit test 'dsp.3d.triplet' assertion has failed at file utest/dsp/3d/triplet.cpp, line 94:
  check_triplet3d_v2n(&v[1], &v[2], &n1) >= 0
ing bswap i32 for 13 elemens
Testing bswap i32 for 14 elemens

I run the tests by first doing a separate test build, then running the tests only on that:

  local _test_path="$(pwd)/.build-test"
  cd "$pkgname-$pkgver"
  make
  make OBJDIR=${_test_path} clean
  make OBJDIR=${_test_path} test
  local _test_path="$(pwd)/.build-test"
  cd "$pkgname-$pkgver"
  ${_test_path}/lsp-plugins-test utest --nofork --debug --verbose

It puzzles me, that I only run into that failing test ~ every 5th time I rebuild...
Maybe you have any ideas or have encountered similar problems?
It's pretty bad for reproducible builds...

cannot run tests

As part of the packaging for NixOS, I was asked to run the tests.

When I build the pkg, and then run

./.build/src/jack/lsp-plugins-test-plugin utest

I get:

[ERR] Could not find LSP JACK core library

Also: I don't see a corresponding binary for the LV2 and VST plugins.

This is using the 1.1.4 release, since a package should use a release, if available.

Feedback form not working

When I tried to submit this message to the feedback form at http://lsp-plug.in/?page=feedback, I got an error saying:

Sorry, something went wrong while submitting form. You may try again some amount of time later.

I tried again a few times, no luck.


Hi LSP!
I really like your plugins, especially the Klangerzueger - there's not much else out there that's as straight-forward for sampling.

I would love to submit some feature suggestions, but it's quite hard to find your github project, because link on the download page is broken - no HREF.

Are you open to suggestions on your plugins? I have a few that would really make Klangerzueger much more useful for resampling.

Cheers
ned

Dropdown menues are displayed in the wrong place.

I'm using a tiling windowmanager called i3, and when I use one of the dropdown menus in the plugins (both standalone and LV2), they appear in the wrong place.

Some of them go to the top of the screen, and some go to the bottom, appearing even under the WM status bar.

Avoid fork(3) - prefer vfork(2)

The problem with fork() is that it duplicates the page tables and file-descriptors of the parent process. It is inherently not realtime-safe. Any processes that has realtime threads (here a plugin-host) should not use fork(). In context of pro-audio on POSIX systems, prefer vfork(); execve();

https://github.com/sadko4u/lsp-plugins/blob/543e17e9de3b8dc9de6e31438d1223d792054626/src/ui/tk/widgets/LSPHyperlink.cpp#L107

PS. You may also investigate using posix_spawn(), but that's a library function on Linux.

AudioFile.cpp fails to find sndfile in custom prefix

I have libsndfile installed in a custom prefix, easily found by pkg-config.
I see there pkg-config being called at some point in the makefiles, which leads me to believe it is doing the right thing.
Somehow build still fails though, with:

files/AudioFile.cpp:17:21: fatal error: sndfile.h: No such file or directory
 #include <sndfile.h>

so I guess SNDFILE_HEADERS is missing when building this file

ppc64le and s390x arches build failed

I want add lsp-plugins to Fedora but it failed build on ppc64le and s390x arches.
Errors in vst2.h

BUILDSTDERR: /builddir/build/BUILD/lsp-plugins-src-1.1.9/include/3rdparty/steinberg/vst2.h:2179:34: error: expected ')' before '*' token
BUILDSTDERR:  2179 | typedef VstIntPtr   (VSTCALLBACK *audioMasterCallback)      (AEffect* effect, VstInt32 opcode, VstInt32 index, VstIntPtr value, void* ptr, float opt);
BUILDSTDERR:       |                     ~            ^

Full build log with all errors https://kojipkgs.fedoraproject.org//work/tasks/4222/35834222/build.log

Can you help me?

GUI takes a long time to open in Carla

I've heard about this problem before, and I'm experiencing it myself.

I'm using LSP plug-ins in Ardour with no issues, but all of them have the same problem when loaded in Carla.

When I try opening the GUI, nothing happens for as many as 20 seconds, then the plug-in window opens and everything works as expected.

In Ardour the GUIs open nearly instantly.

What could cause this?

lsp-plugins-jack-core-1.1.9.so installs to /usr/lib

Hi!

I'm working on packaging lsp-plugins for Ubuntu (and Debian), but the biggest roadblock that I'm running into is that lsp-plugins-jack-core-1.1.9.so installs directly into the /usr/lib directory and, per specifications, must be in a subdirectory (i.e. /usr/lib/lsp-plugins). Otherwise, I have a very clean package, but it is being denied due to this one issue.

Would you please move the shared object (and change anything looking for it) to /usr/lib/lsp-plugins (or really any proper subdirectory of your choosing within /usr/lib)? This way, your work would reach a broader audience and would be installed by default in Ubuntu Studio.

Thanks! :)

Environment CFLAGS not respected

I have set custom CFLAGS (using export in the environment) when building lsp-plugins.
It includes -Wno-unused-result

But during the build I still see stuff like:

x86.cpp:389:115: warning: ignoring return value of ‘int asprintf(char**, const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
         asprintf(&model, "vendor=%s, family=0x%x, model=0x%x", cpu_vendors[f.vendor], int(f.family), int(f.model));

This leads me to believe the makefiles are simply ignoring/overriding my custom flags.
It is impossible to see due to all compiler flags being hidden away, but that is another issue

LSP limiter (LV2) does not report latency, even though has port marked as reportsLatency

LSP limiter and possibly other plugins report 0 latency in LV2. it must report the correct latency when you pass it 0 samples as the LV2 spec says:

As a special case, when sample_count is 0, the plugin should update any output ports that represent a single instant in time (e.g. control ports, but not audio ports). This is particularly useful for latent plugins, which should update their latency output port so hosts can pre-roll plugins to compute latency. Plugins MUST NOT crash when sample_count is 0.

http://lv2plug.in/doc/html/group__lv2core.html#a3cb9de627507db42e338384ab945660e

i also tried with more than 0 samples but it still reports 0 latency. it has a lookahead control so it should report the appropriate latency

Plugins not possible to use in non-standard location?

Tested the LinuxVST edition of lsp-plugins in Reaper for Linux.
When adding them to a "non standard" VST directory, such as ~/Multimedia/VST (in my case), the plugins don't show up in Reaper. It seems that putting the core plugin in a standard location such as /usr/lib/vst solves this. But it would be reasonable if the core plugin could reside in any plugins directory chosen in Reaper's plugin preferences.

Tests fail on debian/ubuntu build

When building for Ubuntu, we are running into this problem unless we disable the test suite:

/usr/bin/ld: /<<PKGBUILDDIR>>/.build/test_core.o: in function 'mtest::(anonymous namespace)::mtest_standalone::plugin_not_found(char const*) [clone .isra.3]': ./src/test/./include/metadata/modules.h:150: undefined reference to 'lsp::test_plugin_metadata::metadata'

Enitre build log here.

Only way to get it to build is to disable the test suite.

Properly check for LV2 UI extension URI

Please add a proper check for the LV2 UI extension URI before returning anything potentially invalid.

366 const void* lv2ui_extension_data(const char* uri)
367 {
368 if (!strcmp(uri, LV2_UI__idleInterface))
369 {
370 return &idle_iface;
371 }
372
373 return NULL;
374 }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.