Package: audacity Version: 2.1.2-1+b1 Severity: minor Dear Maintainer,
In the settings window for LADSPA effects, the sliders do not move to negative integers. If, for example, an integer option ranges from -3 to 3 (inclusive), the slider will only move within one half of the bar. What is interesting is that negative values can still be entered manually, and the slider will even move to the appropriate position in the negative part! But trying to adjust the slider will cause it to jump back to the 0 position. Also, the lower-bound label for the slider is incorrect when negative integers are involved: It is one greater than the true lower bound. So, if the range were from -3 to 3, the lower-bound label would be -2. However, the slider seems to behave as if the lower bound is correct. I first discovered these issues while using Tom Baran's Autotalent plugin (packaged as "autotalent"), so that may be used to reproduce these issues. I have also attached a test plugin which may help. Thank you for your consideration. Kyanos -- System Information: Debian Release: stretch/sid APT prefers testing APT policy: (500, 'testing'), (300, 'oldstable-updates'), (300, 'oldstable') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 4.6.0-1-amd64 (SMP w/4 CPU cores) Locale: LANG=en_US.utf8, LC_CTYPE=en_US.utf8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) Versions of packages audacity depends on: ii audacity-data 2.1.2-1 ii libasound2 1.1.1-2 ii libavcodec57 7:3.0.2-4 ii libavformat57 7:3.0.2-4 ii libavutil55 7:3.0.2-4 ii libc6 2.23-1 ii libexpat1 2.2.0-1 ii libflac++6v5 1.3.1-4 ii libflac8 1.3.1-4 ii libgcc1 1:6.1.1-9 ii libgdk-pixbuf2.0-0 2.34.0-1 ii libglib2.0-0 2.48.1-1 ii libgtk2.0-0 2.24.30-2 ii libid3tag0 0.15.1b-11 ii liblilv-0-0 0.22.0~dfsg0-1 ii libmad0 0.15.1b-8 ii libmp3lame0 3.99.5+repack1-9+b1 ii libogg0 1.3.2-1 ii libportaudio2 19+svn20140130-1 ii libportsmf0 0.1~svn20101010-4 ii libsbsms10 2.0.2-1 ii libsndfile1 1.0.25-10 ii libsoundtouch1 1.9.2-2 ii libsoxr0 0.1.2-1 ii libstdc++6 6.1.1-9 ii libsuil-0-0 0.8.2~dfsg0-1 ii libtwolame0 0.3.13-1.2 ii libvamp-hostsdk3v5 2.6~repack0-2 ii libvorbis0a 1.3.5-3 ii libvorbisenc2 1.3.5-3 ii libvorbisfile3 1.3.5-3 ii libwxbase3.0-0v5 3.0.2+dfsg-1.4 ii libwxgtk3.0-0v5 3.0.2+dfsg-1.4 audacity recommends no packages. Versions of packages audacity suggests: ii autotalent [ladspa-plugin] 0.2-5 ii caps [ladspa-plugin] 0.9.24-2 ii ladspa-sdk [ladspa-plugin] 1.13-2+b1 ii swh-plugins [ladspa-plugin] 0.4.16+git20160602~repack1-2 ii tap-plugins [ladspa-plugin] 0.7.3-1 -- no debconf information
#include <ladspa.h> #include <stdlib.h> #include <stddef.h> /* * This is a LADSPA plugin that merely copies the audio input to the output. * The primary purpose of this plugin is to test hosts' handling of control * inputs. * * To the extent possible under law, Kyanos has waived all copyright and * related or neighboring rights to this work, using Creative Commons * CC0 1.0 Universal. For more information, please visit: * https://creativecommons.org/publicdomain/zero/1.0/ */ /* Port count (1 audio in, 1 audio out, 1 control in) */ #define LT_PORTS_COUNT 3 /* Port numbers */ #define LT_PORT_AUDIO_IN 0 #define LT_PORT_AUDIO_OUT 1 #define LT_PORT_CONTROL_IN 2 typedef struct lt_instance_s { LADSPA_Data* connections[LT_PORTS_COUNT]; } lt_instance; const LADSPA_PortDescriptor lt_port_descs[] = { LADSPA_PORT_AUDIO | LADSPA_PORT_INPUT, LADSPA_PORT_AUDIO | LADSPA_PORT_OUTPUT, LADSPA_PORT_CONTROL | LADSPA_PORT_INPUT, }; const char* lt_port_names[] = { "Audio In", "Audio Out", "Test Option", }; const LADSPA_PortRangeHint lt_port_range_hints[] = { /* Dummy hints for audio ports */ {0, 0, 0}, {0, 0, 0}, /* Hints for control port */ { LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_0 , -0.1, 3.1 }, }; LADSPA_Handle lt_instantiate( const struct _LADSPA_Descriptor * Descriptor, unsigned long SampleRate ); void lt_connect_port( LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation ); void lt_run(LADSPA_Handle Instance, unsigned long SampleCount); void lt_cleanup(LADSPA_Handle Instance); /* Descriptor for this plugin */ const LADSPA_Descriptor lt_descriptor = { /* * Unique ID. * * "Plugin IDs 1-1000 are reserved for development use" * (LADSPA SDK documentation) */ 1, /* Label */ "ladspatest", /* Properties */ LADSPA_PROPERTY_REALTIME | LADSPA_PROPERTY_HARD_RT_CAPABLE, /* Name */ "LADSPA Test Plugin", /* Maker */ "Kyanos <someanon...@gmail.com>", /* Copyright */ "Public Domain (CC0 1.0 Universal)", /* Port count (1 audio in, 1 audio out, 1 control in) */ LT_PORTS_COUNT, /* Port descriptor array */ lt_port_descs, /* Port name array */ lt_port_names, /* Port range hints */ lt_port_range_hints, /* Implementation data (not used) */ NULL, /* Instantiate function */ lt_instantiate, /* Connect port function */ lt_connect_port, /* Activate function (not provided) */ NULL, /* Run function */ lt_run, /* Run adding function (not provided) */ NULL, /* Set run adding gain function (not provided) */ NULL, /* Deactivate function (not provided) */ NULL, /* Cleanup function */ lt_cleanup, }; const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { if(Index == 0) { return <_descriptor; } else { return NULL; } } LADSPA_Handle lt_instantiate( const struct _LADSPA_Descriptor * Descriptor, unsigned long SampleRate ) { if(Descriptor != <_descriptor) { return NULL; } return malloc(sizeof(lt_instance)); } void lt_connect_port( LADSPA_Handle Instance, unsigned long Port, LADSPA_Data * DataLocation ) { if(Port < LT_PORTS_COUNT) { ((lt_instance*) Instance)->connections[Port] = DataLocation; } } void lt_run(LADSPA_Handle Instance, unsigned long SampleCount) { /* Copy data from audio input to audio output */ lt_instance* lti = (lt_instance*) Instance; for(; SampleCount > 0; SampleCount--) { lti->connections[LT_PORT_AUDIO_OUT][SampleCount - 1] = lti->connections[LT_PORT_AUDIO_IN][SampleCount - 1] ; } } void lt_cleanup(LADSPA_Handle Instance) { free(Instance); }