diff -Nru synthv1-0.8.6/aclocal.m4 synthv1-0.9.10+git20190929/aclocal.m4
--- synthv1-0.8.6/aclocal.m4 2017-12-20 07:57:09.949843285 +0000
+++ synthv1-0.9.10+git20190929/aclocal.m4 1970-01-01 00:00:00.000000000 +0000
@@ -1,290 +0,0 @@
-# generated automatically by aclocal 1.15.1 -*- Autoconf -*-
-
-# Copyright (C) 1996-2017 Free Software Foundation, Inc.
-
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
-# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
-# serial 12 (pkg-config-0.29.2)
-
-dnl Copyright © 2004 Scott James Remnant .
-dnl Copyright © 2012-2015 Dan Nicholson
-dnl
-dnl This program is free software; you can redistribute it and/or modify
-dnl it under the terms of the GNU General Public License as published by
-dnl the Free Software Foundation; either version 2 of the License, or
-dnl (at your option) any later version.
-dnl
-dnl This program is distributed in the hope that it will be useful, but
-dnl WITHOUT ANY WARRANTY; without even the implied warranty of
-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-dnl General Public License for more details.
-dnl
-dnl You should have received a copy of the GNU General Public License
-dnl along with this program; if not, write to the Free Software
-dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-dnl 02111-1307, USA.
-dnl
-dnl As a special exception to the GNU General Public License, if you
-dnl distribute this file as part of a program that contains a
-dnl configuration script generated by Autoconf, you may include it under
-dnl the same distribution terms that you use for the rest of that
-dnl program.
-
-dnl PKG_PREREQ(MIN-VERSION)
-dnl -----------------------
-dnl Since: 0.29
-dnl
-dnl Verify that the version of the pkg-config macros are at least
-dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's
-dnl installed version of pkg-config, this checks the developer's version
-dnl of pkg.m4 when generating configure.
-dnl
-dnl To ensure that this macro is defined, also add:
-dnl m4_ifndef([PKG_PREREQ],
-dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])])
-dnl
-dnl See the "Since" comment for each macro you use to see what version
-dnl of the macros you require.
-m4_defun([PKG_PREREQ],
-[m4_define([PKG_MACROS_VERSION], [0.29.2])
-m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
- [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
-])dnl PKG_PREREQ
-
-dnl PKG_PROG_PKG_CONFIG([MIN-VERSION])
-dnl ----------------------------------
-dnl Since: 0.16
-dnl
-dnl Search for the pkg-config tool and set the PKG_CONFIG variable to
-dnl first found in the path. Checks that the version of pkg-config found
-dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is
-dnl used since that's the first version where most current features of
-dnl pkg-config existed.
-AC_DEFUN([PKG_PROG_PKG_CONFIG],
-[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
-m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
-m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
-AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
-AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
-AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
-
-if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
- AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
-fi
-if test -n "$PKG_CONFIG"; then
- _pkg_min_version=m4_default([$1], [0.9.0])
- AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
- if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no])
- PKG_CONFIG=""
- fi
-fi[]dnl
-])dnl PKG_PROG_PKG_CONFIG
-
-dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-dnl -------------------------------------------------------------------
-dnl Since: 0.18
-dnl
-dnl Check to see whether a particular set of modules exists. Similar to
-dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
-dnl
-dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-dnl only at the first occurence in configure.ac, so if the first place
-dnl it's called might be skipped (such as if it is within an "if", you
-dnl have to call PKG_CHECK_EXISTS manually
-AC_DEFUN([PKG_CHECK_EXISTS],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-if test -n "$PKG_CONFIG" && \
- AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
- m4_default([$2], [:])
-m4_ifvaln([$3], [else
- $3])dnl
-fi])
-
-dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
-dnl ---------------------------------------------
-dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting
-dnl pkg_failed based on the result.
-m4_define([_PKG_CONFIG],
-[if test -n "$$1"; then
- pkg_cv_[]$1="$$1"
- elif test -n "$PKG_CONFIG"; then
- PKG_CHECK_EXISTS([$3],
- [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
- test "x$?" != "x0" && pkg_failed=yes ],
- [pkg_failed=yes])
- else
- pkg_failed=untried
-fi[]dnl
-])dnl _PKG_CONFIG
-
-dnl _PKG_SHORT_ERRORS_SUPPORTED
-dnl ---------------------------
-dnl Internal check to see if pkg-config supports short errors.
-AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
- _pkg_short_errors_supported=yes
-else
- _pkg_short_errors_supported=no
-fi[]dnl
-])dnl _PKG_SHORT_ERRORS_SUPPORTED
-
-
-dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
-dnl [ACTION-IF-NOT-FOUND])
-dnl --------------------------------------------------------------
-dnl Since: 0.4.0
-dnl
-dnl Note that if there is a possibility the first call to
-dnl PKG_CHECK_MODULES might not happen, you should be sure to include an
-dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
-AC_DEFUN([PKG_CHECK_MODULES],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
-AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
-
-pkg_failed=no
-AC_MSG_CHECKING([for $2])
-
-_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
-_PKG_CONFIG([$1][_LIBS], [libs], [$2])
-
-m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
-and $1[]_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.])
-
-if test $pkg_failed = yes; then
- AC_MSG_RESULT([no])
- _PKG_SHORT_ERRORS_SUPPORTED
- if test $_pkg_short_errors_supported = yes; then
- $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
- else
- $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
- fi
- # Put the nasty error message in config.log where it belongs
- echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
-
- m4_default([$4], [AC_MSG_ERROR(
-[Package requirements ($2) were not met:
-
-$$1_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-_PKG_TEXT])[]dnl
- ])
-elif test $pkg_failed = untried; then
- AC_MSG_RESULT([no])
- m4_default([$4], [AC_MSG_FAILURE(
-[The pkg-config script could not be found or is too old. Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
-
-_PKG_TEXT
-
-To get pkg-config, see .])[]dnl
- ])
-else
- $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
- $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
- AC_MSG_RESULT([yes])
- $3
-fi[]dnl
-])dnl PKG_CHECK_MODULES
-
-
-dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
-dnl [ACTION-IF-NOT-FOUND])
-dnl ---------------------------------------------------------------------
-dnl Since: 0.29
-dnl
-dnl Checks for existence of MODULES and gathers its build flags with
-dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags
-dnl and VARIABLE-PREFIX_LIBS from --libs.
-dnl
-dnl Note that if there is a possibility the first call to
-dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to
-dnl include an explicit call to PKG_PROG_PKG_CONFIG in your
-dnl configure.ac.
-AC_DEFUN([PKG_CHECK_MODULES_STATIC],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-_save_PKG_CONFIG=$PKG_CONFIG
-PKG_CONFIG="$PKG_CONFIG --static"
-PKG_CHECK_MODULES($@)
-PKG_CONFIG=$_save_PKG_CONFIG[]dnl
-])dnl PKG_CHECK_MODULES_STATIC
-
-
-dnl PKG_INSTALLDIR([DIRECTORY])
-dnl -------------------------
-dnl Since: 0.27
-dnl
-dnl Substitutes the variable pkgconfigdir as the location where a module
-dnl should install pkg-config .pc files. By default the directory is
-dnl $libdir/pkgconfig, but the default can be changed by passing
-dnl DIRECTORY. The user can override through the --with-pkgconfigdir
-dnl parameter.
-AC_DEFUN([PKG_INSTALLDIR],
-[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
-m4_pushdef([pkg_description],
- [pkg-config installation directory @<:@]pkg_default[@:>@])
-AC_ARG_WITH([pkgconfigdir],
- [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
- [with_pkgconfigdir=]pkg_default)
-AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
-m4_popdef([pkg_default])
-m4_popdef([pkg_description])
-])dnl PKG_INSTALLDIR
-
-
-dnl PKG_NOARCH_INSTALLDIR([DIRECTORY])
-dnl --------------------------------
-dnl Since: 0.27
-dnl
-dnl Substitutes the variable noarch_pkgconfigdir as the location where a
-dnl module should install arch-independent pkg-config .pc files. By
-dnl default the directory is $datadir/pkgconfig, but the default can be
-dnl changed by passing DIRECTORY. The user can override through the
-dnl --with-noarch-pkgconfigdir parameter.
-AC_DEFUN([PKG_NOARCH_INSTALLDIR],
-[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
-m4_pushdef([pkg_description],
- [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
-AC_ARG_WITH([noarch-pkgconfigdir],
- [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
- [with_noarch_pkgconfigdir=]pkg_default)
-AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
-m4_popdef([pkg_default])
-m4_popdef([pkg_description])
-])dnl PKG_NOARCH_INSTALLDIR
-
-
-dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
-dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-dnl -------------------------------------------
-dnl Since: 0.28
-dnl
-dnl Retrieves the value of the pkg-config variable for the given module.
-AC_DEFUN([PKG_CHECK_VAR],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
-
-_PKG_CONFIG([$1], [variable="][$3]["], [$2])
-AS_VAR_COPY([$1], [pkg_cv_][$1])
-
-AS_VAR_IF([$1], [""], [$5], [$4])dnl
-])dnl PKG_CHECK_VAR
-
diff -Nru synthv1-0.8.6/ChangeLog synthv1-0.9.10+git20190929/ChangeLog
--- synthv1-0.8.6/ChangeLog 2017-12-20 07:56:50.301842973 +0000
+++ synthv1-0.9.10+git20190929/ChangeLog 2019-09-28 23:00:43.000000000 +0000
@@ -4,6 +4,119 @@
ChangeLog
+0.9.10 2019-09-24 An Early-Fall'19 Release.
+
+- Upstream packaging is now split on JACK standalone,
+ LV2 plugin and common core and UI packages, similar
+ to recent Debian practice.
+- Added alternate yet non-official CMake build option.
+- Fix HiDPI display screen effective support (Qt >= 5.6).
+- All randomizers now compliant to the standard normal
+ distribution.
+- Make sure compiler flags comply to c++11 as standard.
+
+
+0.9.9 2019-07-18 A Summer'19 Release.
+
+- Randomization of current parameters is now available
+ through a new top-level push-button.
+- Updated for the newer Qt5 development tools (>= 5.13).
+- Per instance custom tuning (micro-tonal) option has
+ been added to the previously existing global settings
+ (cf. Help > Configure... > Tuning > Global, Instance).
+- New DCF and LFO Enabled parameters.
+- Configure updated to check for qtchooser availability.
+
+
+0.9.8 2019-06-06 A Spring'19 Release.
+
+- Improved slew-rate to DCF Formant coefficient updates.
+- Refactored the LFO Sync for correctness.
+- Fixed all LFO Panning and Volume modulation, now being
+ correctly isolated on a per voice basis.
+- Fixed DC offset on all main DCO wavetable oscillators.
+- Fixed initial DCO and LFO wave shapes on LV2 plug-in UI.
+- Minor update to Debian packaging control file.
+
+
+0.9.7 2019-04-14 A Spring-Break'19 Release.
+
+- All audio input now get through without being processed
+ by any or whole effects stage anymore.
+- Re-defined all JACK stand-alone client application UNIX
+ signal handling.
+
+
+0.9.6 2019-03-18 Pre-LAC2019 Release Frenzy.
+
+- A gentlier shutdown for the JACK client standalone client.
+
+
+0.9.5 2019-03-04 The End of Winter'19 release.
+
+- HiDPI display screen support (Qt >= 5.6).
+- A fake/visual piano-keyboard widget is now being introduced
+ to the status bar.
+- Avoid destructing the possibly shared QApplication instance
+ on LV2 plug-in UI clean-up.
+
+
+0.9.4 2018-12-12 A Late Autumn'18 release.
+
+- Old deprecated Qt4 build support is no more.
+- Normalized wavetable oscillator phasors.
+- Added missing include to shut up some stricter
+ compilers from build failures.
+
+
+0.9.3 2018-10-22 An Autumn'18 release.
+
+- For safety reasons, all processing is now suspended while
+ loading presets or program changes are issued.
+- AppStream metadata updated to be the most compliant with
+ latest freedesktop.org specification and recommendation.
+- SIGTERM (and SIGINT) signal handler added to close the JACK
+ stand-alone client applications properly.
+- Make the GUI not to show initially on NSM.
+- Make NSM state independent to session display name, keeping
+ backward compatibility for old sessions.
+- Give some more slack to schedule/worker thread ring-buffer.
+
+
+0.9.2 2018-07-24 A Summer'18 release.
+
+- Add LV2 UI Resize extension data support.
+- Process MIDI Controlllers even though the channel filter
+ is on (DEF Channel is set anything but "Omni").
+- AppData/AppStream metadata is now settled under an all
+ permisssive license (FSFAP).
+
+
+0.9.1 2018-06-26 An Early Summer'18 release.
+
+- Fixed for some g++ >= 8.1.1 warnings and quietness.
+- Added LV2 UI X11 support option.
+- Disable reference micro-tuning settings when a Scala
+ keyboard map override is in effect.
+- Added "All files (*.*)" filter to every file requestor
+ dialog, wherever missing.
+
+
+0.9.0 2018-03-07 The End of Winter'18 release.
+
+- Introducing Scala micro-tuning classes, borrowed, stirred
+ and refactored from original Nick Dowell's amsynth code,
+ all under the GPL umbrella, of course.
+- An internal note-key/frequency indirection table is now in
+ place, as a baseline for any micro-tuning implementations.
+- Whether to use native file browser/requester dialogs is
+ now an effective option when launching under NSM session
+ management (was once disabled initially).
+- Trying to get CC14 MSB+LSB (course+fine) running status on,
+ no matter whether each pairing event are under 200ms apart.
+- A little hardening on the configure (autoconf) macro side.
+
+
0.8.6 2017-12-20 The End of Autumn'17 release.
- Sync option added to DCO wavetable oscillators, as for
@@ -292,7 +405,7 @@
- A slight GUI behavior change: (re)writing existing names
doesn't load the respective preset anymore (after ticket
by Jiri Prochazka aka. Anchakor, thanks).
-- Introducing LV2 External UI "rougue" support.
+- Introducing LV2 External UI "rogue" support.
- Moog-like 24dB/oct resonant filter slight modification.
- Fixed JACK client fail/fake initialization.
diff -Nru synthv1-0.8.6/CMakeLists.txt synthv1-0.9.10+git20190929/CMakeLists.txt
--- synthv1-0.8.6/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/CMakeLists.txt 2019-09-28 23:00:43.000000000 +0000
@@ -0,0 +1,272 @@
+project(SYNTHV1)
+
+cmake_minimum_required(VERSION 3.1)
+
+set (VERSION "0.9.10")
+
+set (CONFIG_VERSION ${VERSION})
+execute_process (
+ COMMAND git describe --tags --dirty --abbrev=6
+ OUTPUT_VARIABLE GIT_DESCRIBE_OUTPUT
+ RESULT_VARIABLE GIT_DESCRIBE_RESULT
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+if (GIT_DESCRIBE_RESULT EQUAL 0)
+ set (VERSION "${GIT_DESCRIBE_OUTPUT}")
+ string (REGEX REPLACE "^[^_]+" "" VERSION "${VERSION}")
+ string (REGEX REPLACE "^[_vV]+" "" VERSION "${VERSION}")
+ string (REGEX REPLACE "-g" "git." VERSION "${VERSION}")
+ string (REGEX REPLACE "[_|-]+" "." VERSION "${VERSION}")
+ execute_process (
+ COMMAND git rev-parse --abbrev-ref HEAD
+ OUTPUT_VARIABLE GIT_REVPARSE_OUTPUT
+ RESULT_VARIABLE GIT_REVPARSE_RESULT
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if (GIT_REVPARSE_RESULT EQUAL 0 AND NOT GIT_REVPARSE_OUTPUT STREQUAL "master")
+ set (VERSION "${VERSION} [${GIT_REVPARSE_OUTPUT}]")
+ endif ()
+endif ()
+
+set (PACKAGE_NAME "synthv1")
+set (PACKAGE_VERSION "${VERSION}")
+set (PACKAGE_BUGREPORT "rncbc@rncbc.org")
+set (PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
+set (PACKAGE_TARNAME "synthv1")
+
+set (CONFIG_BUILD_VERSION "${PACKAGE_VERSION}")
+
+if (CMAKE_BUILD_TYPE)
+ set (CONFIG_BUILD_TYPE ${CMAKE_BUILD_TYPE})
+else ()
+ set (CONFIG_BUILD_TYPE "release")
+endif ()
+
+set (CONFIG_DEBUG 0)
+if (CONFIG_BUILD_TYPE MATCHES "debug")
+ set (CONFIG_DEBUG 1)
+endif ()
+
+set (CONFIG_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+include (GNUInstallDirs)
+set (CONFIG_BINDIR "${CONFIG_PREFIX}/${CMAKE_INSTALL_BINDIR}")
+set (CONFIG_LIBDIR "${CONFIG_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
+set (CONFIG_DATADIR "${CONFIG_PREFIX}/${CMAKE_INSTALL_DATADIR}")
+set (CONFIG_MANDIR "${CONFIG_PREFIX}/${CMAKE_INSTALL_MANDIR}")
+
+
+# Enable JACK standalone build.
+option (CONFIG_JACK "Enable JACK stand-alone build (default=yes)" 1)
+
+# Enable JACK session support.
+option (CONFIG_JACK_SESSION "Enable JACK session support (default=yes)" 1)
+
+# Enable JACK MIDI support option.
+option (CONFIG_JACK_MIDI "Enable JACK MIDI support (default=yes)" 1)
+
+# Enable ALSA MIDI support option.
+option (CONFIG_ALSA_MIDI "Enable ALSA MIDI support (default=yes)" 1)
+
+# Enable LV2 plugin build.
+option (CONFIG_LV2 "Enable LV2 plug-in build (default=yes)" 1)
+
+option (CONFIG_LV2_UI_X11 "Enable LV2 plug-in X11 UI support (default=yes)" 1)
+
+option (CONFIG_LV2_UI_EXTERNAL "Enable LV2 plug-in External UI support (default=yes)" 1)
+
+option (CONFIG_LV2_UI_IDLE "Enable LV2 UI Idle interface support (default=yes)" 1)
+
+option (CONFIG_LV2_UI_SHOW "Enable LV2 UI Show interface support (default=yes)" 1)
+
+option (CONFIG_LV2_UI_RESIZE "Enable LV2 UI Resize interface support (default=yes)" 1)
+
+option (CONFIG_LV2_PROGRAMS "Enable LV2 plug-in Programs support (default=yes)" 1)
+
+option (CONFIG_LV2_PATCH "Enable LV2 plug-in Patch support (default=yes)" 1)
+
+# Enable liblo availability.
+option (CONFIG_LIBLO "Enable liblo interface (default=yes)" 1)
+
+# Enable NSM support.
+option (CONFIG_NSM "Enable NSM support (default=yes)" 1)
+
+
+# Fix for new CMAKE_REQUIRED_LIBRARIES policy.
+if (POLICY CMP0075)
+ cmake_policy (SET CMP0075 NEW)
+endif ()
+
+# Check for Qt
+find_package (Qt5 REQUIRED COMPONENTS Core Gui Widgets Xml)
+
+#find_package (Qt5LinguistTools)
+
+include (CheckIncludeFile)
+include (CheckIncludeFiles)
+include (CheckIncludeFileCXX)
+include (CheckFunctionExists)
+include (CheckLibraryExists)
+
+# Make sure we get some subtle optimizations out there...
+add_compile_options (-ffast-math)
+
+# Checks for header files.
+if (UNIX AND NOT APPLE)
+ check_include_files ("fcntl.h;unistd.h;signal.h" HAVE_SIGNAL_H)
+endif ()
+
+
+# Check for LV2 headers.
+if (CONFIG_LV2)
+ include_directories (${CMAKE_CURRENT_SOURCE_DIR}/src/lv2)
+endif ()
+
+# Find package modules
+find_package (PkgConfig REQUIRED)
+
+# Check for JACK libraries.
+if (CONFIG_JACK)
+ pkg_check_modules (JACK jack>=0.100.0)
+ set (CONFIG_JACK ${JACK_FOUND})
+ if (CONFIG_JACK)
+ include_directories (${JACK_INCLUDE_DIRS})
+ link_directories (${JACK_LIBRARY_DIRS})
+ # link_libraries (${JACK_LIBRARIES})
+ set (CMAKE_REQUIRED_LIBRARIES "${JACK_LIBRARIES};${CMAKE_REQUIRED_LIBRARIES}")
+ # Check for JACK MIDI headers availability.
+ if (CONFIG_JACK_MIDI)
+ check_include_file (jack/midiport.h CONFIG_JACK_MIDI)
+ endif ()
+ # Check for JACK session headers availability.
+ if (CONFIG_JACK_SESSION)
+ check_include_file (jack/session.h CONFIG_JACK_SESSION)
+ endif ()
+ # Check for JACK session event callback availability.
+ if (CONFIG_JACK_SESSION)
+ check_function_exists (jack_set_session_callback CONFIG_JACK_SESSION)
+ endif ()
+ # Check for ALSA libraries.
+ if (CONFIG_ALSA_MIDI)
+ pkg_check_modules (ALSA alsa)
+ set (CONFIG_ALSA_MIDI ${ALSA_FOUND})
+ if (CONFIG_ALSA_MIDI)
+ include_directories (${ALSA_INCLUDE_DIRS})
+ link_directories (${ALSA_LIBRARY_DIRS})
+ link_libraries (${ALSA_LIBRARIES})
+ # set (CMAKE_REQUIRED_LIBRARIES "${ALSA_LIBRARIES};${CMAKE_REQUIRED_LIBRARIES}")
+ else ()
+ message (WARNING "*** ALSA library not found.")
+ endif ()
+ endif ()
+ else ()
+ message (WARNING "*** JACK library not found.")
+ endif ()
+endif ()
+
+if (NOT CONFIG_JACK)
+ set (CONFIG_JACK_SESSION 0)
+ set (CONFIG_JACK_MIDI 0)
+ set (CONFIG_ALSA_MIDI 0)
+ set (CONFIG_LIBLO 0)
+ set (CONFIG_NSM 0)
+endif ()
+
+# Check for LIBLO libraries.
+if (CONFIG_LIBLO)
+ pkg_check_modules (LIBLO liblo)
+ set (CONFIG_LIBLO ${LIBLO_FOUND})
+ if (CONFIG_LIBLO)
+ include_directories (${LIBLO_INCLUDE_DIRS})
+ link_directories (${LIBLO_LIBRARY_DIRS})
+ link_libraries (${LIBLO_LIBRARIES})
+ # set (CMAKE_REQUIRED_LIBRARIES "${LIBLO_LIBRARIES};${CMAKE_REQUIRED_LIBRARIES}")
+ else ()
+ message (WARNING "*** LIBLO library not found.")
+ endif ()
+endif ()
+
+# Check for LV2 support.
+if (CONFIG_LV2)
+ pkg_check_modules (LV2 lv2)
+ set (CONFIG_LV2 ${LV2_FOUND})
+ if (CONFIG_LV2)
+ include_directories (${LV2_INCLUDE_DIRS})
+ link_directories (${LV2_LIBRARY_DIRS})
+ link_libraries (${LV2_LIBRARIES})
+ # set (CMAKE_REQUIRED_LIBRARIES "${LV2_LIBRARIES};${CMAKE_REQUIRED_LIBRARIES}")
+ # Check for LV2 Atom support.
+ check_include_file (lv2/lv2plug.in/ns/ext/atom/atom.h CONFIG_LV2_ATOM)
+ set (CONFIG_LV2_ATOM_FORGE_OBJECT ${CONFIG_LV2_ATOM})
+ set (CONFIG_LV2_ATOM_FORGE_KEY ${CONFIG_LV2_ATOM})
+ # Check for LV2 UI support.
+ check_include_file (lv2/lv2plug.in/ns/extensions/ui/ui.h CONFIG_LV2_UI)
+ if (NOT CONFIG_LV2_UI)
+ set (CONFIG_LV2_UI_X11 0)
+ set (CONFIG_LV2_UI_EXTERNAL 0)
+ set (CONFIG_LV2_UI_IDLE 0)
+ set (CONFIG_LV2_UI_SHOW 0)
+ set (CONFIG_LV2_UI_RESIZE 0)
+ endif ()
+ endif ()
+endif ()
+
+if (CONFIG_LV2)
+ include_directories (${CMAKE_CURRENT_SOURCE_DIR}/src/lv2)
+else ()
+ set (CONFIG_LV2_UI_X11 0)
+ set (CONFIG_LV2_UI_EXTERNAL 0)
+ set (CONFIG_LV2_UI_IDLE 0)
+ set (CONFIG_LV2_UI_SHOW 0)
+ set (CONFIG_LV2_UI_RESIZE 0)
+ set (CONFIG_LV2_PROGRAMS 0)
+ set (CONFIG_LV2_PATCH 0)
+endif ()
+
+if (CONFIG_LV2_UI_EXTERNAL)
+ check_include_file (lv2_external_ui.h, CONFIG_LV2_UI_EXTERNAL)
+endif ()
+
+if (CONFIG_LV2_PROGRAMS)
+ check_include_file (lv2_programs.h CONFIG_LV2_PROGRAMS)
+endif ()
+
+if (CONFIG_LV2_PATCH)
+ check_include_file (lv2/lv2plug.in/ns/ext/patch/patch.h CONFIG_LV2_PATCH)
+endif ()
+
+
+add_subdirectory (src)
+
+
+configure_file (synthv1.spec.in synthv1.spec IMMEDIATE @ONLY)
+
+install (FILES synthv1.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
+install (FILES synthv1.fr.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/fr/man1 RENAME synthv1.1)
+
+# Configuration status
+macro (SHOW_OPTION text value)
+ if (${value})
+ message ("${text}: yes")
+ else ()
+ message ("${text}: no")
+ endif ()
+endmacro ()
+
+
+message ("\n ${PACKAGE_NAME} ${PACKAGE_VERSION}")
+message ("\n Build target . . . . . . . . . . . . . . . . . . .: ${CONFIG_BUILD_TYPE}\n")
+show_option (" JACK stand-alone build . . . . . . . . . . . . . ." CONFIG_JACK)
+show_option (" JACK session support . . . . . . . . . . . . . . ." CONFIG_JACK_SESSION)
+show_option (" JACK MIDI support . . . . . . . . . . . . . . . ." CONFIG_JACK_MIDI)
+show_option (" ALSA MIDI support . . . . . . . . . . . . . . . ." CONFIG_ALSA_MIDI)
+show_option (" LV2 plug-in build . . . . . . . . . . . . . . . ." CONFIG_LV2)
+show_option (" LV2 plug-in X11 UI support . . . . . . . . . . ." CONFIG_LV2_UI_X11)
+show_option (" LV2 plug-in External UI support . . . . . . . . ." CONFIG_LV2_UI_EXTERNAL)
+show_option (" LV2 plug-in UI Idle interface support . . . . . ." CONFIG_LV2_UI_IDLE)
+show_option (" LV2 plug-in UI Show interface support . . . . . ." CONFIG_LV2_UI_SHOW)
+show_option (" LV2 plug-in UI Resize interface support . . . . ." CONFIG_LV2_UI_RESIZE)
+show_option (" LV2 plug-in Programs support . . . . . . . . . . ." CONFIG_LV2_PROGRAMS)
+show_option (" LV2 plug-in Patch support . . . . . . . . . . . ." CONFIG_LV2_PATCH)
+show_option (" OSC service support (liblo) . . . . . . . . . . ." CONFIG_LIBLO)
+show_option (" NSM (Non Session Management) support . . . . . . ." CONFIG_NSM)
+message ("\n Install prefix . . . . . . . . . . . . . . . . . .: ${CMAKE_INSTALL_PREFIX}")
+message ("\nNow type 'make', followed by 'make install' as root.\n")
diff -Nru synthv1-0.8.6/configure synthv1-0.9.10+git20190929/configure
--- synthv1-0.8.6/configure 2017-12-20 07:57:10.722843297 +0000
+++ synthv1-0.9.10+git20190929/configure 1970-01-01 00:00:00.000000000 +0000
@@ -1,6999 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for synthv1 0.8.6.
-#
-# Report bugs to .
-#
-#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
-#
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# Use a proper internal environment variable to ensure we don't fall
- # into an infinite loop, continuously re-executing ourselves.
- if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
- _as_can_reexec=no; export _as_can_reexec;
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
- fi
- # We don't want this to propagate to other subprocesses.
- { _as_can_reexec=; unset _as_can_reexec;}
-if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '\${1+\"\$@\"}'='\"\$@\"'
- setopt NO_GLOB_SUBST
-else
- case \`(set -o) 2>/dev/null\` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-"
- as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
- exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
- as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
- as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
- eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
- test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
- as_have_required=yes
-else
- as_have_required=no
-fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- as_found=:
- case $as_dir in #(
- /*)
- for as_base in sh bash ksh sh5; do
- # Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
- CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
- break 2
-fi
-fi
- done;;
- esac
- as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
- if test "x$CONFIG_SHELL" != x; then :
- export CONFIG_SHELL
- # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
- *v*x* | *x*v* ) as_opts=-vx ;;
- *v* ) as_opts=-v ;;
- *x* ) as_opts=-x ;;
- * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
-fi
-
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
- else
- $as_echo "$0: Please tell bug-autoconf@gnu.org and rncbc@rncbc.org
-$0: about your system, including any error possibly output
-$0: before this message. Then install a modern shell, or
-$0: manually run the script under such a shell if you do
-$0: have one."
- fi
- exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-
- as_lineno_1=$LINENO as_lineno_1a=$LINENO
- as_lineno_2=$LINENO as_lineno_2a=$LINENO
- eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
- test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
- # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
- # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
- # already done that, so ensure we don't try to do so again and fall
- # in an infinite loop. This has already happened in practice.
- _as_can_reexec=no; export _as_can_reexec
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-test -n "$DJDIR" || exec 7<&0 &1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME='synthv1'
-PACKAGE_TARNAME='synthv1'
-PACKAGE_VERSION='0.8.6'
-PACKAGE_STRING='synthv1 0.8.6'
-PACKAGE_BUGREPORT='rncbc@rncbc.org'
-PACKAGE_URL=''
-
-ac_unique_file="src/synthv1.cpp"
-ac_default_prefix=/usr/local
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include
-#ifdef HAVE_SYS_TYPES_H
-# include
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include
-#endif
-#ifdef STDC_HEADERS
-# include
-# include
-#else
-# ifdef HAVE_STDLIB_H
-# include
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include
-# endif
-# include
-#endif
-#ifdef HAVE_STRINGS_H
-# include
-#endif
-#ifdef HAVE_INTTYPES_H
-# include
-#endif
-#ifdef HAVE_STDINT_H
-# include
-#endif
-#ifdef HAVE_UNISTD_H
-# include
-#endif"
-
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-ac_clean_targets
-ac_uninstall_targets
-ac_install_targets
-ac_all_targets
-ac_lv2_libs
-ac_lv2_incpath
-ac_lv2_ldflags
-ac_lv2_cflags
-ac_jack_libs
-ac_jack_incpath
-ac_jack_ldflags
-ac_jack_cflags
-ac_libs
-ac_incpath
-ac_ldflags
-ac_cflags
-EGREP
-GREP
-LIBLO_LIBS
-LIBLO_CFLAGS
-ALSA_LIBS
-ALSA_CFLAGS
-JACK_LIBS
-JACK_CFLAGS
-ac_lrelease
-ac_lupdate
-ac_uic
-ac_moc
-ac_cv_qmake
-ac_qmake
-PKG_CONFIG_LIBDIR
-PKG_CONFIG_PATH
-PKG_CONFIG
-CXXCPP
-ac_ct_CXX
-CXXFLAGS
-CXX
-CPP
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-ac_debug
-ac_mandir
-ac_datadir
-ac_libdir
-ac_bindir
-ac_prefix
-ac_version
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-enable_debug
-enable_jack
-enable_jack_session
-enable_jack_midi
-enable_alsa_midi
-enable_lv2
-enable_lv2_external_ui
-enable_lv2_ui_idle
-enable_lv2_ui_show
-enable_lv2_programs
-enable_liblo
-enable_nsm
-enable_qt4
-with_qt4
-with_qt5
-with_alsa
-with_jack
-with_lv2
-with_liblo
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP
-CXX
-CXXFLAGS
-CCC
-CXXCPP
-PKG_CONFIG
-PKG_CONFIG_PATH
-PKG_CONFIG_LIBDIR
-JACK_CFLAGS
-JACK_LIBS
-ALSA_CFLAGS
-ALSA_LIBS
-LIBLO_CFLAGS
-LIBLO_LIBS'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *=) ac_optarg= ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir=$ac_optarg ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build_alias ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build_alias=$ac_optarg ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file=$ac_optarg ;;
-
- --config-cache | -C)
- cache_file=config.cache ;;
-
- -datadir | --datadir | --datadi | --datad)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=\$ac_optarg ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix=$ac_optarg ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he | -h)
- ac_init_help=long ;;
- -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
- ac_init_help=recursive ;;
- -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
- ac_init_help=short ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host_alias ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host_alias=$ac_optarg ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$ac_optarg ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir=$ac_optarg ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir=$ac_optarg ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir=$ac_optarg ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir=$ac_optarg ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- localstatedir=$ac_optarg ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir=$ac_optarg ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c | -n)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir=$ac_optarg ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix=$ac_optarg ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix=$ac_optarg ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix=$ac_optarg ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name=$ac_optarg ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$ac_optarg ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir=$ac_optarg ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir=$ac_optarg ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site=$ac_optarg ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir=$ac_optarg ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir=$ac_optarg ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target_alias ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target_alias=$ac_optarg ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers | -V)
- ac_init_version=: ;;
-
- -with-* | --with-*)
- ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error $? "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=no ;;
-
- --x)
- # Obsolete; use --with-x.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes=$ac_optarg ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries=$ac_optarg ;;
-
- -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- case $ac_envvar in #(
- '' | [0-9]* | *[!_$as_cr_alnum]* )
- as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
- esac
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
- : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
- esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- # Remove trailing slashes.
- case $ac_val in
- */ )
- ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
- eval $ac_var=\$ac_val;;
- esac
- # Be sure to have absolute directory names.
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
- if test "x$build_alias" = x; then
- cross_compiling=maybe
- elif test "x$build_alias" != "x$host_alias"; then
- cross_compiling=yes
- fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- as_fn_error $? "pwd does not report name of working directory"
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then the parent directory.
- ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_myself" : 'X\(//\)[^/]' \| \
- X"$as_myself" : 'X\(//\)$' \| \
- X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- srcdir=$ac_confdir
- if test ! -r "$srcdir/$ac_unique_file"; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat <<_ACEOF
-\`configure' configures synthv1 0.8.6 to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE. See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
- -h, --help display this help and exit
- --help=short display options specific to this package
- --help=recursive display the short help of all the included packages
- -V, --version display version information and exit
- -q, --quiet, --silent do not print \`checking ...' messages
- --cache-file=FILE cache test results in FILE [disabled]
- -C, --config-cache alias for \`--cache-file=config.cache'
- -n, --no-create do not create output files
- --srcdir=DIR find the sources in DIR [configure dir or \`..']
-
-Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/synthv1]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
- case $ac_init_help in
- short | recursive ) echo "Configuration of synthv1 0.8.6:";;
- esac
- cat <<\_ACEOF
-
-Optional Features:
- --disable-option-checking ignore unrecognized --enable/--with options
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --enable-debug enable debugging (default=no)
- --enable-jack enable JACK stand-alone build (default=yes)
- --enable-jack-session enable JACK session support (default=yes)
- --enable-jack-midi enable JACK MIDI support (default=yes)
- --enable-alsa-midi enable ALSA MIDI support (default=yes)
- --enable-lv2 enable LV2 plug-in build (default=yes)
- --enable-lv2-external-ui
- enable LV2 plug-in External UI support (default=yes)
- --enable-lv2-ui-idle enable LV2 UI Idle interface support (default=yes)
- --enable-lv2-ui-show enable LV2 UI Show interface support (default=yes)
- --enable-lv2-programs enable LV2 plug-in Programs support (default=yes)
- --enable-liblo enable liblo interface (default=yes)
- --enable-nsm enable NSM support (default=yes)
- --enable-qt4 enable Qt4 build (default=no)
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-qt4=PATH use alternate Qt4 install path
- --with-qt5=PATH use alternate Qt5 install path
- --with-alsa=PATH use alternate ALSA install path
- --with-jack=PATH use alternate JACK install path
- --with-lv2=PATH use alternate LV2 install path
- --with-liblo=PATH use alternate liblo path
-
-Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L if you have libraries in a
- nonstandard directory
- LIBS libraries to pass to the linker, e.g. -l
- CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if
- you have headers in a nonstandard directory
- CPP C preprocessor
- CXX C++ compiler command
- CXXFLAGS C++ compiler flags
- CXXCPP C++ preprocessor
- PKG_CONFIG path to pkg-config utility
- PKG_CONFIG_PATH
- directories to add to pkg-config's search path
- PKG_CONFIG_LIBDIR
- path overriding pkg-config's built-in search path
- JACK_CFLAGS C compiler flags for JACK, overriding pkg-config
- JACK_LIBS linker flags for JACK, overriding pkg-config
- ALSA_CFLAGS C compiler flags for ALSA, overriding pkg-config
- ALSA_LIBS linker flags for ALSA, overriding pkg-config
- LIBLO_CFLAGS
- C compiler flags for LIBLO, overriding pkg-config
- LIBLO_LIBS linker flags for LIBLO, overriding pkg-config
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to .
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" ||
- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
- continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
- if test -f "$ac_srcdir/configure.gnu"; then
- echo &&
- $SHELL "$ac_srcdir/configure.gnu" --help=recursive
- elif test -f "$ac_srcdir/configure"; then
- echo &&
- $SHELL "$ac_srcdir/configure" --help=recursive
- else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-synthv1 configure 0.8.6
-generated by GNU Autoconf 2.69
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
- exit
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
- if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } > conftest.i && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_cxx_try_compile LINENO
-# ----------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
- if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_cxx_try_compile
-
-# ac_fn_cxx_try_cpp LINENO
-# ------------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } > conftest.i && {
- test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_cxx_try_cpp
-
-# ac_fn_cxx_try_link LINENO
-# -------------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_link ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest$ac_exeext
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_cxx_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- test -x conftest$ac_exeext
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
- # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
- # interfere with the next link command; also delete a directory that is
- # left behind by Apple's compiler. We do this before executing the actions.
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_cxx_try_link
-
-# ac_fn_cxx_try_run LINENO
-# ------------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_cxx_try_run ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then :
- ac_retval=0
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=$ac_status
-fi
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_cxx_try_run
-
-# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES
-# ---------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_cxx_check_header_mongrel ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if eval \${$3+:} false; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_header_compiler=yes
-else
- ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <$2>
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
- ac_header_preproc=yes
-else
- ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #((
- yes:no: )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
- no:yes:* )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( $as_echo "## ------------------------------ ##
-## Report this to rncbc@rncbc.org ##
-## ------------------------------ ##"
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_cxx_check_header_mongrel
-
-# ac_fn_cxx_check_header_compile LINENO HEADER VAR INCLUDES
-# ---------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_cxx_check_header_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_cxx_check_header_compile
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by synthv1 $as_me 0.8.6, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
-
-/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
-/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
-/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
- done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
- for ac_arg
- do
- case $ac_arg in
- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
- 2)
- as_fn_append ac_configure_args1 " '$ac_arg'"
- if test $ac_must_keep_next = true; then
- ac_must_keep_next=false # Got value, back to normal.
- else
- case $ac_arg in
- *=* | --config-cache | -C | -disable-* | --disable-* \
- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
- | -with-* | --with-* | -without-* | --without-* | --x)
- case "$ac_configure_args0 " in
- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
- esac
- ;;
- -* ) ac_must_keep_next=true ;;
- esac
- fi
- as_fn_append ac_configure_args " '$ac_arg'"
- ;;
- esac
- done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset ac_configure_args1;}
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log. We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
- # We do not want a PATH search for config.site.
- case $CONFIG_SITE in #((
- -*) ac_site_file1=./$CONFIG_SITE;;
- */*) ac_site_file1=$CONFIG_SITE;;
- *) ac_site_file1=./$CONFIG_SITE;;
- esac
-elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
-else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
- test "x$ac_site_file" = xNONE && continue
- if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file" \
- || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
- fi
-done
-
-if test -r "$cache_file"; then
- # Some versions of bash will fail to source /dev/null (special files
- # actually), so we avoid doing that. DJGPP emulates it as a regular file.
- if test /dev/null != "$cache_file" && test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
- eval ac_old_set=\$ac_cv_env_${ac_var}_set
- eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val=\$ac_cv_env_${ac_var}_value
- eval ac_new_val=\$ac_env_${ac_var}_value
- case $ac_old_set,$ac_new_set in
- set,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,);;
- *)
- if test "x$ac_old_val" != "x$ac_new_val"; then
- # differences in whitespace do not lead to failure.
- ac_old_val_w=`echo x $ac_old_val`
- ac_new_val_w=`echo x $ac_new_val`
- if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- ac_cache_corrupted=:
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
- eval $ac_var=\$ac_old_val
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
- *) ac_arg=$ac_var=$ac_new_val ;;
- esac
- case " $ac_configure_args " in
- *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
- *) as_fn_append ac_configure_args " '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-ac_config_headers="$ac_config_headers src/config.h"
-
-ac_config_files="$ac_config_files Makefile synthv1.spec src/src_core.pri src/src_ui.pri src/src_jack.pri src/src_lv2.pri"
-
-
-# Build version string.
-if ${ac_cv_build_version+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- ac_cv_build_version=$(git describe --tags --dirty --abbrev=6 2>/dev/null)
- if test -n "$ac_cv_build_version"; then
- ac_cv_build_version=$(echo $ac_cv_build_version | sed 's/^[^_]*[_v]//i')
- ac_cv_build_version=$(echo $ac_cv_build_version | sed 's/-g/git./')
- ac_cv_build_version=$(echo $ac_cv_build_version | sed 's/[_|-]\+/./g')
- ac_cv_build_version_extra=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
- if test "x$ac_cv_build_version_extra" != "xmaster"; then
- ac_cv_build_version="$ac_cv_build_version [$ac_cv_build_version_extra]"
- fi
- else
- ac_cv_build_version=$PACKAGE_VERSION
- fi
-
-fi
-
-ac_build_version="$ac_cv_build_version"
-
-cat >>confdefs.h <<_ACEOF
-#define CONFIG_BUILD_VERSION "$ac_build_version"
-_ACEOF
-
-
-# Sanitized version string.
-if ${ac_cv_version+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- ac_cv_version=$(echo $PACKAGE_VERSION | sed -r 's/^([0-9|\.]+).*$/\1/')
-
-fi
-
-ac_version="$ac_cv_version"
-
-cat >>confdefs.h <<_ACEOF
-#define CONFIG_VERSION "$ac_version"
-_ACEOF
-
-
-
-# Set default installation prefix.
-
-if test "x$prefix" = "xNONE"; then
- prefix=$ac_default_prefix
-fi
-if test "x$exec_prefix" = "xNONE"; then
- exec_prefix=$prefix
-fi
-eval ac_prefix=$prefix
-
-
-cat >>confdefs.h <<_ACEOF
-#define CONFIG_PREFIX "$ac_prefix"
-_ACEOF
-
-
-# Set default installation directories.
-eval ac_bindir=$bindir
-
-
-cat >>confdefs.h <<_ACEOF
-#define CONFIG_BINDIR "$ac_bindir"
-_ACEOF
-
-
-eval ac_libdir=$libdir
-
-
-cat >>confdefs.h <<_ACEOF
-#define CONFIG_LIBDIR "$ac_libdir"
-_ACEOF
-
-
-eval datarootdir=$datarootdir
-eval ac_datadir=$datadir
-
-
-cat >>confdefs.h <<_ACEOF
-#define CONFIG_DATADIR "$ac_datadir"
-_ACEOF
-
-
-eval ac_mandir=$mandir
-
-
-cat >>confdefs.h <<_ACEOF
-#define CONFIG_MANDIR "$ac_mandir"
-_ACEOF
-
-
-
-# Enable debugging argument option.
-# Check whether --enable-debug was given.
-if test "${enable_debug+set}" = set; then :
- enableval=$enable_debug; ac_debug="$enableval"
-fi
-
-
-# Enable JACK standalone build.
-# Check whether --enable-jack was given.
-if test "${enable_jack+set}" = set; then :
- enableval=$enable_jack; ac_jack="$enableval"
-else
- ac_jack="yes"
-fi
-
-
-# Enable JACK session support.
-# Check whether --enable-jack-session was given.
-if test "${enable_jack_session+set}" = set; then :
- enableval=$enable_jack_session; ac_jack_session="$enableval"
-else
- ac_jack_session="yes"
-fi
-
-
-# Enable JACK MIDI support option.
-# Check whether --enable-jack-midi was given.
-if test "${enable_jack_midi+set}" = set; then :
- enableval=$enable_jack_midi; ac_jack_midi="$enableval"
-else
- ac_jack_midi="yes"
-fi
-
-
-# Enable ALSA MIDI support option.
-# Check whether --enable-alsa-midi was given.
-if test "${enable_alsa_midi+set}" = set; then :
- enableval=$enable_alsa_midi; ac_alsa_midi="$enableval"
-else
- ac_alsa_midi="yes"
-fi
-
-
-# Enable LV2 plugin build.
-# Check whether --enable-lv2 was given.
-if test "${enable_lv2+set}" = set; then :
- enableval=$enable_lv2; ac_lv2="$enableval"
-else
- ac_lv2="yes"
-fi
-
-
-# Check whether --enable-lv2-external-ui was given.
-if test "${enable_lv2_external_ui+set}" = set; then :
- enableval=$enable_lv2_external_ui; ac_lv2_external_ui="$enableval"
-else
- ac_lv2_external_ui="yes"
-fi
-
-
-# Check whether --enable-lv2-ui-idle was given.
-if test "${enable_lv2_ui_idle+set}" = set; then :
- enableval=$enable_lv2_ui_idle; ac_lv2_ui_idle="$enableval"
-else
- ac_lv2_ui_idle="yes"
-fi
-
-
-# Check whether --enable-lv2-ui-show was given.
-if test "${enable_lv2_ui_show+set}" = set; then :
- enableval=$enable_lv2_ui_show; ac_lv2_ui_show="$enableval"
-else
- ac_lv2_ui_show="yes"
-fi
-
-
-# Check whether --enable-lv2-programs was given.
-if test "${enable_lv2_programs+set}" = set; then :
- enableval=$enable_lv2_programs; ac_lv2_programs="$enableval"
-else
- ac_lv2_programs="yes"
-fi
-
-
-
-# Enable liblo availability.
-# Check whether --enable-liblo was given.
-if test "${enable_liblo+set}" = set; then :
- enableval=$enable_liblo; ac_liblo="$enableval"
-else
- ac_liblo="yes"
-fi
-
-
-# Enable NSM support.
-# Check whether --enable-nsm was given.
-if test "${enable_nsm+set}" = set; then :
- enableval=$enable_nsm; ac_nsm="$enableval"
-else
- ac_nsm="yes"
-fi
-
-
-
-if test "x$ac_debug" = "xyes"; then
-
-$as_echo "#define CONFIG_DEBUG 1" >>confdefs.h
-
- ac_debug="debug"
-else
- ac_debug="release"
-fi
-
-
-
-
-# Enable Qt4/5 availability.
-# Check whether --enable-qt4 was given.
-if test "${enable_qt4+set}" = set; then :
- enableval=$enable_qt4; ac_qt4="$enableval"
-else
- ac_qt4="no"
-fi
-
-
-
-# Standard installation base dirs.
-ac_with_paths=""
-
-# Set for alternate Qt4/5 installation dir.
-
-# Check whether --with-qt4 was given.
-if test "${with_qt4+set}" = set; then :
- withval=$with_qt4; ac_qt4_path="$withval"
-else
- ac_qt4_path="no"
-fi
-
-
-
-# Check whether --with-qt5 was given.
-if test "${with_qt5+set}" = set; then :
- withval=$with_qt5; ac_qt5_path="$withval"
-else
- ac_qt5_path="no"
-fi
-
-
-if test "x$ac_qt4_path" != "xno"; then
- ac_with_paths="$ac_with_paths $ac_qt4_path"
- ac_qt4="yes"
-fi
-
-if test "x$ac_qt5_path" != "xno"; then
- ac_with_paths="$ac_with_paths $ac_qt5_path"
- ac_qt4="no"
-fi
-
-# Set for alternate ALSA installation dir.
-
-# Check whether --with-alsa was given.
-if test "${with_alsa+set}" = set; then :
- withval=$with_alsa; ac_with_paths="$ac_with_paths $withval"
-fi
-
-
-# Set for alternate JACK installation dir.
-
-# Check whether --with-jack was given.
-if test "${with_jack+set}" = set; then :
- withval=$with_jack; ac_with_paths="$ac_with_paths $withval"
-fi
-
-
-# Set for alternate LV2 installation dir.
-
-# Check whether --with-lv2 was given.
-if test "${with_lv2+set}" = set; then :
- withval=$with_lv2; ac_with_paths="$ac_with_paths $withval"
-fi
-
-
-# Set for alternate liblo installation dir.
-
-# Check whether --with-liblo was given.
-if test "${with_liblo+set}" = set; then :
- withval=$with_liblo; ac_with_paths="$ac_with_paths $withval"
-fi
-
-
-
-# Honor user specified flags.
-ac_cflags=$CFLAGS
-ac_ldflags=$LDFLAGS
-
-
-# Checks for programs.
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- fi
-fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-if test -z "$ac_file"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
- { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
- if { ac_try='./conftest$ac_cv_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-else
- CFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include
-#include
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if ${ac_cv_prog_CPP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer to if __STDC__ is defined, since
- # exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include
-#else
-# include
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer to if __STDC__ is defined, since
- # exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include
-#else
-# include
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
- if test -n "$CCC"; then
- CXX=$CCC
- else
- if test -n "$ac_tool_prefix"; then
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CXX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CXX"; then
- ac_cv_prog_CXX="$CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CXX" && break
- done
-fi
-if test -z "$CXX"; then
- ac_ct_CXX=$CXX
- for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CXX+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CXX"; then
- ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CXX="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CXX" && break
-done
-
- if test "x$ac_ct_CXX" = x; then
- CXX="g++"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CXX=$ac_ct_CXX
- fi
-fi
-
- fi
-fi
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- fi
- rm -f conftest.er1 conftest.err
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if ${ac_cv_cxx_compiler_gnu+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GXX=yes
-else
- GXX=
-fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if ${ac_cv_prog_cxx_g+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_cxx_werror_flag=$ac_cxx_werror_flag
- ac_cxx_werror_flag=yes
- ac_cv_prog_cxx_g=no
- CXXFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_prog_cxx_g=yes
-else
- CXXFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-
-else
- ac_cxx_werror_flag=$ac_save_cxx_werror_flag
- CXXFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_prog_cxx_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
- CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
- if test "$GXX" = yes; then
- CXXFLAGS="-g -O2"
- else
- CXXFLAGS="-g"
- fi
-else
- if test "$GXX" = yes; then
- CXXFLAGS="-O2"
- else
- CXXFLAGS=
- fi
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
-$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
-if test -z "$CXXCPP"; then
- if ${ac_cv_prog_CXXCPP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- # Double quotes because CXXCPP needs to be expanded
- for CXXCPP in "$CXX -E" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer to if __STDC__ is defined, since
- # exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include
-#else
-# include
-#endif
- Syntax error
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
- break
-fi
-
- done
- ac_cv_prog_CXXCPP=$CXXCPP
-
-fi
- CXXCPP=$ac_cv_prog_CXXCPP
-else
- ac_cv_prog_CXXCPP=$CXXCPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
-$as_echo "$CXXCPP" >&6; }
-ac_preproc_ok=false
-for ac_cxx_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer to if __STDC__ is defined, since
- # exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include
-#else
-# include
-#endif
- Syntax error
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include
-_ACEOF
-if ac_fn_cxx_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-# Checks for languages.
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-
-# Check for pkg-config.
-
-
-
-
-
-
-
-if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
-set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_PKG_CONFIG+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $PKG_CONFIG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-if test -n "$PKG_CONFIG"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
-$as_echo "$PKG_CONFIG" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_path_PKG_CONFIG"; then
- ac_pt_PKG_CONFIG=$PKG_CONFIG
- # Extract the first word of "pkg-config", so it can be a program name with args.
-set dummy pkg-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $ac_pt_PKG_CONFIG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
-if test -n "$ac_pt_PKG_CONFIG"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
-$as_echo "$ac_pt_PKG_CONFIG" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_pt_PKG_CONFIG" = x; then
- PKG_CONFIG=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- PKG_CONFIG=$ac_pt_PKG_CONFIG
- fi
-else
- PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
-fi
-
-fi
-if test -n "$PKG_CONFIG"; then
- _pkg_min_version=0.9.0
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
-$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
- if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- PKG_CONFIG=""
- fi
-fi
-
-# Check whether -std=c++11 support is necessary (4 < g++ version < 6).
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for g++ major version" >&5
-$as_echo_n "checking for g++ major version... " >&6; }
-if ${ac_cv_gxx_version_major+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- ac_cv_gxx_version_major=$($CC -dumpversion)
- if test -n "$ac_cv_gxx_version_major"; then
- ac_cv_gxx_version_major=$(echo $ac_cv_gxx_version_major | cut -d'.' -f1);
- fi
- ac_gxx_version_major=$(($ac_cv_gxx_version_major + 0))
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gxx_version_major" >&5
-$as_echo "$ac_cv_gxx_version_major" >&6; }
-ac_gxx_version_major=$ac_cv_gxx_version_major
-if test $ac_gxx_version_major -ge 4 -a $ac_gxx_version_major -lt 6; then
- CXXFLAGS="-std=c++11 $CXXFLAGS"
-fi
-
-# Check for proper flags.
-ac_arch=$(uname -m)
-
-# Check for install paths and alternatives...
-ac_libdirs="lib"
-
-if test "x$ac_arch" = "xx86_64"; then
- ac_libdirs="$ac_libdirs lib64"
-fi
-
-CFLAGS="-fPIC $CFLAGS"
-CPPFLAGS="-fPIC $CPPFLAGS"
-
-# Prepend alternate dependencies paths.
-ac_path=$PATH
-
-for X in $ac_with_paths; do
- if test -d $X/bin; then
- ac_path="$X/bin:$ac_path"
- fi
- if test -d $X/include; then
- CFLAGS="-I$X/include $CFLAGS "
- CPPFLAGS="-I$X/include $CPPFLAGS"
- ac_incpath="$X/include $ac_incpath"
- fi
- for Y in $ac_libdirs; do
- if test -d $X/$Y; then
- LIBS="-L$X/$Y $LIBS"
- ac_libs="-L$X/$Y $ac_libs"
- fi
- done
-done
-
-# A common error message:
-ac_errmsg="not found in current PATH. Maybe QT development environment isn't available."
-
-if test "x$ac_qt4" = "xyes"; then
- # Extract the first word of "qmake-qt4", so it can be a program name with args.
-set dummy qmake-qt4; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_qmake+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $ac_qmake in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_ac_qmake="$ac_qmake" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $ac_path
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_ac_qmake="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_path_ac_qmake" && ac_cv_path_ac_qmake="no"
- ;;
-esac
-fi
-ac_qmake=$ac_cv_path_ac_qmake
-if test -n "$ac_qmake"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_qmake" >&5
-$as_echo "$ac_qmake" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-else
- # Extract the first word of "qmake-qt5", so it can be a program name with args.
-set dummy qmake-qt5; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_qmake+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $ac_qmake in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_ac_qmake="$ac_qmake" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $ac_path
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_ac_qmake="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_path_ac_qmake" && ac_cv_path_ac_qmake="no"
- ;;
-esac
-fi
-ac_qmake=$ac_cv_path_ac_qmake
-if test -n "$ac_qmake"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_qmake" >&5
-$as_echo "$ac_qmake" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test "x$ac_qmake" = "xno"; then
- # Extract the first word of "qmake", so it can be a program name with args.
-set dummy qmake; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_cv_qmake+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $ac_cv_qmake in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_ac_cv_qmake="$ac_cv_qmake" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $ac_path
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_ac_cv_qmake="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_path_ac_cv_qmake" && ac_cv_path_ac_cv_qmake="no"
- ;;
-esac
-fi
-ac_cv_qmake=$ac_cv_path_ac_cv_qmake
-if test -n "$ac_cv_qmake"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_qmake" >&5
-$as_echo "$ac_cv_qmake" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- ac_qmake=$ac_cv_qmake
-fi
-if test "x$ac_qmake" = "xno"; then
- as_fn_error $? "qmake $ac_errmsg" "$LINENO" 5
-fi
-
-# Check for proper Qt major version.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt major version" >&5
-$as_echo_n "checking for Qt major version... " >&6; }
-if ${ac_cv_qt_version_major+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- ac_cv_qt_version_major=$($ac_qmake -query QT_VERSION | cut -d'.' -f1)
- ac_cv_qt_version_major=$(($ac_cv_qt_version_major + 0))
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_qt_version_major" >&5
-$as_echo "$ac_cv_qt_version_major" >&6; }
-ac_qt_version_major=$ac_cv_qt_version_major
-if test "x$ac_qt4" = "xyes"; then
- if test $ac_qt_version_major -ne 4; then
- as_fn_error $? "qmake-qt4 $ac_errmsg (qt4-devel)" "$LINENO" 5
- fi
-else
- if test $ac_qt_version_major -ne 5; then
- as_fn_error $? "qmake-qt5 $ac_errmsg (qt5-devel)" "$LINENO" 5
- fi
-fi
-
-# Check for proper Qt install path.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt install path" >&5
-$as_echo_n "checking for Qt install path... " >&6; }
-if ${ac_cv_qt_install_path+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- ac_cv_qt_install_path=$($ac_qmake -query QT_INSTALL_BINS)
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_qt_install_path" >&5
-$as_echo "$ac_cv_qt_install_path" >&6; }
-ac_qt_install_path=$ac_cv_qt_install_path
-if test -d $ac_qt_install_path; then
- ac_path="$ac_qt_install_path:$ac_path"
-fi
-
-# Check it again, now with updated PATH, just in case...
-# Extract the first word of "qmake", so it can be a program name with args.
-set dummy qmake; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_cv_qmake+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $ac_cv_qmake in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_ac_cv_qmake="$ac_cv_qmake" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $ac_path
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_ac_cv_qmake="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_path_ac_cv_qmake" && ac_cv_path_ac_cv_qmake="no"
- ;;
-esac
-fi
-ac_cv_qmake=$ac_cv_path_ac_cv_qmake
-if test -n "$ac_cv_qmake"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_qmake" >&5
-$as_echo "$ac_cv_qmake" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-ac_qmake=$ac_cv_qmake
-if test "x$ac_qmake" = "xno"; then
- as_fn_error $? "qmake $ac_errmsg" "$LINENO" 5
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt install headers" >&5
-$as_echo_n "checking for Qt install headers... " >&6; }
-if ${ac_cv_qt_install_headers+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- ac_cv_qt_install_headers=$($ac_qmake -query QT_INSTALL_HEADERS)
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_qt_install_headers" >&5
-$as_echo "$ac_cv_qt_install_headers" >&6; }
-ac_qt_install_headers=$ac_cv_qt_install_headers
-if test -d $ac_qt_install_headers; then
- CFLAGS="-I$ac_qt_install_headers $CFLAGS "
- CPPFLAGS="-I$ac_qt_install_headers $CPPFLAGS"
- ac_incpath="$ac_qt_install_headers $ac_incpath"
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt install libraries" >&5
-$as_echo_n "checking for Qt install libraries... " >&6; }
-if ${ac_cv_qt_install_libs+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- ac_cv_qt_install_libs=$($ac_qmake -query QT_INSTALL_LIBS)
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_qt_install_libs" >&5
-$as_echo "$ac_cv_qt_install_libs" >&6; }
-ac_qt_install_libs=$ac_cv_qt_install_libs
-if test -d $ac_qt_install_libs; then
- LIBS="-L$ac_qt_install_libs $LIBS"
- ac_libs="-L$ac_qt_install_libs $ac_libs"
-fi
-
-# Finally, check for proper Qt4/5 version.
-if test "x$ac_qt4" = "xyes"; then
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt library version >= 4.4" >&5
-$as_echo_n "checking for Qt library version >= 4.4... " >&6; }
-if ${ac_cv_qtversion+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include "QtCore/qglobal.h"
-int
-main ()
-{
-
- #if QT_VERSION < 0x040400 || QT_VERSION >= 0x050000
- #error Qt library 4.4 or greater required.
- #endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_qtversion="yes"
-else
-
- echo "no; Qt 4.4 or greater is required"
- exit 1
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_qtversion" >&5
-$as_echo "$ac_cv_qtversion" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt library version >= 5.1" >&5
-$as_echo_n "checking for Qt library version >= 5.1... " >&6; }
-if ${ac_cv_qtversion+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include "QtCore/qglobal.h"
-int
-main ()
-{
-
- #if QT_VERSION < 0x050100 || QT_VERSION >= 0x060000
- #error Qt library 5.1 or greater required.
- #endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_qtversion="yes"
-else
-
- echo "no; Qt 5.1 or greater is required"
- exit 1
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_qtversion" >&5
-$as_echo "$ac_cv_qtversion" >&6; }
-fi
-
-# Check for Qt moc utility.
-# Extract the first word of "moc", so it can be a program name with args.
-set dummy moc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_moc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $ac_moc in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_ac_moc="$ac_moc" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $ac_path
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_ac_moc="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_path_ac_moc" && ac_cv_path_ac_moc="no"
- ;;
-esac
-fi
-ac_moc=$ac_cv_path_ac_moc
-if test -n "$ac_moc"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_moc" >&5
-$as_echo "$ac_moc" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-if test "x$ac_moc" = "xno"; then
- as_fn_error $? "moc $ac_errmsg" "$LINENO" 5
-fi
-
-
-# Check for Qt uic utility.
-# Extract the first word of "uic", so it can be a program name with args.
-set dummy uic; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_uic+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $ac_uic in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_ac_uic="$ac_uic" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $ac_path
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_ac_uic="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_path_ac_uic" && ac_cv_path_ac_uic="no"
- ;;
-esac
-fi
-ac_uic=$ac_cv_path_ac_uic
-if test -n "$ac_uic"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_uic" >&5
-$as_echo "$ac_uic" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-if test "x$ac_uic" = "xno"; then
- as_fn_error $? "uic $ac_errmsg" "$LINENO" 5
-fi
-
-
-# Check for Qt lupdate utility.
-# Extract the first word of "lupdate", so it can be a program name with args.
-set dummy lupdate; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_lupdate+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $ac_lupdate in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_ac_lupdate="$ac_lupdate" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $ac_path
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_ac_lupdate="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_path_ac_lupdate" && ac_cv_path_ac_lupdate="no"
- ;;
-esac
-fi
-ac_lupdate=$ac_cv_path_ac_lupdate
-if test -n "$ac_lupdate"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_lupdate" >&5
-$as_echo "$ac_lupdate" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-if test "x$ac_lupdate" = "xno"; then
- as_fn_error $? "lupdate $ac_errmsg" "$LINENO" 5
-fi
-
-
-# Check for Qt lrelease utility.
-# Extract the first word of "lrelease", so it can be a program name with args.
-set dummy lrelease; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_lrelease+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $ac_lrelease in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_ac_lrelease="$ac_lrelease" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $ac_path
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_ac_lrelease="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_path_ac_lrelease" && ac_cv_path_ac_lrelease="no"
- ;;
-esac
-fi
-ac_lrelease=$ac_cv_path_ac_lrelease
-if test -n "$ac_lrelease"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_lrelease" >&5
-$as_echo "$ac_lrelease" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-if test "x$ac_release" = "xno"; then
- as_fn_error $? "lrelease $ac_errmsg" "$LINENO" 5
-fi
-
-
-
-# Checks for libraries.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lm" >&5
-$as_echo_n "checking for main in -lm... " >&6; }
-if ${ac_cv_lib_m_main+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lm $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-int
-main ()
-{
-return main ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
- ac_cv_lib_m_main=yes
-else
- ac_cv_lib_m_main=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_main" >&5
-$as_echo "$ac_cv_lib_m_main" >&6; }
-if test "x$ac_cv_lib_m_main" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBM 1
-_ACEOF
-
- LIBS="-lm $LIBS"
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lX11" >&5
-$as_echo_n "checking for main in -lX11... " >&6; }
-if ${ac_cv_lib_X11_main+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lX11 $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-int
-main ()
-{
-return main ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
- ac_cv_lib_X11_main=yes
-else
- ac_cv_lib_X11_main=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_X11_main" >&5
-$as_echo "$ac_cv_lib_X11_main" >&6; }
-if test "x$ac_cv_lib_X11_main" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBX11 1
-_ACEOF
-
- LIBS="-lX11 $LIBS"
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lXext" >&5
-$as_echo_n "checking for main in -lXext... " >&6; }
-if ${ac_cv_lib_Xext_main+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXext $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-int
-main ()
-{
-return main ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
- ac_cv_lib_Xext_main=yes
-else
- ac_cv_lib_Xext_main=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_main" >&5
-$as_echo "$ac_cv_lib_Xext_main" >&6; }
-if test "x$ac_cv_lib_Xext_main" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBXEXT 1
-_ACEOF
-
- LIBS="-lXext $LIBS"
-
-fi
-
-
-ac_cflags="-ffast-math $ac_cflags"
-
-ac_jack_cflags="$ac_cflags"
-ac_jack_ldflags="$ac_ldflags"
-ac_jack_incpath="$ac_incpath"
-ac_jack_libs="$ac_libs"
-
-ac_lv2_cflags="$ac_cflags"
-ac_lv2_ldflags="$ac_ldflags"
-ac_lv2_incpath="$ac_incpath"
-ac_lv2_libs="$ac_libs"
-
-ac_all_targets=""
-ac_install_targets=""
-ac_uninstall_targets=""
-ac_clean_targets=""
-
-
-# Check for JACK libraries.
-if test "x$ac_jack" = "xyes"; then
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jack >= 0.100.0" >&5
-$as_echo_n "checking for jack >= 0.100.0... " >&6; }
-
-if test -n "$JACK_CFLAGS"; then
- pkg_cv_JACK_CFLAGS="$JACK_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jack >= 0.100.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "jack >= 0.100.0") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_JACK_CFLAGS=`$PKG_CONFIG --cflags "jack >= 0.100.0" 2>/dev/null`
- test "x$?" != "x0" && pkg_failed=yes
-else
- pkg_failed=yes
-fi
- else
- pkg_failed=untried
-fi
-if test -n "$JACK_LIBS"; then
- pkg_cv_JACK_LIBS="$JACK_LIBS"
- elif test -n "$PKG_CONFIG"; then
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jack >= 0.100.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "jack >= 0.100.0") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_JACK_LIBS=`$PKG_CONFIG --libs "jack >= 0.100.0" 2>/dev/null`
- test "x$?" != "x0" && pkg_failed=yes
-else
- pkg_failed=yes
-fi
- else
- pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
- _pkg_short_errors_supported=yes
-else
- _pkg_short_errors_supported=no
-fi
- if test $_pkg_short_errors_supported = yes; then
- JACK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "jack >= 0.100.0" 2>&1`
- else
- JACK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "jack >= 0.100.0" 2>&1`
- fi
- # Put the nasty error message in config.log where it belongs
- echo "$JACK_PKG_ERRORS" >&5
-
- ac_jack="no"
-elif test $pkg_failed = untried; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- ac_jack="no"
-else
- JACK_CFLAGS=$pkg_cv_JACK_CFLAGS
- JACK_LIBS=$pkg_cv_JACK_LIBS
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- ac_jack="yes"
-fi
- if test "x$ac_jack" = "xyes"; then
-
-$as_echo "#define CONFIG_JACK 1" >>confdefs.h
-
- ac_jack_cflags="$ac_jack_cflags $JACK_CFLAGS"
- ac_jack_libs="$ac_jack_libs $JACK_LIBS"
- CFLAGS="$CFLAGS $JACK_CFLAGS"
- CPPFLAGS="$CPPFLAGS $JACK_CFLAGS"
- LIBS="$LIBS $JACK_LIBS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** JACK library not found." >&5
-$as_echo "$as_me: WARNING: *** JACK library not found." >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** JACK stand-alone build will be disabled." >&5
-$as_echo "$as_me: WARNING: *** JACK stand-alone build will be disabled." >&2;}
- fi
-fi
-
-if test "x$ac_jack" = "xyes"; then
- # Check for JACK session event callback availability.
- if test "x$ac_jack_session" = "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jack_set_session_callback in -ljack" >&5
-$as_echo_n "checking for jack_set_session_callback in -ljack... " >&6; }
-if ${ac_cv_lib_jack_jack_set_session_callback+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ljack $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char jack_set_session_callback ();
-int
-main ()
-{
-return jack_set_session_callback ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
- ac_cv_lib_jack_jack_set_session_callback=yes
-else
- ac_cv_lib_jack_jack_set_session_callback=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jack_jack_set_session_callback" >&5
-$as_echo "$ac_cv_lib_jack_jack_set_session_callback" >&6; }
-if test "x$ac_cv_lib_jack_jack_set_session_callback" = xyes; then :
- ac_jack_session="yes"
-else
- ac_jack_session="no"
-fi
-
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** JACK session support will be disabled." >&5
-$as_echo "$as_me: WARNING: *** JACK session support will be disabled." >&2;}
- fi
- # Check for ALSA libraries.
- if test "x$ac_alsa_midi" = "xyes"; then
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alsa" >&5
-$as_echo_n "checking for alsa... " >&6; }
-
-if test -n "$ALSA_CFLAGS"; then
- pkg_cv_ALSA_CFLAGS="$ALSA_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa\""; } >&5
- ($PKG_CONFIG --exists --print-errors "alsa") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_ALSA_CFLAGS=`$PKG_CONFIG --cflags "alsa" 2>/dev/null`
- test "x$?" != "x0" && pkg_failed=yes
-else
- pkg_failed=yes
-fi
- else
- pkg_failed=untried
-fi
-if test -n "$ALSA_LIBS"; then
- pkg_cv_ALSA_LIBS="$ALSA_LIBS"
- elif test -n "$PKG_CONFIG"; then
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa\""; } >&5
- ($PKG_CONFIG --exists --print-errors "alsa") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_ALSA_LIBS=`$PKG_CONFIG --libs "alsa" 2>/dev/null`
- test "x$?" != "x0" && pkg_failed=yes
-else
- pkg_failed=yes
-fi
- else
- pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
- _pkg_short_errors_supported=yes
-else
- _pkg_short_errors_supported=no
-fi
- if test $_pkg_short_errors_supported = yes; then
- ALSA_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "alsa" 2>&1`
- else
- ALSA_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "alsa" 2>&1`
- fi
- # Put the nasty error message in config.log where it belongs
- echo "$ALSA_PKG_ERRORS" >&5
-
- ac_alsa_midi="no"
-elif test $pkg_failed = untried; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- ac_alsa_midi="no"
-else
- ALSA_CFLAGS=$pkg_cv_ALSA_CFLAGS
- ALSA_LIBS=$pkg_cv_ALSA_LIBS
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- ac_alsa_midi="yes"
-fi
- fi
- if test "x$ac_alsa_midi" = "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lasound" >&5
-$as_echo_n "checking for main in -lasound... " >&6; }
-if ${ac_cv_lib_asound_main+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lasound $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-int
-main ()
-{
-return main ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
- ac_cv_lib_asound_main=yes
-else
- ac_cv_lib_asound_main=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_asound_main" >&5
-$as_echo "$ac_cv_lib_asound_main" >&6; }
-if test "x$ac_cv_lib_asound_main" = xyes; then :
- ac_alsa_midi="yes"
-else
- ac_alsa_midi="no"
-fi
-
- if test "x$ac_alsa_midi" = "xyes"; then
-
-$as_echo "#define CONFIG_ALSA_MIDI 1" >>confdefs.h
-
- ac_jack_cflags="$ac_jack_cflags $ALSA_CFLAGS"
- ac_jack_libs="$ac_jack_libs $ALSA_LIBS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** ALSA library not found." >&5
-$as_echo "$as_me: WARNING: *** ALSA library not found." >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** ALSA MIDI support will be disabled." >&5
-$as_echo "$as_me: WARNING: *** ALSA MIDI support will be disabled." >&2;}
- fi
- fi
-fi
-
-# Check for JACK build support.
-if test "x$ac_jack" = "xyes"; then
- ac_all_targets="jack $ac_all_targets"
- ac_install_targets="install_jack $ac_install_targets"
- ac_uninstall_targets="uninstall_jack $ac_uninstall_targets"
- ac_clean_targets="clean_jack $ac_clean_targets"
-else
- ac_jack_session="no"
- ac_jack_midi="no"
- ac_alsa_midi="no"
- ac_liblo="no"
- ac_nsm="no"
-fi
-
-# Check for optional LIBLO library.
-if test "x$ac_liblo" = "xyes"; then
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for liblo" >&5
-$as_echo_n "checking for liblo... " >&6; }
-
-if test -n "$LIBLO_CFLAGS"; then
- pkg_cv_LIBLO_CFLAGS="$LIBLO_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblo\""; } >&5
- ($PKG_CONFIG --exists --print-errors "liblo") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_LIBLO_CFLAGS=`$PKG_CONFIG --cflags "liblo" 2>/dev/null`
- test "x$?" != "x0" && pkg_failed=yes
-else
- pkg_failed=yes
-fi
- else
- pkg_failed=untried
-fi
-if test -n "$LIBLO_LIBS"; then
- pkg_cv_LIBLO_LIBS="$LIBLO_LIBS"
- elif test -n "$PKG_CONFIG"; then
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblo\""; } >&5
- ($PKG_CONFIG --exists --print-errors "liblo") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_LIBLO_LIBS=`$PKG_CONFIG --libs "liblo" 2>/dev/null`
- test "x$?" != "x0" && pkg_failed=yes
-else
- pkg_failed=yes
-fi
- else
- pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
- _pkg_short_errors_supported=yes
-else
- _pkg_short_errors_supported=no
-fi
- if test $_pkg_short_errors_supported = yes; then
- LIBLO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "liblo" 2>&1`
- else
- LIBLO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "liblo" 2>&1`
- fi
- # Put the nasty error message in config.log where it belongs
- echo "$LIBLO_PKG_ERRORS" >&5
-
- ac_liblo="no"
-elif test $pkg_failed = untried; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- ac_liblo="no"
-else
- LIBLO_CFLAGS=$pkg_cv_LIBLO_CFLAGS
- LIBLO_LIBS=$pkg_cv_LIBLO_LIBS
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- ac_liblo="yes"
-fi
- if test "x$ac_liblo" = "xyes"; then
-
-$as_echo "#define CONFIG_LIBLO 1" >>confdefs.h
-
- ac_jack_cflags="$ac_jack_cflags $LIBLO_CFLAGS"
- ac_jack_libs="$ac_jack_libs $LIBLO_LIBS"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** LIBLO library not found." >&5
-$as_echo "$as_me: WARNING: *** LIBLO library not found." >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** OSC service support will be disabled." >&5
-$as_echo "$as_me: WARNING: *** OSC service support will be disabled." >&2;}
- ac_nsm="no"
- fi
-else
- ac_nsm="no"
-fi
-
-
-# Checks for header files.
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -z "$GREP"; then
- ac_path_GREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_GREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_GREP"; then
- as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
- if test -z "$EGREP"; then
- ac_path_EGREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'EGREP' >> "conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_EGREP="$ac_path_EGREP"
- ac_path_EGREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_EGREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_EGREP"; then
- as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_EGREP=$EGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include
-#include
-#include
-#include
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include
-#include
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_run "$LINENO"; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5
-$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; }
-if ${ac_cv_header_sys_wait_h+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include
-#include
-#ifndef WEXITSTATUS
-# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)
-#endif
-#ifndef WIFEXITED
-# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
-#endif
-
-int
-main ()
-{
- int s;
- wait (&s);
- s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
- ac_cv_header_sys_wait_h=yes
-else
- ac_cv_header_sys_wait_h=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5
-$as_echo "$ac_cv_header_sys_wait_h" >&6; }
-if test $ac_cv_header_sys_wait_h = yes; then
-
-$as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_cxx_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-for ac_header in fcntl.h sys/ioctl.h sys/stat.h unistd.h signal.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-# Check for JACK session headers availability.
-if test "x$ac_jack_session" = "xyes"; then
- ac_fn_cxx_check_header_mongrel "$LINENO" "jack/session.h" "ac_cv_header_jack_session_h" "$ac_includes_default"
-if test "x$ac_cv_header_jack_session_h" = xyes; then :
- ac_jack_session="yes"
-else
- ac_jack_session="no"
-fi
-
-
- if test "x$ac_jack_session" = "xyes"; then
-
-$as_echo "#define CONFIG_JACK_SESSION 1" >>confdefs.h
-
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** JACK session header file not found." >&5
-$as_echo "$as_me: WARNING: *** JACK session header file not found." >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** JACK session support will be disabled." >&5
-$as_echo "$as_me: WARNING: *** JACK session support will be disabled." >&2;}
- fi
-fi
-
-# Check for JACK MIDI headers availability.
-if test "x$ac_jack_midi" = "xyes"; then
- ac_fn_cxx_check_header_mongrel "$LINENO" "jack/midiport.h" "ac_cv_header_jack_midiport_h" "$ac_includes_default"
-if test "x$ac_cv_header_jack_midiport_h" = xyes; then :
- ac_jack_midi="yes"
-else
- ac_jack_midi="no"
-fi
-
-
- if test "x$ac_jack_midi" = "xyes"; then
-
-$as_echo "#define CONFIG_JACK_MIDI 1" >>confdefs.h
-
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** JACK MIDI header files not found." >&5
-$as_echo "$as_me: WARNING: *** JACK MIDI header files not found." >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** JACK MIDI support will be disabled." >&5
-$as_echo "$as_me: WARNING: *** JACK MIDI support will be disabled." >&2;}
- fi
-fi
-
-# Check for LV2 headers.
-if test "x$ac_lv2" = "xyes"; then
- for ac_header in lv2.h \
- lv2/lv2plug.in/ns/ext/atom/atom.h \
- lv2/lv2plug.in/ns/ext/atom/forge.h \
- lv2/lv2plug.in/ns/ext/atom/util.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
- ac_lv2="yes"
-else
- ac_lv2="no"
-fi
-
-done
-
- if test "x$ac_lv2" = "xyes"; then
-
-$as_echo "#define CONFIG_LV2 1" >>confdefs.h
-
- ac_all_targets="lv2 $ac_all_targets"
- ac_install_targets="install_lv2 $ac_install_targets"
- ac_uninstall_targets="uninstall_lv2 $ac_uninstall_targets"
- ac_clean_targets="clean_lv2 $ac_clean_targets"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lv2_atom_forge_object" >&5
-$as_echo_n "checking for lv2_atom_forge_object... " >&6; }
-if ${ac_cv_lv2_atom_forge_object+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include "lv2/lv2plug.in/ns/ext/atom/forge.h"
-int
-main ()
-{
-
- // Checking for lv2_atom_forge_object...
- LV2_Atom_Forge *forge;
- LV2_Atom_Forge_Frame *frame;
- lv2_atom_forge_object(forge, frame, 0, 101);
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
- ac_cv_lv2_atom_forge_object="yes"
-else
- ac_cv_lv2_atom_forge_object="no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lv2_atom_forge_object" >&5
-$as_echo "$ac_cv_lv2_atom_forge_object" >&6; }
- ac_lv2_atom_forge_object=$ac_cv_lv2_atom_forge_object
- if test "x$ac_lv2_atom_forge_object" = "xyes"; then
-
-$as_echo "#define CONFIG_LV2_ATOM_FORGE_OBJECT 1" >>confdefs.h
-
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lv2_atom_forge_key" >&5
-$as_echo_n "checking for lv2_atom_forge_key... " >&6; }
-if ${ac_cv_lv2_atom_forge_key+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include "lv2/lv2plug.in/ns/ext/atom/forge.h"
-int
-main ()
-{
-
- // Checking for lv2_atom_forge_key...
- LV2_Atom_Forge *forge;
- lv2_atom_forge_key(forge, 102);
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
- ac_cv_lv2_atom_forge_key="yes"
-else
- ac_cv_lv2_atom_forge_key="no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lv2_atom_forge_key" >&5
-$as_echo "$ac_cv_lv2_atom_forge_key" >&6; }
- ac_lv2_atom_forge_key=$ac_cv_lv2_atom_forge_key
- if test "x$ac_lv2_atom_forge_key" = "xyes"; then
-
-$as_echo "#define CONFIG_LV2_ATOM_FORGE_KEY 1" >>confdefs.h
-
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** LV2 header files not found." >&5
-$as_echo "$as_me: WARNING: *** LV2 header files not found." >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** LV2 plug-in build will be disabled." >&5
-$as_echo "$as_me: WARNING: *** LV2 plug-in build will be disabled." >&2;}
- fi
-fi
-
-if test "x$ac_lv2" = "xno"; then
- lv2_external_ui="no"
- ac_lv2_ui_idle="no"
- ac_lv2_ui_show="no"
- ac_lv2_programs="no"
-fi
-
-if test "x$ac_lv2_external_ui" = "xyes"; then
- CFLAGS="$CFLAGS -Isrc/lv2"
- CPPFLAGS="$CPPFLAGS -Isrc/lv2"
- ac_fn_cxx_check_header_mongrel "$LINENO" "lv2_external_ui.h" "ac_cv_header_lv2_external_ui_h" "$ac_includes_default"
-if test "x$ac_cv_header_lv2_external_ui_h" = xyes; then :
- ac_lv2_external_ui="yes"
-else
- ac_lv2_external_ui="no"
-fi
-
-
- if test "x$ac_lv2_external_ui" = "xyes"; then
-
-$as_echo "#define CONFIG_LV2_EXTERNAL_UI 1" >>confdefs.h
-
- ac_lv2_incpath="lv2 $ac_lv2_incpath"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** LV2 External UI extension will be disabled." >&5
-$as_echo "$as_me: WARNING: *** LV2 External UI extension will be disabled." >&2;}
- fi
-fi
-
-if test "x$ac_lv2_ui_idle" = "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LV2 UI Idle interface" >&5
-$as_echo_n "checking for LV2 UI Idle interface... " >&6; }
-if ${ac_cv_lv2_ui_idle+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include "lv2/lv2plug.in/ns/extensions/ui/ui.h"
-int
-main ()
-{
-
- // Checking for LV2 UI Idle interface...
- LV2UI_Idle_Interface idle;
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
- ac_cv_lv2_ui_idle="yes"
-else
- ac_cv_lv2_ui_idle="no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lv2_ui_idle" >&5
-$as_echo "$ac_cv_lv2_ui_idle" >&6; }
- ac_lv2_ui_idle=$ac_cv_lv2_ui_idle
- if test "x$ac_lv2_ui_idle" = "xyes"; then
-
-$as_echo "#define CONFIG_LV2_UI_IDLE 1" >>confdefs.h
-
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** LV2 UI Idle interface support will be disabled." >&5
-$as_echo "$as_me: WARNING: *** LV2 UI Idle interface support will be disabled." >&2;}
- fi
-fi
-
-if test "x$ac_lv2_ui_show" = "xyes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LV2 UI Show interface" >&5
-$as_echo_n "checking for LV2 UI Show interface... " >&6; }
-if ${ac_cv_lv2_ui_show+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include "lv2/lv2plug.in/ns/extensions/ui/ui.h"
-int
-main ()
-{
-
- // Checking for LV2 UI Show interface...
- LV2UI_Show_Interface show;
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
- ac_cv_lv2_ui_show="yes"
-else
- ac_cv_lv2_ui_show="no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lv2_ui_show" >&5
-$as_echo "$ac_cv_lv2_ui_show" >&6; }
- ac_lv2_ui_show=$ac_cv_lv2_ui_show
- if test "x$ac_lv2_ui_show" = "xyes"; then
-
-$as_echo "#define CONFIG_LV2_UI_SHOW 1" >>confdefs.h
-
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** LV2 UI Show interface support will be disabled." >&5
-$as_echo "$as_me: WARNING: *** LV2 UI Show interface support will be disabled." >&2;}
- fi
-fi
-
-if test "x$ac_lv2_programs" = "xyes"; then
- ac_fn_cxx_check_header_mongrel "$LINENO" "lv2_programs.h" "ac_cv_header_lv2_programs_h" "$ac_includes_default"
-if test "x$ac_cv_header_lv2_programs_h" = xyes; then :
- ac_lv2_programs="yes"
-else
- ac_lv2_programs="no"
-fi
-
-
- if test "x$ac_lv2_programs" = "xyes"; then
-
-$as_echo "#define CONFIG_LV2_PROGRAMS 1" >>confdefs.h
-
- ac_lv2_incpath="lv2 $ac_lv2_incpath"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** LV2 Programs extension will be disabled." >&5
-$as_echo "$as_me: WARNING: *** LV2 Programs extension will be disabled." >&2;}
- fi
-fi
-
-# Check for NSM support.
-if test "x$ac_nsm" = "xyes"; then
-
-$as_echo "#define CONFIG_NSM 1" >>confdefs.h
-
-fi
-
-
-# Checks for build targets
-if test "x$ac_jack" = "xno" -a "x$ac_lv2" = "xno"; then
- as_fn_error $? "*** JACK and LV2 build options disabled." "$LINENO" 5
-fi
-
-if test "x$ac_jack" = "xyes"; then
- if test "x$ac_jack_midi" = "xno" -a "x$ac_alsa_midi" = "xno"; then
- as_fn_error $? "*** JACK MIDI and ALSA MIDI support disabled." "$LINENO" 5
- fi
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# Checks for typedefs, structures, and compiler characteristics.
-# AC_C_CONST
-
-# Finally produce a configure header file and the makefiles.
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems. If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- # `set' does not quote correctly, so add quotes: double-quote
- # substitution turns \\\\ into \\, and sed turns \\ into \.
- sed -n \
- "s/'/'\\\\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;; #(
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- if test "x$cache_file" != "x/dev/null"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- if test ! -f "$cache_file" || test -h "$cache_file"; then
- cat confcache >"$cache_file"
- else
- case $cache_file in #(
- */* | ?:*)
- mv -f confcache "$cache_file"$$ &&
- mv -f "$cache_file"$$ "$cache_file" ;; #(
- *)
- mv -f confcache "$cache_file" ;;
- esac
- fi
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-
-SHELL=\${CONFIG_SHELL-$SHELL}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$1; test $as_status -eq 0 && as_status=1
- if test "$4"; then
- as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
- fi
- $as_echo "$as_me: error: $2" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -pR'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -pR'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -pR'
- fi
-else
- as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
- test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by synthv1 $as_me 0.8.6, which was
-generated by GNU Autoconf 2.69. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration. Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- --config print configuration, then exit
- -q, --quiet, --silent
- do not print progress messages
- -d, --debug don't remove temporary files
- --recheck update $as_me by reconfiguring in the same conditions
- --file=FILE[:TEMPLATE]
- instantiate the configuration file FILE
- --header=FILE[:TEMPLATE]
- instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Report bugs to ."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-synthv1 config.status 0.8.6
-configured by $0, generated by GNU Autoconf 2.69,
- with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
- case $1 in
- --*=?*)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
- ac_shift=:
- ;;
- --*=)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
- --config | --confi | --conf | --con | --co | --c )
- $as_echo "$ac_cs_config"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- '') as_fn_error $? "missing file argument" ;;
- esac
- as_fn_append CONFIG_FILES " '$ac_optarg'"
- ac_need_defaults=false;;
- --header | --heade | --head | --hea )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- as_fn_append CONFIG_HEADERS " '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h)
- # Conflict between --help and --header
- as_fn_error $? "ambiguous option: \`$1'
-Try \`$0 --help' for more information.";;
- --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
- *) as_fn_append ac_config_targets " $1"
- ac_need_defaults=false ;;
-
- esac
- shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
- set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
- CONFIG_SHELL='$SHELL'
- export CONFIG_SHELL
- exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;;
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
- "synthv1.spec") CONFIG_FILES="$CONFIG_FILES synthv1.spec" ;;
- "src/src_core.pri") CONFIG_FILES="$CONFIG_FILES src/src_core.pri" ;;
- "src/src_ui.pri") CONFIG_FILES="$CONFIG_FILES src/src_ui.pri" ;;
- "src/src_jack.pri") CONFIG_FILES="$CONFIG_FILES src/src_jack.pri" ;;
- "src/src_lv2.pri") CONFIG_FILES="$CONFIG_FILES src/src_lv2.pri" ;;
-
- *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
- esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used. Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
- test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp= ac_tmp=
- trap 'exit_status=$?
- : "${ac_tmp:=$tmp}"
- { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
- trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
- eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\\r'
-else
- ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- . ./conf$$subs.sh ||
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
- if test $ac_delim_n = $ac_delim_num; then
- break
- elif $ac_last_try; then
- as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' >$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
- for (key in S) S_is_set[key] = 1
- FS = ""
-
-}
-{
- line = $ 0
- nfields = split(line, field, "@")
- substed = 0
- len = length(field[1])
- for (i = 2; i < nfields; i++) {
- key = field[i]
- keylen = length(key)
- if (S_is_set[key]) {
- value = S[key]
- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
- len += length(value) + length(field[++i])
- substed = 1
- } else
- len += 1 + keylen
- }
-
- print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
- sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
- cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
- || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
-h
-s///
-s/^/:/
-s/[ ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[ ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
- ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
- if test -z "$ac_tt"; then
- break
- elif $ac_last_try; then
- as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any. Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[ ]*#[ ]*define[ ][ ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' >$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- for (key in D) D_is_set[key] = 1
- FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
- line = \$ 0
- split(line, arg, " ")
- if (arg[1] == "#") {
- defundef = arg[2]
- mac1 = arg[3]
- } else {
- defundef = substr(arg[1], 2)
- mac1 = arg[2]
- }
- split(mac1, mac2, "(") #)
- macro = mac2[1]
- prefix = substr(line, 1, index(line, defundef) - 1)
- if (D_is_set[macro]) {
- # Preserve the white space surrounding the "#".
- print prefix "define", macro P[macro] D[macro]
- next
- } else {
- # Replace #undef with comments. This is necessary, for example,
- # in the case of _POSIX_SOURCE, which is predefined and required
- # on some systems where configure will not decide to define it.
- if (defundef == "undef") {
- print "/*", prefix defundef, macro, "*/"
- next
- }
- }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
- as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS "
-shift
-for ac_tag
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$ac_tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- as_fn_append ac_file_inputs " '$ac_f'"
- done
-
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
- `' by configure.'
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
- fi
- # Neutralize special characters interpreted by sed in replacement strings.
- case $configure_input in #(
- *\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
- sed 's/[\\\\&|]/\\\\&/g'`;; #(
- *) ac_sed_conf_input=$configure_input;;
- esac
-
- case $ac_tag in
- *:-:* | *:-) cat >"$ac_tmp/stdin" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- as_dir="$ac_dir"; as_fn_mkdir_p
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
- >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
- "$ac_tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined" >&2;}
-
- rm -f "$ac_tmp/stdin"
- case $ac_file in
- -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
- *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
- esac \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
- :H)
- #
- # CONFIG_HEADER
- #
- if test x"$ac_file" != x-; then
- {
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
- } >"$ac_tmp/config.h" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
- else
- rm -f "$ac_file"
- mv "$ac_tmp/config.h" "$ac_file" \
- || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- fi
- else
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
- || as_fn_error $? "could not create -" "$LINENO" 5
- fi
- ;;
-
-
- esac
-
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded. So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status. When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
- ac_cs_success=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
- exec 5>>config.log
- # Use ||, not &&, to avoid exiting from the if with $? = 1, which
- # would make configure fail if this is the last instruction.
- $ac_cs_success || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
-
-# make clean > /dev/null 2>&1
-
-# Output summary message
-
-echo
-echo " $PACKAGE_NAME $ac_build_version"
-echo
-echo " Build target . . . . . . . . . . . . . . . . . . .: $ac_debug"
-echo
-echo " JACK stand-alone build . . . . . . . . . . . . . .: $ac_jack"
-echo " JACK session support . . . . . . . . . . . . . . .: $ac_jack_session"
-echo " JACK MIDI support . . . . . . . . . . . . . . . .: $ac_jack_midi"
-echo " ALSA MIDI support . . . . . . . . . . . . . . . .: $ac_alsa_midi"
-echo " LV2 plug-in build . . . . . . . . . . . . . . . .: $ac_lv2"
-echo " LV2 plug-in External UI support . . . . . . . . .: $ac_lv2_external_ui"
-echo " LV2 plug-in UI Idle interface support . . . . . .: $ac_lv2_ui_idle"
-echo " LV2 plug-in UI Show interface support . . . . . .: $ac_lv2_ui_show"
-echo " LV2 plug-in Programs support . . . . . . . . . . .: $ac_lv2_programs"
-echo " OSC service support (liblo) . . . . . . . . . . .: $ac_liblo"
-echo " NSM (Non Session Management) support . . . . . . .: $ac_nsm"
-echo
-echo " Install prefix . . . . . . . . . . . . . . . . . .: $ac_prefix"
-echo
-echo "Now type 'make', followed by 'make install' as root."
-echo
diff -Nru synthv1-0.8.6/configure.ac synthv1-0.9.10+git20190929/configure.ac
--- synthv1-0.8.6/configure.ac 2017-12-20 07:56:50.302842973 +0000
+++ synthv1-0.9.10+git20190929/configure.ac 2019-09-28 23:00:43.000000000 +0000
@@ -1,5 +1,5 @@
# Process this file with autoconf to produce a configure script.
-AC_INIT(synthv1, 0.8.6, rncbc@rncbc.org)
+AC_INIT(synthv1, 0.9.10, rncbc@rncbc.org)
AC_CONFIG_SRCDIR(src/synthv1.cpp)
AC_CONFIG_HEADERS(src/config.h)
@@ -64,69 +64,84 @@
# Enable debugging argument option.
AC_ARG_ENABLE(debug,
- AC_HELP_STRING([--enable-debug], [enable debugging (default=no)]),
+ AS_HELP_STRING([--enable-debug], [enable debugging (default=no)]),
[ac_debug="$enableval"])
# Enable JACK standalone build.
AC_ARG_ENABLE(jack,
- AC_HELP_STRING([--enable-jack], [enable JACK stand-alone build (default=yes)]),
+ AS_HELP_STRING([--enable-jack], [enable JACK stand-alone build (default=yes)]),
[ac_jack="$enableval"],
[ac_jack="yes"])
# Enable JACK session support.
AC_ARG_ENABLE(jack-session,
- AC_HELP_STRING([--enable-jack-session], [enable JACK session support (default=yes)]),
+ AS_HELP_STRING([--enable-jack-session], [enable JACK session support (default=yes)]),
[ac_jack_session="$enableval"],
[ac_jack_session="yes"])
# Enable JACK MIDI support option.
AC_ARG_ENABLE(jack-midi,
- AC_HELP_STRING([--enable-jack-midi], [enable JACK MIDI support (default=yes)]),
+ AS_HELP_STRING([--enable-jack-midi], [enable JACK MIDI support (default=yes)]),
[ac_jack_midi="$enableval"],
[ac_jack_midi="yes"])
# Enable ALSA MIDI support option.
AC_ARG_ENABLE(alsa-midi,
- AC_HELP_STRING([--enable-alsa-midi], [enable ALSA MIDI support (default=yes)]),
+ AS_HELP_STRING([--enable-alsa-midi], [enable ALSA MIDI support (default=yes)]),
[ac_alsa_midi="$enableval"],
[ac_alsa_midi="yes"])
# Enable LV2 plugin build.
AC_ARG_ENABLE(lv2,
- AC_HELP_STRING([--enable-lv2], [enable LV2 plug-in build (default=yes)]),
+ AS_HELP_STRING([--enable-lv2], [enable LV2 plug-in build (default=yes)]),
[ac_lv2="$enableval"],
[ac_lv2="yes"])
-AC_ARG_ENABLE(lv2-external-ui,
- AC_HELP_STRING([--enable-lv2-external-ui], [enable LV2 plug-in External UI support (default=yes)]),
- [ac_lv2_external_ui="$enableval"],
- [ac_lv2_external_ui="yes"])
+AC_ARG_ENABLE(lv2-ui-x11,
+ AS_HELP_STRING([--enable-lv2-ui-x11], [enable LV2 plug-in X11 UI support (default=yes)]),
+ [ac_lv2_ui_x11="$enableval"],
+ [ac_lv2_ui_x11="yes"])
+
+AC_ARG_ENABLE(lv2-ui-external,
+ AS_HELP_STRING([--enable-lv2-ui-external], [enable LV2 plug-in External UI support (default=yes)]),
+ [ac_lv2_ui_external="$enableval"],
+ [ac_lv2_ui_external="yes"])
AC_ARG_ENABLE(lv2-ui-idle,
- AC_HELP_STRING([--enable-lv2-ui-idle], [enable LV2 UI Idle interface support (default=yes)]),
+ AS_HELP_STRING([--enable-lv2-ui-idle], [enable LV2 UI Idle interface support (default=yes)]),
[ac_lv2_ui_idle="$enableval"],
[ac_lv2_ui_idle="yes"])
AC_ARG_ENABLE(lv2-ui-show,
- AC_HELP_STRING([--enable-lv2-ui-show], [enable LV2 UI Show interface support (default=yes)]),
+ AS_HELP_STRING([--enable-lv2-ui-show], [enable LV2 UI Show interface support (default=yes)]),
[ac_lv2_ui_show="$enableval"],
[ac_lv2_ui_show="yes"])
+AC_ARG_ENABLE(lv2-ui-resize,
+ AS_HELP_STRING([--enable-lv2-ui-resize], [enable LV2 UI Resize interface support (default=yes)]),
+ [ac_lv2_ui_resize="$enableval"],
+ [ac_lv2_ui_resize="yes"])
+
AC_ARG_ENABLE(lv2-programs,
- AC_HELP_STRING([--enable-lv2-programs], [enable LV2 plug-in Programs support (default=yes)]),
+ AS_HELP_STRING([--enable-lv2-programs], [enable LV2 plug-in Programs support (default=yes)]),
[ac_lv2_programs="$enableval"],
[ac_lv2_programs="yes"])
+AC_ARG_ENABLE(lv2-patch,
+ AS_HELP_STRING([--enable-lv2-patch], [enable LV2 plug-in Patch support (default=yes)]),
+ [ac_lv2_patch="$enableval"],
+ [ac_lv2_patch="yes"])
+
# Enable liblo availability.
AC_ARG_ENABLE(liblo,
- AC_HELP_STRING([--enable-liblo], [enable liblo interface (default=yes)]),
+ AS_HELP_STRING([--enable-liblo], [enable liblo interface (default=yes)]),
[ac_liblo="$enableval"],
[ac_liblo="yes"])
# Enable NSM support.
AC_ARG_ENABLE(nsm,
- AC_HELP_STRING([--enable-nsm], [enable NSM support (default=yes)]),
+ AS_HELP_STRING([--enable-nsm], [enable NSM support (default=yes)]),
[ac_nsm="$enableval"],
[ac_nsm="yes"])
@@ -141,53 +156,38 @@
AC_SUBST(ac_debug)
-# Enable Qt4/5 availability.
-AC_ARG_ENABLE(qt4,
- AC_HELP_STRING([--enable-qt4], [enable Qt4 build (default=no)]),
- [ac_qt4="$enableval"],
- [ac_qt4="no"])
-
-
# Standard installation base dirs.
+ac_path=$PATH
ac_with_paths=""
-# Set for alternate Qt4/5 installation dir.
-AC_ARG_WITH(qt4,
- AC_HELP_STRING([--with-qt4=PATH], [use alternate Qt4 install path]),
- [ac_qt4_path="$withval"], [ac_qt4_path="no"])
-
-AC_ARG_WITH(qt5,
- AC_HELP_STRING([--with-qt5=PATH], [use alternate Qt5 install path]),
- [ac_qt5_path="$withval"], [ac_qt5_path="no"])
-
-if test "x$ac_qt4_path" != "xno"; then
- ac_with_paths="$ac_with_paths $ac_qt4_path"
- ac_qt4="yes"
-fi
-
-if test "x$ac_qt5_path" != "xno"; then
- ac_with_paths="$ac_with_paths $ac_qt5_path"
- ac_qt4="no"
+# Set for alternate Qt installation dir.
+AC_ARG_WITH(qt,
+ AS_HELP_STRING([--with-qt=PATH], [use alternate Qt install path]),
+ [ac_qt_path="$withval"], [ac_qt_path="no"])
+
+if test "x$ac_qt_path" != "xno"; then
+ ac_path="$ac_qt_path/bin:$ac_path"
fi
+
# Set for alternate ALSA installation dir.
AC_ARG_WITH(alsa,
- AC_HELP_STRING([--with-alsa=PATH], [use alternate ALSA install path]),
+ AS_HELP_STRING([--with-alsa=PATH], [use alternate ALSA install path]),
[ac_with_paths="$ac_with_paths $withval"])
# Set for alternate JACK installation dir.
AC_ARG_WITH(jack,
- AC_HELP_STRING([--with-jack=PATH], [use alternate JACK install path]),
+ AS_HELP_STRING([--with-jack=PATH], [use alternate JACK install path]),
[ac_with_paths="$ac_with_paths $withval"])
# Set for alternate LV2 installation dir.
AC_ARG_WITH(lv2,
- AC_HELP_STRING([--with-lv2=PATH], [use alternate LV2 install path]),
+ AS_HELP_STRING([--with-lv2=PATH], [use alternate LV2 install path]),
[ac_with_paths="$ac_with_paths $withval"])
# Set for alternate liblo installation dir.
AC_ARG_WITH(liblo,
- AC_HELP_STRING([--with-liblo=PATH], [use alternate liblo path]),
+ AS_HELP_STRING([--with-liblo=PATH], [use alternate liblo path]),
[ac_with_paths="$ac_with_paths $withval"])
@@ -217,7 +217,8 @@
])
ac_gxx_version_major=$ac_cv_gxx_version_major
if test $ac_gxx_version_major -ge 4 -a $ac_gxx_version_major -lt 6; then
- CXXFLAGS="-std=c++11 $CXXFLAGS"
+ CPPFLAGS="-std=c++11 $CPPFLAGS"
+ ac_cflags="-std=c++11 $ac_cflags"
fi
# Check for proper flags.
@@ -234,40 +235,38 @@
CPPFLAGS="-fPIC $CPPFLAGS"
# Prepend alternate dependencies paths.
-ac_path=$PATH
-
for X in $ac_with_paths; do
if test -d $X/bin; then
- ac_path="$X/bin:$ac_path"
+ ac_path="$X/bin:$ac_path"
fi
if test -d $X/include; then
- CFLAGS="-I$X/include $CFLAGS "
- CPPFLAGS="-I$X/include $CPPFLAGS"
- ac_incpath="$X/include $ac_incpath"
+ CFLAGS="-I$X/include $CFLAGS "
+ CPPFLAGS="-I$X/include $CPPFLAGS"
+ ac_incpath="$X/include $ac_incpath"
fi
for Y in $ac_libdirs; do
- if test -d $X/$Y; then
- LIBS="-L$X/$Y $LIBS"
- ac_libs="-L$X/$Y $ac_libs"
- fi
+ if test -d $X/$Y; then
+ LIBS="-L$X/$Y $LIBS"
+ ac_libs="-L$X/$Y $ac_libs"
+ fi
done
done
# A common error message:
ac_errmsg="not found in current PATH. Maybe QT development environment isn't available."
-if test "x$ac_qt4" = "xyes"; then
- AC_PATH_PROG(ac_qmake, qmake-qt4, [no], $ac_path)
-else
- AC_PATH_PROG(ac_qmake, qmake-qt5, [no], $ac_path)
+# Check for qtchooser availability.
+AC_PATH_TOOL(ac_qtchooser, qtchooser, [no], $ac_path)
+if test -x $ac_qtchooser; then
+ export QT_SELECT=5
fi
+
+# Check for proper qmake path/version alternatives.
+AC_PATH_TOOL(ac_qmake, qmake, [no], $ac_path)
if test "x$ac_qmake" = "xno"; then
- AC_PATH_PROG(ac_cv_qmake, qmake, [no], $ac_path)
+ AC_PATH_TOOL(ac_cv_qmake, qmake-qt5, [no], $ac_path)
ac_qmake=$ac_cv_qmake
fi
-if test "x$ac_qmake" = "xno"; then
- AC_MSG_ERROR([qmake $ac_errmsg])
-fi
# Check for proper Qt major version.
AC_CACHE_CHECK([for Qt major version], [ac_cv_qt_version_major], [
@@ -275,14 +274,13 @@
ac_cv_qt_version_major=$(($ac_cv_qt_version_major + 0))
])
ac_qt_version_major=$ac_cv_qt_version_major
-if test "x$ac_qt4" = "xyes"; then
- if test $ac_qt_version_major -ne 4; then
- AC_MSG_ERROR([qmake-qt4 $ac_errmsg (qt4-devel)])
- fi
-else
- if test $ac_qt_version_major -ne 5; then
- AC_MSG_ERROR([qmake-qt5 $ac_errmsg (qt5-devel)])
- fi
+if test $ac_qt_version_major -ne 5; then
+ AC_PATH_TOOL(ac_cv_qmake, qmake-qt5, [no], $ac_path)
+ ac_qmake=$ac_cv_qmake
+fi
+
+if test "x$ac_qmake" = "xno"; then
+ AC_MSG_ERROR([qmake-qt5 $ac_errmsg (qt5-devel)])
fi
# Check for proper Qt install path.
@@ -295,7 +293,7 @@
fi
# Check it again, now with updated PATH, just in case...
-AC_PATH_PROG(ac_cv_qmake, qmake, [no], $ac_path)
+AC_PATH_TOOL(ac_cv_qmake, qmake, [no], $ac_path)
ac_qmake=$ac_cv_qmake
if test "x$ac_qmake" = "xno"; then
AC_MSG_ERROR([qmake $ac_errmsg])
@@ -322,58 +320,55 @@
ac_libs="-L$ac_qt_install_libs $ac_libs"
fi
-# Finally, check for proper Qt4/5 version.
-if test "x$ac_qt4" = "xyes"; then
- AC_CACHE_CHECK([for Qt library version >= 4.4],
- ac_cv_qtversion, [
- AC_TRY_COMPILE([#include "QtCore/qglobal.h"], [
- #if QT_VERSION < 0x040400 || QT_VERSION >= 0x050000
- #error Qt library 4.4 or greater required.
- #endif
- ], ac_cv_qtversion="yes", [
- echo "no; Qt 4.4 or greater is required"
- exit 1
- ])
- ])
-else
- AC_CACHE_CHECK([for Qt library version >= 5.1],
- ac_cv_qtversion, [
- AC_TRY_COMPILE([#include "QtCore/qglobal.h"], [
- #if QT_VERSION < 0x050100 || QT_VERSION >= 0x060000
- #error Qt library 5.1 or greater required.
- #endif
- ], ac_cv_qtversion="yes", [
- echo "no; Qt 5.1 or greater is required"
- exit 1
- ])
+# Finally, check for proper Qt version.
+AC_CACHE_CHECK([for Qt library version >= 5.1],
+ ac_cv_qtversion, [
+ AC_TRY_COMPILE([#include "QtCore/qglobal.h"], [
+ #if QT_VERSION < 0x050100
+ #error Qt library 5.1 or greater required.
+ #endif
+ ], ac_cv_qtversion="yes", [
+ echo "no; Qt 5.1 or greater is required"
+ exit 1
])
-fi
+])
# Check for Qt moc utility.
-AC_PATH_PROG(ac_moc, moc, [no], $ac_path)
+AC_PATH_TOOL(ac_moc, moc, [no], $ac_path)
if test "x$ac_moc" = "xno"; then
AC_MSG_ERROR([moc $ac_errmsg])
fi
AC_SUBST(ac_moc)
# Check for Qt uic utility.
-AC_PATH_PROG(ac_uic, uic, [no], $ac_path)
+AC_PATH_TOOL(ac_uic, uic, [no], $ac_path)
if test "x$ac_uic" = "xno"; then
AC_MSG_ERROR([uic $ac_errmsg])
fi
AC_SUBST(ac_uic)
+
# Check for Qt lupdate utility.
-AC_PATH_PROG(ac_lupdate, lupdate, [no], $ac_path)
+AC_PATH_TOOL(ac_lupdate, lupdate, [no], $ac_path)
if test "x$ac_lupdate" = "xno"; then
- AC_MSG_ERROR([lupdate $ac_errmsg])
+ AC_PATH_TOOL(ac_cv_lupdate, lupdate-qt5, [no], $ac_path)
+ if test "x$ac_cv_lupdate" = "xno"; then
+ AC_MSG_ERROR([lupdate $ac_errmsg (qt5-linguist)])
+ else
+ ac_lupdate=$ac_cv_lupdate;
+ fi
fi
AC_SUBST(ac_lupdate)
# Check for Qt lrelease utility.
-AC_PATH_PROG(ac_lrelease, lrelease, [no], $ac_path)
-if test "x$ac_release" = "xno"; then
- AC_MSG_ERROR([lrelease $ac_errmsg])
+AC_PATH_TOOL(ac_lrelease, lrelease, [no], $ac_path)
+if test "x$ac_lrelease" = "xno"; then
+ AC_PATH_TOOL(ac_cv_lrelease, lrelease-qt5, [no], $ac_path)
+ if test "x$ac_cv_lrelease" = "xno"; then
+ AC_MSG_ERROR([lrelease $ac_errmsg (qt5-linguist)])
+ else
+ ac_lrelease=$ac_cv_lrelease;
+ fi
fi
AC_SUBST(ac_lrelease)
@@ -502,11 +497,20 @@
# Check for LV2 headers.
if test "x$ac_lv2" = "xyes"; then
- AC_CHECK_HEADERS(lv2.h \
- lv2/lv2plug.in/ns/ext/atom/atom.h \
- lv2/lv2plug.in/ns/ext/atom/forge.h \
- lv2/lv2plug.in/ns/ext/atom/util.h,
- [ac_lv2="yes"], [ac_lv2="no"])
+ PKG_CHECK_MODULES([LV2], [lv2], [ac_lv2="yes"], [ac_lv2="no"])
+ if test "x$ac_lv2" = "xyes"; then
+ ac_lv2_cflags="$ac_lv2_cflags $LV2_CFLAGS"
+ CFLAGS="$CFLAGS $LV2_CFLAGS"
+ CPPFLAGS="$CPPFLAGS $LV2_CFLAGS"
+ fi
+ if test "x$ac_lv2" = "xyes"; then
+ AC_CHECK_HEADERS(
+ lv2/lv2plug.in/ns/ext/urid/urid.h \
+ lv2/lv2plug.in/ns/ext/atom/atom.h \
+ lv2/lv2plug.in/ns/ext/atom/forge.h \
+ lv2/lv2plug.in/ns/ext/atom/util.h,
+ [ac_lv2="yes"], [ac_lv2="no"])
+ fi
if test "x$ac_lv2" = "xyes"; then
AC_DEFINE(CONFIG_LV2, 1, [Define if LV2 plug-in build is enabled.])
ac_all_targets="lv2 $ac_all_targets"
@@ -545,18 +549,27 @@
fi
if test "x$ac_lv2" = "xno"; then
- lv2_external_ui="no"
+ ac_lv2_ui_x11="no"
+ ac_lv2_ui_external="no"
ac_lv2_ui_idle="no"
ac_lv2_ui_show="no"
+ ac_lv2_ui_resize="no"
ac_lv2_programs="no"
+ ac_lv2_patch="no"
+fi
+
+if test "x$ac_lv2_ui_x11" = "xyes"; then
+ AC_DEFINE(CONFIG_LV2_UI_X11, 1, [Define if LV2 X11 UI support is available.])
+else
+ AC_MSG_WARN([*** LV2 X11 UI support will be disabled.])
fi
-if test "x$ac_lv2_external_ui" = "xyes"; then
+if test "x$ac_lv2_ui_external" = "xyes"; then
CFLAGS="$CFLAGS -Isrc/lv2"
CPPFLAGS="$CPPFLAGS -Isrc/lv2"
- AC_CHECK_HEADER(lv2_external_ui.h, [ac_lv2_external_ui="yes"], [ac_lv2_external_ui="no"])
- if test "x$ac_lv2_external_ui" = "xyes"; then
- AC_DEFINE(CONFIG_LV2_EXTERNAL_UI, 1, [Define if LV2 External UI extension is available.])
+ AC_CHECK_HEADER(lv2_external_ui.h, [ac_lv2_ui_external="yes"], [ac_lv2_ui_external="no"])
+ if test "x$ac_lv2_ui_external" = "xyes"; then
+ AC_DEFINE(CONFIG_LV2_UI_EXTERNAL, 1, [Define if LV2 External UI extension is available.])
ac_lv2_incpath="lv2 $ac_lv2_incpath"
else
AC_MSG_WARN([*** LV2 External UI extension will be disabled.])
@@ -595,6 +608,22 @@
fi
fi
+if test "x$ac_lv2_ui_resize" = "xyes"; then
+ AC_CACHE_CHECK([for LV2 UI Resize interface],
+ ac_cv_lv2_ui_resize, [
+ AC_TRY_LINK([#include "lv2/lv2plug.in/ns/extensions/ui/ui.h"], [
+ // Checking for LV2 UI Resize interface...
+ LV2UI_Resize resize;
+ ], ac_cv_lv2_ui_resize="yes", ac_cv_lv2_ui_resize="no")
+ ])
+ ac_lv2_ui_resize=$ac_cv_lv2_ui_resize
+ if test "x$ac_lv2_ui_resize" = "xyes"; then
+ AC_DEFINE(CONFIG_LV2_UI_RESIZE, 1, [Define if LV2 UI Resize interface support is available.])
+ else
+ AC_MSG_WARN([*** LV2 UI Resize interface support will be disabled.])
+ fi
+fi
+
if test "x$ac_lv2_programs" = "xyes"; then
AC_CHECK_HEADER(lv2_programs.h, [ac_lv2_programs="yes"], [ac_lv2_programs="no"])
if test "x$ac_lv2_programs" = "xyes"; then
@@ -605,6 +634,18 @@
fi
fi
+if test "x$ac_lv2_patch" = "xyes"; then
+ AC_CHECK_HEADER(
+ lv2/lv2plug.in/ns/ext/patch/patch.h,
+ [ac_lv2_patch="yes"], [ac_lv2_patch="no"])
+ if test "x$ac_lv2_patch" = "xyes"; then
+ AC_DEFINE(CONFIG_LV2_PATCH, 1, [Define if LV2 Patch is supported.])
+ else
+ AC_MSG_WARN([*** LV2 Patch support will be disabled.])
+ fi
+fi
+
+
# Check for NSM support.
if test "x$ac_nsm" = "xyes"; then
AC_DEFINE(CONFIG_NSM, 1, [Define if NSM support is available.])
@@ -663,10 +704,13 @@
echo " JACK MIDI support . . . . . . . . . . . . . . . .: $ac_jack_midi"
echo " ALSA MIDI support . . . . . . . . . . . . . . . .: $ac_alsa_midi"
echo " LV2 plug-in build . . . . . . . . . . . . . . . .: $ac_lv2"
-echo " LV2 plug-in External UI support . . . . . . . . .: $ac_lv2_external_ui"
+echo " LV2 plug-in X11 UI support . . . . . . . . . . .: $ac_lv2_ui_x11"
+echo " LV2 plug-in External UI support . . . . . . . . .: $ac_lv2_ui_external"
echo " LV2 plug-in UI Idle interface support . . . . . .: $ac_lv2_ui_idle"
echo " LV2 plug-in UI Show interface support . . . . . .: $ac_lv2_ui_show"
+echo " LV2 plug-in UI Resize interface support . . . . .: $ac_lv2_ui_resize"
echo " LV2 plug-in Programs support . . . . . . . . . . .: $ac_lv2_programs"
+echo " LV2 plug-in Patch support . . . . . . . . . . . .: $ac_lv2_patch"
echo " OSC service support (liblo) . . . . . . . . . . .: $ac_liblo"
echo " NSM (Non Session Management) support . . . . . . .: $ac_nsm"
echo
diff -Nru synthv1-0.8.6/debian/changelog synthv1-0.9.10+git20190929/debian/changelog
--- synthv1-0.8.6/debian/changelog 2017-12-29 09:08:36.000000000 +0000
+++ synthv1-0.9.10+git20190929/debian/changelog 2019-09-28 23:46:26.000000000 +0000
@@ -1,214 +1,288 @@
-synthv1 (0.8.6-1) unstable; urgency=medium
+synthv1 (0.9.10+git20190929) bionic; urgency=medium
- * New upstream version 0.8.6
- * Use secure uri in copyright file.
- * Bump Standards.
- * Set dh/compat 11.
+ * Import package
- -- Jaromír Mikeš Fri, 29 Dec 2017 10:08:36 +0100
+ -- falkTX Sun, 29 Sep 2019 00:46:26 +0100
-synthv1 (0.8.5-1) unstable; urgency=medium
+synthv1 (0.9.10-47) unstable; urgency=low
- * New upstream version 0.8.5
- * Bump Standards.
- * Update Homepage to avoid redirecting.
- * Update copyright file.
- * Use secure uri in watch file.
- * Fix install of metainfo files.
- * Patch refreshed.
+ * An Early-Fall'19 release.
- -- Jaromír Mikeš Thu, 02 Nov 2017 19:30:59 +0100
+ -- Rui Nuno Capela Tue, 24 Sep 2019 19:00:00 +0100
-synthv1 (0.8.4-1) unstable; urgency=medium
+synthv1 (0.9.9-46) unstable; urgency=low
- * New upstream version 0.8.4
- * Bump Standards.
- * Update Vcs - use git instead of cgit.
- * Introduce postclone.sh script to ignore .pc/ dir.
+ * A Summer'19 release.
- -- Jaromír Mikeš Wed, 23 Aug 2017 11:06:43 +0200
+ -- Rui Nuno Capela Thu, 18 Jul 2019 19:00:00 +0100
-synthv1 (0.8.3-1) unstable; urgency=medium
+synthv1 (0.9.8-45) unstable; urgency=low
- * New upstream version 0.8.3 (Closes: #860214)
- * Sign tags.
- * Remove useless flags.
- * Remove dh_autoreconf.
- * Fix dh version.
- * Avoid useless linking.
+ * A Spring'19 release.
- -- Jaromír Mikeš Mon, 26 Jun 2017 22:00:32 +0200
+ -- Rui Nuno Capela Thu, 6 Jun 2019 19:00:00 +0100
-synthv1 (0.8.0-1) unstable; urgency=medium
+synthv1 (0.9.7-44) unstable; urgency=low
- * New upstream version 0.8.0
- * Update copyright file.
- * Set dh/compat 10.
- * Patches refreshed.
+ * A Spring-Break'19 release.
- -- Jaromír Mikeš Mon, 21 Nov 2016 11:18:27 +0100
+ -- Rui Nuno Capela Sun, 14 Apr 2019 19:00:00 +0000
-synthv1 (0.7.6-1) unstable; urgency=medium
+synthv1 (0.9.6-43) unstable; urgency=low
- [ Jaromír Mikeš ]
- * New upstream version 0.7.6
- * Start new upload.
- * Patch refreshed.
- * Package split.
- * Rename and install man page.
- * Finalize changelog.
- * Rename and install man page.
- * Split package (4).
- * Fix Depends: fields.
- * Add Breaks: Replaces: fields.
- * Add synthv1.mime file.
- * Add synthv1-common.install file.
- * Add Breaks Replaces for synthv1-common package.
- * Install desktop icons and mime.
- * Fix clean in rules file.
+ * Pre-LAC2019 release frenzy.
- [ IOhannes m zmölnig ]
- * Minor amendments to package description
+ -- Rui Nuno Capela Mon, 18 Mar 2019 19:00:00 +0000
- -- Jaromír Mikeš Wed, 12 Oct 2016 20:25:24 +0200
+synthv1 (0.9.5-42) unstable; urgency=low
-synthv1 (0.7.5-1) unstable; urgency=medium
+ * The End of Winter'19 release.
- * Imported Upstream version 0.7.5
- * Remove patch applied upstream.
- * Patch refreshed.
- * Bump Standards.
- * Fix VCS fields.
- * Switch to qt5.
- * Fix hardening.
+ -- Rui Nuno Capela Mon, 4 Mar 2019 19:00:00 +0000
- -- Jaromír Mikeš Thu, 16 Jun 2016 19:10:32 +0200
+synthv1 (0.9.4-41) unstable; urgency=low
-synthv1 (0.7.1-1) unstable; urgency=medium
+ * A Late Autumn'18 release.
- * Imported Upstream version 0.7.1
- * Refresh patches
+ -- Rui Nuno Capela Wed, 12 Dec 2018 19:00:00 +0000
- -- Jaromír Mikeš Thu, 03 Sep 2015 03:16:35 +0200
+synthv1 (0.9.3-40) unstable; urgency=low
-synthv1 (0.6.3-1) unstable; urgency=medium
+ * An Autumn'18 release.
- * Imported Upstream version 0.6.3
+ -- Rui Nuno Capela Mon, 22 Oct 2018 19:00:00 +0000
- -- Jaromír Mikeš Mon, 11 May 2015 01:37:11 +0200
+synthv1 (0.9.2-39) unstable; urgency=low
-synthv1 (0.6.2-1) unstable; urgency=medium
+ * A Summer'18 release.
- * Imported Upstream version 0.6.2
+ -- Rui Nuno Capela Tue, 24 Jul 2018 19:00:00 +0000
- -- Jaromír Mikeš Mon, 04 May 2015 22:51:39 +0200
+synthv1 (0.9.1-38) unstable; urgency=low
-synthv1 (0.6.1-1) unstable; urgency=low
+ * An Early Summer'18 release.
- * Imported Upstream version 0.6.1
- * Bump Standards.
+ -- Rui Nuno Capela Tue, 26 Mar 2018 19:00:00 +0000
- -- Jaromír Mikeš Sun, 22 Mar 2015 16:55:33 +0100
+synthv1 (0.9.0-37) unstable; urgency=low
-synthv1 (0.5.1-1) unstable; urgency=low
+ * The End of Winter'18 release.
- * Imported Upstream version 0.5.1
+ -- Rui Nuno Capela Wed, 7 Mar 2018 19:00:00 +0000
- -- Jaromír Mikeš Thu, 25 Sep 2014 16:05:03 +0200
+synthv1 (0.8.6-36) unstable; urgency=low
-synthv1 (0.5.0-1) unstable; urgency=low
+ * The End of Autumn'17 release.
- * Imported Upstream version 0.5.0
- * Patch refreshed.
- * Install lv2 plugin to non-multiarch dir. (Closes: #747677) (Closes: #747678)
+ -- Rui Nuno Capela Wed, 20 Dec 2017 19:00:00 +0000
- -- Jaromír Mikeš Sat, 09 Aug 2014 09:30:17 +0200
+synthv1 (0.8.5-35) unstable; urgency=low
-synthv1 (0.4.1-1) unstable; urgency=low
+ * An Autumn'17 release.
- * New upstream release.
- * Fix syntax for Keywords entry in desktop file.
+ -- Rui Nuno Capela Sun, 29 Oct 2017 19:00:00 +0000
- -- Jaromír Mikeš Fri, 11 Apr 2014 20:21:39 +0200
+synthv1 (0.8.4-34) unstable; urgency=low
-synthv1 (0.4.0-1) unstable; urgency=low
+ * A Late-Summer'17 release.
- * Imported Upstream version 0.4.0
- * Two patches removed - applied upstream.
+ -- Rui Nuno Capela Tue, 22 Aug 2017 18:00:00 +0000
- -- Jaromír Mikeš Tue, 11 Mar 2014 15:08:33 +0100
+synthv1 (0.8.3-33) unstable; urgency=low
-synthv1 (0.3.6-3) unstable; urgency=low
+ * A Summer'17 release.
- * Fixed FTBS on kfreebsd-* and hurd. (Closes: #736960)
- Thanks to Steven Chamberlain
+ -- Rui Nuno Capela Wed, 21 Jun 2017 18:00:00 +0000
- -- Jaromír Mikeš Wed, 29 Jan 2014 00:44:33 +0100
+synthv1 (0.8.2-32) unstable; urgency=low
-synthv1 (0.3.6-2) unstable; urgency=low
+ * Pre-LAC2017 release frenzy.
- * Fixed install path.
+ -- Rui Nuno Capela Tue, 2 May 2017 19:00:00 +0000
- -- Jaromír Mikeš Sat, 25 Jan 2014 10:11:58 +0100
+synthv1 (0.8.1-31) unstable; urgency=low
-synthv1 (0.3.6-1) unstable; urgency=low
+ * A Spring'17 release.
- * Imported Upstream version 0.3.6
- * Patch refreshed.
- * Bump Standards.
+ -- Rui Nuno Capela Tue, 21 Mar 2017 12:00:00 +0000
- -- Jaromír Mikeš Thu, 23 Jan 2014 01:13:06 +0100
+synthv1 (0.8.0-30) unstable; urgency=low
-synthv1 (0.3.5-1) unstable; urgency=low
+ * A Fall'16 release.
- * New upstream release.
- * Refresh patches.
+ -- Rui Nuno Capela Thu, 17 Nov 2016 12:00:00 +0000
- -- Alessio Treglia Tue, 08 Oct 2013 12:27:56 +0100
+synthv1 (0.7.6-29) unstable; urgency=low
-synthv1 (0.3.4-1) unstable; urgency=low
+ * The eleventh official beta.
- * New upstream release.
- * Patch refreshed.
- * Added liblo-dev as build-dep.
- * Added patch to fix hardening.
- * Added keywords to desktop file - patch.
+ -- Rui Nuno Capela Mon, 19 Sep 2016 12:00:00 +0100
- -- Jaromír Mikeš Tue, 10 Sep 2013 16:34:21 +0200
+synthv1 (0.7.5-28) unstable; urgency=low
-synthv1 (0.3.3-1) unstable; urgency=low
+ * The tenth official beta.
- [ Jaromír Mikeš ]
- * Added myself as uploader
+ -- Rui Nuno Capela Thu, 16 Jun 2016 18:30:00 +0100
- [ Alessio Treglia ]
- * New upstream release.
+synthv1 (0.7.4-27) unstable; urgency=low
- -- Alessio Treglia Mon, 01 Jul 2013 07:54:55 +0100
+ * The ninth-bis official beta.
-synthv1 (0.3.2-1) unstable; urgency=low
+ -- Rui Nuno Capela Wed, 2 Mar 2016 18:30:00 +0100
- * New upstream release.
+synthv1 (0.7.3-26) unstable; urgency=low
- -- Alessio Treglia Sat, 02 Mar 2013 11:20:03 +0000
+ * The ninth official beta.
-synthv1 (0.3.1-1) unstable; urgency=low
+ -- Rui Nuno Capela Mon, 22 Feb 2016 19:00:00 +0100
- * New upstream release.
- * Refresh patches.
+synthv1 (0.7.2-25) unstable; urgency=low
- -- Alessio Treglia Fri, 08 Feb 2013 18:13:47 +0000
+ * The eighth official beta.
-synthv1 (0.3.0-1) unstable; urgency=low
+ -- Rui Nuno Capela Fri, 4 Dec 2015 18:30:00 +0100
- * New upstream release.
- * Fix the Homepage.
- * Fix Vcs-Browser field.
+synthv1 (0.7.1-24) unstable; urgency=low
- -- Alessio Treglia Sat, 29 Dec 2012 16:09:46 +0000
+ * A seventh-bis official beta.
-synthv1 (0.2.0-1) unstable; urgency=low
+ -- Rui Nuno Capela Mon, 24 Aug 2015 19:00:00 +0100
- * Initial release. (Closes: #678625)
+synthv1 (0.7.0-23) unstable; urgency=low
+
+ * A seventh official beta.
+
+ -- Rui Nuno Capela Fri, 24 Jul 2015 19:00:00 +0100
+
+synthv1 (0.6.3-22) unstable; urgency=low
+
+ * A sixth official beta.
+
+ -- Rui Nuno Capela Sat, 9 May 2015 11:00:00 +0100
+
+synthv1 (0.6.2-21) unstable; urgency=low
+
+ * A fifth official beta.
+
+ -- Rui Nuno Capela Thu, 30 Apr 2015 18:30:00 +0100
+
+synthv1 (0.6.1-20) unstable; urgency=low
+
+ * A fourth official beta.
+
+ -- Rui Nuno Capela Mon, 9 Mar 2015 18:30:00 +0100
+
+synthv1 (0.6.0-19) unstable; urgency=low
+
+ * A third official beta.
+
+ -- Rui Nuno Capela Fri, 23 Jan 2015 18:30:00 +0100
+
+synthv1 (0.5.1-18) unstable; urgency=low
+
+ * One second official beta.
+
+ -- Rui Nuno Capela Fri, 12 Sep 2014 18:00:00 +0100
+
+synthv1 (0.5.0-17) unstable; urgency=low
+
+ * Officially beta now.
+
+ -- Rui Nuno Capela Mon, 30 Jun 2014 18:00:00 +0100
+
+synthv1 (0.4.2-16) unstable; urgency=low
+
+ * A pre-LAC frenzy beta.
+
+ -- Rui Nuno Capela Tue, 29 Apr 2014 18:30:00 +0100
+
+synthv1 (0.4.1-15) unstable; urgency=low
+
+ * A proto-beta bis.
+
+ -- Rui Nuno Capela Mon, 7 Apr 2014 18:30:00 +0100
+
+synthv1 (0.4.0-14) unstable; urgency=low
+
+ * A proto-beta party.
+
+ -- Rui Nuno Capela Thu, 6 Mar 2014 18:00:00 +0100
+
+synthv1 (0.3.6-13) unstable; urgency=low
+
+ * A fifth of a Jubilee release.
+
+ -- Rui Nuno Capela Tue, 31 Dec 2013 12:00:00 +0100
+
+synthv1 (0.3.5-12) unstable; urgency=low
+
+ * Fall greetings release.
+
+ -- Rui Nuno Capela Mon, 30 Sep 2013 19:00:00 +0000
+
+synthv1 (0.3.4-11) unstable; urgency=low
+
+ * Brand new icon ready.
+
+ -- Rui Nuno Capela Tue, 16 Jul 2013 18:30:00 +0000
+
+synthv1 (0.3.3-10) unstable; urgency=low
+
+ * Late spring blossoming.
+
+ -- Rui Nuno Capela Fri, 31 May 2013 18:30:00 +0000
+
+synthv1 (0.3.2-9) unstable; urgency=low
+
+ * One third bug-fix release.
+
+ -- Rui Nuno Capela Fri, 1 Mar 2013 18:00:00 +0000
+
+synthv1 (0.3.1-8) unstable; urgency=low
+
+ * One second bug-fix release.
+
+ -- Rui Nuno Capela Fri, 8 Dec 2013 18:00:00 +0000
+
+synthv1 (0.3.0-7) unstable; urgency=low
+
+ * Third coming release.
+
+ -- Rui Nuno Capela Fri, 21 Dec 2012 18:00:00 +0000
+
+synthv1 (0.2.0-6) unstable; urgency=low
+
+ * Second public release.
+
+ -- Rui Nuno Capela Thu, 22 Nov 2012 18:00:00 +0000
+
+synthv1 (0.1.1-5) unstable; urgency=low
+
+ * One first bug-fix release.
+
+ -- Rui Nuno Capela Mon, 24 Sep 2012 12:00:00 +0000
+
+synthv1 (0.1.0-4) unstable; urgency=low
+
+ * First true official release.
+
+ -- Rui Nuno Capela Mon, 10 Sep 2012 12:00:00 +0000
+
+synthv1 (0.0.9-3) unstable; urgency=low
+
+ * Post-vacation relax: improved polyphony, preset salvage.
+
+ -- Rui Nuno Capela Mon, 27 Aug 2012 18:00:00 +0000
+
+synthv1 (0.0.8-2) unstable; urgency=low
+
+ * Proto-Icon, Desktop file and Help About menus added.
+
+ -- Rui Nuno Capela Sun, 15 Jul 2012 00:00:00 +0000
+
+synthv1 (0.0.7-1) unstable; urgency=low
+
+ * Initial debianization
+
+ -- Rui Nuno Capela Sun, 8 Jul 2012 12:00:00 +0000
- -- Alessio Treglia Fri, 23 Nov 2012 11:34:19 +0000
diff -Nru synthv1-0.8.6/debian/compat synthv1-0.9.10+git20190929/debian/compat
--- synthv1-0.8.6/debian/compat 2017-12-29 09:05:28.000000000 +0000
+++ synthv1-0.9.10+git20190929/debian/compat 2019-09-28 23:00:43.000000000 +0000
@@ -1 +1 @@
-11
+9
diff -Nru synthv1-0.8.6/debian/control synthv1-0.9.10+git20190929/debian/control
--- synthv1-0.8.6/debian/control 2017-12-29 09:05:21.000000000 +0000
+++ synthv1-0.9.10+git20190929/debian/control 2019-09-28 23:41:43.000000000 +0000
@@ -1,71 +1,34 @@
Source: synthv1
-Section: sound
-Priority: optional
-Maintainer: Debian Multimedia Maintainers
-Uploaders:
- Alessio Treglia ,
- Jaromír Mikeš ,
-Build-Depends:
- automake,
- debhelper (>= 11~),
- ladspa-sdk,
- libasound2-dev,
- libjack-dev,
- qtbase5-dev,
- qttools5-dev-tools,
- libsndfile1-dev,
- libtool,
- libx11-dev,
- lv2-dev,
- liblo-dev,
-Homepage: https://synthv1.sourceforge.io/
-Standards-Version: 4.1.2
-Vcs-Git: https://anonscm.debian.org/git/pkg-multimedia/synthv1.git
-Vcs-Browser: https://anonscm.debian.org/git/pkg-multimedia/synthv1.git
+Section: contrib/sound
+Priority: extra
+Maintainer: falkTX
+Build-Depends: debhelper (>= 9), dh-autoreconf, pkg-config, qtchooser,
+ libasound2-dev, libjack-dev | libjack-jackd2-dev, lv2-dev,
+ lv2vst, liblo-static, qtbase5-static
+Standards-Version: 3.9.7
Package: synthv1
Architecture: any
-Depends:
- ${misc:Depends},
- ${shlibs:Depends},
- synthv1-common (=${binary:Version}),
-Recommends:
- jackd
-Description: old-school polyphonic synthesizer - standalone
- synthv1 is an old-school all-digital 4-oscillator subtractive
- polyphonic synthesizer with stereo effects, especially suited
- to create strong bass sounds.
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Breaks: synthv1-common (= 2:0.9.4-1kxstudio1v5)
+Replaces: synthv1-common (= 2:0.9.4-1kxstudio1v5)
+Provides: standalone-plugin
+Description: An old-school polyphonic subtractive synthesizer - JACK standalone
+ An old-school all-digital 4-oscillator subtractive polyphonic synthesizer with stereo fx.
.
- This package provides the standalone app.
+ This package provides the standalone JACK client application (synthv1_jack)
Package: synthv1-lv2
Architecture: any
-Depends:
- ${misc:Depends},
- ${shlibs:Depends},
- synthv1-common (=${binary:Version}),
-Replaces: synthv1 (<< 0.7.6)
-Breaks: synthv1 (<< 0.7.6)
-Provides:
- lv2-plugin
-Description: old-school polyphonic synthesizer - LV2 plugin
- synthv1 is an old-school all-digital 4-oscillator subtractive
- polyphonic synthesizer with stereo effects, especially suited
- to create strong bass sounds.
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Provides: lv2-plugin, vst-plugin
+Description: An old-school polyphonic subtractive synthesizer - LV2 plugin
+ An old-school all-digital 4-oscillator subtractive polyphonic synthesizer with stereo fx.
.
- This package provides the LV2 plugin.
+ This package provides the LV2 plugin (http://synthv1.sourceforge.net/lv2)
Package: synthv1-common
-Architecture: any
-Depends:
- ${misc:Depends},
- ${shlibs:Depends},
-Replaces: synthv1 (<< 0.7.6)
-Breaks: synthv1 (<< 0.7.6)
-Description: old-school polyphonic synthesizer - common files
- synthv1 is an old-school all-digital 4-oscillator subtractive
- polyphonic synthesizer with stereo effects, especially suited
- to create strong bass sounds.
- .
- This package provides files shared by both the LV2 plugin
- and the standalone application.
+Architecture: all
+Depends: ${misc:Depends}
+Description: Dummy package
+ This is a dummy package and can be safely removed if nothing depends on it.
diff -Nru synthv1-0.8.6/debian/copyright synthv1-0.9.10+git20190929/debian/copyright
--- synthv1-0.8.6/debian/copyright 2017-12-29 09:04:14.000000000 +0000
+++ synthv1-0.9.10+git20190929/debian/copyright 2019-09-28 23:00:43.000000000 +0000
@@ -1,35 +1,33 @@
-Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
-Upstream-Name: synthv1
-Upstream-Contact: Rui Nuno Capela
-Source: https://sourceforge.net/projects/synthv1/files/
-Copyright: 2012, rncbc aka Rui Nuno Capela
+This package was debianized by Rui Nuno Capela on
+Sat, 7 Jul 2012 12:00:00 +0000.
-Files: *
-Copyright:
- 2012 rncbc aka Rui Nuno Capela
- 2007 arguru, discodsp.com
- 2007 jorgen, linux-vst.com
-License: GPL-2+
+It was downloaded from http://synthv1.sourceforge.net
+
+Upstream Author: Rui Nuno Capela
-Files: debian/*
Copyright:
- 2012 Alessio Treglia
- 2013-2017 Jaromír Mikeš
-License: GPL-2+
-
-License: GPL-2+
- This package is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
- .
- This package is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- .
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
- .
- On Debian systems, the complete text of the GNU General
- Public License can be found in `/usr/share/common-licenses/GPL-2'.
+
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
+
+License:
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
+
+The Debian packaging is (C) 2012-2019, Rui Nuno Capela and
+is licensed under the GPL, see above.
+
diff -Nru synthv1-0.8.6/debian/docs synthv1-0.9.10+git20190929/debian/docs
--- synthv1-0.8.6/debian/docs 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/debian/docs 2019-09-28 23:00:43.000000000 +0000
@@ -0,0 +1,2 @@
+README
+TODO
diff -Nru synthv1-0.8.6/debian/gbp/postclone.sh synthv1-0.9.10+git20190929/debian/gbp/postclone.sh
--- synthv1-0.8.6/debian/gbp/postclone.sh 2017-11-02 18:03:57.000000000 +0000
+++ synthv1-0.9.10+git20190929/debian/gbp/postclone.sh 1970-01-01 00:00:00.000000000 +0000
@@ -1,14 +0,0 @@
-#!/bin/sh
-
-## script to initialize a cloned repository
-## with per (local) repository settings.
-
-# - ignore quilt's .pc/ directory
-# - enable the "--follow-tags" mode for pushing
-
-echo "tuning git-repository for ${NAME}"
-git config push.followTags true && echo "enabled push.followTags"
-
-GITEXCLUDE=".git/info/exclude"
-egrep "^/?\.pc/?$" "${GITEXCLUDE}" >/dev/null 2>&1 \
- || (echo "/.pc/" >> "${GITEXCLUDE}" && echo "ignoring /.pc/")
diff -Nru synthv1-0.8.6/debian/gbp.conf synthv1-0.9.10+git20190929/debian/gbp.conf
--- synthv1-0.8.6/debian/gbp.conf 2017-06-26 18:54:39.000000000 +0000
+++ synthv1-0.9.10+git20190929/debian/gbp.conf 1970-01-01 00:00:00.000000000 +0000
@@ -1,3 +0,0 @@
-[DEFAULT]
-pristine-tar = True
-sign-tags = True
diff -Nru synthv1-0.8.6/debian/patches/0002-fix_hardening.patch synthv1-0.9.10+git20190929/debian/patches/0002-fix_hardening.patch
--- synthv1-0.8.6/debian/patches/0002-fix_hardening.patch 2016-11-21 10:21:54.000000000 +0000
+++ synthv1-0.9.10+git20190929/debian/patches/0002-fix_hardening.patch 1970-01-01 00:00:00.000000000 +0000
@@ -1,30 +0,0 @@
-Description: Fix hardening
-Author: Jaromír Mikeš
-Forwarded: yes
-
-Index: synthv1/src/src_jack.pri.in
-===================================================================
---- synthv1.orig/src/src_jack.pri.in
-+++ synthv1/src/src_jack.pri.in
-@@ -13,5 +13,6 @@ INCLUDEPATH += @ac_jack_incpath@
- LIBS += @ac_jack_libs@
-
- # Extra optimization flags
--QMAKE_CXXFLAGS += @ac_jack_cflags@
--QMAKE_LFLAGS += @ac_jack_ldflags@
-+QMAKE_CXXFLAGS += $(CPPFLAGS) @ac_jack_cflags@
-+QMAKE_CFLAGS += $(CPPFLAGS)
-+QMAKE_LFLAGS += $(LDFLAGS) @ac_jack_ldflags@
-Index: synthv1/src/src_lv2.pri.in
-===================================================================
---- synthv1.orig/src/src_lv2.pri.in
-+++ synthv1/src/src_lv2.pri.in
-@@ -13,5 +13,6 @@ INCLUDEPATH += @ac_lv2_incpath@
- LIBS += @ac_lv2_libs@
-
- # Extra optimization flags
--QMAKE_CXXFLAGS += @ac_lv2_cflags@
--QMAKE_LFLAGS += @ac_lv2_ldflags@
-+QMAKE_CXXFLAGS += $(CPPFLAGS) @ac_lv2_cflags@
-+QMAKE_CFLAGS += $(CPPFLAGS)
-+QMAKE_LFLAGS += $(LDFLAGS) @ac_lv2_ldflags@
diff -Nru synthv1-0.8.6/debian/patches/0004-fix_install_path.patch synthv1-0.9.10+git20190929/debian/patches/0004-fix_install_path.patch
--- synthv1-0.8.6/debian/patches/0004-fix_install_path.patch 2017-11-02 18:25:35.000000000 +0000
+++ synthv1-0.9.10+git20190929/debian/patches/0004-fix_install_path.patch 1970-01-01 00:00:00.000000000 +0000
@@ -1,90 +0,0 @@
-Description: Install lv2 plugin to non-multiarch dir.
-Author: Jaromír Mikeš
-Forwarded: no
-
-Index: synthv1/src/src_lv2.pro
-===================================================================
---- synthv1.orig/src/src_lv2.pro
-+++ synthv1/src/src_lv2.pro
-@@ -39,7 +39,7 @@ unix {
- contains(PREFIX, $$system(echo $HOME)) {
- LV2DIR = $${PREFIX}/.lv2
- } else {
-- LV2DIR = $${LIBDIR}/lv2
-+ LV2DIR = $${PREFIX}/lib/lv2
- }
-
- TARGET_LV2 = $${NAME}.lv2/$${NAME}
-@@ -59,7 +59,7 @@ unix {
-
- QMAKE_CLEAN += $${TARGET_LV2}.so
-
-- LIBS += -l$${NAME} -Wl,-rpath,$${LIBDIR}
-+ LIBS += -l$${NAME} -Wl,-rpath,$${PREFIX}/lib/$${NAME}
- }
-
- QT -= gui
-Index: synthv1/src/src_lv2ui.pro
-===================================================================
---- synthv1.orig/src/src_lv2ui.pro
-+++ synthv1/src/src_lv2ui.pro
-@@ -41,7 +41,7 @@ unix {
- contains(PREFIX, $$system(echo $HOME)) {
- LV2DIR = $${PREFIX}/.lv2
- } else {
-- LV2DIR = $${LIBDIR}/lv2
-+ LV2DIR = $${PREFIX}/lib/lv2
- }
-
- TARGET_LV2UI = $${NAME}.lv2/$${NAME}_ui
-@@ -71,7 +71,7 @@ unix {
-
- QMAKE_CLEAN += $${TARGET_LV2UI}.so $${TARGET_LV2UI}.ttl
-
-- LIBS += -l$${NAME} -l$${NAME}_ui -L$${NAME}.lv2 -Wl,-rpath,$${LIBDIR}:$${LV2DIR}/$${NAME}.lv2
-+ LIBS += -l$${NAME} -l$${NAME}_ui -L$${NAME}.lv2 -Wl,-rpath,$${PREFIX}/lib/$${NAME}
- }
-
- QT += xml
-Index: synthv1/src/src_jack.pro
-===================================================================
---- synthv1.orig/src/src_jack.pro
-+++ synthv1/src/src_jack.pro
-@@ -75,7 +75,7 @@ unix {
- mimetypes_scalable.path = $${DATADIR}/icons/hicolor/scalable/mimetypes
- mimetypes_scalable.files += mimetypes/application-x-$${NAME}-preset.svg
-
-- LIBS += -l$${NAME} -l$${NAME}_ui -Wl,-rpath,$${LIBDIR}
-+ LIBS += -l$${NAME} -l$${NAME}_ui -Wl,-rpath,$${PREFIX}/lib/$${NAME}
- }
-
- QT += xml
-Index: synthv1/src/src_core.pro
-===================================================================
---- synthv1.orig/src/src_core.pro
-+++ synthv1/src/src_core.pro
-@@ -56,7 +56,7 @@ unix {
-
- INSTALLS += target
-
-- target.path = $${LIBDIR}
-+ target.path = $${PREFIX}/lib/$${NAME}
- }
-
- QT -= gui
-Index: synthv1/src/src_ui.pro
-===================================================================
---- synthv1.orig/src/src_ui.pro
-+++ synthv1/src/src_ui.pro
-@@ -67,9 +67,9 @@ unix {
-
- INSTALLS += target
-
-- target.path = $${LIBDIR}
-+ target.path = $${PREFIX}/lib/$${NAME}
-
-- LIBS += -l$${NAME} -Wl,-rpath,$${LIBDIR}
-+ LIBS += -l$${NAME} -Wl,-rpath,$${PREFIX}/lib/$${NAME}
- }
-
- QT += xml
diff -Nru synthv1-0.8.6/debian/patches/series synthv1-0.9.10+git20190929/debian/patches/series
--- synthv1-0.8.6/debian/patches/series 2016-09-26 17:33:44.000000000 +0000
+++ synthv1-0.9.10+git20190929/debian/patches/series 1970-01-01 00:00:00.000000000 +0000
@@ -1,2 +0,0 @@
-0002-fix_hardening.patch
-0004-fix_install_path.patch
diff -Nru synthv1-0.8.6/debian/README.source synthv1-0.9.10+git20190929/debian/README.source
--- synthv1-0.8.6/debian/README.source 2017-11-02 18:03:57.000000000 +0000
+++ synthv1-0.9.10+git20190929/debian/README.source 1970-01-01 00:00:00.000000000 +0000
@@ -1,22 +0,0 @@
-gbp clone
----------
-
-Starting with gbp>0.8.1, here's an simple way to automatically fine-tune the
-repository in the following ways:
-- make git ignore any .pc/ directory (created by quilt)
-- enable the "--follow-tags" when running 'git-push', so it's harder
- to forget to push packaging tags along with the branches.
-
-To enable this, run gbp-clone with the '--postclone debian/gbp/postclone.sh'
-option.
-To enable this for ALL repositories cloned via 'gbp' (in the future), do
-something like the following:
-
- $ mkdir -p ~/bin
- $ cp debian/gbp/postclone.sh ~/bin/gbphook-postclone
- $ cat >> ~/.gbp.conf < Mon, 1 Aug 2016 12:15:50 +0200
diff -Nru synthv1-0.8.6/debian/rules synthv1-0.9.10+git20190929/debian/rules
--- synthv1-0.8.6/debian/rules 2017-06-26 19:06:52.000000000 +0000
+++ synthv1-0.9.10+git20190929/debian/rules 2019-09-28 23:24:38.000000000 +0000
@@ -1,38 +1,41 @@
#!/usr/bin/make -f
-export DEB_BUILD_MAINT_OPTIONS = hardening=+all
+DEB_HOST_ARCH = $(shell dpkg-architecture -qDEB_HOST_ARCH)
-export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
-
-DEB_HOST_ARCH_OS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS)
-
-EXTRA_CONFIGURE_ARGS = \
- --enable-jack \
- --enable-jack-midi \
- --enable-jack-session \
- --enable-lv2
-
-export QTDIR=/usr/share/qt5
-export QT_SELECT=qt5
-
-ifeq ($(DEB_HOST_ARCH_OS),linux)
-EXTRA_CONFIGURE_ARGS += --enable-alsa-midi
+FLAGS = -O3 -ffast-math -fPIC -DPIC -fdata-sections -ffunction-sections -DNDEBUG
+ifeq ($(DEB_HOST_ARCH),armhf)
+FLAGS += -march=armv7ve -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4
+else ifeq ($(DEB_HOST_ARCH),arm64)
+FLAGS += -march=armv8-a -mcpu=cortex-a53
else
-EXTRA_CONFIGURE_ARGS += --disable-alsa-midi
+FLAGS += -mtune=generic -msse -msse2 -mfpmath=sse
endif
-%:
- dh $@
+export CFLAGS=$(FLAGS)
+export CXXFLAGS=$(FLAGS) -fvisibility-inlines-hidden
+export CPPFLAGS=
+export LDFLAGS=-Wl,-O1 -Wl,--as-needed -Wl,--no-undefined -Wl,--gc-sections -Wl,--strip-all -Wl,-z,nodelete
+export PATH:=/opt/kxstudio/bin:$(PATH)
+export PKG_CONFIG_PATH=/opt/kxstudio/lib/pkgconfig
+
+export QTDIR=/opt/kxstudio
+
+override_dh_auto_clean:
+ dh_auto_clean
+ ./autogen.sh clean
override_dh_auto_configure:
- dh_auto_configure -- $(EXTRA_CONFIGURE_ARGS)
+ dh_auto_configure -- --libdir=/usr/lib
+
+override_dh_auto_build:
+ dh_auto_build -- -j 4
override_dh_auto_install:
- cp $(CURDIR)/synthv1.1 $(CURDIR)/synthv1_jack.1
dh_auto_install
- cp $(CURDIR)/debian/tmp/usr/share/mime/packages/synthv1.xml $(CURDIR)/debian/synthv1-common.sharedmimeinfo
-override_dh_clean:
- dh_clean
- rm -f $(CURDIR)/debian/synthv1-common.sharedmimeinfo
- rm -f $(CURDIR)/synthv1_jack.1
+ mkdir -p $(CURDIR)/debian/tmp/usr/lib/vst/
+ cp /opt/kxstudio/lib/lv2vst.so $(CURDIR)/debian/tmp/usr/lib/vst/synthv1.lv2.so
+ echo "/usr/lib/lv2/synthv1.lv2/" > $(CURDIR)/debian/tmp/usr/lib/vst/synthv1.lv2.bundle
+
+%:
+ dh $@ --with autoreconf
diff -Nru synthv1-0.8.6/debian/source/format synthv1-0.9.10+git20190929/debian/source/format
--- synthv1-0.8.6/debian/source/format 2016-09-26 17:33:44.000000000 +0000
+++ synthv1-0.9.10+git20190929/debian/source/format 1970-01-01 00:00:00.000000000 +0000
@@ -1 +0,0 @@
-3.0 (quilt)
diff -Nru synthv1-0.8.6/debian/synthv1-common.install synthv1-0.9.10+git20190929/debian/synthv1-common.install
--- synthv1-0.8.6/debian/synthv1-common.install 2016-10-08 07:57:10.000000000 +0000
+++ synthv1-0.9.10+git20190929/debian/synthv1-common.install 1970-01-01 00:00:00.000000000 +0000
@@ -1,2 +0,0 @@
-usr/lib/synthv1/*.so.* usr/lib/synthv1/
-usr/share/icons/*/*/mimetypes/*
diff -Nru synthv1-0.8.6/debian/synthv1.docs synthv1-0.9.10+git20190929/debian/synthv1.docs
--- synthv1-0.8.6/debian/synthv1.docs 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/debian/synthv1.docs 2019-09-28 23:00:43.000000000 +0000
@@ -0,0 +1,5 @@
+AUTHORS
+COPYING
+ChangeLog
+README
+TODO
diff -Nru synthv1-0.8.6/debian/synthv1.install synthv1-0.9.10+git20190929/debian/synthv1.install
--- synthv1-0.8.6/debian/synthv1.install 2017-11-02 18:11:59.000000000 +0000
+++ synthv1-0.9.10+git20190929/debian/synthv1.install 2019-09-28 23:28:58.000000000 +0000
@@ -1,4 +1,2 @@
-usr/bin/*
-usr/share/metainfo/synthv1.appdata.xml
-usr/share/applications/synthv1.desktop
-usr/share/icons/*/*/apps/*
+/usr/bin/
+/usr/share/
diff -Nru synthv1-0.8.6/debian/synthv1-lv2.install synthv1-0.9.10+git20190929/debian/synthv1-lv2.install
--- synthv1-0.8.6/debian/synthv1-lv2.install 2016-09-26 17:23:08.000000000 +0000
+++ synthv1-0.9.10+git20190929/debian/synthv1-lv2.install 2019-09-28 23:28:16.000000000 +0000
@@ -1 +1,2 @@
-usr/lib/lv2/synthv1.lv2/* usr/lib/lv2/synthv1.lv2/
+/usr/lib/lv2/*.lv2/
+/usr/lib/vst/
diff -Nru synthv1-0.8.6/debian/synthv1.manpages synthv1-0.9.10+git20190929/debian/synthv1.manpages
--- synthv1-0.8.6/debian/synthv1.manpages 2016-09-26 17:45:16.000000000 +0000
+++ synthv1-0.9.10+git20190929/debian/synthv1.manpages 1970-01-01 00:00:00.000000000 +0000
@@ -1 +0,0 @@
-synthv1_jack.1
diff -Nru synthv1-0.8.6/debian/synthv1.mime synthv1-0.9.10+git20190929/debian/synthv1.mime
--- synthv1-0.8.6/debian/synthv1.mime 2016-10-08 07:55:09.000000000 +0000
+++ synthv1-0.9.10+git20190929/debian/synthv1.mime 1970-01-01 00:00:00.000000000 +0000
@@ -1 +0,0 @@
-application/x-synthv1-preset; synthv1_jack '%s'; edit=synthv1_jack '%s'; test=test "$DISPLAY" != ""; priority=2
diff -Nru synthv1-0.8.6/debian/watch synthv1-0.9.10+git20190929/debian/watch
--- synthv1-0.8.6/debian/watch 2017-11-02 18:11:15.000000000 +0000
+++ synthv1-0.9.10+git20190929/debian/watch 1970-01-01 00:00:00.000000000 +0000
@@ -1,2 +0,0 @@
-version=3
-https://sf.net/synthv1/synthv1-([\d.]+)\.tar\.gz
diff -Nru synthv1-0.8.6/.git/config synthv1-0.9.10+git20190929/.git/config
--- synthv1-0.8.6/.git/config 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/config 2019-09-28 23:05:55.000000000 +0000
@@ -0,0 +1,14 @@
+[core]
+ repositoryformatversion = 0
+ filemode = true
+ bare = false
+ logallrefupdates = true
+[remote "origin"]
+ url = https://git.code.sf.net/p/synthv1/code
+ fetch = +refs/heads/*:refs/remotes/origin/*
+[branch "master"]
+ remote = origin
+ merge = refs/heads/master
+[branch "xstatic"]
+ remote = origin
+ merge = refs/heads/xstatic
diff -Nru synthv1-0.8.6/.git/description synthv1-0.9.10+git20190929/.git/description
--- synthv1-0.8.6/.git/description 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/description 2019-09-28 23:00:02.000000000 +0000
@@ -0,0 +1 @@
+Unnamed repository; edit this file 'description' to name the repository.
diff -Nru synthv1-0.8.6/.git/HEAD synthv1-0.9.10+git20190929/.git/HEAD
--- synthv1-0.8.6/.git/HEAD 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/HEAD 2019-09-28 23:05:55.000000000 +0000
@@ -0,0 +1 @@
+ref: refs/heads/xstatic
diff -Nru synthv1-0.8.6/.git/hooks/applypatch-msg.sample synthv1-0.9.10+git20190929/.git/hooks/applypatch-msg.sample
--- synthv1-0.8.6/.git/hooks/applypatch-msg.sample 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/hooks/applypatch-msg.sample 2019-09-28 23:00:02.000000000 +0000
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit. The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "applypatch-msg".
+
+. git-sh-setup
+commitmsg="$(git rev-parse --git-path hooks/commit-msg)"
+test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"}
+:
diff -Nru synthv1-0.8.6/.git/hooks/commit-msg.sample synthv1-0.9.10+git20190929/.git/hooks/commit-msg.sample
--- synthv1-0.8.6/.git/hooks/commit-msg.sample 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/hooks/commit-msg.sample 2019-09-28 23:00:02.000000000 +0000
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by "git commit" with one argument, the name of the file
+# that has the commit message. The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit. The hook is allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "commit-msg".
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
+# hook is more suited to it.
+#
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+ sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
+ echo >&2 Duplicate Signed-off-by lines.
+ exit 1
+}
diff -Nru synthv1-0.8.6/.git/hooks/fsmonitor-watchman.sample synthv1-0.9.10+git20190929/.git/hooks/fsmonitor-watchman.sample
--- synthv1-0.8.6/.git/hooks/fsmonitor-watchman.sample 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/hooks/fsmonitor-watchman.sample 2019-09-28 23:00:02.000000000 +0000
@@ -0,0 +1,114 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use IPC::Open2;
+
+# An example hook script to integrate Watchman
+# (https://facebook.github.io/watchman/) with git to speed up detecting
+# new and modified files.
+#
+# The hook is passed a version (currently 1) and a time in nanoseconds
+# formatted as a string and outputs to stdout all files that have been
+# modified since the given time. Paths must be relative to the root of
+# the working tree and separated by a single NUL.
+#
+# To enable this hook, rename this file to "query-watchman" and set
+# 'git config core.fsmonitor .git/hooks/query-watchman'
+#
+my ($version, $time) = @ARGV;
+
+# Check the hook interface version
+
+if ($version == 1) {
+ # convert nanoseconds to seconds
+ $time = int $time / 1000000000;
+} else {
+ die "Unsupported query-fsmonitor hook version '$version'.\n" .
+ "Falling back to scanning...\n";
+}
+
+my $git_work_tree;
+if ($^O =~ 'msys' || $^O =~ 'cygwin') {
+ $git_work_tree = Win32::GetCwd();
+ $git_work_tree =~ tr/\\/\//;
+} else {
+ require Cwd;
+ $git_work_tree = Cwd::cwd();
+}
+
+my $retry = 1;
+
+launch_watchman();
+
+sub launch_watchman {
+
+ my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty')
+ or die "open2() failed: $!\n" .
+ "Falling back to scanning...\n";
+
+ # In the query expression below we're asking for names of files that
+ # changed since $time but were not transient (ie created after
+ # $time but no longer exist).
+ #
+ # To accomplish this, we're using the "since" generator to use the
+ # recency index to select candidate nodes and "fields" to limit the
+ # output to file names only. Then we're using the "expression" term to
+ # further constrain the results.
+ #
+ # The category of transient files that we want to ignore will have a
+ # creation clock (cclock) newer than $time_t value and will also not
+ # currently exist.
+
+ my $query = <<" END";
+ ["query", "$git_work_tree", {
+ "since": $time,
+ "fields": ["name"],
+ "expression": ["not", ["allof", ["since", $time, "cclock"], ["not", "exists"]]]
+ }]
+ END
+
+ print CHLD_IN $query;
+ close CHLD_IN;
+ my $response = do {local $/; };
+
+ die "Watchman: command returned no output.\n" .
+ "Falling back to scanning...\n" if $response eq "";
+ die "Watchman: command returned invalid output: $response\n" .
+ "Falling back to scanning...\n" unless $response =~ /^\{/;
+
+ my $json_pkg;
+ eval {
+ require JSON::XS;
+ $json_pkg = "JSON::XS";
+ 1;
+ } or do {
+ require JSON::PP;
+ $json_pkg = "JSON::PP";
+ };
+
+ my $o = $json_pkg->new->utf8->decode($response);
+
+ if ($retry > 0 and $o->{error} and $o->{error} =~ m/unable to resolve root .* directory (.*) is not watched/) {
+ print STDERR "Adding '$git_work_tree' to watchman's watch list.\n";
+ $retry--;
+ qx/watchman watch "$git_work_tree"/;
+ die "Failed to make watchman watch '$git_work_tree'.\n" .
+ "Falling back to scanning...\n" if $? != 0;
+
+ # Watchman will always return all files on the first query so
+ # return the fast "everything is dirty" flag to git and do the
+ # Watchman query just to get it over with now so we won't pay
+ # the cost in git to look up each individual file.
+ print "/\0";
+ eval { launch_watchman() };
+ exit 0;
+ }
+
+ die "Watchman: $o->{error}.\n" .
+ "Falling back to scanning...\n" if $o->{error};
+
+ binmode STDOUT, ":utf8";
+ local $, = "\0";
+ print @{$o->{files}};
+}
diff -Nru synthv1-0.8.6/.git/hooks/post-update.sample synthv1-0.9.10+git20190929/.git/hooks/post-update.sample
--- synthv1-0.8.6/.git/hooks/post-update.sample 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/hooks/post-update.sample 2019-09-28 23:00:02.000000000 +0000
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, rename this file to "post-update".
+
+exec git update-server-info
diff -Nru synthv1-0.8.6/.git/hooks/pre-applypatch.sample synthv1-0.9.10+git20190929/.git/hooks/pre-applypatch.sample
--- synthv1-0.8.6/.git/hooks/pre-applypatch.sample 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/hooks/pre-applypatch.sample 2019-09-28 23:00:02.000000000 +0000
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-applypatch".
+
+. git-sh-setup
+precommit="$(git rev-parse --git-path hooks/pre-commit)"
+test -x "$precommit" && exec "$precommit" ${1+"$@"}
+:
diff -Nru synthv1-0.8.6/.git/hooks/pre-commit.sample synthv1-0.9.10+git20190929/.git/hooks/pre-commit.sample
--- synthv1-0.8.6/.git/hooks/pre-commit.sample 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/hooks/pre-commit.sample 2019-09-28 23:00:02.000000000 +0000
@@ -0,0 +1,49 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments. The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-commit".
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+ against=HEAD
+else
+ # Initial commit: diff against an empty tree object
+ against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# If you want to allow non-ASCII filenames set this variable to true.
+allownonascii=$(git config --bool hooks.allownonascii)
+
+# Redirect output to stderr.
+exec 1>&2
+
+# Cross platform projects tend to avoid non-ASCII filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if [ "$allownonascii" != "true" ] &&
+ # Note that the use of brackets around a tr range is ok here, (it's
+ # even required, for portability to Solaris 10's /usr/bin/tr), since
+ # the square bracket bytes happen to fall in the designated range.
+ test $(git diff --cached --name-only --diff-filter=A -z $against |
+ LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
+then
+ cat <<\EOF
+Error: Attempt to add a non-ASCII file name.
+
+This can cause problems if you want to work with people on other platforms.
+
+To be portable it is advisable to rename the file.
+
+If you know what you are doing you can disable this check using:
+
+ git config hooks.allownonascii true
+EOF
+ exit 1
+fi
+
+# If there are whitespace errors, print the offending file names and fail.
+exec git diff-index --check --cached $against --
diff -Nru synthv1-0.8.6/.git/hooks/prepare-commit-msg.sample synthv1-0.9.10+git20190929/.git/hooks/prepare-commit-msg.sample
--- synthv1-0.8.6/.git/hooks/prepare-commit-msg.sample 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/hooks/prepare-commit-msg.sample 2019-09-28 23:00:02.000000000 +0000
@@ -0,0 +1,42 @@
+#!/bin/sh
+#
+# An example hook script to prepare the commit log message.
+# Called by "git commit" with the name of the file that has the
+# commit message, followed by the description of the commit
+# message's source. The hook's purpose is to edit the commit
+# message file. If the hook fails with a non-zero status,
+# the commit is aborted.
+#
+# To enable this hook, rename this file to "prepare-commit-msg".
+
+# This hook includes three examples. The first one removes the
+# "# Please enter the commit message..." help message.
+#
+# The second includes the output of "git diff --name-status -r"
+# into the message, just before the "git status" output. It is
+# commented because it doesn't cope with --amend or with squashed
+# commits.
+#
+# The third example adds a Signed-off-by line to the message, that can
+# still be edited. This is rarely a good idea.
+
+COMMIT_MSG_FILE=$1
+COMMIT_SOURCE=$2
+SHA1=$3
+
+/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE"
+
+# case "$COMMIT_SOURCE,$SHA1" in
+# ,|template,)
+# /usr/bin/perl -i.bak -pe '
+# print "\n" . `git diff --cached --name-status -r`
+# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;;
+# *) ;;
+# esac
+
+# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE"
+# if test -z "$COMMIT_SOURCE"
+# then
+# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE"
+# fi
diff -Nru synthv1-0.8.6/.git/hooks/pre-push.sample synthv1-0.9.10+git20190929/.git/hooks/pre-push.sample
--- synthv1-0.8.6/.git/hooks/pre-push.sample 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/hooks/pre-push.sample 2019-09-28 23:00:02.000000000 +0000
@@ -0,0 +1,53 @@
+#!/bin/sh
+
+# An example hook script to verify what is about to be pushed. Called by "git
+# push" after it has checked the remote status, but before anything has been
+# pushed. If this script exits with a non-zero status nothing will be pushed.
+#
+# This hook is called with the following parameters:
+#
+# $1 -- Name of the remote to which the push is being done
+# $2 -- URL to which the push is being done
+#
+# If pushing without using a named remote those arguments will be equal.
+#
+# Information about the commits which are being pushed is supplied as lines to
+# the standard input in the form:
+#
+#
+#
+# This sample shows how to prevent push of commits where the log message starts
+# with "WIP" (work in progress).
+
+remote="$1"
+url="$2"
+
+z40=0000000000000000000000000000000000000000
+
+while read local_ref local_sha remote_ref remote_sha
+do
+ if [ "$local_sha" = $z40 ]
+ then
+ # Handle delete
+ :
+ else
+ if [ "$remote_sha" = $z40 ]
+ then
+ # New branch, examine all commits
+ range="$local_sha"
+ else
+ # Update to existing branch, examine new commits
+ range="$remote_sha..$local_sha"
+ fi
+
+ # Check for WIP commit
+ commit=`git rev-list -n 1 --grep '^WIP' "$range"`
+ if [ -n "$commit" ]
+ then
+ echo >&2 "Found WIP commit in $local_ref, not pushing"
+ exit 1
+ fi
+ fi
+done
+
+exit 0
diff -Nru synthv1-0.8.6/.git/hooks/pre-rebase.sample synthv1-0.9.10+git20190929/.git/hooks/pre-rebase.sample
--- synthv1-0.8.6/.git/hooks/pre-rebase.sample 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/hooks/pre-rebase.sample 2019-09-28 23:00:02.000000000 +0000
@@ -0,0 +1,169 @@
+#!/bin/sh
+#
+# Copyright (c) 2006, 2008 Junio C Hamano
+#
+# The "pre-rebase" hook is run just before "git rebase" starts doing
+# its job, and can prevent the command from running by exiting with
+# non-zero status.
+#
+# The hook is called with the following parameters:
+#
+# $1 -- the upstream the series was forked from.
+# $2 -- the branch being rebased (or empty when rebasing the current branch).
+#
+# This sample shows how to prevent topic branches that are already
+# merged to 'next' branch from getting rebased, because allowing it
+# would result in rebasing already published history.
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+ topic="refs/heads/$2"
+else
+ topic=`git symbolic-ref HEAD` ||
+ exit 0 ;# we do not interrupt rebasing detached HEAD
+fi
+
+case "$topic" in
+refs/heads/??/*)
+ ;;
+*)
+ exit 0 ;# we do not interrupt others.
+ ;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master. Is it OK to rebase it?
+
+# Does the topic really exist?
+git show-ref -q "$topic" || {
+ echo >&2 "No such branch $topic"
+ exit 1
+}
+
+# Is topic fully merged to master?
+not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+ echo >&2 "$topic is fully merged to master; better remove it."
+ exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next? If so you should not be rebasing it.
+only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git rev-list ^master ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+ not_in_topic=`git rev-list "^$topic" master`
+ if test -z "$not_in_topic"
+ then
+ echo >&2 "$topic is already up to date with master"
+ exit 1 ;# we could allow it, but there is no point.
+ else
+ exit 0
+ fi
+else
+ not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
+ /usr/bin/perl -e '
+ my $topic = $ARGV[0];
+ my $msg = "* $topic has commits already merged to public branch:\n";
+ my (%not_in_next) = map {
+ /^([0-9a-f]+) /;
+ ($1 => 1);
+ } split(/\n/, $ARGV[1]);
+ for my $elem (map {
+ /^([0-9a-f]+) (.*)$/;
+ [$1 => $2];
+ } split(/\n/, $ARGV[2])) {
+ if (!exists $not_in_next{$elem->[0]}) {
+ if ($msg) {
+ print STDERR $msg;
+ undef $msg;
+ }
+ print STDERR " $elem->[1]\n";
+ }
+ }
+ ' "$topic" "$not_in_next" "$not_in_master"
+ exit 1
+fi
+
+<<\DOC_END
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+ merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+ it is deleted. If you need to build on top of it to correct
+ earlier mistakes, a new topic branch is created by forking at
+ the tip of the "master". This is not strictly necessary, but
+ it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+ branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next". Young
+ topic branches can have stupid mistakes you would rather
+ clean up before publishing, and things that have not been
+ merged into other branches can be easily rebased without
+ affecting other people. But once it is published, you would
+ not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+ Then you can delete it. More importantly, you should not
+ build on top of it -- other people may already want to
+ change things related to the topic as patches against your
+ "master", so if you need further changes, it is better to
+ fork the topic (perhaps with the same name) afresh from the
+ tip of "master".
+
+Let's look at this example:
+
+ o---o---o---o---o---o---o---o---o---o "next"
+ / / / /
+ / a---a---b A / /
+ / / / /
+ / / c---c---c---c B /
+ / / / \ /
+ / / / b---b C \ /
+ / / / / \ /
+ ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished. It has been fully merged up to "master" and "next",
+ and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+ git rev-list ^master ^topic next
+ git rev-list ^master next
+
+ if these match, topic has not merged in next at all.
+
+To compute (2):
+
+ git rev-list master..topic
+
+ if this is empty, it is fully merged to "master".
+
+DOC_END
diff -Nru synthv1-0.8.6/.git/hooks/pre-receive.sample synthv1-0.9.10+git20190929/.git/hooks/pre-receive.sample
--- synthv1-0.8.6/.git/hooks/pre-receive.sample 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/hooks/pre-receive.sample 2019-09-28 23:00:02.000000000 +0000
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to make use of push options.
+# The example simply echoes all push options that start with 'echoback='
+# and rejects all pushes when the "reject" push option is used.
+#
+# To enable this hook, rename this file to "pre-receive".
+
+if test -n "$GIT_PUSH_OPTION_COUNT"
+then
+ i=0
+ while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"
+ do
+ eval "value=\$GIT_PUSH_OPTION_$i"
+ case "$value" in
+ echoback=*)
+ echo "echo from the pre-receive-hook: ${value#*=}" >&2
+ ;;
+ reject)
+ exit 1
+ esac
+ i=$((i + 1))
+ done
+fi
diff -Nru synthv1-0.8.6/.git/hooks/update.sample synthv1-0.9.10+git20190929/.git/hooks/update.sample
--- synthv1-0.8.6/.git/hooks/update.sample 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/hooks/update.sample 2019-09-28 23:00:02.000000000 +0000
@@ -0,0 +1,128 @@
+#!/bin/sh
+#
+# An example hook script to block unannotated tags from entering.
+# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, rename this file to "update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+# This boolean sets whether unannotated tags will be allowed into the
+# repository. By default they won't be.
+# hooks.allowdeletetag
+# This boolean sets whether deleting tags will be allowed in the
+# repository. By default they won't be.
+# hooks.allowmodifytag
+# This boolean sets whether a tag may be modified after creation. By default
+# it won't be.
+# hooks.allowdeletebranch
+# This boolean sets whether deleting branches will be allowed in the
+# repository. By default they won't be.
+# hooks.denycreatebranch
+# This boolean sets whether remotely creating branches will be denied
+# in the repository. By default this is allowed.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+ echo "Don't run this script from the command line." >&2
+ echo " (if you want, you could supply GIT_DIR then run" >&2
+ echo " $0 [ )" >&2
+ exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+ echo "usage: $0 ][ " >&2
+ exit 1
+fi
+
+# --- Config
+allowunannotated=$(git config --bool hooks.allowunannotated)
+allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
+denycreatebranch=$(git config --bool hooks.denycreatebranch)
+allowdeletetag=$(git config --bool hooks.allowdeletetag)
+allowmodifytag=$(git config --bool hooks.allowmodifytag)
+
+# check for no description
+projectdesc=$(sed -e '1q' "$GIT_DIR/description")
+case "$projectdesc" in
+"Unnamed repository"* | "")
+ echo "*** Project description file hasn't been set" >&2
+ exit 1
+ ;;
+esac
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a ref.
+zero="0000000000000000000000000000000000000000"
+if [ "$newrev" = "$zero" ]; then
+ newrev_type=delete
+else
+ newrev_type=$(git cat-file -t $newrev)
+fi
+
+case "$refname","$newrev_type" in
+ refs/tags/*,commit)
+ # un-annotated tag
+ short_refname=${refname##refs/tags/}
+ if [ "$allowunannotated" != "true" ]; then
+ echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+ echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+ exit 1
+ fi
+ ;;
+ refs/tags/*,delete)
+ # delete tag
+ if [ "$allowdeletetag" != "true" ]; then
+ echo "*** Deleting a tag is not allowed in this repository" >&2
+ exit 1
+ fi
+ ;;
+ refs/tags/*,tag)
+ # annotated tag
+ if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
+ then
+ echo "*** Tag '$refname' already exists." >&2
+ echo "*** Modifying a tag is not allowed in this repository." >&2
+ exit 1
+ fi
+ ;;
+ refs/heads/*,commit)
+ # branch
+ if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
+ echo "*** Creating a branch is not allowed in this repository" >&2
+ exit 1
+ fi
+ ;;
+ refs/heads/*,delete)
+ # delete branch
+ if [ "$allowdeletebranch" != "true" ]; then
+ echo "*** Deleting a branch is not allowed in this repository" >&2
+ exit 1
+ fi
+ ;;
+ refs/remotes/*,commit)
+ # tracking branch
+ ;;
+ refs/remotes/*,delete)
+ # delete tracking branch
+ if [ "$allowdeletebranch" != "true" ]; then
+ echo "*** Deleting a tracking branch is not allowed in this repository" >&2
+ exit 1
+ fi
+ ;;
+ *)
+ # Anything else (is there anything else?)
+ echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+ exit 1
+ ;;
+esac
+
+# --- Finished
+exit 0
Binary files /tmp/tmpgGvAob/JVd7Fr9e4v/synthv1-0.8.6/.git/index and /tmp/tmpgGvAob/CoIHCznz69/synthv1-0.9.10+git20190929/.git/index differ
diff -Nru synthv1-0.8.6/.git/info/exclude synthv1-0.9.10+git20190929/.git/info/exclude
--- synthv1-0.8.6/.git/info/exclude 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/info/exclude 2019-09-28 23:00:02.000000000 +0000
@@ -0,0 +1,6 @@
+# git ls-files --others --exclude-from=.git/info/exclude
+# Lines that start with '#' are comments.
+# For a project mostly in C, the following would be a good set of
+# exclude patterns (uncomment them if you want to use them):
+# *.[oa]
+# *~
diff -Nru synthv1-0.8.6/.git/logs/HEAD synthv1-0.9.10+git20190929/.git/logs/HEAD
--- synthv1-0.8.6/.git/logs/HEAD 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/logs/HEAD 2019-09-28 23:05:55.000000000 +0000
@@ -0,0 +1,2 @@
+0000000000000000000000000000000000000000 ae181a73118275c8daa19aa3ca608dd1c0523901 falkTX 1569711643 +0100 clone: from https://git.code.sf.net/p/synthv1/code
+ae181a73118275c8daa19aa3ca608dd1c0523901 ae64b77d7af7401fa74ef5d794c157c647fcb6ed falkTX 1569711955 +0100 checkout: moving from master to xstatic
diff -Nru synthv1-0.8.6/.git/logs/refs/heads/master synthv1-0.9.10+git20190929/.git/logs/refs/heads/master
--- synthv1-0.8.6/.git/logs/refs/heads/master 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/logs/refs/heads/master 2019-09-28 23:00:43.000000000 +0000
@@ -0,0 +1 @@
+0000000000000000000000000000000000000000 ae181a73118275c8daa19aa3ca608dd1c0523901 falkTX 1569711643 +0100 clone: from https://git.code.sf.net/p/synthv1/code
diff -Nru synthv1-0.8.6/.git/logs/refs/heads/xstatic synthv1-0.9.10+git20190929/.git/logs/refs/heads/xstatic
--- synthv1-0.8.6/.git/logs/refs/heads/xstatic 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/logs/refs/heads/xstatic 2019-09-28 23:05:55.000000000 +0000
@@ -0,0 +1 @@
+0000000000000000000000000000000000000000 ae64b77d7af7401fa74ef5d794c157c647fcb6ed falkTX 1569711955 +0100 branch: Created from refs/remotes/origin/xstatic
diff -Nru synthv1-0.8.6/.git/logs/refs/remotes/origin/HEAD synthv1-0.9.10+git20190929/.git/logs/refs/remotes/origin/HEAD
--- synthv1-0.8.6/.git/logs/refs/remotes/origin/HEAD 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/logs/refs/remotes/origin/HEAD 2019-09-28 23:00:43.000000000 +0000
@@ -0,0 +1 @@
+0000000000000000000000000000000000000000 ae181a73118275c8daa19aa3ca608dd1c0523901 falkTX 1569711643 +0100 clone: from https://git.code.sf.net/p/synthv1/code
Binary files /tmp/tmpgGvAob/JVd7Fr9e4v/synthv1-0.8.6/.git/objects/pack/pack-d0e1486dae495d11006e9d9f0a3e7537a47fd013.idx and /tmp/tmpgGvAob/CoIHCznz69/synthv1-0.9.10+git20190929/.git/objects/pack/pack-d0e1486dae495d11006e9d9f0a3e7537a47fd013.idx differ
Binary files /tmp/tmpgGvAob/JVd7Fr9e4v/synthv1-0.8.6/.git/objects/pack/pack-d0e1486dae495d11006e9d9f0a3e7537a47fd013.pack and /tmp/tmpgGvAob/CoIHCznz69/synthv1-0.9.10+git20190929/.git/objects/pack/pack-d0e1486dae495d11006e9d9f0a3e7537a47fd013.pack differ
diff -Nru synthv1-0.8.6/.git/packed-refs synthv1-0.9.10+git20190929/.git/packed-refs
--- synthv1-0.8.6/.git/packed-refs 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/packed-refs 2019-09-28 23:00:43.000000000 +0000
@@ -0,0 +1,76 @@
+# pack-refs with: peeled fully-peeled sorted
+ae181a73118275c8daa19aa3ca608dd1c0523901 refs/remotes/origin/master
+ae64b77d7af7401fa74ef5d794c157c647fcb6ed refs/remotes/origin/xstatic
+fa8c52323ae4dfbf43a901087629040a8e4205f1 refs/tags/synthv1_0_1_0
+ff9e4d51ccadf8415fe70e9553458bbc13a9b201 refs/tags/synthv1_0_1_1
+83e77f86dbbfd3949171a09320e1c269f1b86666 refs/tags/synthv1_0_2_0
+fa949d7d15ad0dadcf8bd9212e11fad2ff03eb46 refs/tags/synthv1_0_3_0
+d84837e4f167e3c50c2f25b8f3534474377bdde4 refs/tags/synthv1_0_3_1
+5f1d695f0a85d3f9fecc780e517d233f23ca8bbb refs/tags/synthv1_0_3_2
+3b3273be7dffabd6ff50f752d2d5b10918c6d21c refs/tags/synthv1_0_3_3
+95826a692da5c4bf84cb82ac8f954d35834c2009 refs/tags/synthv1_0_3_4
+7cb27aa958398fb51f458f8df327066ae6bca43b refs/tags/synthv1_0_3_5
+205bad264f815e71481d5e6f456b9af819946c60 refs/tags/synthv1_0_3_6
+90627820c065af2d708f5fdebe8c17a46ec4980b refs/tags/synthv1_0_4_0
+27accd966bd48a9a2f490c4d72a8f5a80c47c431 refs/tags/synthv1_0_4_1
+fce2c91647875acd3eb41c3ff774dd8d1e58aed0 refs/tags/synthv1_0_4_2
+6a71202210e210cbb92475fa268d3b411b86450f refs/tags/synthv1_0_5_0
+6ddc63e7c39f8675816567d39f33178cb30fe78e refs/tags/synthv1_0_5_1
+6681770760671d2dd7361def5d01ee28f115672e refs/tags/synthv1_0_6_0
+^7294eb3c916c1a4cb10615ef4ab313dd1c4b55a7
+353fc4fa151f1da8f32bce81c6831de073e39457 refs/tags/synthv1_0_6_1
+^c0f01aa941b21d056b166700ff3c52e8cee37f5a
+b13aec25d937dcccb827fefeb11f93ccc4260d71 refs/tags/synthv1_0_6_2
+^83e86a4edd5b888230ea729d956633e3f88cd663
+a53150a8b2cf4c64a249bf57befb421d97e8d928 refs/tags/synthv1_0_6_3
+^2c7249bc2a01b0986c47208fcc48f2e7a14b0337
+7bec15840983e1516a939a293cccecbe29abef97 refs/tags/synthv1_0_7_0
+^22fff36e62dff7d0dfb211dd3c332471d9972eff
+d46f8d59a187e55b08d9a5fbf9d8d580ec0de2ee refs/tags/synthv1_0_7_1
+^9d2f3e344189e33d8b802fc3cb70ef778e945bca
+ff77dc9d8619affb4e52f15dfdc2ba7d425dc004 refs/tags/synthv1_0_7_2
+^f70b7aa68529e4a548c46adce7f92158675ffcde
+3fcdd850e266eeccde7fb3d4fe488145abf7b2fd refs/tags/synthv1_0_7_3
+^cc1792806b364ab2c06a4b7b25ccff29bc2df551
+2a91be91397a41615af280361a056d41ce64e138 refs/tags/synthv1_0_7_4
+^f1031518db03f02b613790d5db9bcbc9341c4ec8
+12909558efac11b7b493ce854a6f6d64f3d5dff8 refs/tags/synthv1_0_7_5
+^5eb7fdc766b781d5210c3fa503fad465733b47d1
+ddd74b60f88ec774de812e1ca55e5f26be96dcfd refs/tags/synthv1_0_7_6
+^c8ddcf3486f8ab92a07979f4aaa47bb81ae5bf32
+557d3205baf4e0f716922f8a6269846eed5fb000 refs/tags/synthv1_0_8_0
+^192e94633fbf843011cfe3000a6e2d32d8aa4ff8
+86bcab795d0e6546da09defbbfff7422c126f743 refs/tags/synthv1_0_8_1
+^dfc154bb31cbc7912ff449434d7d40dff2a3a0dd
+4334ba3d755c7942c99f79ee6de1889024ff2503 refs/tags/synthv1_0_8_2
+^ef9559fa09a8ac2977e00581fb52b87abc9c4896
+3c3c83ca1e64c94b4384782f8edbe445dab3fc92 refs/tags/synthv1_0_8_3
+^3b032402053f64761c16d6a1e9145a0cb2503e1e
+fafe8590585618277693ffd645fe2bf1d29b5119 refs/tags/synthv1_0_8_4
+^636a79085f39d5a1db149a6d7ce9a3c5486e126b
+c916b4f61750da9e41e507e494f78d373ec3ea60 refs/tags/synthv1_0_8_5
+^4e8c077715108771afa45eebf98e6ad7fb7da2f3
+0441f12447ea6b3ff04e55053f5962d9bdea97f2 refs/tags/synthv1_0_8_6
+^fd44cfede897951f4be062fc1a5830a930a366e4
+4aed6e70a85b30ba33db4aecdbfe90f34ce5e324 refs/tags/synthv1_0_9_0
+^b1cab34df1b7b1aac83baac59f2e411bece4bf7c
+4542d9d54df26feee12197df0fa97cf33e4e5bde refs/tags/synthv1_0_9_1
+^e0e2bd88dabfe2e935306c61c5c2c8f8d1457eb4
+bb82b53135230e7247adf1d26f6eaa1559b27b2c refs/tags/synthv1_0_9_10
+^ae181a73118275c8daa19aa3ca608dd1c0523901
+c0cc5c9f8605629cb9b27c28d5d13fc883060a83 refs/tags/synthv1_0_9_2
+^ec419d9469ad3a5245dd1e76f07eb0805d7efe6e
+3a9461cf97cd9ba19b8d0b9c105f7ed074cd9f62 refs/tags/synthv1_0_9_3
+^eb28c679e0f77337229ae88225310fae6657bf0a
+067cfcf21c0e0bb1f6cfe7d21a584db18dda8756 refs/tags/synthv1_0_9_4
+^1aa5b47c51cc90228d2b6b1286e80a688a84270f
+f6540c00756989e2e671bfdc9bebc21c995affba refs/tags/synthv1_0_9_5
+^2847e4fde9bd524b6bd31590b7a7167b1c7f8088
+822a74a69493e929a60b5af65c60e60b84fc0941 refs/tags/synthv1_0_9_6
+^88952e0c0b9f182de9ba1a66787b1325b1618770
+4c58827014c6dd2dd80c8413f325320d0379cd82 refs/tags/synthv1_0_9_7
+^4c8cd2fa150ae26043f234e941df9f735f8ba802
+0c9beab7b34e2e47269d6d1df1874eca621269eb refs/tags/synthv1_0_9_8
+^d5f318980b5676f3a348b138ad71bacdfef3bf83
+8694c9983947a0a1e76d261fe4172cdd3496f0f4 refs/tags/synthv1_0_9_9
+^dfb71ad9f5d591a9c5048a52d1764f849859c2e7
diff -Nru synthv1-0.8.6/.git/refs/heads/master synthv1-0.9.10+git20190929/.git/refs/heads/master
--- synthv1-0.8.6/.git/refs/heads/master 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/refs/heads/master 2019-09-28 23:00:43.000000000 +0000
@@ -0,0 +1 @@
+ae181a73118275c8daa19aa3ca608dd1c0523901
diff -Nru synthv1-0.8.6/.git/refs/heads/xstatic synthv1-0.9.10+git20190929/.git/refs/heads/xstatic
--- synthv1-0.8.6/.git/refs/heads/xstatic 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/refs/heads/xstatic 2019-09-28 23:05:55.000000000 +0000
@@ -0,0 +1 @@
+ae64b77d7af7401fa74ef5d794c157c647fcb6ed
diff -Nru synthv1-0.8.6/.git/refs/remotes/origin/HEAD synthv1-0.9.10+git20190929/.git/refs/remotes/origin/HEAD
--- synthv1-0.8.6/.git/refs/remotes/origin/HEAD 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.git/refs/remotes/origin/HEAD 2019-09-28 23:00:43.000000000 +0000
@@ -0,0 +1 @@
+ref: refs/remotes/origin/master
diff -Nru synthv1-0.8.6/.gitignore synthv1-0.9.10+git20190929/.gitignore
--- synthv1-0.8.6/.gitignore 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.gitignore 2019-09-28 23:00:43.000000000 +0000
@@ -0,0 +1,20 @@
+Makefile
+Makefile.src_*
+config.*
+configure
+*.m4
+*.mak
+*.spec
+*.desktop
+*.pri
+*.qm
+*.o
+*.so
+*.pro.user
+*.qmake.stash
+qrc_*.cpp
+.moc_*
+.obj_*
+.ui_*
+synthv1_ui.ttl
+synthv1_jack
diff -Nru synthv1-0.8.6/Makefile.git synthv1-0.9.10+git20190929/Makefile.git
--- synthv1-0.8.6/Makefile.git 2017-12-20 07:56:50.302842973 +0000
+++ synthv1-0.9.10+git20190929/Makefile.git 2019-09-28 23:05:55.000000000 +0000
@@ -7,10 +7,11 @@
@rm -rf *.cache
clean:
- @if [ -f Makefile ]; then make clean; fi
+ @if [ -f Makefile ]; then make clean; fi || true
@rm -rvf Makefile configure config.*
@rm -rvf src/.ui_* src/.obj_* src/.moc_*
@rm -rvf src/config.* src/*.pri src/lib*.so*
+ @rm -rvf src/lib*.a src/*_plugin_import.cpp
@rm -rvf src/Makefile src/Makefile.src_* src/*.mak src/*.mak.*
@rm -rvf *.cache *.log *.status *.spec *.mak *.m4 .m4
@rm -rvf .qmake.stash src/.qmake.stash
diff -Nru synthv1-0.8.6/Makefile.in synthv1-0.9.10+git20190929/Makefile.in
--- synthv1-0.8.6/Makefile.in 2017-12-20 07:56:50.302842973 +0000
+++ synthv1-0.9.10+git20190929/Makefile.in 2019-09-28 23:00:43.000000000 +0000
@@ -20,6 +20,7 @@
src/$(name)_config.h \
src/$(name)_param.h \
src/$(name)_sched.h \
+ src/$(name)_tuning.h \
src/$(name)_programs.h \
src/$(name)_controls.h
@@ -30,32 +31,37 @@
src/$(name)_wave.cpp \
src/$(name)_param.cpp \
src/$(name)_sched.cpp \
+ src/$(name)_tuning.cpp \
src/$(name)_programs.cpp \
src/$(name)_controls.cpp
headers_ui = \
+ src/$(name_ui).h \
src/$(name)widget.h \
src/$(name)widget_env.h \
src/$(name)widget_filt.h \
+ src/$(name)widget_wave.h \
src/$(name)widget_param.h \
src/$(name)widget_preset.h \
src/$(name)widget_status.h \
- src/$(name)widget_config.h \
src/$(name)widget_programs.h \
src/$(name)widget_controls.h \
- src/$(name)widget_control.h
+ src/$(name)widget_control.h \
+ src/$(name)widget_config.h
sources_ui = \
+ src/$(name_ui).cpp \
src/$(name)widget.cpp \
src/$(name)widget_env.cpp \
src/$(name)widget_filt.cpp \
+ src/$(name)widget_wave.cpp \
src/$(name)widget_param.cpp \
src/$(name)widget_preset.cpp \
src/$(name)widget_status.cpp \
- src/$(name)widget_config.cpp \
src/$(name)widget_programs.cpp \
src/$(name)widget_controls.cpp \
- src/$(name)widget_control.cpp
+ src/$(name)widget_control.cpp \
+ src/$(name)widget_config.cpp
forms = \
src/$(name)widget.ui \
@@ -164,19 +170,19 @@
clean_core: $(name).mak
- @$(MAKE) -f $(name).mak distclean
+ @$(MAKE) -f $(name).mak distclean || true
@rm -f $(name).mak
clean_ui: $(name_ui).mak
- @$(MAKE) -f $(name_ui).mak distclean
+ @$(MAKE) -f $(name_ui).mak distclean || true
@rm -f $(name_ui).mak
clean_lv2: $(name_lv2).mak
- @$(MAKE) -f $(name_lv2).mak distclean
+ @$(MAKE) -f $(name_lv2).mak distclean || true
@rm -f $(name_lv2).mak
clean_jack: $(name_jack).mak
- @$(MAKE) -f $(name_jack).mak distclean
+ @$(MAKE) -f $(name_jack).mak distclean || true
@rm -f $(name_jack).mak
diff -Nru synthv1-0.8.6/README synthv1-0.9.10+git20190929/README
--- synthv1-0.8.6/README 2017-12-20 07:56:50.302842973 +0000
+++ synthv1-0.9.10+git20190929/README 2019-09-28 23:00:43.000000000 +0000
@@ -90,3 +90,4 @@
--
rncbc aka. Rui Nuno Capela
rncbc@rncbc.org
+http://www.rncbc.org
diff -Nru synthv1-0.8.6/README.cmake synthv1-0.9.10+git20190929/README.cmake
--- synthv1-0.8.6/README.cmake 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/README.cmake 2019-09-28 23:00:43.000000000 +0000
@@ -0,0 +1,77 @@
+What is CMake?
+==============
+
+CMake is a cross platform build system, that can be used to replace the old
+auto-tools, providing a nice building environment and advanced features.
+
+Some of these features are:
+* Out of sources build: CMake allows you to build your software into a directory
+ different to the source tree. You can safely delete the build directory and
+ all its contents once you are done.
+* Multiple generators: classic makefiles can be generated for Unix and MinGW,
+ but also Visual Studio, XCode and Eclipse CDT projects among other types.
+* Graphic front-ends for configuration and build options.
+
+More information and documentation is available at the CMake project site:
+ http://www.cmake.org
+
+CMake is free software. You can get the sources and pre-compiled packages for
+Linux and other systems at:
+ http://www.cmake.org/cmake/resources/software.html
+
+How to use it?
+==============
+
+1. You need CMake 3.1 or newer to build synthv1
+
+2. Unpack the synthv1 sources somewhere, or checkout the repository,
+ and create a build directory. For instance, using a command line shell:
+
+$ tar -xvzf Downloads/synthv1-x.y.z.tar.gz
+$ cd synthv1-x.y.z
+$ mkdir build
+
+2. Execute CMake from the build directory, providing the source directory
+ location and optionally, the build options. There are several ways.
+
+* From a command line shell:
+
+$ pwd
+synthv1-x.y.z
+$ cd build
+$ cmake -DCMAKE_BUILD_TYPE=debug ..
+
+3. Execute the build command. If you used the Makefiles generator (the default
+ in Linux and other Unix systems) then execute make, gmake, or mingw32-make.
+ If you generated a project file, use your IDE to build it.
+
+Compiling with make
+===================
+
+There are many targets available. To see a complete list of them, type:
+
+$ make help
+
+The build process usually hides the compiler command lines, to show them:
+
+$ make VERBOSE=1
+
+There is a "clean" target, but not a "distclean" one. You should use a build
+directory different to the source tree. In this case, the "distclean" target
+would be equivalent to simply removing the build directory.
+
+If something fails
+==================
+
+If there is an error message while executing CMake, this probably means that a
+required package is missing in your system. You should install the missing
+component and run CMake again.
+
+If there is an error executing the build process, after running a flawless CMake
+configuration process, this means that there may be an error in the source code,
+or in the build system, or something incompatible in 3rd party libraries.
+
+The CMake build system for synthv1 is experimental. It will take a while
+until it becomes stable and fully tested. You can help providing feedback,
+please send a report containing your problems to the synthv1 development
+mailing list, https://lists.sourceforge.net/mailman/listinfo/synthv1-devel
diff -Nru synthv1-0.8.6/src/appdata/synthv1.appdata.xml synthv1-0.9.10+git20190929/src/appdata/synthv1.appdata.xml
--- synthv1-0.8.6/src/appdata/synthv1.appdata.xml 2017-12-20 07:56:50.303842973 +0000
+++ synthv1-0.9.10+git20190929/src/appdata/synthv1.appdata.xml 2019-09-28 23:00:43.000000000 +0000
@@ -1,8 +1,8 @@
-
+
- synthv1.desktop
- GPL-2.0+
+ org.rncbc.synthv1
+ FSFAP
GPL-2.0+
synthv1
an old-school polyphonic synthesizer
@@ -13,12 +13,16 @@
pure stand-alone JACK client with JACK-session, NSM and both JACK MIDI
and ALSA MIDI input support;
LV2 instrument plugin.
- URI: http://synthv1.sourceforge.net/lv2
+ URI: http\://synthv1.sourceforge.net/lv2
]
+ synthv1.desktop
+
+ synthv1_jack
+
- http://synthv1.sourceforge.net/image/synthv1-screenshot4.png
+ http://synthv1.sourceforge.net/image/synthv1-screenshot8.png
The main window showing the application in action
@@ -31,11 +35,8 @@
LV2
Qt
- http://synthv1.sourceforge.net
- rncbc@rncbc.org
+ https://synthv1.sourceforge.io
rncbc.org
-
- HiDpiIcon
- ModernToolkit
-
+ rncbc aka. Rui Nuno Capela
+ rncbc@rncbc.org
diff -Nru synthv1-0.8.6/src/cmake_config.h.in synthv1-0.9.10+git20190929/src/cmake_config.h.in
--- synthv1-0.8.6/src/cmake_config.h.in 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/src/cmake_config.h.in 2019-09-28 23:00:43.000000000 +0000
@@ -0,0 +1,90 @@
+#ifndef CONFIG_H
+#define CONFIG_H
+
+/* Define to the full name of this package. */
+#cmakedefine PACKAGE_NAME "@PACKAGE_NAME@"
+
+/* Define to the full name and version of this package. */
+#cmakedefine PACKAGE_STRING "@PACKAGE_STRING@"
+
+/* Define to the version of this package. */
+#cmakedefine PACKAGE_VERSION "@PACKAGE_VERSION@"
+
+/* Define to the address where bug reports for this package should be sent. */
+#cmakedefine PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@"
+
+/* Define to the one symbol short name of this package. */
+#cmakedefine PACKAGE_TARNAME "@PACKAGE_TARNAME@"
+
+/* Define to the version of this package. */
+#cmakedefine CONFIG_VERSION "@CONFIG_VERSION@"
+
+/* Define to the build version of this package. */
+#cmakedefine CONFIG_BUILD_VERSION "@CONFIG_BUILD_VERSION@"
+
+/* Default installation prefix. */
+#cmakedefine CONFIG_PREFIX "@CONFIG_PREFIX@"
+
+/* Define to target installation dirs. */
+#cmakedefine CONFIG_BINDIR "@CONFIG_BINDIR@"
+#cmakedefine CONFIG_LIBDIR "@CONFIG_LIBDIR@"
+#cmakedefine CONFIG_DATADIR "@CONFIG_DATADIR@"
+#cmakedefine CONFIG_MANDIR "@CONFIG_MANDIR@"
+
+/* Define if debugging is enabled. */
+#cmakedefine CONFIG_DEBUG @CONFIG_DEBUG@
+
+/* Define to 1 if you have the header file. */
+#cmakedefine HAVE_SIGNAL_H @HAVE_SIGNAL_H@
+
+/* Define if JACK library is available. */
+#cmakedefine CONFIG_JACK @CONFIG_JACK@
+
+/* Define if ALSA MIDI support is enabled. */
+#cmakedefine CONFIG_ALSA_MIDI @CONFIG_ALSA_MIDI@
+
+/* Define if LIBLO library is available. */
+#cmakedefine CONFIG_LIBLO @CONFIG_LIBLO@
+
+/* Define if JACK session support is available. */
+#cmakedefine CONFIG_JACK_SESSION @CONFIG_JACK_SESSION@
+
+/* Define if JACK MIDI support is enabled. */
+#cmakedefine CONFIG_JACK_MIDI @CONFIG_JACK_MIDI@
+
+/* Define if LV2 plug-in build is enabled. */
+#cmakedefine CONFIG_LV2 @CONFIG_LV2@
+
+/* Define if lv2_atom_forge_object is available. */
+#cmakedefine CONFIG_LV2_ATOM_FORGE_OBJECT @CONFIG_LV2_ATOM_FORGE_OBJECT@
+
+/* Define if lv2_atom_forge_key is available. */
+#cmakedefine CONFIG_LV2_ATOM_FORGE_KEY @CONFIG_LV2_ATOM_FORGE_KEY@
+
+/* Define if LV2 X11 UI support is available. */
+#cmakedefine CONFIG_LV2_UI_X11 @CONFIG_LV2_UI_X11@
+
+/* Define if LV2 External UI extension is available. */
+#cmakedefine CONFIG_LV2_UI_EXTERNAL @CONFIG_LV2_UI_EXTERNAL@
+
+/* Define if LV2 UI Idle interface support is available. */
+#cmakedefine CONFIG_LV2_UI_IDLE @CONFIG_LV2_UI_IDLE@
+
+/* Define if LV2 UI Show interface support is available. */
+#cmakedefine CONFIG_LV2_UI_SHOW @CONFIG_LV2_UI_SHOW@
+
+/* Define if LV2 UI Resize interface support is available. */
+#cmakedefine CONFIG_LV2_UI_RESIZE @CONFIG_LV2_UI_RESIZE@
+
+/* Define if LV2 Programs extension is available. */
+#cmakedefine CONFIG_LV2_PROGRAMS @CONFIG_LV2_PROGRAMS@
+
+/* Define if LV2 Patch is supported. */
+#cmakedefine CONFIG_LV2_PATCH @CONFIG_LV2_PATCH@
+
+/* Define if NSM support is available. */
+#cmakedefine CONFIG_NSM @CONFIG_NSM@
+
+
+
+#endif /* CONFIG_H */
diff -Nru synthv1-0.8.6/src/CMakeLists.txt synthv1-0.9.10+git20190929/src/CMakeLists.txt
--- synthv1-0.8.6/src/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/src/CMakeLists.txt 2019-09-28 23:05:55.000000000 +0000
@@ -0,0 +1,194 @@
+set(NAME synthv1)
+
+include_directories (
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_BINARY_DIR}
+)
+
+configure_file (cmake_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
+
+set (HEADERS
+ synthv1.h
+ synthv1_config.h
+ synthv1_filter.h
+ synthv1_formant.h
+ synthv1_wave.h
+ synthv1_ramp.h
+ synthv1_list.h
+ synthv1_fx.h
+ synthv1_reverb.h
+ synthv1_param.h
+ synthv1_sched.h
+ synthv1_tuning.h
+ synthv1_programs.h
+ synthv1_controls.h
+)
+
+set (SOURCES
+ synthv1.cpp
+ synthv1_config.cpp
+ synthv1_formant.cpp
+ synthv1_wave.cpp
+ synthv1_param.cpp
+ synthv1_sched.cpp
+ synthv1_tuning.cpp
+ synthv1_programs.cpp
+ synthv1_controls.cpp
+)
+
+qt5_wrap_cpp (MOC_SOURCES ${HEADERS})
+
+
+set (HEADERS_UI
+ synthv1_ui.h
+ synthv1widget.h
+ synthv1widget_env.h
+ synthv1widget_filt.h
+ synthv1widget_wave.h
+ synthv1widget_param.h
+ synthv1widget_keybd.h
+ synthv1widget_preset.h
+ synthv1widget_status.h
+ synthv1widget_programs.h
+ synthv1widget_controls.h
+ synthv1widget_control.h
+ synthv1widget_config.h
+)
+
+set (SOURCES_UI
+ synthv1_ui.cpp
+ synthv1widget.cpp
+ synthv1widget_env.cpp
+ synthv1widget_filt.cpp
+ synthv1widget_wave.cpp
+ synthv1widget_param.cpp
+ synthv1widget_keybd.cpp
+ synthv1widget_preset.cpp
+ synthv1widget_status.cpp
+ synthv1widget_programs.cpp
+ synthv1widget_controls.cpp
+ synthv1widget_control.cpp
+ synthv1widget_config.cpp
+)
+
+set (FORMS_UI
+ synthv1widget.ui
+ synthv1widget_control.ui
+ synthv1widget_config.ui
+)
+
+set (RESOURCES_UI
+ synthv1.qrc
+)
+
+qt5_wrap_ui (UI_SOURCES_UI ${FORMS_UI})
+qt5_wrap_cpp (MOC_SOURCES_UI ${HEADERS_UI})
+qt5_add_resources (QRC_SOURCES_UI ${RESOURCES_UI})
+
+
+set (HEADERS_LV2
+ synthv1_lv2.h
+ synthv1_lv2ui.h
+ synthv1widget_lv2.h
+)
+
+set (SOURCES_LV2
+ synthv1_lv2.cpp
+ synthv1_lv2ui.cpp
+ synthv1widget_lv2.cpp
+)
+
+qt5_wrap_cpp (MOC_SOURCES_LV2 ${HEADERS_LV2})
+
+
+set (HEADERS_JACK
+ synthv1_nsm.h
+ synthv1_jack.h
+ synthv1widget_jack.h
+)
+
+set (SOURCES_JACK
+ synthv1_nsm.cpp
+ synthv1_jack.cpp
+ synthv1widget_jack.cpp
+)
+
+qt5_wrap_cpp (MOC_SOURCES_JACK ${HEADERS_JACK})
+
+
+add_library (${NAME} STATIC
+ ${MOC_SOURCES}
+ ${SOURCES}
+)
+
+add_library (${NAME}_ui STATIC
+ ${UI_SOURCES_UI}
+ ${MOC_SOURCES_UI}
+ ${QRC_SOURCES_UI}
+ ${SOURCES_UI}
+)
+
+add_library (${NAME}_lv2 MODULE
+ ${MOC_SOURCES_LV2}
+ ${SOURCES_LV2}
+)
+
+add_executable (${NAME}_jack
+ ${MOC_SOURCES_JACK}
+ ${SOURCES_JACK}
+)
+
+
+set_target_properties (${NAME} PROPERTIES CXX_STANDARD 11)
+set_target_properties (${NAME}_ui PROPERTIES CXX_STANDARD 11)
+set_target_properties (${NAME}_lv2 PROPERTIES CXX_STANDARD 11)
+set_target_properties (${NAME}_jack PROPERTIES CXX_STANDARD 11)
+
+target_link_libraries (${NAME} PRIVATE Qt5::Core Qt5::Xml)
+target_link_libraries (${NAME}_ui PRIVATE Qt5::Widgets ${NAME})
+target_link_libraries (${NAME}_lv2 PRIVATE Qt5::Core Qt5::Xml ${NAME})
+target_link_libraries (${NAME}_jack PRIVATE Qt5::Widgets ${NAME} ${NAME}_ui)
+
+if (CONFIG_JACK)
+ target_link_libraries (${NAME}_jack PRIVATE ${JACK_LIBRARIES})
+endif ()
+
+if (CONFIG_ALSA_MIDI)
+ target_link_libraries (${NAME}_jack PRIVATE ${ALSA_LIBRARIES})
+endif ()
+
+if (CONFIG_LIBLO)
+ target_link_libraries (${NAME}_jack PRIVATE ${LIBLO_LIBRARIES})
+endif ()
+
+
+if (UNIX AND NOT APPLE)
+ if (CONFIG_PREFIX MATCHES $ENV{HOME})
+ set (CONFIG_LV2DIR ${CONFIG_PREFIX}/.lv2)
+ else ()
+ set (CONFIG_LV2DIR ${CONFIG_LIBDIR}/lv2)
+ endif ()
+ install (FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${NAME}_lv2.so
+ RENAME ${NAME}.so
+ DESTINATION ${CONFIG_LV2DIR}/${NAME}.lv2)
+ install (FILES ${NAME}.lv2/manifest.ttl
+ ${NAME}.lv2/${NAME}.ttl
+ ${NAME}.lv2/${NAME}_ui.ttl
+ DESTINATION ${CONFIG_LV2DIR}/${NAME}.lv2)
+ install (TARGETS ${NAME}_jack RUNTIME
+ DESTINATION ${CMAKE_INSTALL_BINDIR})
+ install (FILES ${NAME}.desktop
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
+ install (FILES images/${NAME}.png
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/32x32/apps)
+ install (FILES images/${NAME}.svg
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps)
+ install (FILES appdata/${NAME}.appdata.xml
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo)
+ install (FILES mimetypes/${NAME}.xml
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages)
+ install (FILES mimetypes/application-x-${NAME}-preset.png
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/32x32/mimetypes)
+ install (FILES mimetypes/application-x-${NAME}-preset.svg
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/mimetypes)
+endif ()
diff -Nru synthv1-0.8.6/src/config.h.in synthv1-0.9.10+git20190929/src/config.h.in
--- synthv1-0.8.6/src/config.h.in 2017-12-20 07:57:10.000000000 +0000
+++ synthv1-0.9.10+git20190929/src/config.h.in 1970-01-01 00:00:00.000000000 +0000
@@ -1,148 +0,0 @@
-/* src/config.h.in. Generated from configure.ac by autoheader. */
-
-/* Define if ALSA MIDI support is enabled. */
-#undef CONFIG_ALSA_MIDI
-
-/* Default executable binary path. */
-#undef CONFIG_BINDIR
-
-/* Build version string. */
-#undef CONFIG_BUILD_VERSION
-
-/* Default arch-idependent data path. */
-#undef CONFIG_DATADIR
-
-/* Define if debugging is enabled. */
-#undef CONFIG_DEBUG
-
-/* Define if JACK library is available. */
-#undef CONFIG_JACK
-
-/* Define if JACK MIDI support is enabled. */
-#undef CONFIG_JACK_MIDI
-
-/* Define if JACK session support is available. */
-#undef CONFIG_JACK_SESSION
-
-/* Default object library path. */
-#undef CONFIG_LIBDIR
-
-/* Define if LIBLO library is available. */
-#undef CONFIG_LIBLO
-
-/* Define if LV2 plug-in build is enabled. */
-#undef CONFIG_LV2
-
-/* Define if lv2_atom_forge_key is available. */
-#undef CONFIG_LV2_ATOM_FORGE_KEY
-
-/* Define if lv2_atom_forge_object is available. */
-#undef CONFIG_LV2_ATOM_FORGE_OBJECT
-
-/* Define if LV2 External UI extension is available. */
-#undef CONFIG_LV2_EXTERNAL_UI
-
-/* Define if LV2 Programs extension is available. */
-#undef CONFIG_LV2_PROGRAMS
-
-/* Define if LV2 UI Idle interface support is available. */
-#undef CONFIG_LV2_UI_IDLE
-
-/* Define if LV2 UI Show interface support is available. */
-#undef CONFIG_LV2_UI_SHOW
-
-/* Default man page path. */
-#undef CONFIG_MANDIR
-
-/* Define if NSM support is available. */
-#undef CONFIG_NSM
-
-/* Default installation prefix. */
-#undef CONFIG_PREFIX
-
-/* Version string. */
-#undef CONFIG_VERSION
-
-/* Define to 1 if you have the header file. */
-#undef HAVE_FCNTL_H
-
-/* Define to 1 if you have the header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if you have the `m' library (-lm). */
-#undef HAVE_LIBM
-
-/* Define to 1 if you have the `X11' library (-lX11). */
-#undef HAVE_LIBX11
-
-/* Define to 1 if you have the `Xext' library (-lXext). */
-#undef HAVE_LIBXEXT
-
-/* Define to 1 if you have the header file. */
-#undef HAVE_LV2_H
-
-/* Define to 1 if you have the header
- file. */
-#undef HAVE_LV2_LV2PLUG_IN_NS_EXT_ATOM_ATOM_H
-
-/* Define to 1 if you have the header
- file. */
-#undef HAVE_LV2_LV2PLUG_IN_NS_EXT_ATOM_FORGE_H
-
-/* Define to 1 if you have the header
- file. */
-#undef HAVE_LV2_LV2PLUG_IN_NS_EXT_ATOM_UTIL_H
-
-/* Define to 1 if you have the header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if you have the header file. */
-#undef HAVE_SIGNAL_H
-
-/* Define to 1 if you have the header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the header file. */
-#undef HAVE_SYS_IOCTL_H
-
-/* Define to 1 if you have the header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have that is POSIX.1 compatible. */
-#undef HAVE_SYS_WAIT_H
-
-/* Define to 1 if you have the header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the home page for this package. */
-#undef PACKAGE_URL
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
Binary files /tmp/tmpgGvAob/JVd7Fr9e4v/synthv1-0.8.6/src/images/fileOpen.png and /tmp/tmpgGvAob/CoIHCznz69/synthv1-0.9.10+git20190929/src/images/fileOpen.png differ
diff -Nru synthv1-0.8.6/src/src_core.pro synthv1-0.9.10+git20190929/src/src_core.pro
--- synthv1-0.8.6/src/src_core.pro 2017-12-20 07:56:50.307842973 +0000
+++ synthv1-0.9.10+git20190929/src/src_core.pro 2019-09-28 23:05:55.000000000 +0000
@@ -4,7 +4,7 @@
TARGET = $${NAME}
TEMPLATE = lib
-CONFIG += shared
+CONFIG += static
include(src_core.pri)
@@ -21,6 +21,7 @@
synthv1_reverb.h \
synthv1_param.h \
synthv1_sched.h \
+ synthv1_tuning.h \
synthv1_programs.h \
synthv1_controls.h
@@ -31,6 +32,7 @@
synthv1_wave.cpp \
synthv1_param.cpp \
synthv1_sched.cpp \
+ synthv1_tuning.cpp \
synthv1_programs.cpp \
synthv1_controls.cpp
diff -Nru synthv1-0.8.6/src/src_jack.pro synthv1-0.9.10+git20190929/src/src_jack.pro
--- synthv1-0.8.6/src/src_jack.pro 2017-12-20 07:56:50.307842973 +0000
+++ synthv1-0.9.10+git20190929/src/src_jack.pro 2019-09-28 23:44:23.000000000 +0000
@@ -5,6 +5,7 @@
TARGET = $${NAME}_jack
TEMPLATE = app
LIBS += -L.
+LIBS += -l$${NAME} -l$${NAME}_ui
include(src_jack.pri)
@@ -74,13 +75,6 @@
mimetypes_scalable.path = $${DATADIR}/icons/hicolor/scalable/mimetypes
mimetypes_scalable.files += mimetypes/application-x-$${NAME}-preset.svg
-
- LIBS += -l$${NAME} -l$${NAME}_ui -Wl,-rpath,$${LIBDIR}
}
-QT += xml
-
-# QT5 support
-!lessThan(QT_MAJOR_VERSION, 5) {
- QT += widgets
-}
+QT += widgets xml
diff -Nru synthv1-0.8.6/src/src_lv2.pro synthv1-0.9.10+git20190929/src/src_lv2.pro
--- synthv1-0.8.6/src/src_lv2.pro 2017-12-20 07:56:50.307842973 +0000
+++ synthv1-0.9.10+git20190929/src/src_lv2.pro 2019-09-28 23:44:15.000000000 +0000
@@ -6,15 +6,20 @@
TEMPLATE = lib
CONFIG += shared plugin
LIBS += -L.
+LIBS += -l$${NAME} -l$${NAME}_ui
include(src_lv2.pri)
HEADERS = \
config.h \
- synthv1_lv2.h
+ synthv1_lv2.h \
+ synthv1_lv2ui.h \
+ synthv1widget_lv2.h
SOURCES = \
- synthv1_lv2.cpp
+ synthv1_lv2.cpp \
+ synthv1_lv2ui.cpp \
+ synthv1widget_lv2.cpp
unix {
@@ -48,19 +53,19 @@
system(touch $${TARGET_LV2}.so)
}
+ TARGET_LV2UI = $${NAME}.lv2/$${NAME}_ui
+
INSTALLS += target
target.path = $${LV2DIR}/$${NAME}.lv2
target.files = $${TARGET_LV2}.so \
$${TARGET_LV2}.ttl \
+ $${TARGET_LV2UI}.ttl \
$${NAME}.lv2/manifest.ttl
QMAKE_POST_LINK += $${QMAKE_COPY} -vp $(TARGET) $${TARGET_LV2}.so
QMAKE_CLEAN += $${TARGET_LV2}.so
-
- LIBS += -l$${NAME} -Wl,-rpath,$${LIBDIR}
}
-QT -= gui
-QT += xml
+QT += widgets xml
diff -Nru synthv1-0.8.6/src/src_lv2ui.pro synthv1-0.9.10+git20190929/src/src_lv2ui.pro
--- synthv1-0.8.6/src/src_lv2ui.pro 2017-12-20 07:56:50.307842973 +0000
+++ synthv1-0.9.10+git20190929/src/src_lv2ui.pro 1970-01-01 00:00:00.000000000 +0000
@@ -1,82 +0,0 @@
-# synthv1_lv2ui.pro
-#
-NAME = synthv1
-
-TARGET = $${NAME}_lv2ui
-TEMPLATE = lib
-CONFIG += shared plugin
-LIBS += -L.
-
-include(src_lv2.pri)
-
-HEADERS = \
- config.h \
- synthv1_lv2ui.h \
- synthv1widget_lv2.h
-
-SOURCES = \
- synthv1_lv2ui.cpp \
- synthv1widget_lv2.cpp
-
-
-unix {
-
- OBJECTS_DIR = .obj_lv2ui
- MOC_DIR = .moc_lv2ui
- UI_DIR = .ui_lv2ui
-
- isEmpty(PREFIX) {
- PREFIX = /usr/local
- }
-
- isEmpty(LIBDIR) {
- TARGET_ARCH = $$system(uname -m)
- contains(TARGET_ARCH, x86_64) {
- LIBDIR = $${PREFIX}/lib64
- } else {
- LIBDIR = $${PREFIX}/lib
- }
- }
-
- contains(PREFIX, $$system(echo $HOME)) {
- LV2DIR = $${PREFIX}/.lv2
- } else {
- LV2DIR = $${LIBDIR}/lv2
- }
-
- TARGET_LV2UI = $${NAME}.lv2/$${NAME}_ui
-
- !exists($${TARGET_LV2UI}.so) {
- system(touch $${TARGET_LV2UI}.so)
- }
-
- !exists($${TARGET_LV2UI}.ttl) {
- system(touch $${TARGET_LV2UI}.ttl)
- }
-
- INSTALLS += target
-
- target.path = $${LV2DIR}/$${NAME}.lv2
- target.files = $${TARGET_LV2UI}.so $${TARGET_LV2UI}.ttl
-
- QMAKE_POST_LINK += $${QMAKE_COPY} -vp $(TARGET) $${TARGET_LV2UI}.so
-
- greaterThan(QT_MAJOR_VERSION, 4) {
- QMAKE_POST_LINK += ;\
- $${QMAKE_COPY} -vp $${TARGET_LV2UI}-qt5.ttl $${TARGET_LV2UI}.ttl
- } else {
- QMAKE_POST_LINK += ;\
- $${QMAKE_COPY} -vp $${TARGET_LV2UI}-qt4.ttl $${TARGET_LV2UI}.ttl
- }
-
- QMAKE_CLEAN += $${TARGET_LV2UI}.so $${TARGET_LV2UI}.ttl
-
- LIBS += -l$${NAME} -l$${NAME}_ui -L$${NAME}.lv2 -Wl,-rpath,$${LIBDIR}:$${LV2DIR}/$${NAME}.lv2
-}
-
-QT += xml
-
-# QT5 support
-greaterThan(QT_MAJOR_VERSION, 4) {
- QT += widgets
-}
diff -Nru synthv1-0.8.6/src/src_ui.pro synthv1-0.9.10+git20190929/src/src_ui.pro
--- synthv1-0.8.6/src/src_ui.pro 2017-12-20 07:56:50.307842973 +0000
+++ synthv1-0.9.10+git20190929/src/src_ui.pro 2019-09-28 23:05:55.000000000 +0000
@@ -4,7 +4,7 @@
TARGET = $${NAME}_ui
TEMPLATE = lib
-CONFIG += shared
+CONFIG += static
LIBS += -L.
include(src_ui.pri)
@@ -17,6 +17,7 @@
synthv1widget_filt.h \
synthv1widget_wave.h \
synthv1widget_param.h \
+ synthv1widget_keybd.h \
synthv1widget_preset.h \
synthv1widget_status.h \
synthv1widget_programs.h \
@@ -31,6 +32,7 @@
synthv1widget_filt.cpp \
synthv1widget_wave.cpp \
synthv1widget_param.cpp \
+ synthv1widget_keybd.cpp \
synthv1widget_preset.cpp \
synthv1widget_status.cpp \
synthv1widget_programs.cpp \
@@ -69,12 +71,7 @@
target.path = $${LIBDIR}
- LIBS += -l$${NAME} -Wl,-rpath,$${LIBDIR}
+ LIBS += -l$${NAME}
}
-QT += xml
-
-# QT5 support
-greaterThan(QT_MAJOR_VERSION, 4) {
- QT += widgets
-}
+QT += widgets xml
diff -Nru synthv1-0.8.6/src/synthv1_config.cpp synthv1-0.9.10+git20190929/src/synthv1_config.cpp
--- synthv1-0.8.6/src/synthv1_config.cpp 2017-12-20 07:56:50.308842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_config.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_config.cpp
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -32,7 +32,7 @@
//
// Singleton instance accessor (static).
-synthv1_config *synthv1_config::g_pSettings = NULL;
+synthv1_config *synthv1_config::g_pSettings = nullptr;
synthv1_config *synthv1_config::getInstance (void)
{
@@ -55,7 +55,7 @@
{
save();
- g_pSettings = NULL;
+ g_pSettings = nullptr;
}
@@ -311,6 +311,7 @@
sPresetDir = QSettings::value("/PresetDir").toString();
iKnobDialMode = QSettings::value("/KnobDialMode", 0).toInt();
iKnobEditMode = QSettings::value("/KnobEditMode", 0).toInt();
+ fRandomizePercent = QSettings::value("/RandomizePercent", 20.0f).toFloat();
bControlsEnabled = QSettings::value("/ControlsEnabled", false).toBool();
bProgramsEnabled = QSettings::value("/ProgramsEnabled", false).toBool();
QSettings::endGroup();
@@ -325,6 +326,17 @@
QSettings::beginGroup("/Custom");
sCustomStyleTheme = QSettings::value("/StyleTheme").toString();
QSettings::endGroup();
+
+ // Micro-tuning options.
+ QSettings::beginGroup("/Tuning");
+ bTuningEnabled = QSettings::value("/Enabled", false).toBool();
+ fTuningRefPitch = float(QSettings::value("/RefPitch", 440.0).toDouble());
+ iTuningRefNote = QSettings::value("/RefNote", 69).toInt();
+ sTuningScaleDir = QSettings::value("/ScaleDir").toString();
+ sTuningScaleFile = QSettings::value("/ScaleFile").toString();
+ sTuningKeyMapDir = QSettings::value("/KeyMapDir").toString();
+ sTuningKeyMapFile = QSettings::value("/KeyMapFile").toString();
+ QSettings::endGroup();
}
@@ -339,6 +351,7 @@
QSettings::setValue("/PresetDir", sPresetDir);
QSettings::setValue("/KnobDialMode", iKnobDialMode);
QSettings::setValue("/KnobEditMode", iKnobEditMode);
+ QSettings::setValue("/RandomizePercent", fRandomizePercent);
QSettings::setValue("/ControlsEnabled", bControlsEnabled);
QSettings::setValue("/ProgramsEnabled", bProgramsEnabled);
QSettings::endGroup();
@@ -352,6 +365,17 @@
QSettings::setValue("/StyleTheme", sCustomStyleTheme);
QSettings::endGroup();
+ // Micro-tuning options.
+ QSettings::beginGroup("/Tuning");
+ QSettings::setValue("/Enabled", bTuningEnabled);
+ QSettings::setValue("/RefPitch", double(fTuningRefPitch));
+ QSettings::setValue("/RefNote", iTuningRefNote);
+ QSettings::setValue("/ScaleDir", sTuningScaleDir);
+ QSettings::setValue("/ScaleFile", sTuningScaleFile);
+ QSettings::setValue("/KeyMapDir", sTuningKeyMapDir);
+ QSettings::setValue("/KeyMapFile", sTuningKeyMapFile);
+ QSettings::endGroup();
+
QSettings::sync();
}
diff -Nru synthv1-0.8.6/src/synthv1_config.h synthv1-0.9.10+git20190929/src/synthv1_config.h
--- synthv1-0.8.6/src/synthv1_config.h 2017-12-20 07:56:50.308842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_config.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_config.h
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -27,8 +27,8 @@
#define SYNTHV1_TITLE PACKAGE_NAME
#define SYNTHV1_SUBTITLE "an old-school polyphonic synthesizer."
-#define SYNTHV1_WEBSITE "http://synthv1.sourceforge.net"
-#define SYNTHV1_COPYRIGHT "Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved."
+#define SYNTHV1_WEBSITE "https://synthv1.sourceforge.io"
+#define SYNTHV1_COPYRIGHT "Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved."
#define SYNTHV1_DOMAIN "rncbc.org"
@@ -63,6 +63,9 @@
int iKnobDialMode;
int iKnobEditMode;
+ // Default randomize factor (percent).
+ float fRandomizePercent;
+
// Special persistent options.
bool bControlsEnabled;
bool bProgramsEnabled;
@@ -74,6 +77,15 @@
// Custom widget style theme.
QString sCustomStyleTheme;
+ // Micro-tuning options.
+ bool bTuningEnabled;
+ float fTuningRefPitch;
+ int iTuningRefNote;
+ QString sTuningScaleDir;
+ QString sTuningScaleFile;
+ QString sTuningKeyMapDir;
+ QString sTuningKeyMapFile;
+
// Singleton instance accessor.
static synthv1_config *getInstance();
diff -Nru synthv1-0.8.6/src/synthv1_controls.cpp synthv1-0.9.10+git20190929/src/synthv1_controls.cpp
--- synthv1-0.8.6/src/synthv1_controls.cpp 2017-12-20 07:56:50.309842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_controls.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_controls.cpp
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -23,6 +23,8 @@
#include
+#include
+
#define RPN_MSB 0x65
#define RPN_LSB 0x64
@@ -216,15 +218,21 @@
synthv1_controls::Event *old_events = m_events;
if (old_events) {
if (m_write > m_read) {
- ::memcpy(new_events + m_read, old_events + m_read,
+ ::memcpy(
+ (void *) (new_events + m_read),
+ (void *) (old_events + m_read),
(m_write - m_read) * sizeof(synthv1_controls::Event));
}
else
if (m_write < m_read) {
- ::memcpy(new_events + m_read, old_events + m_read,
+ ::memcpy(
+ (void *) (new_events + m_read),
+ (void *) (old_events + m_read),
(old_size - m_read) * sizeof(synthv1_controls::Event));
if (m_write > 0) {
- ::memcpy(new_events + old_size, old_events,
+ ::memcpy(
+ (void *) (new_events + old_size),
+ (void *) (old_events),
m_write * sizeof(synthv1_controls::Event));
}
m_write += old_size;
@@ -334,7 +342,7 @@
xrpn_item& item = get_item(channel);
if (item.is_any() && item.type() != synthv1_controls::RPN)
enqueue(item);
- if (item.is_status() // RPN NULL [MSB]
+ if (item.is_status() // RPN nullptr [MSB]
&& item.type() == synthv1_controls::RPN && item.is_param_lsb()
&& item.param_lsb() == 0x7f && event.value == 0x7f) {
item.clear();
@@ -358,7 +366,7 @@
xrpn_item& item = get_item(channel);
if (item.is_any() && item.type() != synthv1_controls::RPN)
enqueue(item);
- if (item.is_status() // RPN NULL [LSB]
+ if (item.is_status() // RPN nullptr [LSB]
&& item.type() == synthv1_controls::RPN && item.is_param_msb()
&& item.param_msb() == 0x7f && event.value == 0x7f) {
item.clear();
@@ -450,14 +458,15 @@
--m_count;
}
else
- if (item.is_param_msb() || item.is_value_msb()
- || (item.type() == synthv1_controls::CC14
+ if ((item.is_param_msb() && item.is_value_msb())
+ || (item.type() == synthv1_controls::CC14 && item.is_param_lsb()
&& item.param_lsb() != event.key.param + CC14_LSB_MIN))
enqueue(item);
if (!item.is_status()) {
item.set_status(synthv1_controls::CC14 | channel);
++m_count;
}
+ item.set_param_lsb(event.key.param + CC14_LSB_MIN);
item.set_param_msb(event.key.param);
item.set_value_msb(event.value);
if (item.is_14bit())
@@ -473,14 +482,15 @@
--m_count;
}
else
- if (item.is_param_lsb() || item.is_value_lsb()
- || (item.type() == synthv1_controls::CC14
+ if ((item.is_param_lsb() && item.is_value_lsb())
+ || (item.type() == synthv1_controls::CC14 && item.is_param_msb()
&& item.param_msb() != event.key.param - CC14_LSB_MIN))
enqueue(item);
if (!item.is_status()) {
item.set_status(synthv1_controls::CC14 | channel);
++m_count;
}
+ item.set_param_msb(event.key.param - CC14_LSB_MIN);
item.set_param_lsb(event.key.param);
item.set_value_lsb(event.value);
if (item.is_14bit())
@@ -504,16 +514,20 @@
if (item.type() == synthv1_controls::CC14) {
if (item.is_14bit()) {
m_queue.push(item.status(), item.param_msb(), item.value());
+ const unsigned char value_msb = item.value_msb();
+ item.clear_value();
+ item.set_value_msb(value_msb);
+ // --m_count;
} else {
const unsigned short status
= synthv1_controls::CC | item.channel();
- if (item.is_value_msb())
+ if (item.is_param_msb() && item.is_value_msb())
m_queue.push(status, item.param_msb(), item.value_msb());
- if (item.is_value_lsb())
+ if (item.is_param_lsb() && item.is_value_lsb())
m_queue.push(status, item.param_lsb(), item.value_lsb());
+ item.clear();
+ --m_count;
}
- item.clear();
- --m_count;
}
else
if (item.is_ready()) {
@@ -653,8 +667,8 @@
const float v0 = data.val;
const float v1 = synthv1_param::paramScale(index,
m_sched_in.instance()->paramValue(index));
- const float d1 = (v1 - fScale);
- const float d2 = (v1 - v0) * d1;
+ const float d1 = ::fabsf(v1 - fScale);
+ const float d2 = ::fabsf(v1 - v0) * d1;
bSync = (d2 < 0.001f);
if (bSync) {
data.val = fScale;
diff -Nru synthv1-0.8.6/src/synthv1_controls.h synthv1-0.9.10+git20190929/src/synthv1_controls.h
--- synthv1-0.8.6/src/synthv1_controls.h 2017-12-20 07:56:50.309842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_controls.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_controls.h
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -72,6 +72,16 @@
return (param < key.param);
}
+ // copy assignment operator.
+ Key& operator= (const Key& key)
+ {
+ if (this != &key) {
+ status = key.status;
+ param = key.param;
+ }
+ return *this;
+ }
+
unsigned short status;
unsigned short param;
};
@@ -83,9 +93,6 @@
struct Data
{
Data () : index(-1), flags(0), val(0.0f), sync(false) {}
- Data (const Data& data)
- : index(data.index), flags(data.flags),
- val(data.val), sync(data.sync) {}
int index;
int flags;
@@ -97,7 +104,6 @@
// controller events.
struct Event
-
{
Key key;
unsigned short value;
diff -Nru synthv1-0.8.6/src/synthv1.cpp synthv1-0.9.10+git20190929/src/synthv1.cpp
--- synthv1-0.8.6/src/synthv1.cpp 2017-12-20 07:56:50.308842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1.cpp
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -35,6 +35,7 @@
#include "synthv1_config.h"
#include "synthv1_controls.h"
#include "synthv1_programs.h"
+#include "synthv1_tuning.h"
#include "synthv1_sched.h"
@@ -53,8 +54,8 @@
// Copyright (C) 2007 jorgen, linux-vst.com
//
-const uint16_t MAX_VOICES = 32; // polyphony
-const uint8_t MAX_NOTES = 128;
+const uint8_t MAX_VOICES = 64; // max polyphony
+const uint8_t MAX_NOTES = 128;
const float MIN_ENV_MSECS = 0.5f; // min 500 usec per stage
const float MAX_ENV_MSECS = 5000.0f; // max 5 sec per stage (default)
@@ -66,6 +67,8 @@
const float SWEEP_SCALE = 0.5f;
const float PITCH_SCALE = 0.5f;
+const uint8_t MAX_DIRECT_NOTES = (MAX_VOICES >> 2);
+
// maximum helper
@@ -135,9 +138,14 @@
// convert note to frequency (hertz)
-inline float synthv1_freq ( float note )
+inline float synthv1_freq2 ( float delta )
+{
+ return ::powf(2.0f, delta / 12.0f);
+}
+
+inline float synthv1_freq ( int note )
{
- return (440.0f / 32.0f) * ::powf(2.0f, (note - 9.0f) / 12.0f);
+ return (440.0f / 32.0f) * synthv1_freq2(float(note - 9));
}
@@ -147,7 +155,7 @@
{
public:
- synthv1_port() : m_port(NULL), m_value(0.0f), m_vport(0.0f) {}
+ synthv1_port() : m_port(nullptr), m_value(0.0f), m_vport(0.0f) {}
virtual ~synthv1_port() {}
@@ -191,6 +199,8 @@
synthv1_port2() : m_vtick(0.0f), m_vstep(0.0f), m_nstep(0) {}
+ static const uint32_t NSTEP = 32;
+
void set_value(float value)
{
m_vtick = synthv1_port::value();
@@ -219,8 +229,6 @@
private:
- static const uint32_t NSTEP = 32;
-
float m_vtick;
float m_vstep;
uint32_t m_nstep;
@@ -396,23 +404,6 @@
};
-// internal control
-
-struct synthv1_aux
-{
- synthv1_aux() { reset(); }
-
- void reset()
- {
- panning = 0.0f;
- volume = 1.0f;
- }
-
- float panning;
- float volume;
-};
-
-
// dco
struct synthv1_dco
@@ -442,6 +433,7 @@
struct synthv1_dcf
{
+ synthv1_port enabled;
synthv1_port2 cutoff;
synthv1_port2 reso;
synthv1_port type;
@@ -453,9 +445,11 @@
// lfo
+struct synthv1_voice;
struct synthv1_lfo
{
+ synthv1_port enabled;
synthv1_port shape;
synthv1_port width;
synthv1_port2 bpm;
@@ -471,6 +465,8 @@
synthv1_port2 volume;
synthv1_env env;
+
+ synthv1_voice *psync;
};
@@ -478,9 +474,9 @@
struct synthv1_dca
{
- synthv1_port2 volume;
+ synthv1_port volume;
- synthv1_env env;
+ synthv1_env env;
};
@@ -502,10 +498,10 @@
struct synthv1_out
{
- synthv1_port2 width;
- synthv1_port2 panning;
- synthv1_port2 fxsend;
- synthv1_port2 volume;
+ synthv1_port width;
+ synthv1_port panning;
+ synthv1_port fxsend;
+ synthv1_port volume;
};
@@ -513,11 +509,11 @@
struct synthv1_cho
{
- synthv1_port2 wet;
- synthv1_port2 delay;
- synthv1_port2 feedb;
- synthv1_port2 rate;
- synthv1_port2 mod;
+ synthv1_port wet;
+ synthv1_port delay;
+ synthv1_port feedb;
+ synthv1_port rate;
+ synthv1_port mod;
};
@@ -525,10 +521,10 @@
struct synthv1_fla
{
- synthv1_port2 wet;
- synthv1_port2 delay;
- synthv1_port2 feedb;
- synthv1_port2 daft;
+ synthv1_port wet;
+ synthv1_port delay;
+ synthv1_port feedb;
+ synthv1_port daft;
};
@@ -536,11 +532,11 @@
struct synthv1_pha
{
- synthv1_port2 wet;
- synthv1_port2 rate;
- synthv1_port2 feedb;
- synthv1_port2 depth;
- synthv1_port2 daft;
+ synthv1_port wet;
+ synthv1_port rate;
+ synthv1_port feedb;
+ synthv1_port depth;
+ synthv1_port daft;
};
@@ -548,10 +544,10 @@
struct synthv1_del
{
- synthv1_port2 wet;
- synthv1_port2 delay;
- synthv1_port2 feedb;
- synthv1_port2 bpm;
+ synthv1_port wet;
+ synthv1_port delay;
+ synthv1_port feedb;
+ synthv1_port bpm;
};
@@ -559,13 +555,14 @@
struct synthv1_rev
{
- synthv1_port2 wet;
- synthv1_port2 room;
- synthv1_port2 damp;
- synthv1_port2 feedb;
- synthv1_port2 width;
+ synthv1_port wet;
+ synthv1_port room;
+ synthv1_port damp;
+ synthv1_port feedb;
+ synthv1_port width;
};
+
// dynamic(compressor/limiter)
struct synthv1_dyn
@@ -575,6 +572,20 @@
};
+// keyboard/note range
+
+struct synthv1_key
+{
+ synthv1_port low;
+ synthv1_port high;
+
+ bool is_note(int key)
+ {
+ return (key >= int(*low) && int(*high) >= key);
+ }
+};
+
+
// glide (portamento)
struct synthv1_glide
@@ -618,47 +629,45 @@
// balancing smoother (1 parameter)
-class synthv1_bal : public synthv1_ramp2
+class synthv1_bal1 : public synthv1_ramp1
{
public:
- synthv1_bal() : synthv1_ramp2(2) {}
+ synthv1_bal1() : synthv1_ramp1(2) {}
protected:
float evaluate(uint16_t i)
{
- synthv1_ramp2::update();
+ synthv1_ramp1::update();
const float wbal = 0.25f * M_PI
- * (1.0f + m_param1_v)
- * (1.0f + m_param2_v);
+ * (1.0f + m_param1_v);
- return M_SQRT2 * (i == 0 ? ::cosf(wbal) : ::sinf(wbal));
+ return M_SQRT2 * (i & 1 ? ::sinf(wbal) : ::cosf(wbal));
}
};
-// panning smoother (3 parameters)
+// balancing smoother (2 parameters)
-class synthv1_pan : public synthv1_ramp3
+class synthv1_bal2 : public synthv1_ramp2
{
public:
- synthv1_pan() : synthv1_ramp3(2) {}
+ synthv1_bal2() : synthv1_ramp2(2) {}
protected:
float evaluate(uint16_t i)
{
- synthv1_ramp3::update();
+ synthv1_ramp2::update();
- const float wpan = 0.25f * M_PI
+ const float wbal = 0.25f * M_PI
* (1.0f + m_param1_v)
- * (1.0f + m_param2_v)
- * (1.0f + m_param3_v);
+ * (1.0f + m_param2_v);
- return M_SQRT2 * (i == 0 ? ::cosf(wpan) : ::sinf(wpan));
+ return M_SQRT2 * (i & 1 ? ::sinf(wbal) : ::cosf(wbal));
}
};
@@ -724,10 +733,10 @@
float vel1, vel2; // key velocity
float pre1, pre2; // key pressure/after-touch
- synthv1_oscillator dco1_osc1, dco1_osc2; // oscillators
- synthv1_oscillator dco2_osc1, dco2_osc2;
+ synthv1_oscillator dco11, dco12; // oscillators
+ synthv1_oscillator dco21, dco22;
- synthv1_oscillator lfo1_osc, lfo2_osc; // low frequency oscillators
+ synthv1_oscillator lfo1, lfo2; // low frequency oscillators
float dco1_freq1, dco1_sample1; // frequency and phase
float dco1_freq2, dco1_sample2;
@@ -736,10 +745,10 @@
float lfo1_sample, lfo2_sample;
- synthv1_bal dco1_bal, dco2_bal; // oscillators balance
-
float dco1_balance, dco2_balance;
+ synthv1_bal2 dco1_bal, dco2_bal; // oscillators balance
+
synthv1_filter1 dcf11, dcf12, dcf21, dcf22; // filters
synthv1_filter2 dcf13, dcf14, dcf23, dcf24;
synthv1_filter3 dcf15, dcf16, dcf25, dcf26;
@@ -754,6 +763,12 @@
synthv1_pre dca1_pre, dca2_pre;
+ float out1_panning, out2_panning;
+ float out1_volume, out2_volume;
+
+ synthv1_bal1 out1_pan, out2_pan; // output panning
+ synthv1_ramp1 out1_vol, out2_vol; // output volume
+
bool sustain1, sustain2;
};
@@ -770,6 +785,8 @@
void schedule_event()
{ if (m_enabled && ++m_count < 2) schedule(-1); }
+ void schedule_note(int key, int vel)
+ { if (m_enabled) schedule((vel << 7) | key); }
void process(int) {}
@@ -790,6 +807,22 @@
};
+// micro-tuning/instance implementation
+
+class synthv1_tun
+{
+public:
+
+ synthv1_tun() : enabled(false), refPitch(440.0f), refNote(69) {}
+
+ bool enabled;
+ float refPitch;
+ int refNote;
+ QString scaleFile;
+ QString keyMapFile;
+};
+
+
// polyphonic synth implementation
class synthv1_impl
@@ -821,9 +854,27 @@
synthv1_controls *controls();
synthv1_programs *programs();
+ void setTuningEnabled(bool enabled);
+ bool isTuningEnabled() const;
+
+ void setTuningRefPitch(float refPitch);
+ float tuningRefPitch() const;
+
+ void setTuningRefNote(int refNote);
+ int tuningRefNote() const;
+
+ void setTuningScaleFile(const char *pszScaleFile);
+ const char *tuningScaleFile() const;
+
+ void setTuningKeyMapFile(const char *pszKeyMapFile);
+ const char *tuningKeyMapFile() const;
+
+ void resetTuning();
+
void process_midi(uint8_t *data, uint32_t size);
void process(float **ins, float **outs, uint32_t nframes);
+ void stabilize();
void reset();
void midiInEnabled(bool on);
@@ -831,6 +882,8 @@
void directNoteOn(int note, int vel);
+ bool running(bool on);
+
synthv1_wave dco1_wave1, dco1_wave2;
synthv1_wave dco2_wave1, dco2_wave2;
@@ -869,14 +922,21 @@
if (pv) {
m_free_list.remove(pv);
m_play_list.append(pv);
+ ++m_nvoices;
}
return pv;
}
void free_voice ( synthv1_voice *pv )
{
+ if (m_lfo1.psync == pv)
+ m_lfo1.psync = nullptr;
+ if (m_lfo2.psync == pv)
+ m_lfo2.psync = nullptr;
+
m_play_list.remove(pv);
m_free_list.append(pv);
+ --m_nvoices;
}
void alloc_sfxs(uint32_t nsize);
@@ -887,11 +947,14 @@
synthv1_controls m_controls;
synthv1_programs m_programs;
synthv1_midi_in m_midi_in;
+ synthv1_tun m_tun;
uint16_t m_nchannels;
float m_srate;
float m_bpm;
+ float m_freqs[MAX_NOTES];
+
synthv1_ctl m_ctl1, m_ctl2;
synthv1_dco m_dco1, m_dco2;
@@ -909,6 +972,8 @@
synthv1_rev m_rev;
synthv1_dyn m_dyn;
+ synthv1_key m_key;
+
synthv1_voice **m_voices;
synthv1_voice *m_note1[MAX_NOTES];
synthv1_voice *m_note2[MAX_NOTES];
@@ -916,11 +981,9 @@
synthv1_list m_free_list;
synthv1_list m_play_list;
- synthv1_aux m_aux1, m_aux2;
-
synthv1_ramp1 m_wid1, m_wid2;
- synthv1_pan m_pan1, m_pan2;
- synthv1_ramp4 m_vol1, m_vol2;
+ synthv1_bal2 m_pan1, m_pan2;
+ synthv1_ramp3 m_vol1, m_vol2;
float **m_sfxs;
uint32_t m_nsize;
@@ -932,11 +995,17 @@
synthv1_fx_comp *m_comp;
synthv1_reverb m_reverb;
- synthv1_phasor m_phasor;
- volatile int m_direct_chan;
- volatile int m_direct_note;
- volatile int m_direct_vel;
+ // process direct note on/off...
+ volatile uint16_t m_direct_note;
+
+ struct direct_note {
+ uint8_t status, note, vel;
+ } m_direct_notes[MAX_DIRECT_NOTES];
+
+ volatile int m_nvoices;
+
+ volatile bool m_running;
};
@@ -946,12 +1015,12 @@
note1(-1), note2(-1),
vel1(0.0f), vel2(0.0f),
pre1(0.0f), pre2(0.0f),
- dco1_osc1(&pImpl->dco1_wave1),
- dco1_osc2(&pImpl->dco1_wave2),
- dco2_osc1(&pImpl->dco2_wave1),
- dco2_osc2(&pImpl->dco2_wave2),
- lfo1_osc(&pImpl->lfo1_wave),
- lfo2_osc(&pImpl->lfo2_wave),
+ dco11(&pImpl->dco1_wave1),
+ dco12(&pImpl->dco1_wave2),
+ dco21(&pImpl->dco2_wave1),
+ dco22(&pImpl->dco2_wave2),
+ lfo1(&pImpl->lfo1_wave),
+ lfo2(&pImpl->lfo2_wave),
dco1_freq1(0.0f), dco1_sample1(0.0f),
dco1_freq2(0.0f), dco1_sample2(0.0f),
dco2_freq1(0.0f), dco2_sample1(0.0f),
@@ -974,7 +1043,8 @@
synthv1_impl::synthv1_impl (
synthv1 *pSynth, uint16_t nchannels, float srate )
- : m_controls(pSynth), m_programs(pSynth), m_midi_in(pSynth), m_bpm(180.0f)
+ : m_controls(pSynth), m_programs(pSynth),
+ m_midi_in(pSynth), m_bpm(180.0f), m_running(false)
{
// max env. stage length (default)
m_dco1.envtime0 = m_dco2.envtime0 = 0.0001f * MAX_ENV_MSECS;
@@ -994,23 +1064,26 @@
}
for (int note = 0; note < MAX_NOTES; ++note)
- m_note1[note] = m_note2[note] = NULL;
+ m_note1[note] = m_note2[note] = nullptr;
// local buffers none yet
- m_sfxs = NULL;
+ m_sfxs = nullptr;
m_nsize = 0;
// flangers none yet
- m_flanger = NULL;
+ m_flanger = nullptr;
// phasers none yet
- m_phaser = NULL;
+ m_phaser = nullptr;
// delays none yet
- m_delay = NULL;
+ m_delay = nullptr;
// compressors none yet
- m_comp = NULL;
+ m_comp = nullptr;
+
+ // Micro-tuning support, if any...
+ resetTuning();
// load controllers & programs database...
m_config.loadControls(&m_controls);
@@ -1025,6 +1098,8 @@
// reset all voices
allControllersOff();
allNotesOff();
+
+ running(true);
}
@@ -1059,25 +1134,25 @@
// deallocate flangers
if (m_flanger) {
delete [] m_flanger;
- m_flanger = NULL;
+ m_flanger = nullptr;
}
// deallocate phasers
if (m_phaser) {
delete [] m_phaser;
- m_phaser = NULL;
+ m_phaser = nullptr;
}
// deallocate delays
if (m_delay) {
delete [] m_delay;
- m_delay = NULL;
+ m_delay = nullptr;
}
// deallocate compressors
if (m_comp) {
delete [] m_comp;
- m_comp = NULL;
+ m_comp = nullptr;
}
}
@@ -1148,7 +1223,7 @@
for (uint16_t k = 0; k < m_nchannels; ++k)
delete [] m_sfxs[k];
delete [] m_sfxs;
- m_sfxs = NULL;
+ m_sfxs = nullptr;
m_nsize = 0;
}
@@ -1226,7 +1301,7 @@
{
static float s_fDummy = 0.0f;
- if (pfParam == NULL)
+ if (pfParam == nullptr)
pfParam = &s_fDummy;
synthv1_port *pParamPort = paramPort(index);
@@ -1244,8 +1319,7 @@
m_vol1.reset(
m_out1.volume.value_ptr(),
m_dca1.volume.value_ptr(),
- &m_ctl1.volume,
- &m_aux1.volume);
+ &m_ctl1.volume);
break;
case synthv1::OUT1_WIDTH:
m_wid1.reset(
@@ -1254,16 +1328,14 @@
case synthv1::OUT1_PANNING:
m_pan1.reset(
m_out1.panning.value_ptr(),
- &m_ctl1.panning,
- &m_aux1.panning);
+ &m_ctl1.panning);
break;
case synthv1::OUT2_VOLUME:
case synthv1::DCA2_VOLUME:
m_vol2.reset(
m_out2.volume.value_ptr(),
m_dca2.volume.value_ptr(),
- &m_ctl2.volume,
- &m_aux2.volume);
+ &m_ctl2.volume);
break;
case synthv1::OUT2_WIDTH:
m_wid2.reset(
@@ -1272,8 +1344,7 @@
case synthv1::OUT2_PANNING:
m_pan2.reset(
m_out2.panning.value_ptr(),
- &m_ctl2.panning,
- &m_aux2.panning);
+ &m_ctl2.panning);
break;
default:
break;
@@ -1283,7 +1354,7 @@
synthv1_port *synthv1_impl::paramPort ( synthv1::ParamIndex index )
{
- synthv1_port *pParamPort = NULL;
+ synthv1_port *pParamPort = nullptr;
switch (index) {
case synthv1::DCO1_SHAPE1: pParamPort = &m_dco1.shape1; break;
@@ -1302,6 +1373,7 @@
case synthv1::DCO1_TUNING: pParamPort = &m_dco1.tuning; break;
case synthv1::DCO1_GLIDE: pParamPort = &m_dco1.glide; break;
case synthv1::DCO1_ENVTIME: pParamPort = &m_dco1.envtime; break;
+ case synthv1::DCF1_ENABLED: pParamPort = &m_dcf1.enabled; break;
case synthv1::DCF1_CUTOFF: pParamPort = &m_dcf1.cutoff; break;
case synthv1::DCF1_RESO: pParamPort = &m_dcf1.reso; break;
case synthv1::DCF1_TYPE: pParamPort = &m_dcf1.type; break;
@@ -1311,6 +1383,7 @@
case synthv1::DCF1_DECAY: pParamPort = &m_dcf1.env.decay; break;
case synthv1::DCF1_SUSTAIN: pParamPort = &m_dcf1.env.sustain; break;
case synthv1::DCF1_RELEASE: pParamPort = &m_dcf1.env.release; break;
+ case synthv1::LFO1_ENABLED: pParamPort = &m_lfo1.enabled; break;
case synthv1::LFO1_SHAPE: pParamPort = &m_lfo1.shape; break;
case synthv1::LFO1_WIDTH: pParamPort = &m_lfo1.width; break;
case synthv1::LFO1_BPM: pParamPort = &m_lfo1.bpm; break;
@@ -1359,6 +1432,7 @@
case synthv1::DCO2_TUNING: pParamPort = &m_dco2.tuning; break;
case synthv1::DCO2_GLIDE: pParamPort = &m_dco2.glide; break;
case synthv1::DCO2_ENVTIME: pParamPort = &m_dco2.envtime; break;
+ case synthv1::DCF2_ENABLED: pParamPort = &m_dcf2.enabled; break;
case synthv1::DCF2_CUTOFF: pParamPort = &m_dcf2.cutoff; break;
case synthv1::DCF2_RESO: pParamPort = &m_dcf2.reso; break;
case synthv1::DCF2_TYPE: pParamPort = &m_dcf2.type; break;
@@ -1368,6 +1442,7 @@
case synthv1::DCF2_DECAY: pParamPort = &m_dcf2.env.decay; break;
case synthv1::DCF2_SUSTAIN: pParamPort = &m_dcf2.env.sustain; break;
case synthv1::DCF2_RELEASE: pParamPort = &m_dcf2.env.release; break;
+ case synthv1::LFO2_ENABLED: pParamPort = &m_lfo2.enabled; break;
case synthv1::LFO2_SHAPE: pParamPort = &m_lfo2.shape; break;
case synthv1::LFO2_WIDTH: pParamPort = &m_lfo2.width; break;
case synthv1::LFO2_BPM: pParamPort = &m_lfo2.bpm; break;
@@ -1425,6 +1500,8 @@
case synthv1::REV1_WIDTH: pParamPort = &m_rev.width; break;
case synthv1::DYN1_COMPRESS: pParamPort = &m_dyn.compress; break;
case synthv1::DYN1_LIMITER: pParamPort = &m_dyn.limiter; break;
+ case synthv1::KEY1_LOW: pParamPort = &m_key.low; break;
+ case synthv1::KEY1_HIGH: pParamPort = &m_key.high; break;
default: break;
}
@@ -1491,14 +1568,20 @@
if (++i >= size)
break;
- // channel filter
- if (!on1 && !on2)
- continue;
-
+ // channel value
const int value = (data[i] & 0x7f);
+ // channel/controller filter
+ if (!on1 && !on2) {
+ if (status == 0xb0)
+ m_controls.process_enqueue(channel, key, value);
+ continue;
+ }
+
// note on
if (status == 0x90 && value > 0) {
+ if (!m_key.is_note(key))
+ continue;
synthv1_voice *pv;
// synth 1
if (on1) {
@@ -1512,7 +1595,7 @@
m_lfo1.env.note_off_fast(&pv->lfo1_env);
m_dca1.env.note_off_fast(&pv->dca1_env);
if (++n1 > 1) { // there shall be only one
- m_note1[pv->note1] = NULL;
+ m_note1[pv->note1] = nullptr;
pv->note1 = -1;
}
}
@@ -1525,7 +1608,7 @@
m_dcf1.env.note_off_fast(&pv->dcf1_env);
m_lfo1.env.note_off_fast(&pv->lfo1_env);
m_dca1.env.note_off_fast(&pv->dca1_env);
- m_note1[pv->note1] = NULL;
+ m_note1[pv->note1] = nullptr;
pv->note1 = -1;
}
}
@@ -1541,7 +1624,7 @@
m_lfo2.env.note_off_fast(&pv->lfo2_env);
m_dca2.env.note_off_fast(&pv->dca2_env);
if (++n2 > 1) { // there shall be only one
- m_note2[pv->note2] = NULL;
+ m_note2[pv->note2] = nullptr;
pv->note2 = -1;
}
}
@@ -1554,7 +1637,7 @@
m_dcf2.env.note_off_fast(&pv->dcf2_env);
m_lfo2.env.note_off_fast(&pv->lfo2_env);
m_dca2.env.note_off_fast(&pv->dca2_env);
- m_note2[pv->note2] = NULL;
+ m_note2[pv->note2] = nullptr;
pv->note2 = -1;
}
}
@@ -1577,56 +1660,66 @@
m_def1.pressure.value_ptr(),
&m_ctl1.pressure, &pv->pre1);
// frequencies
- const float note1 = float(key)
- + *m_dco1.octave * OCTAVE_SCALE
+ const float dco1_tuning
+ = *m_dco1.octave * OCTAVE_SCALE
+ *m_dco1.tuning * TUNING_SCALE;
- const float detune1
+ const float dco1_detune
= *m_dco1.detune * DETUNE_SCALE;
+ const float dco1_freq
+ = m_freqs[key] * synthv1_freq2(dco1_tuning);
+ pv->dco1_freq1 = dco1_freq;
+ pv->dco1_freq2 = dco1_freq;
// syncs
if (*m_dco1.sync1 > 0.5f) {
- pv->dco1_freq2 = synthv1_freq(note1);
- pv->dco1_osc2.sync(&pv->dco1_osc1);
+ pv->dco12.sync(&pv->dco11);
} else {
- pv->dco1_freq2 = synthv1_freq(note1 + detune1);
- pv->dco1_osc2.sync(NULL);
+ pv->dco1_freq2 *= synthv1_freq2(+ dco1_detune);
+ pv->dco12.sync(nullptr);
}
if (*m_dco1.sync2 > 0.5f) {
- pv->dco1_freq1 = synthv1_freq(note1);
- pv->dco1_osc1.sync(&pv->dco1_osc2);
+ pv->dco11.sync(&pv->dco12);
} else {
- pv->dco1_freq1 = synthv1_freq(note1 - detune1);
- pv->dco1_osc1.sync(NULL);
+ pv->dco1_freq1 *= synthv1_freq2(- dco1_detune);
+ pv->dco11.sync(nullptr);
}
// phases
- const float phase1 = *m_dco1.phase * PHASE_SCALE;
- pv->dco1_sample1 = pv->dco1_osc1.start( 0.0f, pv->dco1_freq1);
- pv->dco1_sample2 = pv->dco1_osc2.start(phase1, pv->dco1_freq2);
+ const float dco1_phase = *m_dco1.phase * PHASE_SCALE;
+ pv->dco1_sample1 = pv->dco11.start( 0.0f, pv->dco1_freq1);
+ pv->dco1_sample2 = pv->dco12.start(dco1_phase, pv->dco1_freq2);
// filters
- const int type1 = int(*m_dcf1.type);
- pv->dcf11.reset(synthv1_filter1::Type(type1));
- pv->dcf12.reset(synthv1_filter1::Type(type1));
- pv->dcf13.reset(synthv1_filter2::Type(type1));
- pv->dcf14.reset(synthv1_filter2::Type(type1));
- pv->dcf15.reset(synthv1_filter3::Type(type1));
- pv->dcf16.reset(synthv1_filter3::Type(type1));
+ const int dcf1_type = int(*m_dcf1.type);
+ pv->dcf11.reset(synthv1_filter1::Type(dcf1_type));
+ pv->dcf12.reset(synthv1_filter1::Type(dcf1_type));
+ pv->dcf13.reset(synthv1_filter2::Type(dcf1_type));
+ pv->dcf14.reset(synthv1_filter2::Type(dcf1_type));
+ pv->dcf15.reset(synthv1_filter3::Type(dcf1_type));
+ pv->dcf16.reset(synthv1_filter3::Type(dcf1_type));
// formant filters
- const float cutoff1 = *m_dcf1.cutoff;
- const float reso1 = *m_dcf1.reso;
- pv->dcf17.reset_filters(cutoff1, reso1);
- pv->dcf18.reset_filters(cutoff1, reso1);
+ const float dcf1_cutoff = *m_dcf1.cutoff;
+ const float dcf1_reso = *m_dcf1.reso;
+ pv->dcf17.reset_filters(dcf1_cutoff, dcf1_reso);
+ pv->dcf18.reset_filters(dcf1_cutoff, dcf1_reso);
// envelopes
m_dcf1.env.start(&pv->dcf1_env);
m_lfo1.env.start(&pv->lfo1_env);
m_dca1.env.start(&pv->dca1_env);
// lfos
- const float pshift1
- = (*m_lfo1.sync > 0.0f ? m_phasor.pshift() : 0.0f);
- pv->lfo1_sample = pv->lfo1_osc.start(pshift1);
+ const float lfo1_pshift
+ = (m_lfo1.psync ? m_lfo1.psync->lfo1.pshift() : 0.0f);
+ pv->lfo1_sample = pv->lfo1.start(lfo1_pshift);
+ if (*m_lfo1.sync > 0.0f && m_lfo1.psync == nullptr)
+ m_lfo1.psync = pv;
// glides (portamento)
- const float frames1
+ const float dco1_frames
= uint32_t(*m_dco1.glide * *m_dco1.glide * m_srate);
- pv->dco1_glide1.reset(frames1, pv->dco1_freq1);
- pv->dco1_glide2.reset(frames1, pv->dco1_freq2);
+ pv->dco1_glide1.reset(dco1_frames, pv->dco1_freq1);
+ pv->dco1_glide2.reset(dco1_frames, pv->dco1_freq2);
+ // panning
+ pv->out1_panning = 0.0f;
+ pv->out1_pan.reset(&pv->out1_panning);
+ // volume
+ pv->out1_volume = 0.0f;
+ pv->out1_vol.reset(&pv->out1_volume);
// sustain
pv->sustain1 = false;
// allocated
@@ -1646,65 +1739,78 @@
m_def2.pressure.value_ptr(),
&m_ctl2.pressure, &pv->pre2);
// frequencies
- const float note2 = float(key)
- + *m_dco2.octave * OCTAVE_SCALE
+ const float dco2_tuning
+ = *m_dco2.octave * OCTAVE_SCALE
+ *m_dco2.tuning * TUNING_SCALE;
- const float detune2
+ const float dco2_detune
= *m_dco2.detune * DETUNE_SCALE;
+ const float dco2_freq
+ = m_freqs[key] * synthv1_freq2(dco2_tuning);
+ pv->dco2_freq1 = dco2_freq;
+ pv->dco2_freq2 = dco2_freq;
// syncs
if (*m_dco2.sync1 > 0.5f) {
- pv->dco2_freq2 = synthv1_freq(note2);
- pv->dco2_osc2.sync(&pv->dco2_osc1);
+ pv->dco22.sync(&pv->dco21);
} else {
- pv->dco2_freq2 = synthv1_freq(note2 + detune2);
- pv->dco2_osc2.sync(NULL);
+ pv->dco2_freq2 *= synthv1_freq2(+ dco2_detune);
+ pv->dco22.sync(nullptr);
}
if (*m_dco2.sync2 > 0.5f) {
- pv->dco2_freq1 = synthv1_freq(note2);
- pv->dco2_osc1.sync(&pv->dco2_osc2);
+ pv->dco21.sync(&pv->dco22);
} else {
- pv->dco2_freq1 = synthv1_freq(note2 - detune2);
- pv->dco2_osc1.sync(NULL);
+ pv->dco2_freq1 *= synthv1_freq2(- dco2_detune);
+ pv->dco21.sync(nullptr);
}
// phases
- const float phase2 = *m_dco2.phase * PHASE_SCALE;
- pv->dco2_sample1 = pv->dco2_osc1.start( 0.0f, pv->dco2_freq1);
- pv->dco2_sample2 = pv->dco2_osc2.start(phase2, pv->dco2_freq2);
+ const float dco2_phase = *m_dco2.phase * PHASE_SCALE;
+ pv->dco2_sample1 = pv->dco21.start( 0.0f, pv->dco2_freq1);
+ pv->dco2_sample2 = pv->dco22.start(dco2_phase, pv->dco2_freq2);
// filters
- const int type2 = int(*m_dcf2.type);
- pv->dcf21.reset(synthv1_filter1::Type(type2));
- pv->dcf22.reset(synthv1_filter1::Type(type2));
- pv->dcf23.reset(synthv1_filter2::Type(type2));
- pv->dcf24.reset(synthv1_filter2::Type(type2));
- pv->dcf25.reset(synthv1_filter3::Type(type2));
- pv->dcf26.reset(synthv1_filter3::Type(type2));
+ const int dcf2_type = int(*m_dcf2.type);
+ pv->dcf21.reset(synthv1_filter1::Type(dcf2_type));
+ pv->dcf22.reset(synthv1_filter1::Type(dcf2_type));
+ pv->dcf23.reset(synthv1_filter2::Type(dcf2_type));
+ pv->dcf24.reset(synthv1_filter2::Type(dcf2_type));
+ pv->dcf25.reset(synthv1_filter3::Type(dcf2_type));
+ pv->dcf26.reset(synthv1_filter3::Type(dcf2_type));
// formant filters
- const float cutoff2 = *m_dcf2.cutoff;
- const float reso2 = *m_dcf2.reso;
- pv->dcf27.reset_filters(cutoff2, reso2);
- pv->dcf28.reset_filters(cutoff2, reso2);
+ const float dcf2_cutoff = *m_dcf2.cutoff;
+ const float dcf2_reso = *m_dcf2.reso;
+ pv->dcf27.reset_filters(dcf2_cutoff, dcf2_reso);
+ pv->dcf28.reset_filters(dcf2_cutoff, dcf2_reso);
// envelopes
m_dcf2.env.start(&pv->dcf2_env);
m_lfo2.env.start(&pv->lfo2_env);
m_dca2.env.start(&pv->dca2_env);
// lfos
- const float pshift2
- = (*m_lfo2.sync > 0.0f ? m_phasor.pshift() : 0.0f);
- pv->lfo2_sample = pv->lfo2_osc.start(pshift2);
+ const float lfo2_pshift
+ = (m_lfo2.psync ? m_lfo2.psync->lfo2.pshift() : 0.0f);
+ pv->lfo2_sample = pv->lfo2.start(lfo2_pshift);
+ if (*m_lfo2.sync > 0.0f && m_lfo2.psync == nullptr)
+ m_lfo2.psync = pv;
// glides (portamento)
- const float frames2
+ const float dco2_frames
= uint32_t(*m_dco2.glide * *m_dco2.glide * m_srate);
- pv->dco2_glide1.reset(frames2, pv->dco2_freq1);
- pv->dco2_glide2.reset(frames2, pv->dco2_freq2);
+ pv->dco2_glide1.reset(dco2_frames, pv->dco2_freq1);
+ pv->dco2_glide2.reset(dco2_frames, pv->dco2_freq2);
// sustain
pv->sustain2 = false;
+ // panning
+ pv->out2_panning = 0.0f;
+ pv->out2_pan.reset(&pv->out2_panning);
+ // volume
+ pv->out2_volume = 0.0f;
+ pv->out2_vol.reset(&pv->out2_volume);
// allocated
m_note2[key] = pv;
}
}
+ m_midi_in.schedule_note(key, value);
}
// note off
else if (status == 0x80 || (status == 0x90 && value == 0)) {
+ if (!m_key.is_note(key))
+ continue;
synthv1_voice *pv;
// synth 1
if (on1) {
@@ -1718,7 +1824,7 @@
m_dcf1.env.note_off(&pv->dcf1_env);
m_lfo1.env.note_off(&pv->lfo1_env);
}
- m_note1[pv->note1] = NULL;
+ m_note1[pv->note1] = nullptr;
pv->note1 = -1;
// mono legato?
if (*m_def1.mono > 0.0f) {
@@ -1746,7 +1852,7 @@
m_dcf2.env.note_off(&pv->dcf2_env);
m_lfo2.env.note_off(&pv->lfo2_env);
}
- m_note2[pv->note2] = NULL;
+ m_note2[pv->note2] = nullptr;
pv->note2 = -1;
// mono legato?
if (*m_def2.mono > 0.0f) {
@@ -1762,9 +1868,12 @@
}
}
}
+ m_midi_in.schedule_note(key, 0);
}
// key pressure/poly.aftertouch
else if (status == 0xa0) {
+ if (!m_key.is_note(key))
+ continue;
const float pre = float(value) / 127.0f;
synthv1_voice *pv;
// synth 1
@@ -1849,7 +1958,6 @@
if (on1) m_ctl1.pitchbend = synthv1_pow2f(*m_def1.pitchbend * pitchbend);
if (on2) m_ctl2.pitchbend = synthv1_pow2f(*m_def2.pitchbend * pitchbend);
}
-
}
// process pending controllers...
@@ -1886,9 +1994,9 @@
synthv1_voice *pv = m_play_list.next();
while (pv) {
if (pv->note1 >= 0)
- m_note1[pv->note1] = NULL;
+ m_note1[pv->note1] = nullptr;
if (pv->note2 >= 0)
- m_note2[pv->note2] = NULL;
+ m_note2[pv->note2] = nullptr;
free_voice(pv);
pv = m_play_list.next();
}
@@ -1898,10 +2006,10 @@
dco2_last1 = 0.0f;
dco2_last2 = 0.0f;
- m_aux1.reset();
- m_aux2.reset();
+ m_lfo1.psync = nullptr;
+ m_lfo2.psync = nullptr;
- m_direct_chan = m_direct_note = m_direct_vel = -1;
+ m_direct_note = 0;
}
void synthv1_impl::allNotesOff_1 (void)
@@ -1912,7 +2020,7 @@
m_dca1.env.note_off_fast(&pv->dca1_env);
m_dcf1.env.note_off_fast(&pv->dcf1_env);
m_lfo1.env.note_off_fast(&pv->lfo1_env);
- m_note1[pv->note1] = NULL;
+ m_note1[pv->note1] = nullptr;
pv->note1 = -1;
}
pv = pv->next();
@@ -1920,8 +2028,6 @@
dco1_last1 = 0.0f;
dco1_last2 = 0.0f;
-
- m_aux1.reset();
}
@@ -1933,7 +2039,7 @@
m_dca2.env.note_off_fast(&pv->dca2_env);
m_dcf2.env.note_off_fast(&pv->dcf2_env);
m_lfo2.env.note_off_fast(&pv->lfo2_env);
- m_note2[pv->note2] = NULL;
+ m_note2[pv->note2] = nullptr;
pv->note2 = -1;
}
pv = pv->next();
@@ -1941,8 +2047,6 @@
dco2_last1 = 0.0f;
dco2_last2 = 0.0f;
-
- m_aux2.reset();
}
@@ -1958,7 +2062,7 @@
m_dca1.env.note_off(&pv->dca1_env);
m_dcf1.env.note_off(&pv->dcf1_env);
m_lfo1.env.note_off(&pv->lfo1_env);
- m_note1[pv->note1] = NULL;
+ m_note1[pv->note1] = nullptr;
pv->note1 = -1;
}
}
@@ -1977,7 +2081,7 @@
m_dca2.env.note_off(&pv->dca2_env);
m_dcf2.env.note_off(&pv->dcf2_env);
m_lfo2.env.note_off(&pv->lfo2_env);
- m_note2[pv->note2] = NULL;
+ m_note2[pv->note2] = nullptr;
pv->note2 = -1;
}
}
@@ -2011,14 +2115,19 @@
// direct note-on triggered on next cycle...
void synthv1_impl::directNoteOn ( int note, int vel )
{
- if (vel > 0) {
+ if (vel > 0 && m_nvoices >= MAX_DIRECT_NOTES)
+ return;
+
+ const uint32_t i = m_direct_note;
+ if (i < MAX_DIRECT_NOTES) {
const int ch1 = int(*m_def1.channel);
const int ch2 = int(*m_def2.channel);
- m_direct_chan = (ch1 > 0 ? ch1 - 1 : (ch2 > 0 ? ch2 - 1 : 0)) & 0x0f;
- m_direct_note = note;
- m_direct_vel = vel;
- } else {
- m_direct_vel = 0;
+ const int chan = (ch1 > 0 ? ch1 - 1 : (ch2 > 0 ? ch2 - 1 : 0)) & 0x0f;
+ direct_note& data = m_direct_notes[i];
+ data.status = (vel > 0 ? 0x90 : 0x80) | chan;
+ data.note = note;
+ data.vel = vel;
+ ++m_direct_note;
}
}
@@ -2039,6 +2148,113 @@
}
+// Micro-tuning support
+
+void synthv1_impl::setTuningEnabled ( bool enabled )
+{
+ m_tun.enabled = enabled;
+}
+
+bool synthv1_impl::isTuningEnabled (void) const
+{
+ return m_tun.enabled;
+}
+
+
+void synthv1_impl::setTuningRefPitch ( float refPitch )
+{
+ m_tun.refPitch = refPitch;
+}
+
+float synthv1_impl::tuningRefPitch (void) const
+{
+ return m_tun.refPitch;
+}
+
+
+void synthv1_impl::setTuningRefNote ( int refNote )
+{
+ m_tun.refNote = refNote;
+}
+
+int synthv1_impl::tuningRefNote (void) const
+{
+ return m_tun.refNote;
+}
+
+
+void synthv1_impl::setTuningScaleFile ( const char *pszScaleFile )
+{
+ m_tun.scaleFile = QString::fromUtf8(pszScaleFile);
+}
+
+const char *synthv1_impl::tuningScaleFile (void) const
+{
+ return m_tun.scaleFile.toUtf8().constData();
+}
+
+
+void synthv1_impl::setTuningKeyMapFile ( const char *pszKeyMapFile )
+{
+ m_tun.keyMapFile = QString::fromUtf8(pszKeyMapFile);
+}
+
+const char *synthv1_impl::tuningKeyMapFile (void) const
+{
+ return m_tun.keyMapFile.toUtf8().constData();
+}
+
+
+void synthv1_impl::resetTuning (void)
+{
+ if (m_tun.enabled) {
+ // Instance micro-tuning, possibly from Scala keymap and scale files...
+ synthv1_tuning tuning(
+ m_tun.refPitch,
+ m_tun.refNote);
+ if (m_tun.keyMapFile.isEmpty())
+ if (!m_tun.keyMapFile.isEmpty())
+ tuning.loadKeyMapFile(m_tun.keyMapFile);
+ if (!m_tun.scaleFile.isEmpty())
+ tuning.loadScaleFile(m_tun.scaleFile);
+ for (int note = 0; note < MAX_NOTES; ++note)
+ m_freqs[note] = tuning.noteToPitch(note);
+ // Done instance tuning.
+ }
+ else
+ if (m_config.bTuningEnabled) {
+ // Global/config micro-tuning, possibly from Scala keymap and scale files...
+ synthv1_tuning tuning(
+ m_config.fTuningRefPitch,
+ m_config.iTuningRefNote);
+ if (!m_config.sTuningKeyMapFile.isEmpty())
+ tuning.loadKeyMapFile(m_config.sTuningKeyMapFile);
+ if (!m_config.sTuningScaleFile.isEmpty())
+ tuning.loadScaleFile(m_config.sTuningScaleFile);
+ for (int note = 0; note < MAX_NOTES; ++note)
+ m_freqs[note] = tuning.noteToPitch(note);
+ // Done global/config tuning.
+ } else {
+ // Native/default tuning, 12-tone equal temperament western standard...
+ for (int note = 0; note < MAX_NOTES; ++note)
+ m_freqs[note] = synthv1_freq(note);
+ // Done native/default tuning.
+ }
+}
+
+
+// all stabilize
+
+void synthv1_impl::stabilize (void)
+{
+ for (int i = 0; i < synthv1::NUM_PARAMS; ++i) {
+ synthv1_port *pParamPort = paramPort(synthv1::ParamIndex(i));
+ if (pParamPort)
+ pParamPort->tick(synthv1_port2::NSTEP);
+ }
+}
+
+
// all reset clear
void synthv1_impl::reset (void)
@@ -2046,40 +2262,37 @@
m_vol1.reset(
m_out1.volume.value_ptr(),
m_dca1.volume.value_ptr(),
- &m_ctl1.volume, &m_aux1.volume);
+ &m_ctl1.volume);
m_pan1.reset(
m_out1.panning.value_ptr(),
- &m_ctl1.panning,
- &m_aux1.panning);
+ &m_ctl1.panning);
m_wid1.reset(
m_out1.width.value_ptr());
m_vol2.reset(
m_out2.volume.value_ptr(),
m_dca2.volume.value_ptr(),
- &m_ctl2.volume,
- &m_aux2.volume);
+ &m_ctl2.volume);
m_pan2.reset(
m_out2.panning.value_ptr(),
- &m_ctl2.panning,
- &m_aux2.panning);
+ &m_ctl2.panning);
m_wid2.reset(
m_out2.width.value_ptr());
-
+
// flangers
- if (m_flanger == NULL)
+ if (m_flanger == nullptr)
m_flanger = new synthv1_fx_flanger [m_nchannels];
// phasers
- if (m_phaser == NULL)
+ if (m_phaser == nullptr)
m_phaser = new synthv1_fx_phaser [m_nchannels];
// delays
- if (m_delay == NULL)
+ if (m_delay == nullptr)
m_delay = new synthv1_fx_delay [m_nchannels];
// compressors
- if (m_comp == NULL)
+ if (m_comp == nullptr)
m_comp = new synthv1_fx_comp [m_nchannels];
// reverbs
@@ -2111,6 +2324,8 @@
void synthv1_impl::process ( float **ins, float **outs, uint32_t nframes )
{
+ if (!m_running) return;
+
float *v_outs[m_nchannels];
float *v_sfxs[m_nchannels];
@@ -2120,32 +2335,34 @@
uint16_t k;
for (k = 0; k < m_nchannels; ++k) {
- ::memcpy(m_sfxs[k], ins[k], nframes * sizeof(float));
- ::memset(outs[k], 0, nframes * sizeof(float));
+ ::memset(m_sfxs[k], 0, nframes * sizeof(float));
+ ::memcpy(outs[k], ins[k], nframes * sizeof(float));
}
// process direct note on/off...
- if (m_direct_chan >= 0 && m_direct_note >= 0 && m_direct_vel >= 0) {
- struct note_data { uint8_t status, note, vel; } data;
- data.status = (m_direct_vel > 0 ? 0x90 : 0x80) | m_direct_chan;
- data.note = m_direct_note;
- data.vel = m_direct_vel;
+ while (m_direct_note > 0) {
+ const direct_note& data
+ = m_direct_notes[--m_direct_note];
process_midi((uint8_t *) &data, sizeof(data));
- if (m_direct_vel == 0) {
- m_direct_chan = -1;
- m_direct_note = -1;
- }
- m_direct_vel = -1;
}
// controls
- const float lfo1_freq
- = get_bpm(*m_lfo1.bpm) / (60.01f - *m_lfo1.rate * 60.0f);
- const float lfo2_freq
- = get_bpm(*m_lfo2.bpm) / (60.01f - *m_lfo2.rate * 60.0f);
- const float modwheel1 = m_ctl1.modwheel + PITCH_SCALE * *m_lfo1.pitch;
- const float modwheel2 = m_ctl2.modwheel + PITCH_SCALE * *m_lfo2.pitch;
+ const bool lfo1_enabled = (*m_lfo1.enabled > 0.0f);
+ const bool lfo2_enabled = (*m_lfo2.enabled > 0.0f);
+
+ const float lfo1_freq = (lfo1_enabled
+ ? get_bpm(*m_lfo1.bpm) / (60.01f - *m_lfo1.rate * 60.0f) : 0.0f);
+ const float lfo2_freq = (lfo2_enabled
+ ? get_bpm(*m_lfo2.bpm) / (60.01f - *m_lfo2.rate * 60.0f) : 0.0f);
+
+ const float modwheel1 = (lfo1_enabled
+ ? m_ctl1.modwheel + PITCH_SCALE * *m_lfo1.pitch : 0.0f);
+ const float modwheel2 = (lfo2_enabled
+ ? m_ctl2.modwheel + PITCH_SCALE * *m_lfo2.pitch : 0.0f);
+
+ const bool dcf1_enabled = (*m_dcf1.enabled > 0.0f);
+ const bool dcf2_enabled = (*m_dcf2.enabled > 0.0f);
const float fxsend1 = *m_out1.fxsend * *m_out1.fxsend;
const float fxsend2 = *m_out2.fxsend * *m_out2.fxsend;
@@ -2172,11 +2389,15 @@
dco2_wave2.reset_test(
synthv1_wave::Shape(*m_dco2.shape2),
*m_dco2.width2, *m_dco2.bandl2 > 0.0f);
-
- lfo1_wave.reset_test(
- synthv1_wave::Shape(*m_lfo1.shape), *m_lfo1.width);
- lfo2_wave.reset_test(
- synthv1_wave::Shape(*m_lfo2.shape), *m_lfo2.width);
+
+ if (lfo1_enabled) {
+ lfo1_wave.reset_test(
+ synthv1_wave::Shape(*m_lfo1.shape), *m_lfo1.width);
+ }
+ if (lfo2_enabled) {
+ lfo2_wave.reset_test(
+ synthv1_wave::Shape(*m_lfo2.shape), *m_lfo2.width);
+ }
// per voice
@@ -2225,35 +2446,43 @@
// generators
- const float lfo1_env = pv->lfo1_env.tick();
- const float lfo2_env = pv->lfo2_env.tick();
-
- const float lfo1 = pv->lfo1_sample * lfo1_env;
- const float lfo2 = pv->lfo2_sample * lfo2_env;
+ const float lfo1_env
+ = (lfo1_enabled ? pv->lfo1_env.tick() : 0.0f);
+ const float lfo2_env
+ = (lfo1_enabled ? pv->lfo2_env.tick() : 0.0f);
+
+ const float lfo1
+ = (lfo1_enabled ? pv->lfo1_sample * lfo1_env : 0.0f);
+ const float lfo2
+ = (lfo2_enabled ? pv->lfo2_sample * lfo2_env : 0.0f);
const float dco11 = pv->dco1_sample1 * pv->dco1_bal.value(j, 0);
const float dco12 = pv->dco1_sample2 * pv->dco1_bal.value(j, 1);
const float dco21 = pv->dco2_sample1 * pv->dco2_bal.value(j, 0);
const float dco22 = pv->dco2_sample2 * pv->dco2_bal.value(j, 1);
- pv->dco1_sample1 = pv->dco1_osc1.sample(pv->dco1_freq1
+ pv->dco1_sample1 = pv->dco11.sample(pv->dco1_freq1
* (m_ctl1.pitchbend + modwheel1 * lfo1)
+ pv->dco1_glide1.tick());
- pv->dco1_sample2 = pv->dco1_osc2.sample(pv->dco1_freq2
+ pv->dco1_sample2 = pv->dco12.sample(pv->dco1_freq2
* (m_ctl1.pitchbend + modwheel1 * lfo1)
+ pv->dco1_glide2.tick());
- pv->dco2_sample1 = pv->dco2_osc1.sample(pv->dco2_freq1
+ pv->dco2_sample1 = pv->dco21.sample(pv->dco2_freq1
* (m_ctl2.pitchbend + modwheel2 * lfo2)
+ pv->dco2_glide1.tick());
- pv->dco2_sample2 = pv->dco2_osc2.sample(pv->dco2_freq2
+ pv->dco2_sample2 = pv->dco22.sample(pv->dco2_freq2
* (m_ctl2.pitchbend + modwheel2 * lfo2)
+ pv->dco2_glide2.tick());
- pv->lfo1_sample = pv->lfo1_osc.sample(lfo1_freq
- * (1.0f + SWEEP_SCALE * *m_lfo1.sweep * lfo1_env));
- pv->lfo2_sample = pv->lfo2_osc.sample(lfo2_freq
- * (1.0f + SWEEP_SCALE * *m_lfo2.sweep * lfo2_env));
+ if (lfo1_enabled) {
+ pv->lfo1_sample = pv->lfo1.sample(lfo1_freq
+ * (1.0f + SWEEP_SCALE * *m_lfo1.sweep * lfo1_env));
+ }
+ if (lfo2_enabled) {
+ pv->lfo2_sample = pv->lfo2.sample(lfo2_freq
+ * (1.0f + SWEEP_SCALE * *m_lfo2.sweep * lfo2_env));
+ }
// ring modulators
@@ -2269,58 +2498,60 @@
// filters
- const float env1 = 0.5f * (1.0f + vel1
- * *m_dcf1.envelope * pv->dcf1_env.tick());
- const float cutoff1 = synthv1_sigmoid_1(*m_dcf1.cutoff
- * env1 * (1.0f + *m_lfo1.cutoff * lfo1));
- const float reso1 = synthv1_sigmoid_1(*m_dcf1.reso
- * env1 * (1.0f + *m_lfo1.reso * lfo1));
-
- switch (int(*m_dcf1.slope)) {
- case 3: // Formant
- mod11 = pv->dcf17.output(mod11, cutoff1, reso1);
- mod12 = pv->dcf18.output(mod12, cutoff1, reso1);
- break;
- case 2: // Biquad
- mod11 = pv->dcf15.output(mod11, cutoff1, reso1);
- mod12 = pv->dcf16.output(mod12, cutoff1, reso1);
- break;
- case 1: // 24db/octave
- mod11 = pv->dcf13.output(mod11, cutoff1, reso1);
- mod12 = pv->dcf14.output(mod12, cutoff1, reso1);
- break;
- case 0: // 12db/octave
- default:
- mod11 = pv->dcf11.output(mod11, cutoff1, reso1);
- mod12 = pv->dcf12.output(mod12, cutoff1, reso1);
- break;
+ if (dcf1_enabled) {
+ const float env1 = 0.5f * (1.0f + vel1
+ * *m_dcf1.envelope * pv->dcf1_env.tick());
+ const float cutoff1 = synthv1_sigmoid_1(*m_dcf1.cutoff
+ * env1 * (1.0f + *m_lfo1.cutoff * lfo1));
+ const float reso1 = synthv1_sigmoid_1(*m_dcf1.reso
+ * env1 * (1.0f + *m_lfo1.reso * lfo1));
+ switch (int(*m_dcf1.slope)) {
+ case 3: // Formant
+ mod11 = pv->dcf17.output(mod11, cutoff1, reso1);
+ mod12 = pv->dcf18.output(mod12, cutoff1, reso1);
+ break;
+ case 2: // Biquad
+ mod11 = pv->dcf15.output(mod11, cutoff1, reso1);
+ mod12 = pv->dcf16.output(mod12, cutoff1, reso1);
+ break;
+ case 1: // 24db/octave
+ mod11 = pv->dcf13.output(mod11, cutoff1, reso1);
+ mod12 = pv->dcf14.output(mod12, cutoff1, reso1);
+ break;
+ case 0: // 12db/octave
+ default:
+ mod11 = pv->dcf11.output(mod11, cutoff1, reso1);
+ mod12 = pv->dcf12.output(mod12, cutoff1, reso1);
+ break;
+ }
}
- const float env2 = 0.5f * (1.0f + vel2
- * *m_dcf2.envelope * pv->dcf2_env.tick());
- const float cutoff2 = synthv1_sigmoid_1(*m_dcf2.cutoff
- * env2 * (1.0f + *m_lfo2.cutoff * lfo2));
- const float reso2 = synthv1_sigmoid_1(*m_dcf2.reso
- * env2 * (1.0f + *m_lfo2.reso * lfo2));
-
- switch (int(*m_dcf2.slope)) {
- case 3: // Formant
- mod21 = pv->dcf27.output(mod21, cutoff2, reso2);
- mod22 = pv->dcf28.output(mod22, cutoff2, reso2);
- break;
- case 2: // Biquad
- mod21 = pv->dcf25.output(mod21, cutoff2, reso2);
- mod22 = pv->dcf26.output(mod22, cutoff2, reso2);
- break;
- case 1: // 24db/octave
- mod21 = pv->dcf23.output(mod21, cutoff2, reso2);
- mod22 = pv->dcf24.output(mod22, cutoff2, reso2);
- break;
- case 0: // 12db/octave
- default:
- mod21 = pv->dcf21.output(mod21, cutoff2, reso2);
- mod22 = pv->dcf22.output(mod22, cutoff2, reso2);
- break;
+ if (dcf2_enabled) {
+ const float env2 = 0.5f * (1.0f + vel2
+ * *m_dcf2.envelope * pv->dcf2_env.tick());
+ const float cutoff2 = synthv1_sigmoid_1(*m_dcf2.cutoff
+ * env2 * (1.0f + *m_lfo2.cutoff * lfo2));
+ const float reso2 = synthv1_sigmoid_1(*m_dcf2.reso
+ * env2 * (1.0f + *m_lfo2.reso * lfo2));
+ switch (int(*m_dcf2.slope)) {
+ case 3: // Formant
+ mod21 = pv->dcf27.output(mod21, cutoff2, reso2);
+ mod22 = pv->dcf28.output(mod22, cutoff2, reso2);
+ break;
+ case 2: // Biquad
+ mod21 = pv->dcf25.output(mod21, cutoff2, reso2);
+ mod22 = pv->dcf26.output(mod22, cutoff2, reso2);
+ break;
+ case 1: // 24db/octave
+ mod21 = pv->dcf23.output(mod21, cutoff2, reso2);
+ mod22 = pv->dcf24.output(mod22, cutoff2, reso2);
+ break;
+ case 0: // 12db/octave
+ default:
+ mod21 = pv->dcf21.output(mod21, cutoff2, reso2);
+ mod22 = pv->dcf22.output(mod22, cutoff2, reso2);
+ break;
+ }
}
// volumes
@@ -2329,24 +2560,30 @@
const float mid1 = 0.5f * (mod11 + mod12);
const float sid1 = 0.5f * (mod11 - mod12);
const float vol1 = vel1 * m_vol1.value(j)
- * pv->dca1_env.tick();
+ * pv->dca1_env.tick()
+ * pv->out1_vol.value(j);
const float wid2 = m_wid2.value(j);
const float mid2 = 0.5f * (mod21 + mod22);
const float sid2 = 0.5f * (mod21 - mod22);
const float vol2 = vel2 * m_vol2.value(j)
- * pv->dca2_env.tick();
+ * pv->dca2_env.tick()
+ * pv->out2_vol.value(j);
// outputs
- const float out11
- = vol1 * (mid1 + sid1 * wid1) * m_pan1.value(j, 0);
- const float out12
- = vol1 * (mid1 - sid1 * wid1) * m_pan1.value(j, 1);
- const float out21
- = vol2 * (mid2 + sid2 * wid2) * m_pan2.value(j, 0);
- const float out22
- = vol2 * (mid2 - sid2 * wid2) * m_pan2.value(j, 1);
+ const float out11 = vol1 * (mid1 + sid1 * wid1)
+ * pv->out1_pan.value(j, 0)
+ * m_pan1.value(j, 0);
+ const float out12 = vol1 * (mid1 - sid1 * wid1)
+ * pv->out1_pan.value(j, 1)
+ * m_pan1.value(j, 1);
+ const float out21 = vol2 * (mid2 + sid2 * wid2)
+ * pv->out2_pan.value(j, 0)
+ * m_pan2.value(j, 0);
+ const float out22 = vol2 * (mid2 - sid2 * wid2)
+ * pv->out2_pan.value(j, 1)
+ * m_pan2.value(j, 1);
for (k = 0; k < m_nchannels; ++k) {
const float dry1 = (k & 1 ? out12 : out11);
@@ -2362,10 +2599,10 @@
if (j == 0) {
pv->dco1_balance = lfo1 * *m_lfo1.balance;
pv->dco2_balance = lfo2 * *m_lfo2.balance;
- m_aux1.panning = lfo1 * *m_lfo1.panning;
- m_aux1.volume = lfo1 * *m_lfo1.volume + 1.0f;
- m_aux2.panning = lfo2 * *m_lfo2.panning;
- m_aux2.volume = lfo2 * *m_lfo2.volume + 1.0f;
+ pv->out1_panning = lfo1 * *m_lfo1.panning;
+ pv->out2_panning = lfo2 * *m_lfo2.panning;
+ pv->out1_volume = lfo1 * *m_lfo1.volume + 1.0f;
+ pv->out2_volume = lfo2 * *m_lfo2.volume + 1.0f;
}
}
@@ -2379,6 +2616,12 @@
pv->dca1_pre.process(ngen);
pv->dca2_pre.process(ngen);
+ pv->out1_pan.process(ngen);
+ pv->out2_pan.process(ngen);
+
+ pv->out1_vol.process(ngen);
+ pv->out2_vol.process(ngen);
+
// envelope countdowns
if (pv->dca1_env.running && pv->dca1_env.frames == 0)
@@ -2437,27 +2680,24 @@
// output mix-down
for (k = 0; k < m_nchannels; ++k) {
uint32_t n;
- // fx sends
- float *in = m_sfxs[k];
- float *out = outs[k];
- for (n = 0; n < nframes; ++n)
- *out++ += *in++;
- // dynamics
- in = outs[k];
+ float *sfx = m_sfxs[k];
// compressor
if (int(*m_dyn.compress) > 0)
- m_comp[k].process(in, nframes);
+ m_comp[k].process(sfx, nframes);
// limiter
if (int(*m_dyn.limiter) > 0) {
- out = in;
+ float *p = sfx;
+ float *q = sfx;
for (n = 0; n < nframes; ++n)
- *out++ = synthv1_sigmoid(*in++);
+ *q++ = synthv1_sigmoid(*p++);
}
+ // mix-down
+ float *out = outs[k];
+ for (n = 0; n < nframes; ++n)
+ *out++ += *sfx++;
}
// post-processing
- m_phasor.process(nframes);
-
m_dca1.volume.tick(nframes);
m_out1.width.tick(nframes);
m_out1.panning.tick(nframes);
@@ -2480,6 +2720,15 @@
}
+// process running state...
+bool synthv1_impl::running ( bool on )
+{
+ const bool running = m_running;
+ m_running = on;
+ return running;
+}
+
+
//-------------------------------------------------------------------------
// synthv1 - decl.
//
@@ -2601,6 +2850,22 @@
}
+// process state
+
+bool synthv1::running ( bool on )
+{
+ return m_pImpl->running(on);
+}
+
+
+// all stabilize
+
+void synthv1::stabilize (void)
+{
+ m_pImpl->stabilize();
+}
+
+
// all reset clear
void synthv1::reset (void)
@@ -2631,4 +2896,66 @@
}
+// Micro-tuning support
+void synthv1::setTuningEnabled ( bool enabled )
+{
+ m_pImpl->setTuningEnabled(enabled);
+}
+
+bool synthv1::isTuningEnabled (void) const
+{
+ return m_pImpl->isTuningEnabled();
+}
+
+
+void synthv1::setTuningRefPitch ( float refPitch )
+{
+ m_pImpl->setTuningRefPitch(refPitch);
+}
+
+float synthv1::tuningRefPitch (void) const
+{
+ return m_pImpl->tuningRefPitch();
+}
+
+
+void synthv1::setTuningRefNote ( int refNote )
+{
+ m_pImpl->setTuningRefNote(refNote);
+}
+
+int synthv1::tuningRefNote (void) const
+{
+ return m_pImpl->tuningRefNote();
+}
+
+
+void synthv1::setTuningScaleFile ( const char *pszScaleFile )
+{
+ m_pImpl->setTuningScaleFile(pszScaleFile);
+}
+
+const char *synthv1::tuningScaleFile (void) const
+{
+ return m_pImpl->tuningScaleFile();
+}
+
+
+void synthv1::setTuningKeyMapFile ( const char *pszKeyMapFile )
+{
+ m_pImpl->setTuningKeyMapFile(pszKeyMapFile);
+}
+
+const char *synthv1::tuningKeyMapFile (void) const
+{
+ return m_pImpl->tuningKeyMapFile();
+}
+
+
+void synthv1::resetTuning (void)
+{
+ m_pImpl->resetTuning();
+}
+
+
// end of synthv1.cpp
diff -Nru synthv1-0.8.6/src/synthv1_formant.cpp synthv1-0.9.10+git20190929/src/synthv1_formant.cpp
--- synthv1-0.8.6/src/synthv1_formant.cpp 2017-12-20 07:56:50.309842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_formant.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_formant.cpp
//
/****************************************************************************
- Copyright (C) 2012-2016, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -178,15 +178,15 @@
// reset method impl.
-void synthv1_formant::Impl::reset_coeffs (void)
+void synthv1_formant::Impl::reset_coeffs ( float cutoff, float reso )
{
- const float fK = m_cutoff * float(NUM_VTABS - 1);
+ const float fK = cutoff * float(NUM_VTABS - 1);
const uint32_t k = uint32_t(fK);
const float fJ = (fK - float(k)) * float(NUM_VOWELS - 1);
const uint32_t j = uint32_t(fJ);
const float dJ = (fJ - float(j)); // vowel morph fraction
- const float q = 4.0f * m_reso * m_reso + 1.0f;
+ const float q = 4.0f * reso * reso + 1.0f;
const float p = 1.0f / q;
// vocal/vowel formant morphing
@@ -215,7 +215,7 @@
void synthv1_formant::reset_coeffs (void)
{
if (m_pImpl) {
- m_pImpl->update(m_cutoff, m_reso);
+ m_pImpl->reset_coeffs(m_cutoff, m_reso);
for (uint32_t i = 0; i < NUM_FORMANTS; ++i)
m_filters[i].reset_coeffs(m_pImpl->coeffs(i));
}
diff -Nru synthv1-0.8.6/src/synthv1_formant.h synthv1-0.9.10+git20190929/src/synthv1_formant.h
--- synthv1-0.8.6/src/synthv1_formant.h 2017-12-20 07:56:50.309842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_formant.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_formant.h
//
/****************************************************************************
- Copyright (C) 2012-2016, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -40,6 +40,7 @@
static const uint32_t NUM_VTABS = 5;
static const uint32_t NUM_VOWELS = 5;
static const uint32_t NUM_FORMANTS = 5;
+ static const uint32_t NUM_STEPS = 32;
// 2-pole filter coeffs.
struct Coeffs { float a0, b1, b2; };
@@ -59,8 +60,7 @@
// ctor.
Impl(float srate = 44100.0f)
- : m_srate(srate), m_cutoff(0.0f), m_reso(0.0f)
- { reset_coeffs(); }
+ : m_srate(srate) { reset_coeffs(); }
// sample-rate accessors
void setSampleRate(float srate)
@@ -72,41 +72,26 @@
const Coeffs& coeffs(uint32_t i) const
{ return m_ctabs[i]; }
- // update method
- void update(float cutoff = 0.5f, float reso = 0.0f)
- {
- if (::fabsf(m_cutoff - cutoff) > 0.001f ||
- ::fabsf(m_reso - reso) > 0.001f) {
- m_cutoff = cutoff;
- m_reso = reso;
- reset_coeffs();
- }
- }
+ // reset coeffs. method
+ void reset_coeffs(float cutoff = 0.5f, float reso = 0.0f);
protected:
// compute coeffs. for given vocal formant table
void vtab_coeffs(Coeffs& coeffs, const Vtab *vtab, uint32_t i, float p);
- // reset coeffs. method
- void reset_coeffs();
-
private:
// instance members
float m_srate;
- // parameters
- float m_cutoff;
- float m_reso;
-
// filter coeffs.
Coeffs m_ctabs[NUM_FORMANTS];
};
// ctor.
synthv1_formant(Impl *pImpl = 0)
- : m_pImpl(pImpl), m_cutoff(0.0f), m_reso(0.0f)
+ : m_pImpl(pImpl), m_cutoff(0.5f), m_reso(0.0f), m_nstep(0)
{ reset_coeffs(); }
// reset impl.
@@ -159,7 +144,6 @@
void set_value(float value)
{
- const uint32_t NUM_STEPS = 32;
m_nstep = NUM_STEPS;
m_vstep = (value - m_value) / float(m_nstep);
}
@@ -227,8 +211,12 @@
// update method
void update(float cutoff, float reso)
{
+ if (m_nstep > 0)
+ --m_nstep;
+ else
if (::fabsf(m_cutoff - cutoff) > 0.001f ||
::fabsf(m_reso - reso) > 0.001f) {
+ m_nstep = NUM_STEPS;
m_cutoff = cutoff;
m_reso = reso;
reset_coeffs();
@@ -247,6 +235,9 @@
float m_cutoff;
float m_reso;
+ // slew-rate control.
+ uint32_t m_nstep;
+
// formant filters
Filter m_filters[NUM_FORMANTS];
diff -Nru synthv1-0.8.6/src/synthv1.h synthv1-0.9.10+git20190929/src/synthv1.h
--- synthv1-0.8.6/src/synthv1.h 2017-12-20 07:56:50.308842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1.h
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -75,6 +75,7 @@
DCO1_TUNING,
DCO1_GLIDE,
DCO1_ENVTIME,
+ DCF1_ENABLED,
DCF1_CUTOFF,
DCF1_RESO,
DCF1_TYPE,
@@ -84,6 +85,7 @@
DCF1_DECAY,
DCF1_SUSTAIN,
DCF1_RELEASE,
+ LFO1_ENABLED,
LFO1_SHAPE,
LFO1_WIDTH,
LFO1_BPM,
@@ -134,6 +136,7 @@
DCO2_TUNING,
DCO2_GLIDE,
DCO2_ENVTIME,
+ DCF2_ENABLED,
DCF2_CUTOFF,
DCF2_RESO,
DCF2_TYPE,
@@ -143,6 +146,7 @@
DCF2_DECAY,
DCF2_SUSTAIN,
DCF2_RELEASE,
+ LFO2_ENABLED,
LFO2_SHAPE,
LFO2_WIDTH,
LFO2_BPM,
@@ -203,6 +207,9 @@
DYN1_COMPRESS,
DYN1_LIMITER,
+ KEY1_LOW,
+ KEY1_HIGH,
+
NUM_PARAMS
};
@@ -215,6 +222,9 @@
void setParamValue(ParamIndex index, float fValue);
float paramValue(ParamIndex index) const;
+ bool running(bool on);
+
+ void stabilize();
void reset();
void process_midi(uint8_t *data, uint32_t size);
@@ -227,6 +237,25 @@
void directNoteOn(int note, int vel);
+ void setTuningEnabled(bool enabled);
+ bool isTuningEnabled() const;
+
+ void setTuningRefPitch(float refPitch);
+ float tuningRefPitch() const;
+
+ void setTuningRefNote(int refNote);
+ int tuningRefNote() const;
+
+ void setTuningScaleFile(const char *pszScaleFile);
+ const char *tuningScaleFile() const;
+
+ void setTuningKeyMapFile(const char *pszKeyMapFile);
+ const char *tuningKeyMapFile() const;
+
+ void resetTuning();
+
+ virtual void updateTuning() = 0;
+
private:
synthv1_impl *m_pImpl;
diff -Nru synthv1-0.8.6/src/synthv1_jack.cpp synthv1-0.9.10+git20190929/src/synthv1_jack.cpp
--- synthv1-0.8.6/src/synthv1_jack.cpp 2017-12-20 07:56:50.309842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_jack.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_jack.cpp
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -65,7 +65,7 @@
void run()
{
snd_seq_t *seq = m_synth->alsa_seq();
- if (seq == NULL)
+ if (seq == nullptr)
return;
m_running = true;
@@ -82,7 +82,7 @@
while (m_running && poll_rc >= 0) {
poll_rc = ::poll(pfds, nfds, 200);
while (poll_rc > 0) {
- snd_seq_event_t *ev = NULL;
+ snd_seq_event_t *ev = nullptr;
snd_seq_event_input(seq, &ev);
m_synth->alsa_capture(ev);
// snd_seq_free_event(ev);
@@ -124,6 +124,15 @@
}
+//----------------------------------------------------------------------
+// JACK on-shutdown callback.
+
+static void synthv1_jack_on_shutdown ( void *arg )
+{
+ static_cast (arg)->shutdown();
+}
+
+
#ifdef CONFIG_JACK_SESSION
#include
@@ -152,27 +161,27 @@
synthv1_jack::synthv1_jack (void) : synthv1(2)
{
- m_client = NULL;
+ m_client = nullptr;
m_activated = false;
- m_audio_ins = NULL;
- m_audio_outs = NULL;
+ m_audio_ins = nullptr;
+ m_audio_outs = nullptr;
- m_ins = m_outs = NULL;
+ m_ins = m_outs = nullptr;
::memset(m_params, 0, synthv1::NUM_PARAMS * sizeof(float));
#ifdef CONFIG_JACK_MIDI
- m_midi_in = NULL;
+ m_midi_in = nullptr;
#endif
#ifdef CONFIG_ALSA_MIDI
- m_alsa_seq = NULL;
+ m_alsa_seq = nullptr;
// m_alsa_client = -1;
m_alsa_port = -1;
- m_alsa_decoder = NULL;
- m_alsa_buffer = NULL;
- m_alsa_thread = NULL;
+ m_alsa_decoder = nullptr;
+ m_alsa_buffer = nullptr;
+ m_alsa_thread = nullptr;
#endif
synthv1::programs()->enabled(true);
@@ -290,8 +299,8 @@
}
// open client
- m_client = ::jack_client_open(client_id, JackNullOption, NULL);
- if (m_client == NULL)
+ m_client = ::jack_client_open(client_id, JackNullOption, nullptr);
+ if (m_client == nullptr)
return;
// set sample rate
@@ -312,11 +321,11 @@
::snprintf(port_name, sizeof(port_name), "in_%d", k + 1);
m_audio_ins[k] = ::jack_port_register(m_client,
port_name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
- m_ins[k] = NULL;
+ m_ins[k] = nullptr;
::snprintf(port_name, sizeof(port_name), "out_%d", k + 1);
m_audio_outs[k] = ::jack_port_register(m_client,
port_name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
- m_outs[k] = NULL;
+ m_outs[k] = nullptr;
}
// register midi port
@@ -325,12 +334,12 @@
"in", JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0);
#endif
#ifdef CONFIG_ALSA_MIDI
- m_alsa_seq = NULL;
+ m_alsa_seq = nullptr;
// m_alsa_client = -1;
m_alsa_port = -1;
- m_alsa_decoder = NULL;
- m_alsa_buffer = NULL;
- m_alsa_thread = NULL;
+ m_alsa_decoder = nullptr;
+ m_alsa_buffer = nullptr;
+ m_alsa_thread = nullptr;
// open alsa sequencer client...
if (snd_seq_open(&m_alsa_seq, "hw", SND_SEQ_OPEN_INPUT, 0) >= 0) {
snd_seq_set_client_name(m_alsa_seq, client_id);
@@ -352,6 +361,9 @@
jack_set_buffer_size_callback(m_client,
synthv1_jack_buffer_size, this);
+ jack_on_shutdown(m_client,
+ synthv1_jack_on_shutdown, this);
+
// set process callbacks...
::jack_set_process_callback(m_client,
synthv1_jack_process, this);
@@ -395,15 +407,15 @@
if (m_alsa_seq) {
if (m_alsa_thread) {
delete m_alsa_thread;
- m_alsa_thread = NULL;
+ m_alsa_thread = nullptr;
}
if (m_alsa_buffer) {
::jack_ringbuffer_free(m_alsa_buffer);
- m_alsa_buffer = NULL;
+ m_alsa_buffer = nullptr;
}
if (m_alsa_decoder) {
snd_midi_event_free(m_alsa_decoder);
- m_alsa_decoder = NULL;
+ m_alsa_decoder = nullptr;
}
if (m_alsa_port >= 0) {
snd_seq_delete_simple_port(m_alsa_seq, m_alsa_port);
@@ -411,18 +423,18 @@
}
snd_seq_close(m_alsa_seq);
// m_alsa_client = -1;
- m_alsa_seq = NULL;
+ m_alsa_seq = nullptr;
}
#endif
- if (m_client == NULL)
+ if (m_client == nullptr)
return;
#ifdef CONFIG_JACK_MIDI
// unregister midi ports
if (m_midi_in) {
::jack_port_unregister(m_client, m_midi_in);
- m_midi_in = NULL;
+ m_midi_in = nullptr;
}
#endif
@@ -432,39 +444,39 @@
for (uint16_t k = 0; k < nchannels; ++k) {
if (m_audio_outs && m_audio_outs[k]) {
::jack_port_unregister(m_client, m_audio_outs[k]);
- m_audio_outs[k] = NULL;
+ m_audio_outs[k] = nullptr;
}
if (m_outs && m_outs[k])
- m_outs[k] = NULL;
+ m_outs[k] = nullptr;
if (m_audio_ins && m_audio_ins[k]) {
::jack_port_unregister(m_client, m_audio_ins[k]);
- m_audio_ins[k] = NULL;
+ m_audio_ins[k] = nullptr;
}
if (m_ins && m_ins[k])
- m_ins[k] = NULL;
+ m_ins[k] = nullptr;
}
if (m_outs) {
delete [] m_outs;
- m_outs = NULL;
+ m_outs = nullptr;
}
if (m_ins) {
delete [] m_ins;
- m_ins = NULL;
+ m_ins = nullptr;
}
if (m_audio_outs) {
delete [] m_audio_outs;
- m_audio_outs = NULL;
+ m_audio_outs = nullptr;
}
if (m_audio_ins) {
delete [] m_audio_ins;
- m_audio_ins = NULL;
+ m_audio_ins = nullptr;
}
// close client
::jack_client_close(m_client);
- m_client = NULL;
+ m_client = nullptr;
}
@@ -479,10 +491,10 @@
// alsa event capture.
void synthv1_jack::alsa_capture ( snd_seq_event_t *ev )
{
- if (m_alsa_decoder == NULL)
+ if (m_alsa_decoder == nullptr)
return;
- if (ev == NULL)
+ if (ev == nullptr)
return;
// ignored events...
@@ -603,6 +615,33 @@
}
+void synthv1_jack::updateTuning (void)
+{
+ synthv1::resetTuning();
+}
+
+
+void synthv1_jack::shutdown (void)
+{
+ synthv1_jack_application *pApp = synthv1_jack_application::getInstance();
+ if (pApp)
+ pApp->shutdown();
+}
+
+
+void synthv1_jack::shutdown_close (void)
+{
+ m_activated = false;
+
+ if (m_client) {
+ ::jack_client_close(m_client);
+ m_client = nullptr;
+ }
+
+ close();
+}
+
+
//-------------------------------------------------------------------------
// synthv1_jack_application -- Singleton application instance.
//
@@ -617,12 +656,35 @@
#endif
+#ifdef HAVE_SIGNAL_H
+
+#include
+
+#include
+#include
+#include
+#include
+
+// File descriptor for SIGTERM notifier.
+static int g_fdSigterm[2] = { -1, -1 };
+
+// Unix SIGTERM signal handler.
+static void synthv1_sigterm_handler ( int /*signo*/ )
+{
+ char c = 1;
+
+ (::write(g_fdSigterm[0], &c, sizeof(c)) > 0);
+}
+
+#endif // HAVE_SIGNAL_H
+
+
// Constructor.
synthv1_jack_application::synthv1_jack_application ( int& argc, char **argv )
- : QObject(NULL), m_pApp(NULL), m_bGui(true),
- m_pSynth(NULL), m_pWidget(NULL)
+ : QObject(nullptr), m_pApp(nullptr), m_bGui(true),
+ m_pSynth(nullptr), m_pWidget(nullptr)
#ifdef CONFIG_NSM
- , m_pNsmClient(NULL)
+ , m_pNsmClient(nullptr)
#endif
{
#ifdef Q_WS_X11
@@ -637,16 +699,70 @@
m_bGui = false;
}
- if (m_bGui)
- m_pApp = new QApplication(argc, argv);
- else
+ if (m_bGui) {
+ #if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
+ QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
+ #endif
+ QApplication *pApp = new QApplication(argc, argv);
+ #if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0)
+ pApp->setApplicationDisplayName(SYNTHV1_TITLE);
+ // SYNTHV1_TITLE " - " + QObject::tr(SYNTHV1_SUBTITLE));
+ #endif
+ m_pApp = pApp;
+ } else {
m_pApp = new QCoreApplication(argc, argv);
+ }
+
+#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0)
+ m_pApp->setApplicationName(SYNTHV1_TITLE);
+#endif
+
+#ifdef HAVE_SIGNAL_H
+
+ // Set to ignore any fatal "Broken pipe" signals.
+ ::signal(SIGPIPE, SIG_IGN);
+
+ // Initialize file descriptors for SIGTERM socket notifier.
+ ::socketpair(AF_UNIX, SOCK_STREAM, 0, g_fdSigterm);
+ m_pSigtermNotifier
+ = new QSocketNotifier(g_fdSigterm[1], QSocketNotifier::Read, this);
+
+ QObject::connect(m_pSigtermNotifier,
+ SIGNAL(activated(int)),
+ SLOT(handle_sigterm()));
+
+ // Install SIGTERM signal handler.
+ struct sigaction sigterm;
+ sigterm.sa_handler = synthv1_sigterm_handler;
+ sigemptyset(&sigterm.sa_mask);
+ sigterm.sa_flags = 0;
+ sigterm.sa_flags |= SA_RESTART;
+ ::sigaction(SIGTERM, &sigterm, nullptr);
+ ::sigaction(SIGQUIT, &sigterm, nullptr);
+
+ // Ignore SIGHUP/SIGINT signals.
+ ::signal(SIGHUP, SIG_IGN);
+ ::signal(SIGINT, SIG_IGN);
+
+#else
+
+ m_pSigtermNotifier = nullptr;
+
+#endif // !HAVE_SIGNAL_H
+
+ // Pseudo-singleton instance.
+ g_pInstance = this;
}
// Destructor.
synthv1_jack_application::~synthv1_jack_application (void)
{
+ g_pInstance = nullptr;
+
+#ifdef HAVE_SIGNAL_H
+ if (m_pSigtermNotifier) delete m_pSigtermNotifier;
+#endif
#ifdef CONFIG_NSM
if (m_pNsmClient) delete m_pNsmClient;
#endif
@@ -694,7 +810,7 @@
// Startup methods.
bool synthv1_jack_application::setup (void)
{
- if (m_pApp == NULL)
+ if (m_pApp == nullptr)
return false;
if (!parse_args()) {
@@ -702,11 +818,15 @@
return false;
}
+ QObject::connect(this,
+ SIGNAL(shutdown_signal()),
+ SLOT(shutdown_slot()));
+
m_pSynth = new synthv1_jack();
if (m_bGui) {
m_pWidget = new synthv1widget_jack(m_pSynth);
- m_pWidget->show();
+ // m_pWidget->show();
if (m_presets.isEmpty())
m_pWidget->initPreset();
else
@@ -741,7 +861,10 @@
if (m_pWidget)
m_pWidget->setNsmClient(m_pNsmClient);
}
+ else
#endif // CONFIG_NSM
+ if (m_pWidget)
+ m_pWidget->show();
return true;
}
@@ -758,10 +881,10 @@
void synthv1_jack_application::openSession (void)
{
- if (m_pSynth == NULL)
+ if (m_pSynth == nullptr)
return;
- if (m_pNsmClient == NULL)
+ if (m_pNsmClient == nullptr)
return;
if (!m_pNsmClient->is_active())
@@ -785,7 +908,9 @@
if (!dir.exists())
dir.mkpath(path_name);
- const QFileInfo fi(path_name, display_name + '.' + SYNTHV1_TITLE);
+ QFileInfo fi(path_name, "session." SYNTHV1_TITLE);
+ if (!fi.exists())
+ fi.setFile(path_name, display_name + '.' + SYNTHV1_TITLE);
if (fi.exists()) {
const QString& sFilename = fi.absoluteFilePath();
if (m_pWidget) {
@@ -804,10 +929,10 @@
void synthv1_jack_application::saveSession (void)
{
- if (m_pSynth == NULL)
+ if (m_pSynth == nullptr)
return;
- if (m_pNsmClient == NULL)
+ if (m_pNsmClient == nullptr)
return;
if (!m_pNsmClient->is_active())
@@ -817,10 +942,11 @@
qDebug("synthv1_jack::saveSession()");
#endif
- const QString& path_name = m_pNsmClient->path_name();
- const QString& display_name = m_pNsmClient->display_name();
// const QString& client_id = m_pNsmClient->client_id();
- const QFileInfo fi(path_name, display_name + '.' + SYNTHV1_TITLE);
+ const QString& path_name = m_pNsmClient->path_name();
+// const QString& display_name = m_pNsmClient->display_name();
+// const QFileInfo fi(path_name, display_name + '.' + SYNTHV1_TITLE);
+ const QFileInfo fi(path_name, "session." SYNTHV1_TITLE);
synthv1_param::savePreset(m_pSynth, fi.absoluteFilePath(), true);
@@ -831,7 +957,7 @@
void synthv1_jack_application::showSession (void)
{
- if (m_pNsmClient == NULL)
+ if (m_pNsmClient == nullptr)
return;
if (!m_pNsmClient->is_active())
@@ -850,7 +976,7 @@
void synthv1_jack_application::hideSession (void)
{
- if (m_pNsmClient == NULL)
+ if (m_pNsmClient == nullptr)
return;
if (!m_pNsmClient->is_active())
@@ -868,6 +994,53 @@
#endif // CONFIG_NSM
+#ifdef HAVE_SIGNAL_H
+
+// SIGTERM signal handler.
+void synthv1_jack_application::handle_sigterm (void)
+{
+ char c;
+
+ if (::read(g_fdSigterm[1], &c, sizeof(c)) > 0) {
+ if (m_pApp)
+ m_pApp->quit();
+ }
+}
+
+#endif // HAVE_SIGNAL_H
+
+
+// JACK shutdown handlers.
+void synthv1_jack_application::shutdown (void)
+{
+ emit shutdown_signal();
+}
+
+
+void synthv1_jack_application::shutdown_slot (void)
+{
+ bool bQuit = true;
+
+ if (m_pSynth)
+ m_pSynth->shutdown_close();
+
+ if (m_pWidget)
+ bQuit = m_pWidget->queryClose();
+
+ if (m_pApp && bQuit)
+ m_pApp->quit();
+}
+
+
+// Pseudo-singleton instance.
+synthv1_jack_application *synthv1_jack_application::g_pInstance = nullptr;
+
+synthv1_jack_application *synthv1_jack_application::getInstance (void)
+{
+ return g_pInstance;
+}
+
+
//-------------------------------------------------------------------------
// main
diff -Nru synthv1-0.8.6/src/synthv1_jack.h synthv1-0.9.10+git20190929/src/synthv1_jack.h
--- synthv1-0.8.6/src/synthv1_jack.h 2017-12-20 07:56:50.310842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_jack.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_jack.h
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -67,9 +67,13 @@
void sessionEvent(void *pvSessionArg);
#endif
+ void shutdown();
+ void shutdown_close();
+
protected:
void updatePreset(bool bDirty);
+ void updateTuning();
private:
@@ -115,6 +119,9 @@
class synthv1_nsm;
#endif
+#ifdef HAVE_SIGNAL_H
+class QSocketNotifier;
+#endif
class synthv1_jack_application : public QObject
{
@@ -131,19 +138,33 @@
// Facade method.
int exec();
-#ifdef CONFIG_NSM
+ // JACK shutdown handler.
+ void shutdown();
+
+ // Pseudo-singleton accessor.
+ static synthv1_jack_application *getInstance();
+
+signals:
+
+ void shutdown_signal();
protected slots:
+#ifdef CONFIG_NSM
// NSM callback slots.
void openSession();
void saveSession();
-
void hideSession();
void showSession();
-
#endif // CONFIG_NSM
+#ifdef HAVE_SIGNAL_H
+ // SIGTERM signal handler.
+ void handle_sigterm();
+#endif
+
+ void shutdown_slot();
+
protected:
// Argument parser method.
@@ -157,6 +178,7 @@
// Instance variables.
QCoreApplication *m_pApp;
bool m_bGui;
+
QStringList m_presets;
synthv1_jack *m_pSynth;
@@ -165,6 +187,12 @@
#ifdef CONFIG_NSM
synthv1_nsm *m_pNsmClient;
#endif
+
+#ifdef HAVE_SIGNAL_H
+ QSocketNotifier *m_pSigtermNotifier;
+#endif
+
+ static synthv1_jack_application *g_pInstance;
};
diff -Nru synthv1-0.8.6/src/synthv1.lv2/synthv1.ttl synthv1-0.9.10+git20190929/src/synthv1.lv2/synthv1.ttl
--- synthv1-0.8.6/src/synthv1.lv2/synthv1.ttl 2017-12-20 07:56:50.308842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1.lv2/synthv1.ttl 2019-09-28 23:05:55.000000000 +0000
@@ -9,6 +9,8 @@
@prefix lv2atom: .
@prefix lv2midi: .
@prefix lv2time: .
+@prefix lv2state: .
+@prefix lv2patch: .
@prefix lv2worker: .
@prefix lv2pg: .
@@ -19,23 +21,30 @@
doap:name "synthv1" ;
doap:maintainer [
foaf:name "rncbc aka. Rui Nuno Capela" ;
- foaf:homepage ;
+ foaf:homepage ;
foaf:mbox ;
] ;
lv2:requiredFeature lv2urid:map, lv2worker:schedule ;
lv2:optionalFeature lv2:hardRTCapable ;
lv2:extensionData lv2worker:interface ;
- lv2ui:ui synthv1_lv2:ui, synthv1_lv2:ui_external ;
+ lv2ui:ui synthv1_lv2:ui_x11, synthv1_lv2:ui_external ;
+ lv2patch:writable synthv1_lv2:P201_TUNING_ENABLED,
+ synthv1_lv2:P202_TUNING_REF_PITCH,
+ synthv1_lv2:P203_TUNING_REF_NOTE,
+ synthv1_lv2:P204_TUNING_SCALE_FILE,
+ synthv1_lv2:P205_TUNING_KEYMAP_FILE ;
lv2:port [
a lv2:InputPort, lv2atom:AtomPort ;
lv2atom:bufferType lv2atom:Sequence ;
lv2atom:supports lv2midi:MidiEvent, lv2time:Position ;
+ lv2:designation lv2:control ;
lv2:index 0 ;
lv2:symbol "in";
lv2:name "MIDI In";
- ] , [
+ ], [
a lv2:OutputPort, lv2atom:AtomPort ;
lv2atom:bufferType lv2atom:Sequence ;
+ lv2:designation lv2:control ;
lv2:index 1 ;
lv2:symbol "notify";
lv2:name "Notify";
@@ -76,7 +85,7 @@
lv2:default 1.0 ;
lv2:minimum 0.0 ;
lv2:maximum 4.0 ;
- lv2pg:group synthv1_lv2:101_DCO1 ;
+ lv2pg:group synthv1_lv2:G101_DCO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
lv2:index 7 ;
@@ -85,7 +94,7 @@
lv2:default 1.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:101_DCO1 ;
+ lv2pg:group synthv1_lv2:G101_DCO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
lv2:index 8 ;
@@ -95,7 +104,7 @@
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:101_DCO1 ;
+ lv2pg:group synthv1_lv2:G101_DCO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
lv2:index 9 ;
@@ -105,7 +114,7 @@
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:101_DCO1 ;
+ lv2pg:group synthv1_lv2:G101_DCO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
lv2:index 10 ;
@@ -120,7 +129,7 @@
lv2:default 1.0 ;
lv2:minimum 0.0 ;
lv2:maximum 4.0 ;
- lv2pg:group synthv1_lv2:101_DCO1 ;
+ lv2pg:group synthv1_lv2:G101_DCO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
lv2:index 11 ;
@@ -129,7 +138,7 @@
lv2:default 1.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:101_DCO1 ;
+ lv2pg:group synthv1_lv2:G101_DCO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
lv2:index 12 ;
@@ -139,7 +148,7 @@
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:101_DCO1 ;
+ lv2pg:group synthv1_lv2:G101_DCO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
lv2:index 13 ;
@@ -149,7 +158,7 @@
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:101_DCO1 ;
+ lv2pg:group synthv1_lv2:G101_DCO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
lv2:index 14 ;
@@ -158,7 +167,7 @@
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:101_DCO1 ;
+ lv2pg:group synthv1_lv2:G101_DCO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
lv2:index 15 ;
@@ -167,7 +176,7 @@
lv2:default 0.1 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:101_DCO1 ;
+ lv2pg:group synthv1_lv2:G101_DCO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
lv2:index 16 ;
@@ -176,7 +185,7 @@
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:101_DCO1 ;
+ lv2pg:group synthv1_lv2:G101_DCO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
lv2:index 17 ;
@@ -185,7 +194,7 @@
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:101_DCO1 ;
+ lv2pg:group synthv1_lv2:G101_DCO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
lv2:index 18 ;
@@ -194,7 +203,7 @@
lv2:default 0.0 ;
lv2:minimum -4.0 ;
lv2:maximum 4.0 ;
- lv2pg:group synthv1_lv2:101_DCO1 ;
+ lv2pg:group synthv1_lv2:G101_DCO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
lv2:index 19 ;
@@ -203,7 +212,7 @@
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:101_DCO1 ;
+ lv2pg:group synthv1_lv2:G101_DCO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
lv2:index 20 ;
@@ -212,7 +221,7 @@
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:101_DCO1 ;
+ lv2pg:group synthv1_lv2:G101_DCO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
lv2:index 21 ;
@@ -221,28 +230,38 @@
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:101_DCO1 ;
+ lv2pg:group synthv1_lv2:G101_DCO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
lv2:index 22 ;
+ lv2:symbol "DCF1_ENABLED" ;
+ lv2:name "DCF1 Enabled" ;
+ lv2:portProperty lv2:toggled ;
+ lv2:default 1.0 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ lv2pg:group synthv1_lv2:G102_DCF1 ;
+ ], [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 23 ;
lv2:symbol "DCF1_CUTOFF" ;
lv2:name "DCF1 Cutoff" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:102_DCF1 ;
+ lv2pg:group synthv1_lv2:G102_DCF1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 23 ;
+ lv2:index 24 ;
lv2:symbol "DCF1_RESO" ;
lv2:name "DCF1 Resonance" ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:102_DCF1 ;
+ lv2pg:group synthv1_lv2:G102_DCF1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 24 ;
+ lv2:index 25 ;
lv2:symbol "DCF1_TYPE" ;
lv2:name "DCF1 Type" ;
lv2:portProperty lv2:integer, lv2:enumeration ;
@@ -253,10 +272,10 @@
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 3.0 ;
- lv2pg:group synthv1_lv2:102_DCF1 ;
+ lv2pg:group synthv1_lv2:G102_DCF1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 25 ;
+ lv2:index 26 ;
lv2:symbol "DCF1_SLOPE" ;
lv2:name "DCF1 Slope" ;
lv2:portProperty lv2:integer, lv2:enumeration ;
@@ -267,55 +286,65 @@
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 3.0 ;
- lv2pg:group synthv1_lv2:102_DCF1 ;
+ lv2pg:group synthv1_lv2:G102_DCF1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 26 ;
+ lv2:index 27 ;
lv2:symbol "DCF1_ENVELOPE" ;
lv2:name "DCF1 Envelope" ;
lv2:default 1.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:102_DCF1 ;
+ lv2pg:group synthv1_lv2:G102_DCF1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 27 ;
+ lv2:index 28 ;
lv2:symbol "DCF1_ATTACK" ;
lv2:name "DCF1 Attack" ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:102_DCF1 ;
+ lv2pg:group synthv1_lv2:G102_DCF1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 28 ;
+ lv2:index 29 ;
lv2:symbol "DCF1_DECAY" ;
lv2:name "DCF1 Decay" ;
lv2:default 0.2 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:102_DCF1 ;
+ lv2pg:group synthv1_lv2:G102_DCF1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 29 ;
+ lv2:index 30 ;
lv2:symbol "DCF1_SUSTAIN" ;
lv2:name "DCF1 Sustain" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:102_DCF1 ;
+ lv2pg:group synthv1_lv2:G102_DCF1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 30 ;
+ lv2:index 31 ;
lv2:symbol "DCF1_RELEASE" ;
lv2:name "DCF1 Release" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:102_DCF1 ;
+ lv2pg:group synthv1_lv2:G102_DCF1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 31 ;
+ lv2:index 32 ;
+ lv2:symbol "LFO1_ENABLED" ;
+ lv2:name "LFO1 Enabled" ;
+ lv2:portProperty lv2:toggled ;
+ lv2:default 1.0 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ lv2pg:group synthv1_lv2:G103_LFO1 ;
+ ], [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 33 ;
lv2:symbol "LFO1_SHAPE" ;
lv2:name "LFO1 Wave Shape" ;
lv2:portProperty lv2:integer, lv2:enumeration ;
@@ -327,283 +356,283 @@
lv2:default 1.0 ;
lv2:minimum 0.0 ;
lv2:maximum 4.0 ;
- lv2pg:group synthv1_lv2:103_LFO1 ;
+ lv2pg:group synthv1_lv2:G103_LFO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 32 ;
+ lv2:index 34 ;
lv2:symbol "LFO1_WIDTH" ;
lv2:name "LFO1 Wave Width" ;
lv2:default 1.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:103_LFO1 ;
+ lv2pg:group synthv1_lv2:G103_LFO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 33 ;
+ lv2:index 35 ;
lv2:symbol "LFO1_BPM" ;
lv2:name "LFO1 BPM" ;
lv2:default 180.0 ;
lv2:minimum 0.0 ;
lv2:maximum 360.0 ;
- lv2pg:group synthv1_lv2:103_LFO1 ;
+ lv2pg:group synthv1_lv2:G103_LFO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 34 ;
+ lv2:index 36 ;
lv2:symbol "LFO1_RATE" ;
lv2:name "LFO1 Rate" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:103_LFO1 ;
+ lv2pg:group synthv1_lv2:G103_LFO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 35 ;
+ lv2:index 37 ;
lv2:symbol "LFO1_SYNC" ;
lv2:name "LFO1 Sync" ;
lv2:portProperty lv2:toggled ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:103_LFO1 ;
+ lv2pg:group synthv1_lv2:G103_LFO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 36 ;
+ lv2:index 38 ;
lv2:symbol "LFO1_SWEEP" ;
lv2:name "LFO1 Sweep" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:103_LFO1 ;
+ lv2pg:group synthv1_lv2:G103_LFO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 37 ;
+ lv2:index 39 ;
lv2:symbol "LFO1_PITCH" ;
lv2:name "LFO1 Pitch" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:103_LFO1 ;
+ lv2pg:group synthv1_lv2:G103_LFO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 38 ;
+ lv2:index 40 ;
lv2:symbol "LFO1_BALANCE" ;
lv2:name "LFO1 Balance" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:103_LFO1 ;
+ lv2pg:group synthv1_lv2:G103_LFO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 39 ;
+ lv2:index 41 ;
lv2:symbol "LFO1_RINGMOD" ;
lv2:name "LFO1 Ring Mod" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:103_LFO1 ;
+ lv2pg:group synthv1_lv2:G103_LFO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 40 ;
+ lv2:index 42 ;
lv2:symbol "LFO1_CUTOFF" ;
lv2:name "LFO1 Cutoff" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:103_LFO1 ;
+ lv2pg:group synthv1_lv2:G103_LFO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 41 ;
+ lv2:index 43 ;
lv2:symbol "LFO1_RESO" ;
lv2:name "LFO1 Resonance" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:103_LFO1 ;
+ lv2pg:group synthv1_lv2:G103_LFO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 42 ;
+ lv2:index 44 ;
lv2:symbol "LFO1_PANNING" ;
lv2:name "LFO1 Panning" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:103_LFO1 ;
+ lv2pg:group synthv1_lv2:G103_LFO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 43 ;
+ lv2:index 45 ;
lv2:symbol "LFO1_VOLUME" ;
lv2:name "LFO1 Volume" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:103_LFO1 ;
+ lv2pg:group synthv1_lv2:G103_LFO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 44 ;
+ lv2:index 46 ;
lv2:symbol "LFO1_ATTACK" ;
lv2:name "LFO1 Attack" ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:103_LFO1 ;
+ lv2pg:group synthv1_lv2:G103_LFO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 45 ;
+ lv2:index 47 ;
lv2:symbol "LFO1_DECAY" ;
lv2:name "LFO1 Decay" ;
lv2:default 0.1 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:103_LFO1 ;
+ lv2pg:group synthv1_lv2:G103_LFO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 46 ;
+ lv2:index 48 ;
lv2:symbol "LFO1_SUSTAIN" ;
lv2:name "LFO1 Sustain" ;
lv2:default 1.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:103_LFO1 ;
+ lv2pg:group synthv1_lv2:G103_LFO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 47 ;
+ lv2:index 49 ;
lv2:symbol "LFO1_RELEASE" ;
lv2:name "LFO1 Release" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:103_LFO1 ;
+ lv2pg:group synthv1_lv2:G103_LFO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 48 ;
+ lv2:index 50 ;
lv2:symbol "DCA1_VOLUME" ;
lv2:name "DCA1 Volume" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:104_DCA1 ;
+ lv2pg:group synthv1_lv2:G104_DCA1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 49 ;
+ lv2:index 51 ;
lv2:symbol "DCA1_ATTACK" ;
lv2:name "DCA1 Attack" ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:104_DCA1 ;
+ lv2pg:group synthv1_lv2:G104_DCA1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 50 ;
+ lv2:index 52 ;
lv2:symbol "DCA1_DECAY" ;
lv2:name "DCA1 Decay" ;
lv2:default 0.1 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:104_DCA1 ;
+ lv2pg:group synthv1_lv2:G104_DCA1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 51 ;
+ lv2:index 53 ;
lv2:symbol "DCA1_SUSTAIN" ;
lv2:name "DCA1 Sustain" ;
lv2:default 1.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:104_DCA1 ;
+ lv2pg:group synthv1_lv2:G104_DCA1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 52 ;
+ lv2:index 54 ;
lv2:symbol "DCA1_RELEASE" ;
lv2:name "DCA1 Release" ;
lv2:default 0.1 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:104_DCA1 ;
+ lv2pg:group synthv1_lv2:G104_DCA1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 53 ;
+ lv2:index 55 ;
lv2:symbol "OUT1_WIDTH" ;
lv2:name "OUT1 Stereo Width" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:105_OUT1 ;
+ lv2pg:group synthv1_lv2:G105_OUT1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 54 ;
+ lv2:index 56 ;
lv2:symbol "OUT1_PANNING" ;
lv2:name "OUT1 Panning" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:105_OUT1 ;
+ lv2pg:group synthv1_lv2:G105_OUT1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 55 ;
+ lv2:index 57 ;
lv2:symbol "OUT1_FXSEND" ;
lv2:name "OUT1 FX Send" ;
lv2:default 1.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:105_OUT1 ;
+ lv2pg:group synthv1_lv2:G105_OUT1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 56 ;
+ lv2:index 58 ;
lv2:symbol "OUT1_VOLUME" ;
lv2:name "OUT1 Volume" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:105_OUT1 ;
+ lv2pg:group synthv1_lv2:G105_OUT1 ;
] ;
lv2:port [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 57 ;
+ lv2:index 59 ;
lv2:symbol "DEF1_PITCHBEND" ;
lv2:name "DEF1 Pitchbend" ;
lv2:default 0.2 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:106_DEF1 ;
+ lv2pg:group synthv1_lv2:G106_DEF1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 58 ;
+ lv2:index 60 ;
lv2:symbol "DEF1_MODWHEEL" ;
lv2:name "DEF1 Modwheel" ;
lv2:default 0.2 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:106_DEF1 ;
+ lv2pg:group synthv1_lv2:G106_DEF1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 59 ;
+ lv2:index 61 ;
lv2:symbol "DEF1_PRESSURE" ;
lv2:name "DEF1 Pressure" ;
lv2:default 0.2 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:106_DEF1 ;
+ lv2pg:group synthv1_lv2:G106_DEF1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 60 ;
+ lv2:index 62 ;
lv2:symbol "DEF1_VELOCITY" ;
lv2:name "DEF1 Velocity" ;
lv2:default 0.2 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:106_DEF1 ;
+ lv2pg:group synthv1_lv2:G106_DEF1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 61 ;
+ lv2:index 63 ;
lv2:symbol "DEF1_CHANNEL" ;
lv2:name "DEF1 Channel" ;
lv2:portProperty lv2:integer ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 16.0 ;
- lv2pg:group synthv1_lv2:106_DEF1 ;
+ lv2pg:group synthv1_lv2:G106_DEF1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 62 ;
+ lv2:index 64 ;
lv2:symbol "DEF1_MONO" ;
lv2:name "DEF1 Mono" ;
lv2:portProperty lv2:integer, lv2:enumeration ;
@@ -613,11 +642,11 @@
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 2.0 ;
- lv2pg:group synthv1_lv2:106_DEF1 ;
+ lv2pg:group synthv1_lv2:G106_DEF1 ;
] ;
lv2:port [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 63 ;
+ lv2:index 65 ;
lv2:symbol "DCO2_SHAPE1" ;
lv2:name "DCO2 Wave Shape 1" ;
lv2:portProperty lv2:integer, lv2:enumeration ;
@@ -629,39 +658,39 @@
lv2:default 1.0 ;
lv2:minimum 0.0 ;
lv2:maximum 4.0 ;
- lv2pg:group synthv1_lv2:201_DCO2 ;
+ lv2pg:group synthv1_lv2:G201_DCO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 64 ;
+ lv2:index 66 ;
lv2:symbol "DCO2_WIDTH1" ;
lv2:name "DCO2 Wave Width 1" ;
lv2:default 1.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:201_DCO2 ;
+ lv2pg:group synthv1_lv2:G201_DCO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 65 ;
+ lv2:index 67 ;
lv2:symbol "DCO2_BANDL1" ;
lv2:name "DCO2 Wave Bandlimit 1" ;
lv2:portProperty lv2:toggled ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:201_DCO2 ;
+ lv2pg:group synthv1_lv2:G201_DCO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 66 ;
+ lv2:index 68 ;
lv2:symbol "DCO2_SYNC1" ;
lv2:name "DCO2 Wave Sync 1" ;
lv2:portProperty lv2:toggled ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:101_DCO1 ;
+ lv2pg:group synthv1_lv2:G101_DCO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 67 ;
+ lv2:index 69 ;
lv2:symbol "DCO2_SHAPE2" ;
lv2:name "DCO2 Wave Shape 2" ;
lv2:portProperty lv2:integer, lv2:enumeration ;
@@ -673,129 +702,139 @@
lv2:default 1.0 ;
lv2:minimum 0.0 ;
lv2:maximum 4.0 ;
- lv2pg:group synthv1_lv2:201_DCO2 ;
+ lv2pg:group synthv1_lv2:G201_DCO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 68 ;
+ lv2:index 70 ;
lv2:symbol "DCO2_WIDTH2" ;
lv2:name "DCO2 Wave Width 2" ;
lv2:default 1.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:201_DCO2 ;
+ lv2pg:group synthv1_lv2:G201_DCO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 69 ;
+ lv2:index 71 ;
lv2:symbol "DCO2_BANDL2" ;
lv2:name "DCO2 Wave Bandlimit 2" ;
lv2:portProperty lv2:toggled ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:201_DCO2 ;
+ lv2pg:group synthv1_lv2:G201_DCO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 70 ;
+ lv2:index 72 ;
lv2:symbol "DCO2_SYNC2" ;
lv2:name "DCO2 Wave Sync 2" ;
lv2:portProperty lv2:toggled ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:101_DCO1 ;
+ lv2pg:group synthv1_lv2:G101_DCO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 71 ;
+ lv2:index 73 ;
lv2:symbol "DCO2_BALANCE" ;
lv2:name "DCO2 Balance" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:201_DCO2 ;
+ lv2pg:group synthv1_lv2:G201_DCO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 72 ;
+ lv2:index 74 ;
lv2:symbol "DCO2_DETUNE" ;
lv2:name "DCO2 Detune" ;
lv2:default 0.1 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:201_DCO2 ;
+ lv2pg:group synthv1_lv2:G201_DCO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 73 ;
+ lv2:index 75 ;
lv2:symbol "DCO2_PHASE" ;
lv2:name "DCO2 Phase" ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:201_DCO2 ;
+ lv2pg:group synthv1_lv2:G201_DCO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 74 ;
+ lv2:index 76 ;
lv2:symbol "DCO2_RINGMOD" ;
lv2:name "DCO2 Ring Mod" ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:101_DCO1 ;
+ lv2pg:group synthv1_lv2:G101_DCO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 75 ;
+ lv2:index 77 ;
lv2:symbol "DCO2_OCTAVE" ;
lv2:name "DCO2 Octave" ;
lv2:default -2.0 ;
lv2:minimum -4.0 ;
lv2:maximum 4.0 ;
- lv2pg:group synthv1_lv2:201_DCO2 ;
+ lv2pg:group synthv1_lv2:G201_DCO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 76 ;
+ lv2:index 78 ;
lv2:symbol "DCO2_TUNING" ;
lv2:name "DCO2 Tuning" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:201_DCO2 ;
+ lv2pg:group synthv1_lv2:G201_DCO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 77 ;
+ lv2:index 79 ;
lv2:symbol "DCO2_GLIDE" ;
lv2:name "DCO2 Glide" ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:201_DCO2 ;
+ lv2pg:group synthv1_lv2:G201_DCO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 78 ;
+ lv2:index 80 ;
lv2:symbol "DCO2_ENVTIME" ;
lv2:name "DCO2 Env.Time" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:201_DCO2 ;
+ lv2pg:group synthv1_lv2:G201_DCO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 79 ;
+ lv2:index 81 ;
+ lv2:symbol "DCF2_ENABLED" ;
+ lv2:name "DCF2 Enabled" ;
+ lv2:portProperty lv2:toggled ;
+ lv2:default 1.0 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ lv2pg:group synthv1_lv2:G202_DCF2 ;
+ ], [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 82 ;
lv2:symbol "DCF2_CUTOFF" ;
lv2:name "DCF2 Cutoff" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:202_DCF2 ;
+ lv2pg:group synthv1_lv2:G202_DCF2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 80 ;
+ lv2:index 83 ;
lv2:symbol "DCF2_RESO" ;
lv2:name "DCF2 Resonance" ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:202_DCF2 ;
+ lv2pg:group synthv1_lv2:G202_DCF2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 81 ;
+ lv2:index 84 ;
lv2:symbol "DCF2_TYPE" ;
lv2:name "DCF2 Type" ;
lv2:portProperty lv2:integer, lv2:enumeration ;
@@ -806,10 +845,10 @@
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 3.0 ;
- lv2pg:group synthv1_lv2:202_DCF2 ;
+ lv2pg:group synthv1_lv2:G202_DCF2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 82 ;
+ lv2:index 85 ;
lv2:symbol "DCF2_SLOPE" ;
lv2:name "DCF2 Slope" ;
lv2:portProperty lv2:integer, lv2:enumeration ;
@@ -820,55 +859,65 @@
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 3.0 ;
- lv2pg:group synthv1_lv2:202_DCF2 ;
+ lv2pg:group synthv1_lv2:G202_DCF2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 83 ;
+ lv2:index 86 ;
lv2:symbol "DCF2_ENVELOPE" ;
lv2:name "DCF2 Envelope" ;
lv2:default 1.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:202_DCF2 ;
+ lv2pg:group synthv1_lv2:G202_DCF2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 84 ;
+ lv2:index 87 ;
lv2:symbol "DCF2_ATTACK" ;
lv2:name "DCF2 Attack" ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:202_DCF2 ;
+ lv2pg:group synthv1_lv2:G202_DCF2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 85 ;
+ lv2:index 88 ;
lv2:symbol "DCF2_DECAY" ;
lv2:name "DCF2 Decay" ;
lv2:default 0.2 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:202_DCF2 ;
+ lv2pg:group synthv1_lv2:G202_DCF2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 86 ;
+ lv2:index 89 ;
lv2:symbol "DCF2_SUSTAIN" ;
lv2:name "DCF2 Sustain" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:202_DCF2 ;
+ lv2pg:group synthv1_lv2:G202_DCF2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 87 ;
+ lv2:index 90 ;
lv2:symbol "DCF2_RELEASE" ;
lv2:name "DCF2 Release" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:202_DCF2 ;
+ lv2pg:group synthv1_lv2:G202_DCF2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 88 ;
+ lv2:index 91 ;
+ lv2:symbol "LFO2_ENABLED" ;
+ lv2:name "LFO2 Enabled" ;
+ lv2:portProperty lv2:toggled ;
+ lv2:default 1.0 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 1.0 ;
+ lv2pg:group synthv1_lv2:G203_LFO2 ;
+ ], [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 92 ;
lv2:symbol "LFO2_SHAPE" ;
lv2:name "LFO2 Wave Shape" ;
lv2:portProperty lv2:integer, lv2:enumeration ;
@@ -880,283 +929,283 @@
lv2:default 1.0 ;
lv2:minimum 0.0 ;
lv2:maximum 4.0 ;
- lv2pg:group synthv1_lv2:203_LFO2 ;
+ lv2pg:group synthv1_lv2:G203_LFO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 89 ;
+ lv2:index 93 ;
lv2:symbol "LFO2_WIDTH" ;
lv2:name "LFO2 Wave Width" ;
lv2:default 1.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:203_LFO2 ;
+ lv2pg:group synthv1_lv2:G203_LFO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 90 ;
+ lv2:index 94 ;
lv2:symbol "LFO2_BPM" ;
lv2:name "LFO2 BPM" ;
lv2:default 180.0 ;
lv2:minimum 0.0 ;
lv2:maximum 360.0 ;
- lv2pg:group synthv1_lv2:203_LFO2 ;
+ lv2pg:group synthv1_lv2:G203_LFO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 91 ;
+ lv2:index 95 ;
lv2:symbol "LFO2_RATE" ;
lv2:name "LFO2 Rate" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:203_LFO2 ;
+ lv2pg:group synthv1_lv2:G203_LFO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 92 ;
+ lv2:index 96 ;
lv2:symbol "LFO2_SYNC" ;
lv2:name "LFO2 Sync" ;
lv2:portProperty lv2:toggled ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:203_LFO2 ;
+ lv2pg:group synthv1_lv2:G203_LFO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 93 ;
+ lv2:index 97 ;
lv2:symbol "LFO2_SWEEP" ;
lv2:name "LFO2 Sweep" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:203_LFO2 ;
+ lv2pg:group synthv1_lv2:G203_LFO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 94 ;
+ lv2:index 98 ;
lv2:symbol "LFO2_PITCH" ;
lv2:name "LFO2 Pitch" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:203_LFO2 ;
+ lv2pg:group synthv1_lv2:G203_LFO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 95 ;
+ lv2:index 99 ;
lv2:symbol "LFO2_BALANCE" ;
lv2:name "LFO2 Balance" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:103_LFO1 ;
+ lv2pg:group synthv1_lv2:G103_LFO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 96 ;
+ lv2:index 100 ;
lv2:symbol "LFO2_RINGMOD" ;
lv2:name "LFO2 Ring Mod" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:103_LFO1 ;
+ lv2pg:group synthv1_lv2:G103_LFO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 97 ;
+ lv2:index 101 ;
lv2:symbol "LFO2_CUTOFF" ;
lv2:name "LFO2 Cutoff" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:203_LFO2 ;
+ lv2pg:group synthv1_lv2:G203_LFO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 98 ;
+ lv2:index 102 ;
lv2:symbol "LFO2_RESO" ;
lv2:name "LFO2 Resonance" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:203_LFO2 ;
+ lv2pg:group synthv1_lv2:G203_LFO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 99 ;
+ lv2:index 103 ;
lv2:symbol "LFO2_PANNING" ;
lv2:name "LFO2 Panning" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:203_LFO2 ;
+ lv2pg:group synthv1_lv2:G203_LFO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 100 ;
+ lv2:index 104 ;
lv2:symbol "LFO2_VOLUME" ;
lv2:name "LFO2 Volume" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:203_LFO2 ;
+ lv2pg:group synthv1_lv2:G203_LFO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 101 ;
+ lv2:index 105 ;
lv2:symbol "LFO2_ATTACK" ;
lv2:name "LFO2 Attack" ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:203_LFO2 ;
+ lv2pg:group synthv1_lv2:G203_LFO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 102 ;
+ lv2:index 106 ;
lv2:symbol "LFO2_DECAY" ;
lv2:name "LFO2 Decay" ;
lv2:default 0.1 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:203_LFO2 ;
+ lv2pg:group synthv1_lv2:G203_LFO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 103 ;
+ lv2:index 107 ;
lv2:symbol "LFO2_SUSTAIN" ;
lv2:name "LFO2 Sustain" ;
lv2:default 1.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:203_LFO2 ;
+ lv2pg:group synthv1_lv2:G203_LFO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 104 ;
+ lv2:index 108 ;
lv2:symbol "LFO2_RELEASE" ;
lv2:name "LFO2 Release" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:203_LFO2 ;
+ lv2pg:group synthv1_lv2:G203_LFO2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 105 ;
+ lv2:index 109 ;
lv2:symbol "DCA2_VOLUME" ;
lv2:name "DCA2 Volume" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:204_DCA2 ;
+ lv2pg:group synthv1_lv2:G204_DCA2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 106 ;
+ lv2:index 110 ;
lv2:symbol "DCA2_ATTACK" ;
lv2:name "DCA2 Attack" ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:204_DCA2 ;
+ lv2pg:group synthv1_lv2:G204_DCA2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 107 ;
+ lv2:index 111 ;
lv2:symbol "DCA2_DECAY" ;
lv2:name "DCA2 Decay" ;
lv2:default 0.1 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:204_DCA2 ;
+ lv2pg:group synthv1_lv2:G204_DCA2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 108 ;
+ lv2:index 112 ;
lv2:symbol "DCA2_SUSTAIN" ;
lv2:name "DCA2 Sustain" ;
lv2:default 1.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:204_DCA2 ;
+ lv2pg:group synthv1_lv2:G204_DCA2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 109 ;
+ lv2:index 113 ;
lv2:symbol "DCA2_RELEASE" ;
lv2:name "DCA2 Release" ;
lv2:default 0.1 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:204_DCA2 ;
+ lv2pg:group synthv1_lv2:G204_DCA2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 110 ;
+ lv2:index 114 ;
lv2:symbol "OUT2_WIDTH" ;
lv2:name "OUT2 Stereo Width" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:205_OUT2 ;
+ lv2pg:group synthv1_lv2:G205_OUT2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 111 ;
+ lv2:index 115 ;
lv2:symbol "OUT2_PANNING" ;
lv2:name "OUT2 Panning" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:205_OUT2 ;
+ lv2pg:group synthv1_lv2:G205_OUT2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 112 ;
+ lv2:index 116 ;
lv2:symbol "OUT2_FXSEND" ;
lv2:name "OUT2 FX Send" ;
lv2:default 1.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:205_OUT2 ;
+ lv2pg:group synthv1_lv2:G205_OUT2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 113 ;
+ lv2:index 117 ;
lv2:symbol "OUT2_VOLUME" ;
lv2:name "OUT2 Volume" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:205_OUT2 ;
+ lv2pg:group synthv1_lv2:G205_OUT2 ;
] ;
lv2:port [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 114 ;
+ lv2:index 118 ;
lv2:symbol "DEF2_PITCHBEND" ;
lv2:name "DEF2 Pitchbend" ;
lv2:default 0.2 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:206_DEF2 ;
+ lv2pg:group synthv1_lv2:G206_DEF2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 115 ;
+ lv2:index 119 ;
lv2:symbol "DEF2_MODWHEEL" ;
lv2:name "DEF2 Modwheel" ;
lv2:default 0.2 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:206_DEF2 ;
+ lv2pg:group synthv1_lv2:G206_DEF2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 116 ;
+ lv2:index 120 ;
lv2:symbol "DEF2_PRESSURE" ;
lv2:name "DEF2 Pressure" ;
lv2:default 0.2 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:206_DEF2 ;
+ lv2pg:group synthv1_lv2:G206_DEF2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 117 ;
+ lv2:index 121 ;
lv2:symbol "DEF2_VELOCITY" ;
lv2:name "DEF2 Velocity" ;
lv2:default 0.2 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:206_DEF2 ;
+ lv2pg:group synthv1_lv2:G206_DEF2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 118 ;
+ lv2:index 122 ;
lv2:symbol "DEF2_CHANNEL" ;
lv2:name "DEF2 Channel" ;
lv2:portProperty lv2:integer ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 16.0 ;
- lv2pg:group synthv1_lv2:206_DEF2 ;
+ lv2pg:group synthv1_lv2:G206_DEF2 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 119 ;
+ lv2:index 123 ;
lv2:symbol "DEF2_MONO" ;
lv2:name "DEF2 Mono" ;
lv2:portProperty lv2:integer, lv2:enumeration ;
@@ -1166,328 +1215,392 @@
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 2.0 ;
- lv2pg:group synthv1_lv2:206_DEF2 ;
+ lv2pg:group synthv1_lv2:G206_DEF2 ;
] ;
lv2:port [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 120 ;
+ lv2:index 124 ;
lv2:symbol "CHO1_WET" ;
lv2:name "Chorus Wet" ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:301_CHO1 ;
+ lv2pg:group synthv1_lv2:G301_CHO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 121 ;
+ lv2:index 125 ;
lv2:symbol "CHO1_DELAY" ;
lv2:name "Chorus Delay" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:301_CHO1 ;
+ lv2pg:group synthv1_lv2:G301_CHO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 122 ;
+ lv2:index 126 ;
lv2:symbol "CHO1_FEEDB" ;
lv2:name "Chorus Feedback" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:301_CHO1 ;
+ lv2pg:group synthv1_lv2:G301_CHO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 123 ;
+ lv2:index 127 ;
lv2:symbol "CHO1_RATE" ;
lv2:name "Chorus Rate" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:301_CHO1 ;
+ lv2pg:group synthv1_lv2:G301_CHO1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 124 ;
+ lv2:index 128 ;
lv2:symbol "CHO1_MOD" ;
lv2:name "Chorus Modulation" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:301_CHO1 ;
+ lv2pg:group synthv1_lv2:G301_CHO1 ;
] ;
lv2:port [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 125 ;
+ lv2:index 129 ;
lv2:symbol "FLA1_WET" ;
lv2:name "Flanger Wet" ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:302_FLA1 ;
+ lv2pg:group synthv1_lv2:G302_FLA1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 126 ;
+ lv2:index 130 ;
lv2:symbol "FLA1_DELAY" ;
lv2:name "Flanger Delay" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:302_FLA1 ;
+ lv2pg:group synthv1_lv2:G302_FLA1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 127 ;
+ lv2:index 131 ;
lv2:symbol "FLA1_FEEDB" ;
lv2:name "Flanger Feedback" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:302_FLA1 ;
+ lv2pg:group synthv1_lv2:G302_FLA1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 128 ;
+ lv2:index 132 ;
lv2:symbol "FLA1_DAFT" ;
lv2:name "Flanger Daft" ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:302_FLA1 ;
+ lv2pg:group synthv1_lv2:G302_FLA1 ;
] ;
lv2:port [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 129 ;
+ lv2:index 133 ;
lv2:symbol "PHA1_WET" ;
lv2:name "Phaser Wet" ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:303_PHA1 ;
+ lv2pg:group synthv1_lv2:G303_PHA1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 130 ;
+ lv2:index 134 ;
lv2:symbol "PHA1_RATE" ;
lv2:name "Phaser Rate" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:303_PHA1 ;
+ lv2pg:group synthv1_lv2:G303_PHA1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 131 ;
+ lv2:index 135 ;
lv2:symbol "PHA1_FEEDB" ;
lv2:name "Phaser Feedback" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:303_PHA1 ;
+ lv2pg:group synthv1_lv2:G303_PHA1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 132 ;
+ lv2:index 136 ;
lv2:symbol "PHA1_DEPTH" ;
lv2:name "Phaser Depth" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:303_PHA1 ;
+ lv2pg:group synthv1_lv2:G303_PHA1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 133 ;
+ lv2:index 137 ;
lv2:symbol "PHA1_DAFT" ;
lv2:name "Phaser Daft" ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:303_PHA1 ;
+ lv2pg:group synthv1_lv2:G303_PHA1 ;
] ;
lv2:port [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 134 ;
+ lv2:index 138 ;
lv2:symbol "DEL1_WET" ;
lv2:name "Delay Wet" ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:304_DEL1 ;
+ lv2pg:group synthv1_lv2:G304_DEL1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 135 ;
+ lv2:index 139 ;
lv2:symbol "DEL1_DELAY" ;
lv2:name "Delay Delay" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:304_DEL1 ;
+ lv2pg:group synthv1_lv2:G304_DEL1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 136 ;
+ lv2:index 140 ;
lv2:symbol "DEL1_FEEDB" ;
lv2:name "Delay Feedback" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:304_DEL1 ;
+ lv2pg:group synthv1_lv2:G304_DEL1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 137 ;
+ lv2:index 141 ;
lv2:symbol "DEL1_BPM" ;
lv2:name "Delay BPM" ;
lv2:default 180.0 ;
lv2:minimum 0.0 ;
lv2:maximum 360.0 ;
- lv2pg:group synthv1_lv2:304_DEL1 ;
+ lv2pg:group synthv1_lv2:G304_DEL1 ;
] ;
lv2:port [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 138 ;
+ lv2:index 142 ;
lv2:symbol "REV1_WET" ;
lv2:name "Reverb Wet" ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:305_REV1 ;
+ lv2pg:group synthv1_lv2:G305_REV1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 139 ;
+ lv2:index 143 ;
lv2:symbol "REV1_ROOM" ;
lv2:name "Reverb Room" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:305_REV1 ;
+ lv2pg:group synthv1_lv2:G305_REV1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 140 ;
+ lv2:index 144 ;
lv2:symbol "REV1_DAMP" ;
lv2:name "Reverb Damp" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:305_REV1 ;
+ lv2pg:group synthv1_lv2:G305_REV1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 141 ;
+ lv2:index 145 ;
lv2:symbol "REV1_FEEDB" ;
lv2:name "Reverb Feedback" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:305_REV1 ;
+ lv2pg:group synthv1_lv2:G305_REV1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 142 ;
+ lv2:index 146 ;
lv2:symbol "REV1_WIDTH" ;
lv2:name "Reverb Width" ;
lv2:default 0.0 ;
lv2:minimum -1.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:305_REV1 ;
+ lv2pg:group synthv1_lv2:G305_REV1 ;
] ;
lv2:port [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 143 ;
+ lv2:index 147 ;
lv2:symbol "DYN1_COMPRESS" ;
lv2:name "Dynamic Compressor" ;
lv2:portProperty lv2:toggled ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:306_DYN1 ;
+ lv2pg:group synthv1_lv2:G306_DYN1 ;
], [
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 144 ;
+ lv2:index 148 ;
lv2:symbol "DYN1_LIMITER" ;
lv2:name "Dynamic Limiter" ;
lv2:portProperty lv2:toggled ;
lv2:default 1.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
- lv2pg:group synthv1_lv2:306_DYN1 ;
+ lv2pg:group synthv1_lv2:G306_DYN1 ;
+ ] ;
+ lv2:port [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 149 ;
+ lv2:symbol "KEY1_LOW" ;
+ lv2:name "Keyboard Low" ;
+ lv2:portProperty lv2:integer ;
+ lv2:default 0.0 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 127.0 ;
+ lv2pg:group synthv1_lv2:G501_KEY1 ;
+ ], [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 150 ;
+ lv2:symbol "KEY1_HIGH" ;
+ lv2:name "Keyboard High" ;
+ lv2:portProperty lv2:integer ;
+ lv2:default 127.0 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 127.0 ;
+ lv2pg:group synthv1_lv2:G501_KEY1 ;
] .
-synthv1_lv2:101_DCO1
+
+synthv1_lv2:P201_TUNING_ENABLED
+ a lv2:Parameter ;
+ rdfs:label "P201 Tuning Enabled" ;
+ rdfs:range lv2atom:Bool .
+
+synthv1_lv2:P202_TUNING_REF_PITCH
+ a lv2:Parameter ;
+ rdfs:label "P202 Tuning Reference Pitch" ;
+ rdfs:range lv2atom:Float ;
+ lv2:default 440.0 ;
+ lv2:minimum 20.0 ;
+ lv2:maximum 20000.0 .
+
+synthv1_lv2:P203_TUNING_REF_NOTE
+ a lv2:Parameter ;
+ rdfs:label "P203 Tuning Reference Note" ;
+ rdfs:range lv2atom:Int ;
+ lv2:default 69 ;
+ lv2:minimum 0 ;
+ lv2:maximum 127 .
+
+synthv1_lv2:P204_TUNING_SCALE_FILE
+ a lv2:Parameter ;
+ rdfs:label "P204 Tuning Scale File" ;
+ rdfs:range lv2atom:Path .
+
+synthv1_lv2:P205_TUNING_KEYMAP_FILE
+ a lv2:Parameter ;
+ rdfs:label "P205 Tuning Key Map File" ;
+ rdfs:range lv2atom:Path .
+
+
+synthv1_lv2:G101_DCO1
a lv2pg:InputGroup;
lv2:name "Synth 1 - DCO1" ;
lv2:symbol "DCO1" .
-synthv1_lv2:102_DCF1
+synthv1_lv2:G102_DCF1
a lv2pg:InputGroup;
lv2:name "Synth 1 - DCF1" ;
lv2:symbol "DCF1" .
-synthv1_lv2:103_LFO1
+synthv1_lv2:G103_LFO1
a lv2pg:InputGroup;
lv2:name "Synth 1 - LFO1" ;
lv2:symbol "LFO1" .
-synthv1_lv2:104_DCA1
+synthv1_lv2:G104_DCA1
a lv2pg:InputGroup;
lv2:name "Synth 1 - DCA1" ;
lv2:symbol "DCA1" .
-synthv1_lv2:105_OUT1
+synthv1_lv2:G105_OUT1
a lv2pg:InputGroup;
lv2:name "Synth 1 - OUT1" ;
lv2:symbol "OUT1" .
-synthv1_lv2:106_DEF1
+synthv1_lv2:G106_DEF1
a lv2pg:InputGroup;
lv2:name "Synth 1 - DEF1" ;
lv2:symbol "DEF1" .
-synthv1_lv2:201_DCO2
+synthv1_lv2:G201_DCO2
a lv2pg:InputGroup;
lv2:name "Synth 2 - DCO2" ;
lv2:symbol "DCO2" .
-synthv1_lv2:202_DCF2
+synthv1_lv2:G202_DCF2
a lv2pg:InputGroup;
lv2:name "Synth 2 - DCF2" ;
lv2:symbol "DCF2" .
-synthv1_lv2:203_LFO2
+synthv1_lv2:G203_LFO2
a lv2pg:InputGroup;
lv2:name "Synth 2 - LFO2" ;
lv2:symbol "LFO2" .
-synthv1_lv2:204_DCA2
+synthv1_lv2:G204_DCA2
a lv2pg:InputGroup;
lv2:name "Synth 2 - DCA2" ;
lv2:symbol "DCA2" .
-synthv1_lv2:205_OUT2
+synthv1_lv2:G205_OUT2
a lv2pg:InputGroup;
lv2:name "Synth 2 - OUT2" ;
lv2:symbol "OUT2" .
-synthv1_lv2:206_DEF2
+synthv1_lv2:G206_DEF2
a lv2pg:InputGroup;
lv2:name "Synth 2 - DEF2" ;
lv2:symbol "DEF2" .
-synthv1_lv2:301_CHO1
+synthv1_lv2:G301_CHO1
a lv2pg:InputGroup;
lv2:name "Effects - Chorus" ;
lv2:symbol "CHO1" .
-synthv1_lv2:302_FLA1
+synthv1_lv2:G302_FLA1
a lv2pg:InputGroup;
lv2:name "Effects - Flanger" ;
lv2:symbol "FLA1" .
-synthv1_lv2:303_PHA1
+synthv1_lv2:G303_PHA1
a lv2pg:InputGroup;
lv2:name "Effects - Phaser" ;
lv2:symbol "PHA1" .
-synthv1_lv2:304_DEL1
+synthv1_lv2:G304_DEL1
a lv2pg:InputGroup;
lv2:name "Effects - Delay" ;
lv2:symbol "DEL1" .
-synthv1_lv2:305_REV1
+synthv1_lv2:G305_REV1
a lv2pg:InputGroup;
lv2:name "Effects - Reverb" ;
lv2:symbol "REV1" .
-synthv1_lv2:306_DYN1
+synthv1_lv2:G306_DYN1
a lv2pg:InputGroup;
lv2:name "Effects - Dynamic" ;
lv2:symbol "DYN1" .
+
+synthv1_lv2:G401_TUN1
+ a lv2pg:InputGroup;
+ lv2:name "Config - Tuning" ;
+ lv2:symbol "TUN1" .
+
+synthv1_lv2:G501_KEY1
+ a lv2pg:InputGroup;
+ lv2:name "Input - Keyboard" ;
+ lv2:symbol "KEY1" .
diff -Nru synthv1-0.8.6/src/synthv1.lv2/synthv1_ui-qt4.ttl synthv1-0.9.10+git20190929/src/synthv1.lv2/synthv1_ui-qt4.ttl
--- synthv1-0.8.6/src/synthv1.lv2/synthv1_ui-qt4.ttl 2017-12-20 07:56:50.308842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1.lv2/synthv1_ui-qt4.ttl 1970-01-01 00:00:00.000000000 +0000
@@ -1,12 +0,0 @@
-@prefix lv2: .
-@prefix lv2ui: .
-
-
- a lv2ui:Qt4UI ;
- lv2:requiredFeature ;
- lv2ui:binary .
-
-
- a ;
- lv2:requiredFeature ;
- lv2ui:binary .
diff -Nru synthv1-0.8.6/src/synthv1.lv2/synthv1_ui-qt5.ttl synthv1-0.9.10+git20190929/src/synthv1.lv2/synthv1_ui-qt5.ttl
--- synthv1-0.8.6/src/synthv1.lv2/synthv1_ui-qt5.ttl 2017-12-20 07:56:50.308842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1.lv2/synthv1_ui-qt5.ttl 1970-01-01 00:00:00.000000000 +0000
@@ -1,12 +0,0 @@
-@prefix lv2: .
-@prefix lv2ui: .
-
-
- a lv2ui:Qt5UI ;
- lv2:requiredFeature ;
- lv2ui:binary .
-
-
- a ;
- lv2:requiredFeature ;
- lv2ui:binary .
diff -Nru synthv1-0.8.6/src/synthv1.lv2/synthv1_ui.ttl synthv1-0.9.10+git20190929/src/synthv1.lv2/synthv1_ui.ttl
--- synthv1-0.8.6/src/synthv1.lv2/synthv1_ui.ttl 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1.lv2/synthv1_ui.ttl 2019-09-28 23:05:55.000000000 +0000
@@ -0,0 +1,12 @@
+@prefix lv2: .
+@prefix lv2ui: .
+
+
+ a lv2ui:X11UI ;
+ lv2:requiredFeature ;
+ lv2ui:binary .
+
+
+ a ;
+ lv2:requiredFeature ;
+ lv2ui:binary .
diff -Nru synthv1-0.8.6/src/synthv1_lv2.cpp synthv1-0.9.10+git20190929/src/synthv1_lv2.cpp
--- synthv1-0.8.6/src/synthv1_lv2.cpp 2017-12-20 07:56:50.310842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_lv2.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_lv2.cpp
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -20,6 +20,8 @@
*****************************************************************************/
#include "synthv1_lv2.h"
+#include "synthv1_config.h"
+#include "synthv1_sched.h"
#include "synthv1_programs.h"
#include "synthv1_controls.h"
@@ -33,6 +35,10 @@
#include "lv2/lv2plug.in/ns/ext/options/options.h"
#include "lv2/lv2plug.in/ns/ext/buf-size/buf-size.h"
+#ifdef CONFIG_LV2_PATCH
+#include "lv2/lv2plug.in/ns/ext/patch/patch.h"
+#endif
+
#ifndef CONFIG_LV2_ATOM_FORGE_OBJECT
#define lv2_atom_forge_object(forge, frame, id, otype) \
lv2_atom_forge_blank(forge, frame, id, otype)
@@ -50,6 +56,8 @@
#include
#include
+#include
+
//-------------------------------------------------------------------------
// synthv1_lv2 - impl.
@@ -67,19 +75,31 @@
{
::memset(&m_urids, 0, sizeof(m_urids));
- m_urid_map = NULL;
- m_atom_in = NULL;
- m_atom_out = NULL;
- m_schedule = NULL;
+ m_urid_map = nullptr;
+ m_atom_in = nullptr;
+ m_atom_out = nullptr;
+ m_schedule = nullptr;
m_ndelta = 0;
- const LV2_Options_Option *host_options = NULL;
+ const LV2_Options_Option *host_options = nullptr;
for (int i = 0; host_features && host_features[i]; ++i) {
const LV2_Feature *host_feature = host_features[i];
if (::strcmp(host_feature->URI, LV2_URID_MAP_URI) == 0) {
m_urid_map = (LV2_URID_Map *) host_feature->data;
if (m_urid_map) {
+ m_urids.p201_tuning_enabled = m_urid_map->map(
+ m_urid_map->handle, SYNTHV1_LV2_PREFIX "P201_TUNING_ENABLED");
+ m_urids.p202_tuning_refPitch = m_urid_map->map(
+ m_urid_map->handle, SYNTHV1_LV2_PREFIX "P202_TUNING_REF_PITCH");
+ m_urids.p203_tuning_refNote = m_urid_map->map(
+ m_urid_map->handle, SYNTHV1_LV2_PREFIX "P203_TUNING_REF_NOTE");
+ m_urids.p204_tuning_scaleFile = m_urid_map->map(
+ m_urid_map->handle, SYNTHV1_LV2_PREFIX "P204_TUNING_SCALE_FILE");
+ m_urids.p205_tuning_keyMapFile = m_urid_map->map(
+ m_urid_map->handle, SYNTHV1_LV2_PREFIX "P205_TUNING_KEYMAP_FILE");
+ m_urids.tun1_update = m_urid_map->map(
+ m_urid_map->handle, SYNTHV1_LV2_PREFIX "TUN1_UPDATE");
m_urids.atom_Blank = m_urid_map->map(
m_urid_map->handle, LV2_ATOM__Blank);
m_urids.atom_Object = m_urid_map->map(
@@ -88,6 +108,10 @@
m_urid_map->handle, LV2_ATOM__Float);
m_urids.atom_Int = m_urid_map->map(
m_urid_map->handle, LV2_ATOM__Int);
+ m_urids.atom_Bool = m_urid_map->map(
+ m_urid_map->handle, LV2_ATOM__Bool);
+ m_urids.atom_Path = m_urid_map->map(
+ m_urid_map->handle, LV2_ATOM__Path);
m_urids.time_Position = m_urid_map->map(
m_urid_map->handle, LV2_TIME__Position);
m_urids.time_beatsPerMinute = m_urid_map->map(
@@ -104,6 +128,20 @@
#endif
m_urids.state_StateChanged = m_urid_map->map(
m_urid_map->handle, LV2_STATE__StateChanged);
+ #ifdef CONFIG_LV2_PATCH
+ m_urids.patch_Get = m_urid_map->map(
+ m_urid_map->handle, LV2_PATCH__Get);
+ m_urids.patch_Set = m_urid_map->map(
+ m_urid_map->handle, LV2_PATCH__Set);
+ m_urids.patch_Put = m_urid_map->map(
+ m_urid_map->handle, LV2_PATCH__Put);
+ m_urids.patch_body = m_urid_map->map(
+ m_urid_map->handle, LV2_PATCH__body);
+ m_urids.patch_property = m_urid_map->map(
+ m_urid_map->handle, LV2_PATCH__property);
+ m_urids.patch_value = m_urid_map->map(
+ m_urid_map->handle, LV2_PATCH__value);
+ #endif
}
}
else
@@ -144,7 +182,7 @@
m_ins = new float * [nchannels];
m_outs = new float * [nchannels];
for (uint16_t k = 0; k < nchannels; ++k)
- m_ins[k] = m_outs[k] = NULL;
+ m_ins[k] = m_outs[k] = nullptr;
}
@@ -202,7 +240,7 @@
if (m_atom_in) {
LV2_ATOM_SEQUENCE_FOREACH(m_atom_in, event) {
- if (event == NULL)
+ if (event == nullptr)
continue;
if (event->body.type == m_urids.midi_MidiEvent) {
uint8_t *data = (uint8_t *) LV2_ATOM_BODY(&event->body);
@@ -225,20 +263,79 @@
const LV2_Atom_Object *object
= (LV2_Atom_Object *) &event->body;
if (object->body.otype == m_urids.time_Position) {
- LV2_Atom *atom = NULL;
+ LV2_Atom *atom = nullptr;
lv2_atom_object_get(object,
- m_urids.time_beatsPerMinute, &atom, NULL);
+ m_urids.time_beatsPerMinute, &atom, nullptr);
if (atom && atom->type == m_urids.atom_Float) {
const float host_bpm = ((LV2_Atom_Float *) atom)->body;
if (::fabsf(host_bpm - synthv1::tempo()) > 0.001f)
synthv1::setTempo(host_bpm);
}
}
+ #ifdef CONFIG_LV2_PATCH
+ else
+ if (object->body.otype == m_urids.patch_Set) {
+ // set property value
+ const LV2_Atom *property = nullptr;
+ const LV2_Atom *value = nullptr;
+ lv2_atom_object_get(object,
+ m_urids.patch_property, &property,
+ m_urids.patch_value, &value, 0);
+ if (property && value && property->type == m_forge.URID) {
+ const uint32_t key = ((const LV2_Atom_URID *) property)->body;
+ const LV2_URID type = value->type;
+ if (key == m_urids.p201_tuning_enabled
+ && type == m_urids.atom_Bool) {
+ const uint32_t enabled
+ = *(uint32_t *) LV2_ATOM_BODY_CONST(value);
+ synthv1::setTuningEnabled(enabled > 0);
+ updateTuning();
+ }
+ else
+ if (key == m_urids.p202_tuning_refPitch
+ && type == m_urids.atom_Float) {
+ const float refPitch
+ = *(float *) LV2_ATOM_BODY_CONST(value);
+ synthv1::setTuningRefPitch(refPitch);
+ updateTuning();
+ }
+ else
+ if (key == m_urids.p203_tuning_refNote
+ && type == m_urids.atom_Int) {
+ const uint32_t refNote
+ = *(uint32_t *) LV2_ATOM_BODY_CONST(value);
+ synthv1::setTuningRefNote(refNote);
+ updateTuning();
+ }
+ else
+ if (key == m_urids.p204_tuning_scaleFile
+ && type == m_urids.atom_Path) {
+ const char *scaleFile
+ = (const char *) LV2_ATOM_BODY_CONST(value);
+ synthv1::setTuningScaleFile(scaleFile);
+ updateTuning();
+ }
+ else
+ if (key == m_urids.p205_tuning_keyMapFile
+ && type == m_urids.atom_Path) {
+ const char *keyMapFile
+ = (const char *) LV2_ATOM_BODY_CONST(value);
+ synthv1::setTuningKeyMapFile(keyMapFile);
+ updateTuning();
+ }
+ }
+ }
+ else
+ if (object->body.otype == m_urids.patch_Get) {
+ // put all property values (probably to UI)
+ patch_put(ndelta);
+ }
+ #endif // CONFIG_LV2_PATCH
}
}
// remember last time for worker response
m_ndelta = ndelta;
- // m_atom_in = NULL;
+ // m_atom_in = nullptr;
}
if (nframes > ndelta)
@@ -258,6 +355,130 @@
}
+uint32_t synthv1_lv2::urid_map ( const char *uri ) const
+{
+ return (m_urid_map ? m_urid_map->map(m_urid_map->handle, uri) : 0);
+}
+
+
+//-------------------------------------------------------------------------
+// synthv1_lv2 - LV2 State interface.
+//
+
+static LV2_State_Status synthv1_lv2_state_save ( LV2_Handle instance,
+ LV2_State_Store_Function store, LV2_State_Handle handle,
+ uint32_t flags, const LV2_Feature *const */*features*/ )
+{
+ synthv1_lv2 *pPlugin = static_cast (instance);
+ if (pPlugin == nullptr)
+ return LV2_STATE_ERR_UNKNOWN;
+
+ // FIXME: At this time, only micro-tonal (aka. tuning) settings
+ // are posed to be saved into some XML chunk as state...
+ if (!pPlugin->isTuningEnabled())
+ return LV2_STATE_SUCCESS;
+
+ // Save state as XML chunk...
+ //
+ const uint32_t key = pPlugin->urid_map(SYNTHV1_LV2_PREFIX "state");
+ if (key == 0)
+ return LV2_STATE_ERR_NO_PROPERTY;
+
+ const uint32_t type = pPlugin->urid_map(LV2_ATOM__Chunk);
+ if (type == 0)
+ return LV2_STATE_ERR_BAD_TYPE;
+#if 0
+ if ((flags & (LV2_STATE_IS_POD | LV2_STATE_IS_PORTABLE)) == 0)
+ return LV2_STATE_ERR_BAD_FLAGS;
+#else
+ flags |= (LV2_STATE_IS_POD | LV2_STATE_IS_PORTABLE);
+#endif
+
+ QDomDocument doc(SYNTHV1_TITLE);
+ QDomElement eState = doc.createElement("state");
+
+ QDomElement eTuning = doc.createElement("tuning");
+ synthv1_param::saveTuning(pPlugin, doc, eTuning);
+ eState.appendChild(eTuning);
+
+ doc.appendChild(eState);
+
+ const QByteArray data(doc.toByteArray());
+ const char *value = data.constData();
+ size_t size = data.size();
+
+ return (*store)(handle, key, value, size, type, flags);
+}
+
+
+static LV2_State_Status synthv1_lv2_state_restore ( LV2_Handle instance,
+ LV2_State_Retrieve_Function retrieve, LV2_State_Handle handle,
+ uint32_t flags, const LV2_Feature *const */*features*/ )
+{
+ synthv1_lv2 *pPlugin = static_cast (instance);
+ if (pPlugin == nullptr)
+ return LV2_STATE_ERR_UNKNOWN;
+
+ // Retrieve state as XML chunk...
+ //
+ const uint32_t key = pPlugin->urid_map(SYNTHV1_LV2_PREFIX "state");
+ if (key == 0)
+ return LV2_STATE_ERR_NO_PROPERTY;
+
+ const uint32_t chunk_type = pPlugin->urid_map(LV2_ATOM__Chunk);
+ if (chunk_type == 0)
+ return LV2_STATE_ERR_BAD_TYPE;
+
+ size_t size = 0;
+ uint32_t type = 0;
+// flags = 0;
+
+ const char *value
+ = (const char *) (*retrieve)(handle, key, &size, &type, &flags);
+
+ if (size < 2)
+ return LV2_STATE_ERR_UNKNOWN;
+
+ if (type != chunk_type)
+ return LV2_STATE_ERR_BAD_TYPE;
+
+ if ((flags & (LV2_STATE_IS_POD | LV2_STATE_IS_PORTABLE)) == 0)
+ return LV2_STATE_ERR_BAD_FLAGS;
+
+ if (value == nullptr)
+ return LV2_STATE_ERR_UNKNOWN;
+
+ QDomDocument doc(SYNTHV1_TITLE);
+ if (doc.setContent(QByteArray(value, size))) {
+ QDomElement eState = doc.documentElement();
+ if (eState.tagName() == "state") {
+ for (QDomNode nChild = eState.firstChild();
+ !nChild.isNull();
+ nChild = nChild.nextSibling()) {
+ QDomElement eChild = nChild.toElement();
+ if (eChild.isNull())
+ continue;
+ if (eChild.tagName() == "tuning")
+ synthv1_param::loadTuning(pPlugin, eChild);
+ }
+ }
+ }
+
+ pPlugin->reset();
+
+ synthv1_sched::sync_notify(pPlugin, synthv1_sched::Wave, 1);
+
+ return LV2_STATE_SUCCESS;
+}
+
+
+static const LV2_State_Interface synthv1_lv2_state_interface =
+{
+ synthv1_lv2_state_save,
+ synthv1_lv2_state_restore
+};
+
+
#ifdef CONFIG_LV2_PROGRAMS
#include "synthv1_programs.h"
@@ -285,7 +506,7 @@
}
}
- return NULL;
+ return nullptr;
}
void synthv1_lv2::select_program ( uint32_t bank, uint32_t program )
@@ -296,21 +517,23 @@
#endif // CONFIG_LV2_PROGRAMS
-uint32_t synthv1_lv2::urid_map ( const char *uri ) const
+void synthv1_lv2::updatePreset ( bool /*bDirty*/ )
{
- return (m_urid_map ? m_urid_map->map(m_urid_map->handle, uri) : 0);
+ if (m_schedule /*&& bDirty*/) {
+ synthv1_lv2_worker_message mesg;
+ mesg.atom.type = m_urids.state_StateChanged;
+ mesg.atom.size = 0; // nothing else matters.
+ m_schedule->schedule_work(
+ m_schedule->handle, sizeof(mesg), &mesg);
+ }
}
-//-------------------------------------------------------------------------
-// synthv1_lv2 - LV2 State (bogus) interface.
-//
-
-void synthv1_lv2::updatePreset ( bool /*bDirty*/ )
+void synthv1_lv2::updateTuning (void)
{
- if (m_schedule /*&& bDirty*/) {
+ if (m_schedule) {
synthv1_lv2_worker_message mesg;
- mesg.atom.type = m_urids.state_StateChanged;
+ mesg.atom.type = m_urids.tun1_update;
mesg.atom.size = 0; // nothing else matters.
m_schedule->schedule_work(
m_schedule->handle, sizeof(mesg), &mesg);
@@ -318,24 +541,43 @@
}
-bool synthv1_lv2::worker_work ( const void *data, uint32_t /*size*/ )
+bool synthv1_lv2::worker_work ( const void *data, uint32_t size )
{
+ if (size != sizeof(synthv1_lv2_worker_message))
+ return false;
+
const synthv1_lv2_worker_message *mesg
= (const synthv1_lv2_worker_message *) data;
return (mesg->atom.type == m_urids.state_StateChanged);
+ if (mesg->atom.type == m_urids.state_StateChanged)
+ return true;
+ else
+ if (mesg->atom.type == m_urids.tun1_update) {
+ synthv1::resetTuning();
+ return true;
+ }
+
+ return false;
}
-bool synthv1_lv2::worker_response ( const void *data, uint32_t /*size*/ )
+bool synthv1_lv2::worker_response ( const void *data, uint32_t size )
{
+ if (size != sizeof(synthv1_lv2_worker_message))
+ return false;
+
const synthv1_lv2_worker_message *mesg
= (const synthv1_lv2_worker_message *) data;
if (mesg->atom.type == m_urids.state_StateChanged)
return state_changed();
- else
- return false;
+
+#ifdef CONFIG_LV2_PATCH
+ return patch_put(m_ndelta, mesg->atom.type);
+#else
+ return true;
+#endif
}
@@ -351,6 +593,60 @@
}
+#ifdef CONFIG_LV2_PATCH
+
+bool synthv1_lv2::patch_put ( uint32_t ndelta, uint32_t type )
+{
+ static char s_szNull[1] = {'\0'};
+
+ if (type == m_urids.patch_Put)
+ type = 0;
+
+ lv2_atom_forge_frame_time(&m_forge, ndelta);
+
+ LV2_Atom_Forge_Frame patch_frame;
+ lv2_atom_forge_object(&m_forge, &patch_frame, 0, m_urids.patch_Put);
+ lv2_atom_forge_key(&m_forge, m_urids.patch_body);
+
+ LV2_Atom_Forge_Frame body_frame;
+ lv2_atom_forge_object(&m_forge, &body_frame, 0, 0);
+
+ if (type == 0 || type == m_urids.p201_tuning_enabled) {
+ lv2_atom_forge_key(&m_forge, m_urids.p201_tuning_enabled);
+ lv2_atom_forge_bool(&m_forge, synthv1::isTuningEnabled());
+ }
+ if (type == 0 || type == m_urids.p202_tuning_refPitch) {
+ lv2_atom_forge_key(&m_forge, m_urids.p202_tuning_refPitch);
+ lv2_atom_forge_float(&m_forge, synthv1::tuningRefPitch());
+ }
+ if (type == 0 || type == m_urids.p203_tuning_refNote) {
+ lv2_atom_forge_key(&m_forge, m_urids.p203_tuning_refNote);
+ lv2_atom_forge_int(&m_forge, synthv1::tuningRefNote());
+ }
+ if (type == 0 || type == m_urids.p204_tuning_scaleFile) {
+ const char *pszScaleFile = synthv1::tuningScaleFile();
+ if (pszScaleFile == nullptr)
+ pszScaleFile = s_szNull;
+ lv2_atom_forge_key(&m_forge, m_urids.p204_tuning_scaleFile);
+ lv2_atom_forge_path(&m_forge, pszScaleFile, ::strlen(pszScaleFile) + 1);
+ }
+ if (type == 0 || type == m_urids.p205_tuning_keyMapFile) {
+ const char *pszKeyMapFile = synthv1::tuningKeyMapFile();
+ if (pszKeyMapFile == nullptr)
+ pszKeyMapFile = s_szNull;
+ lv2_atom_forge_key(&m_forge, m_urids.p205_tuning_keyMapFile);
+ lv2_atom_forge_path(&m_forge, pszKeyMapFile, ::strlen(pszKeyMapFile) + 1);
+ }
+
+ lv2_atom_forge_pop(&m_forge, &body_frame);
+ lv2_atom_forge_pop(&m_forge, &patch_frame);
+
+ return true;
+}
+
+#endif // CONFIG_LV2_PATCH
+
+
//-------------------------------------------------------------------------
// synthv1_lv2 - LV2 desc.
//
@@ -413,7 +709,7 @@
if (pPlugin)
return pPlugin->get_program(index);
else
- return NULL;
+ return nullptr;
}
static void synthv1_lv2_programs_select_program (
@@ -454,7 +750,7 @@
if (pSynth && pSynth->worker_response(data, size))
return LV2_WORKER_SUCCESS;
else
- return LV2_WORKER_SUCCESS;
+ return LV2_WORKER_ERR_UNKNOWN;
}
@@ -462,7 +758,7 @@
{
synthv1_lv2_worker_work,
synthv1_lv2_worker_response,
- NULL
+ nullptr
};
@@ -475,8 +771,11 @@
#endif
if (::strcmp(uri, LV2_WORKER__interface) == 0)
return &synthv1_lv2_worker_interface;
+ else
+ if (::strcmp(uri, LV2_STATE__interface) == 0)
+ return &synthv1_lv2_state_interface;
- return NULL;
+ return nullptr;
}
@@ -495,7 +794,7 @@
LV2_SYMBOL_EXPORT const LV2_Descriptor *lv2_descriptor ( uint32_t index )
{
- return (index == 0 ? &synthv1_lv2_descriptor : NULL);
+ return (index == 0 ? &synthv1_lv2_descriptor : nullptr);
}
diff -Nru synthv1-0.8.6/src/synthv1_lv2.h synthv1-0.9.10+git20190929/src/synthv1_lv2.h
--- synthv1-0.8.6/src/synthv1_lv2.h 2017-12-20 07:56:50.310842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_lv2.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_lv2.h
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -24,7 +24,6 @@
#include "synthv1.h"
-#include "lv2.h"
#include "lv2/lv2plug.in/ns/ext/urid/urid.h"
#include "lv2/lv2plug.in/ns/ext/atom/atom.h"
#include "lv2/lv2plug.in/ns/ext/atom/forge.h"
@@ -84,19 +83,32 @@
protected:
void updatePreset(bool bDirty);
+ void updateTuning();
bool state_changed();
+#ifdef CONFIG_LV2_PATCH
+ bool patch_put(uint32_t ndelta, uint32_t type = 0);
+#endif
+
private:
LV2_URID_Map *m_urid_map;
struct lv2_urids
{
+ LV2_URID p201_tuning_enabled;
+ LV2_URID p202_tuning_refPitch;
+ LV2_URID p203_tuning_refNote;
+ LV2_URID p204_tuning_scaleFile;
+ LV2_URID p205_tuning_keyMapFile;
+ LV2_URID tun1_update;
LV2_URID atom_Blank;
LV2_URID atom_Object;
LV2_URID atom_Float;
LV2_URID atom_Int;
+ LV2_URID atom_Bool;
+ LV2_URID atom_Path;
LV2_URID time_Position;
LV2_URID time_beatsPerMinute;
LV2_URID midi_MidiEvent;
@@ -104,7 +116,14 @@
LV2_URID bufsz_maxBlockLength;
LV2_URID bufsz_nominalBlockLength;
LV2_URID state_StateChanged;
-
+ #ifdef CONFIG_LV2_PATCH
+ LV2_URID patch_Get;
+ LV2_URID patch_Set;
+ LV2_URID patch_Put;
+ LV2_URID patch_body;
+ LV2_URID patch_property;
+ LV2_URID patch_value;
+ #endif
} m_urids;
LV2_Atom_Forge m_forge;
diff -Nru synthv1-0.8.6/src/synthv1_lv2ui.cpp synthv1-0.9.10+git20190929/src/synthv1_lv2ui.cpp
--- synthv1-0.8.6/src/synthv1_lv2ui.cpp 2017-12-20 07:56:50.310842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_lv2ui.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_lv2ui.cpp
//
/****************************************************************************
- Copyright (C) 2012-2015, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -61,7 +61,7 @@
// synthv1_lv2ui - LV2 UI desc.
//
-static QApplication *synthv1_lv2ui_qapp_instance = NULL;
+static QApplication *synthv1_lv2ui_qapp_instance = nullptr;
static unsigned int synthv1_lv2ui_qapp_refcount = 0;
@@ -71,7 +71,7 @@
LV2UI_Controller controller, LV2UI_Widget *widget,
const LV2_Feature *const *features )
{
- synthv1_lv2 *pSynth = NULL;
+ synthv1_lv2 *pSynth = nullptr;
for (int i = 0; features && features[i]; ++i) {
if (::strcmp(features[i]->URI, LV2_INSTANCE_ACCESS_URI) == 0) {
@@ -80,12 +80,12 @@
}
}
- if (pSynth == NULL)
- return NULL;
+ if (pSynth == nullptr)
+ return nullptr;
- if (qApp == NULL && synthv1_lv2ui_qapp_instance == NULL) {
+ if (qApp == nullptr && synthv1_lv2ui_qapp_instance == nullptr) {
static int s_argc = 1;
- static const char *s_argv[] = { __func__, NULL };
+ static const char *s_argv[] = { __func__, nullptr };
synthv1_lv2ui_qapp_instance = new QApplication(s_argc, (char **) s_argv);
}
synthv1_lv2ui_qapp_refcount++;
@@ -101,10 +101,12 @@
synthv1widget_lv2 *pWidget = static_cast (ui);
if (pWidget) {
delete pWidget;
+ #if 0//Avoid destructing the possibly shared QApplication instance...
if (--synthv1_lv2ui_qapp_refcount == 0 && synthv1_lv2ui_qapp_instance) {
delete synthv1_lv2ui_qapp_instance;
- synthv1_lv2ui_qapp_instance = NULL;
+ synthv1_lv2ui_qapp_instance = nullptr;
}
+ #endif
}
}
@@ -173,6 +175,29 @@
#endif // CONFIG_LV2_UI_IDLE
+
+#ifdef CONFIG_LV2_UI_RESIZE
+
+int synthv1_lv2ui_resize ( LV2UI_Handle ui, int width, int height )
+{
+ synthv1widget_lv2 *pWidget = static_cast (ui);
+ if (pWidget) {
+ pWidget->resize(width, height);
+ return 0;
+ } else {
+ return 1;
+ }
+}
+
+static const LV2UI_Resize synthv1_lv2ui_resize_interface =
+{
+ nullptr, // handle: host should use its own when calling ui_resize().
+ synthv1_lv2ui_resize
+};
+
+#endif // CONFIG_LV2_UI_RESIZE
+
+
static const void *synthv1_lv2ui_extension_data ( const char *uri )
{
#ifdef CONFIG_LV2_UI_IDLE
@@ -185,11 +210,67 @@
return (void *) &synthv1_lv2ui_show_interface;
else
#endif
- return NULL;
+#ifdef CONFIG_LV2_UI_RESIZE
+ if (::strcmp(uri, LV2_UI__resize) == 0)
+ return (void *) &synthv1_lv2ui_resize_interface;
+ else
+#endif
+ return nullptr;
}
-#ifdef CONFIG_LV2_EXTERNAL_UI
+#ifdef CONFIG_LV2_UI_X11
+
+static LV2UI_Handle synthv1_lv2ui_x11_instantiate (
+ const LV2UI_Descriptor *, const char *, const char *,
+ LV2UI_Write_Function write_function,
+ LV2UI_Controller controller, LV2UI_Widget *widget,
+ const LV2_Feature *const *ui_features )
+{
+ WId winid, parent = 0;
+ LV2UI_Resize *resize = nullptr;
+ synthv1_lv2 *pSynth = nullptr;
+
+ for (int i = 0; ui_features[i]; ++i) {
+ if (::strcmp(ui_features[i]->URI, LV2_INSTANCE_ACCESS_URI) == 0)
+ pSynth = static_cast (ui_features[i]->data);
+ else
+ if (::strcmp(ui_features[i]->URI, LV2_UI__parent) == 0)
+ parent = (WId) ui_features[i]->data;
+ else
+ if (::strcmp(ui_features[i]->URI, LV2_UI__resize) == 0)
+ resize = (LV2UI_Resize *) ui_features[i]->data;
+ }
+
+ if (pSynth == nullptr)
+ return nullptr;
+ if (!parent)
+ return nullptr;
+
+ if (qApp == nullptr && synthv1_lv2ui_qapp_instance == nullptr) {
+ static int s_argc = 1;
+ static const char *s_argv[] = { __func__, nullptr };
+ synthv1_lv2ui_qapp_instance = new QApplication(s_argc, (char **) s_argv);
+ }
+ synthv1_lv2ui_qapp_refcount++;
+
+ synthv1widget_lv2 *pWidget
+ = new synthv1widget_lv2(pSynth, controller, write_function);
+ if (resize && resize->handle) {
+ const QSize& hint = pWidget->sizeHint();
+ resize->ui_resize(resize->handle, hint.width(), hint.height());
+ }
+ winid = pWidget->winId();
+ pWidget->windowHandle()->setParent(QWindow::fromWinId(parent));
+ pWidget->show();
+ *widget = (LV2UI_Widget) winid;
+ return pWidget;
+}
+
+#endif // CONFIG_LV2_UI_X11
+
+
+#ifdef CONFIG_LV2_UI_EXTERNAL
struct synthv1_lv2ui_external_widget
{
@@ -233,8 +314,8 @@
LV2UI_Controller controller, LV2UI_Widget *widget,
const LV2_Feature *const *ui_features )
{
- synthv1_lv2 *pSynth = NULL;
- LV2_External_UI_Host *external_host = NULL;
+ synthv1_lv2 *pSynth = nullptr;
+ LV2_External_UI_Host *external_host = nullptr;
for (int i = 0; ui_features[i] && !external_host; ++i) {
if (::strcmp(ui_features[i]->URI, LV2_INSTANCE_ACCESS_URI) == 0)
@@ -246,9 +327,9 @@
}
}
- if (qApp == NULL && synthv1_lv2ui_qapp_instance == NULL) {
+ if (qApp == nullptr && synthv1_lv2ui_qapp_instance == nullptr) {
static int s_argc = 1;
- static const char *s_argv[] = { __func__, NULL };
+ static const char *s_argv[] = { __func__, nullptr };
synthv1_lv2ui_qapp_instance = new QApplication(s_argc, (char **) s_argv);
}
synthv1_lv2ui_qapp_refcount++;
@@ -274,7 +355,7 @@
delete pExtWidget;
if (--synthv1_lv2ui_qapp_refcount == 0 && synthv1_lv2ui_qapp_instance) {
delete synthv1_lv2ui_qapp_instance;
- synthv1_lv2ui_qapp_instance = NULL;
+ synthv1_lv2ui_qapp_instance = nullptr;
}
}
}
@@ -291,10 +372,10 @@
static const void *synthv1_lv2ui_external_extension_data ( const char * )
{
- return NULL;
+ return nullptr;
}
-#endif // CONFIG_LV2_EXTERNAL_UI
+#endif // CONFIG_LV2_UI_EXTERNAL
static const LV2UI_Descriptor synthv1_lv2ui_descriptor =
@@ -306,7 +387,18 @@
synthv1_lv2ui_extension_data
};
-#ifdef CONFIG_LV2_EXTERNAL_UI
+#ifdef CONFIG_LV2_UI_X11
+static const LV2UI_Descriptor synthv1_lv2ui_x11_descriptor =
+{
+ SYNTHV1_LV2UI_X11_URI,
+ synthv1_lv2ui_x11_instantiate,
+ synthv1_lv2ui_cleanup,
+ synthv1_lv2ui_port_event,
+ synthv1_lv2ui_extension_data
+};
+#endif // CONFIG_LV2_UI_X11
+
+#ifdef CONFIG_LV2_UI_EXTERNAL
static const LV2UI_Descriptor synthv1_lv2ui_external_descriptor =
{
SYNTHV1_LV2UI_EXTERNAL_URI,
@@ -315,7 +407,7 @@
synthv1_lv2ui_external_port_event,
synthv1_lv2ui_external_extension_data
};
-#endif // CONFIG_LV2_EXTERNAL_UI
+#endif // CONFIG_LV2_UI_EXTERNAL
LV2_SYMBOL_EXPORT const LV2UI_Descriptor *lv2ui_descriptor ( uint32_t index )
@@ -323,12 +415,17 @@
if (index == 0)
return &synthv1_lv2ui_descriptor;
else
-#ifdef CONFIG_LV2_EXTERNAL_UI
+#ifdef CONFIG_LV2_UI_X11
if (index == 1)
+ return &synthv1_lv2ui_x11_descriptor;
+ else
+#endif
+#ifdef CONFIG_LV2_UI_EXTERNAL
+ if (index == 2)
return &synthv1_lv2ui_external_descriptor;
else
#endif
- return NULL;
+ return nullptr;
}
diff -Nru synthv1-0.8.6/src/synthv1_lv2ui.h synthv1-0.9.10+git20190929/src/synthv1_lv2ui.h
--- synthv1-0.8.6/src/synthv1_lv2ui.h 2017-12-20 07:56:50.310842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_lv2ui.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_lv2ui.h
//
/****************************************************************************
- Copyright (C) 2012-2015, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -24,17 +24,22 @@
#include "synthv1_ui.h"
-#include "lv2.h"
#include "lv2/lv2plug.in/ns/extensions/ui/ui.h"
#define SYNTHV1_LV2UI_URI SYNTHV1_LV2_PREFIX "ui"
-#ifdef CONFIG_LV2_EXTERNAL_UI
+#ifdef CONFIG_LV2_UI_X11
+#include
+#define SYNTHV1_LV2UI_X11_URI SYNTHV1_LV2_PREFIX "ui_x11"
+#endif
+
+#ifdef CONFIG_LV2_UI_EXTERNAL
#include "lv2_external_ui.h"
#define SYNTHV1_LV2UI_EXTERNAL_URI SYNTHV1_LV2_PREFIX "ui_external"
#endif
+
// Forward decls.
class synthv1_lv2;
diff -Nru synthv1-0.8.6/src/synthv1_nsm.cpp synthv1-0.9.10+git20190929/src/synthv1_nsm.cpp
--- synthv1-0.8.6/src/synthv1_nsm.cpp 2017-12-20 07:56:50.310842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_nsm.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_nsm.cpp
//
/****************************************************************************
- Copyright (C) 2012-2013, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -19,11 +19,8 @@
*****************************************************************************/
-#include "synthv1_config.h"
-
#include "synthv1_nsm.h"
-
#include
#include
@@ -42,7 +39,7 @@
{
synthv1_nsm *pNsmClient
= static_cast (user_data);
- if (pNsmClient == NULL)
+ if (pNsmClient == nullptr)
return -1;
if (strcmp(&argv[0]->s, "/nsm/server/announce"))
@@ -59,7 +56,7 @@
{
synthv1_nsm *pNsmClient
= static_cast (user_data);
- if (pNsmClient == NULL)
+ if (pNsmClient == nullptr)
return -1;
if (strcmp(&argv[0]->s, "/nsm/server/announce"))
@@ -76,7 +73,7 @@
{
synthv1_nsm *pNsmClient
= static_cast (user_data);
- if (pNsmClient == NULL)
+ if (pNsmClient == nullptr)
return -1;
pNsmClient->nsm_open(&argv[0]->s, &argv[1]->s, &argv[2]->s);
@@ -90,7 +87,7 @@
{
synthv1_nsm *pNsmClient
= static_cast (user_data);
- if (pNsmClient == NULL)
+ if (pNsmClient == nullptr)
return -1;
pNsmClient->nsm_save();
@@ -104,7 +101,7 @@
{
synthv1_nsm *pNsmClient
= static_cast (user_data);
- if (pNsmClient == NULL)
+ if (pNsmClient == nullptr)
return -1;
pNsmClient->nsm_loaded();
@@ -118,7 +115,7 @@
{
synthv1_nsm *pNsmClient
= static_cast (user_data);
- if (pNsmClient == NULL)
+ if (pNsmClient == nullptr)
return -1;
pNsmClient->nsm_show();
@@ -132,7 +129,7 @@
{
synthv1_nsm *pNsmClient
= static_cast (user_data);
- if (pNsmClient == NULL)
+ if (pNsmClient == nullptr)
return -1;
pNsmClient->nsm_hide();
@@ -150,16 +147,16 @@
const QString& nsm_url, QObject *pParent )
: QObject(pParent),
#ifdef CONFIG_LIBLO
- m_address(NULL),
- m_thread(NULL),
- m_server(NULL),
+ m_address(nullptr),
+ m_thread(nullptr),
+ m_server(nullptr),
#endif
m_active(false)
{
#ifdef CONFIG_LIBLO
m_address = lo_address_new_from_url(nsm_url.toUtf8().constData());
int proto = lo_address_get_protocol(m_address);
- m_thread = lo_server_thread_new_with_proto(NULL, proto, NULL);
+ m_thread = lo_server_thread_new_with_proto(nullptr, proto, nullptr);
if (m_thread) {
m_server = lo_server_thread_get_server(m_thread);
lo_server_thread_add_method(m_thread,
diff -Nru synthv1-0.8.6/src/synthv1_nsm.h synthv1-0.9.10+git20190929/src/synthv1_nsm.h
--- synthv1-0.8.6/src/synthv1_nsm.h 2017-12-20 07:56:50.310842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_nsm.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_nsm.h
//
/****************************************************************************
- Copyright (C) 2012-2013, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -22,6 +22,8 @@
#ifndef __synthv1_nsm_h
#define __synthv1_nsm_h
+#include "synthv1_config.h"
+
#include
#ifdef CONFIG_LIBLO
diff -Nru synthv1-0.8.6/src/synthv1_param.cpp synthv1-0.9.10+git20190929/src/synthv1_param.cpp
--- synthv1-0.8.6/src/synthv1_param.cpp 2017-12-20 07:56:50.310842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_param.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_param.cpp
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -64,6 +64,7 @@
{ "DCO1_TUNING", PARAM_FLOAT, 0.0f, -1.0f, 1.0f }, // DCO1 Tuning
{ "DCO1_GLIDE", PARAM_FLOAT, 0.0f, 0.0f, 1.0f }, // DCO1 Glide
{ "DCO1_ENVTIME", PARAM_FLOAT, 0.5f, 0.0f, 1.0f }, // DCO1 Env.Time
+ { "DCF1_ENABLED", PARAM_BOOL, 1.0f, 0.0f, 1.0f }, // DCF1 Enabled
{ "DCF1_CUTOFF", PARAM_FLOAT, 0.5f, 0.0f, 1.0f }, // DCF1 Cutoff
{ "DCF1_RESO", PARAM_FLOAT, 0.0f, 0.0f, 1.0f }, // DCF1 Resonance
{ "DCF1_TYPE", PARAM_INT, 0.0f, 0.0f, 3.0f }, // DCF1 Type
@@ -73,6 +74,7 @@
{ "DCF1_DECAY", PARAM_FLOAT, 0.2f, 0.0f, 1.0f }, // DCF1 Decay
{ "DCF1_SUSTAIN", PARAM_FLOAT, 0.5f, 0.0f, 1.0f }, // DCF1 Sustain
{ "DCF1_RELEASE", PARAM_FLOAT, 0.5f, 0.0f, 1.0f }, // DCF1 Release
+ { "LFO1_ENABLED", PARAM_BOOL, 1.0f, 0.0f, 1.0f }, // LFO1 Enabled
{ "LFO1_SHAPE", PARAM_INT, 1.0f, 0.0f, 4.0f }, // LFO1 Wave Shape
{ "LFO1_WIDTH", PARAM_FLOAT, 1.0f, 0.0f, 1.0f }, // LFO1 Wave Width
{ "LFO1_BPM", PARAM_FLOAT, 180.0f, 0.0f, 360.0f }, // LFO1 BPM
@@ -123,6 +125,7 @@
{ "DCO2_TUNING", PARAM_FLOAT, 0.0f, -1.0f, 1.0f }, // DCO2 Tuning
{ "DCO2_GLIDE", PARAM_FLOAT, 0.0f, 0.0f, 1.0f }, // DCO2 Glide
{ "DCO2_ENVTIME", PARAM_FLOAT, 0.5f, 0.0f, 1.0f }, // DCO2 Env.Time
+ { "DCF2_ENABLED", PARAM_BOOL, 1.0f, 0.0f, 1.0f }, // DCF2 Enabled
{ "DCF2_CUTOFF", PARAM_FLOAT, 0.5f, 0.0f, 1.0f }, // DCF2 Cutoff
{ "DCF2_RESO", PARAM_FLOAT, 0.0f, 0.0f, 1.0f }, // DCF2 Resonance
{ "DCF2_TYPE", PARAM_INT, 0.0f, 0.0f, 3.0f }, // DCF2 Type
@@ -132,6 +135,7 @@
{ "DCF2_DECAY", PARAM_FLOAT, 0.2f, 0.0f, 1.0f }, // DCF2 Decay
{ "DCF2_SUSTAIN", PARAM_FLOAT, 0.5f, 0.0f, 1.0f }, // DCF2 Sustain
{ "DCF2_RELEASE", PARAM_FLOAT, 0.5f, 0.0f, 1.0f }, // DCF2 Release
+ { "LFO2_ENABLED", PARAM_BOOL, 1.0f, 0.0f, 1.0f }, // LFO2 Enabled
{ "LFO2_SHAPE", PARAM_INT, 1.0f, 0.0f, 4.0f }, // LFO2 Wave Shape
{ "LFO2_WIDTH", PARAM_FLOAT, 1.0f, 0.0f, 1.0f }, // LFO2 Wave Width
{ "LFO2_BPM", PARAM_FLOAT, 180.0f, 0.0f, 360.0f }, // LFO2 BPM
@@ -190,7 +194,10 @@
{ "REV1_FEEDB", PARAM_FLOAT, 0.5f, 0.0f, 1.0f }, // Reverb Feedback
{ "REV1_WIDTH", PARAM_FLOAT, 0.0f, -1.0f, 1.0f }, // Reverb Width
{ "DYN1_COMPRESS", PARAM_BOOL, 0.0f, 0.0f, 1.0f }, // Dynamic Compressor
- { "DYN1_LIMITER", PARAM_BOOL, 1.0f, 0.0f, 1.0f } // Dynamic Limiter
+ { "DYN1_LIMITER", PARAM_BOOL, 1.0f, 0.0f, 1.0f }, // Dynamic Limiter
+
+ { "KEY1_LOW", PARAM_INT, 0.0f, 0.0f, 127.0f }, // Keyboard Low
+ { "KEY1_HIGH", PARAM_INT, 127.0f, 0.0f, 127.0f } // Keyboard High
};
@@ -206,6 +213,25 @@
}
+float synthv1_param::paramSafeValue ( synthv1::ParamIndex index, float fValue )
+{
+ const ParamInfo& param = synthv1_params[index];
+
+ if (param.type == PARAM_BOOL)
+ return (fValue > 0.5f ? 1.0f : 0.0f);
+
+ if (fValue < param.min)
+ return param.min;
+ if (fValue > param.max)
+ return param.max;
+
+ if (param.type == PARAM_INT)
+ return ::rintf(fValue);
+ else
+ return fValue;
+}
+
+
float synthv1_param::paramValue ( synthv1::ParamIndex index, float fScale )
{
const ParamInfo& param = synthv1_params[index];
@@ -244,12 +270,11 @@
}
-
// Preset serialization methods.
bool synthv1_param::loadPreset (
synthv1 *pSynth, const QString& sFilename )
{
- if (pSynth == NULL)
+ if (pSynth == nullptr)
return false;
QFileInfo fi(sFilename);
@@ -270,6 +295,11 @@
if (!file.open(QIODevice::ReadOnly))
return false;
+ const bool running = pSynth->running(false);
+
+ pSynth->setTuningEnabled(false);
+ pSynth->reset();
+
static QHash s_hash;
if (s_hash.isEmpty()) {
for (uint32_t i = 0; i < synthv1::NUM_PARAMS; ++i) {
@@ -309,17 +339,24 @@
index = s_hash.value(sName);
}
const float fValue = eParam.text().toFloat();
- pSynth->setParamValue(index, fValue);
+ pSynth->setParamValue(index,
+ synthv1_param::paramSafeValue(index, fValue));
}
}
}
+ else
+ if (eChild.tagName() == "tuning") {
+ synthv1_param::loadTuning(pSynth, eChild);
+ }
}
}
}
file.close();
+ pSynth->stabilize();
pSynth->reset();
+ pSynth->running(running);
QDir::setCurrent(currentDir.absolutePath());
@@ -328,11 +365,13 @@
bool synthv1_param::savePreset (
- synthv1 *pSynth, const QString& sFilename, bool /*bSymLink*/ )
+ synthv1 *pSynth, const QString& sFilename, bool bSymLink )
{
- if (pSynth == NULL)
+ if (pSynth == nullptr)
return false;
+ pSynth->stabilize();
+
const QFileInfo fi(sFilename);
const QDir currentDir(QDir::current());
QDir::setCurrent(fi.absolutePath());
@@ -353,6 +392,13 @@
eParams.appendChild(eParam);
}
ePreset.appendChild(eParams);
+
+ if (pSynth->isTuningEnabled()) {
+ QDomElement eTuning = doc.createElement("tuning");
+ synthv1_param::saveTuning(pSynth, doc, eTuning, bSymLink);
+ ePreset.appendChild(eTuning);
+ }
+
doc.appendChild(ePreset);
QFile file(fi.filePath());
@@ -368,4 +414,126 @@
}
+// Tuning serialization methods.
+void synthv1_param::loadTuning (
+ synthv1 *pSynth, const QDomElement& eTuning )
+{
+ if (pSynth == nullptr)
+ return;
+
+ pSynth->setTuningEnabled(eTuning.attribute("enabled").toInt() > 0);
+
+ for (QDomNode nChild = eTuning.firstChild();
+ !nChild.isNull();
+ nChild = nChild.nextSibling()) {
+ QDomElement eChild = nChild.toElement();
+ if (eChild.isNull())
+ continue;
+ if (eChild.tagName() == "enabled") {
+ pSynth->setTuningEnabled(eChild.text().toInt() > 0);
+ }
+ if (eChild.tagName() == "ref-pitch") {
+ pSynth->setTuningRefPitch(eChild.text().toFloat());
+ }
+ else
+ if (eChild.tagName() == "ref-note") {
+ pSynth->setTuningRefNote(eChild.text().toInt());
+ }
+ else
+ if (eChild.tagName() == "scale-file") {
+ const QString& sScaleFile
+ = eChild.text();
+ const QByteArray aScaleFile
+ = synthv1_param::loadFilename(sScaleFile).toUtf8();
+ pSynth->setTuningScaleFile(aScaleFile.constData());
+ }
+ else
+ if (eChild.tagName() == "keymap-file") {
+ const QString& sKeyMapFile
+ = eChild.text();
+ const QByteArray aKeyMapFile
+ = synthv1_param::loadFilename(sKeyMapFile).toUtf8();
+ pSynth->setTuningScaleFile(aKeyMapFile.constData());
+ }
+ }
+
+ // Consolidate tuning state...
+ pSynth->resetTuning();
+}
+
+
+void synthv1_param::saveTuning (
+ synthv1 *pSynth, QDomDocument& doc, QDomElement& eTuning, bool bSymLink )
+{
+ if (pSynth == nullptr)
+ return;
+
+ eTuning.setAttribute("enabled", int(pSynth->isTuningEnabled()));
+
+ QDomElement eRefPitch = doc.createElement("ref-pitch");
+ eRefPitch.appendChild(doc.createTextNode(
+ QString::number(pSynth->tuningRefPitch())));
+ eTuning.appendChild(eRefPitch);
+
+ QDomElement eRefNote = doc.createElement("ref-note");
+ eRefNote.appendChild(doc.createTextNode(
+ QString::number(pSynth->tuningRefNote())));
+ eTuning.appendChild(eRefNote);
+
+ const char *pszScaleFile = pSynth->tuningScaleFile();
+ if (pszScaleFile) {
+ const QString& sScaleFile
+ = QString::fromUtf8(pszScaleFile);
+ if (!sScaleFile.isEmpty()) {
+ QDomElement eScaleFile = doc.createElement("scale-file");
+ eScaleFile.appendChild(doc.createTextNode(
+ QDir::current().relativeFilePath(
+ synthv1_param::saveFilename(sScaleFile, bSymLink))));
+ eTuning.appendChild(eScaleFile);
+ }
+ }
+
+ const char *pszKeyMapFile = pSynth->tuningKeyMapFile();
+ if (pszKeyMapFile) {
+ const QString& sKeyMapFile
+ = QString::fromUtf8(pszKeyMapFile);
+ if (!sKeyMapFile.isEmpty()) {
+ QDomElement eKeyMapFile = doc.createElement("keymap-file");
+ eKeyMapFile.appendChild(doc.createTextNode(
+ QDir::current().relativeFilePath(
+ synthv1_param::saveFilename(sKeyMapFile, bSymLink))));
+ eTuning.appendChild(eKeyMapFile);
+ }
+ }
+}
+
+
+// Load/save and convert canonical/absolute filename helpers.
+QString synthv1_param::loadFilename ( const QString& sFilename )
+{
+ QFileInfo fi(sFilename);
+ if (fi.isSymLink())
+ fi.setFile(fi.symLinkTarget());
+ return fi.canonicalFilePath();
+}
+
+
+QString synthv1_param::saveFilename ( const QString& sFilename, bool bSymLink )
+{
+ QFileInfo fi(sFilename);
+ if (bSymLink && fi.absolutePath() != QDir::current().absolutePath()) {
+ const QString& sPath = fi.absoluteFilePath();
+ const QString& sName = fi.baseName();
+ const QString& sExt = fi.completeSuffix();
+ const QString& sLink = sName
+ + '-' + QString::number(qHash(sPath), 16)
+ + '.' + sExt;
+ QFile(sPath).link(sLink);
+ fi.setFile(QDir::current(), sLink);
+ }
+ else if (fi.isSymLink()) fi.setFile(fi.symLinkTarget());
+ return fi.absoluteFilePath();
+}
+
+
// end of synthv1_param.cpp
diff -Nru synthv1-0.8.6/src/synthv1_param.h synthv1-0.9.10+git20190929/src/synthv1_param.h
--- synthv1-0.8.6/src/synthv1_param.h 2017-12-20 07:56:50.310842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_param.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_param.h
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -44,12 +44,24 @@
const QString& sFilename,
bool bSymLink = false);
+ // Tuning serialization methods.
+ void loadTuning(synthv1 *pSynth,
+ const QDomElement& eTuning);
+ void saveTuning(synthv1 *pSynth,
+ QDomDocument& doc, QDomElement& eTuning,
+ bool bSymLink = false);
+
// Default parameter name/value helpers.
const char *paramName(synthv1::ParamIndex index);
float paramDefaultValue(synthv1::ParamIndex index);
+ float paramSafeValue(synthv1::ParamIndex index, float fValue);
float paramValue(synthv1::ParamIndex index, float fScale);
float paramScale(synthv1::ParamIndex index, float fValue);
bool paramFloat(synthv1::ParamIndex index);
+
+ // Load/save and convert canonical/absolute filename helpers.
+ QString loadFilename(const QString& sFilename);
+ QString saveFilename(const QString& sFilename, bool bSymLink);
};
diff -Nru synthv1-0.8.6/src/synthv1.qrc synthv1-0.9.10+git20190929/src/synthv1.qrc
--- synthv1-0.8.6/src/synthv1.qrc 2017-12-20 07:56:50.308842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1.qrc 2019-09-28 23:00:43.000000000 +0000
@@ -9,6 +9,7 @@
images/presetBank.png
images/presetBankOpen.png
images/presetEdit.png
+ images/fileOpen.png
images/synthv1.png
images/synthv1_preset.png
images/synthv1_control.png
diff -Nru synthv1-0.8.6/src/synthv1_ramp.h synthv1-0.9.10+git20190929/src/synthv1_ramp.h
--- synthv1-0.8.6/src/synthv1_ramp.h 2017-12-20 07:56:50.311842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_ramp.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_ramp.h
//
/****************************************************************************
- Copyright (C) 2012-2014, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -46,7 +46,7 @@
m_frames = 0;
}
- ~synthv1_ramp()
+ virtual ~synthv1_ramp()
{
delete [] m_delta;
delete [] m_value1;
diff -Nru synthv1-0.8.6/src/synthv1_sched.cpp synthv1-0.9.10+git20190929/src/synthv1_sched.cpp
--- synthv1-0.8.6/src/synthv1_sched.cpp 2017-12-20 07:56:50.311842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_sched.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_sched.cpp
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -37,7 +37,7 @@
public:
// ctor.
- synthv1_sched_thread(uint32_t nsize = 8);
+ synthv1_sched_thread(uint32_t nsize = 32);
// dtor.
~synthv1_sched_thread();
@@ -70,10 +70,10 @@
};
-static synthv1_sched_thread *g_sched_thread = NULL;
+static synthv1_sched_thread *g_sched_thread = nullptr;
static uint32_t g_sched_refcount = 0;
-static QHash > g_sched_notifiers;
+static QHash > g_sched_notifiers;
//-------------------------------------------------------------------------
@@ -146,7 +146,7 @@
synthv1_sched *sched = m_items[r];
if (sched) {
sched->sync_process();
- m_items[r] = NULL;
+ m_items[r] = nullptr;
}
++r &= m_nmask;
}
@@ -178,7 +178,7 @@
::memset(m_items, 0, m_nsize * sizeof(int));
- if (++g_sched_refcount == 1 && g_sched_thread == NULL) {
+ if (++g_sched_refcount == 1 && g_sched_thread == nullptr) {
g_sched_thread = new synthv1_sched_thread();
g_sched_thread->start();
}
@@ -193,7 +193,7 @@
if (--g_sched_refcount == 0) {
if (g_sched_thread) {
delete g_sched_thread;
- g_sched_thread = NULL;
+ g_sched_thread = nullptr;
}
}
}
@@ -254,9 +254,9 @@
void synthv1_sched::sync_notify ( synthv1 *pSynth, Type stype, int sid )
{
if (g_sched_notifiers.contains(pSynth)) {
- const QList& list
+ const QList& list
= g_sched_notifiers.value(pSynth);
- QListIterator iter(list);
+ QListIterator iter(list);
while (iter.hasNext())
iter.next()->notify(stype, sid);
}
@@ -264,22 +264,22 @@
//-------------------------------------------------------------------------
-// synthv1_sched_notifier - worker/schedule proxy decl.
+// synthv1_sched::Notifier - worker/schedule proxy decl.
//
// ctor.
-synthv1_sched_notifier::synthv1_sched_notifier ( synthv1 *pSynth )
+synthv1_sched::Notifier::Notifier ( synthv1 *pSynth )
: m_pSynth(pSynth)
{
- g_sched_notifiers[m_pSynth].append(this);
+ g_sched_notifiers[pSynth].append(this);
}
// dtor.
-synthv1_sched_notifier::~synthv1_sched_notifier (void)
+synthv1_sched::Notifier::~Notifier (void)
{
if (g_sched_notifiers.contains(m_pSynth)) {
- QList& list = g_sched_notifiers[m_pSynth];
+ QList& list = g_sched_notifiers[m_pSynth];
list.removeAll(this);
if (list.isEmpty())
g_sched_notifiers.remove(m_pSynth);
diff -Nru synthv1-0.8.6/src/synthv1_sched.h synthv1-0.9.10+git20190929/src/synthv1_sched.h
--- synthv1-0.8.6/src/synthv1_sched.h 2017-12-20 07:56:50.311842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_sched.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_sched.h
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -63,6 +63,27 @@
// signal broadcast (static).
static void sync_notify(synthv1 *pSynth, Type stype, int sid);
+ // Notifier - Worker/schedule proxy decl.
+ //
+ class Notifier
+ {
+ public:
+
+ // ctor.
+ Notifier(synthv1 *pSynth);
+
+ // dtor.
+ virtual ~Notifier();
+
+ // signal notifier.
+ virtual void notify(synthv1_sched::Type stype, int sid) const = 0;
+
+ private:
+
+ // instance variables.
+ synthv1 *m_pSynth;
+ };
+
private:
// instance variables.
@@ -83,30 +104,6 @@
};
-//-------------------------------------------------------------------------
-// synthv1_sched_notifier - worker/schedule proxy decl.
-//
-
-class synthv1_sched_notifier
-{
-public:
-
- // ctor.
- synthv1_sched_notifier(synthv1 *pSynth);
-
- // dtor.
- ~synthv1_sched_notifier();
-
- // signal notifier.
- virtual void notify(synthv1_sched::Type stype, int sid) const = 0;
-
-private:
-
- // instance variables.
- synthv1 *m_pSynth;
-};
-
-
#endif // __synthv1_sched_h
// end of synthv1_sched.h
diff -Nru synthv1-0.8.6/src/synthv1_tuning.cpp synthv1-0.9.10+git20190929/src/synthv1_tuning.cpp
--- synthv1-0.8.6/src/synthv1_tuning.cpp 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_tuning.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -0,0 +1,347 @@
+// synthv1_tuning.cpp
+//
+/****************************************************************************
+ Copyright (C) 2012-2018, rncbc aka Rui Nuno Capela. All rights reserved.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+*****************************************************************************/
+
+//-------------------------------------------------------------------------
+// TuningMap
+//
+// -- borrowed, stirred and refactored from amsynth --
+// https://github.com/amsynth/amsynth
+// Copyright (C) 2001-2012 Nick Dowell
+//
+
+/*
+ * A TuningMap consists of two parts.
+ *
+ * The "key map" maps from MIDI note numbers to logical note numbers
+ * for the scale. This is often the identity mapping, but if your
+ * scale has, for example, 11 notes in it, you'll want to skip one
+ * per octave so the scale lines up with the pattern of keys on a
+ * standard keyboard.
+ *
+ * The "scale" maps from those logical note numbers to actual pitches.
+ * In terms of member variables, "scale" and "scaleDesc" belong to the
+ * scale, and everything else belongs to the mapping.
+ *
+ * For more information, refer to http://www.huygens-fokker.org/scala/
+ */
+
+#include "synthv1_tuning.h"
+
+#include
+#include
+
+#include
+
+
+// Default ctor.
+synthv1_tuning::synthv1_tuning ( float refPitch, int refNote )
+{
+ reset(refPitch, refNote);
+}
+
+
+// Default is 12-tone equal temperament, wstern standard mapping.
+void synthv1_tuning::reset ( float refPitch, int refNote )
+{
+ m_refPitch = refPitch;
+ m_refNote = refNote;
+ m_zeroNote = 0;
+
+ m_scale.clear();
+
+ for (int i = 0; i < 12; ++i)
+ m_scale.push_back(::powf(2.0f, (i + 1) / 12.0f));
+
+ m_mapRepeatInc = 1;
+
+ m_mapping.clear();
+ m_mapping.push_back(0);
+
+ updateBasePitch();
+}
+
+
+void synthv1_tuning::updateBasePitch (void)
+{
+ // Clever, huh?
+ m_basePitch = 1.0f;
+ m_basePitch = m_refPitch / noteToPitch(m_refNote);
+}
+
+
+// Load custom Scala key-map file (.kbm)
+bool synthv1_tuning::loadKeyMapFile ( const QString& keyMapFile )
+{
+ QFile file(keyMapFile);
+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
+ return false;
+
+ QTextStream fs(&file);
+ int mapSize = -1;
+ int firstNote = -1;
+ int lastNote = -1;
+ int zeroNote = -1;
+ int refNote = -1;
+ float refPitch = 0.0f;
+ int mapRepeatInc = -1;
+ QVector mapping;
+
+ while (!fs.atEnd()) {
+ const QString& line
+ = fs.readLine().simplified();
+ // Skip all-whitespace lines...
+ if (line.isEmpty())
+ continue;
+ // Skip comment lines...
+ if (line.at(0) == '!')
+ continue;
+ bool ok = false;
+ const QString& val
+ = line.section(' ', 0, 0);
+ // An active range should be defined on this line...
+ if (line.at(0) == '<') {
+ // No overlap is checked for;
+ // it wouldn't hurt anything if ranges overlapped.
+ const int min = line.section(' ', 1, 1).toInt(&ok);
+ if (!ok || min < 0)
+ return false;
+ ok = false;
+ const int max = line.section(' ', 2, 2).toInt(&ok);
+ if (!ok || max < min || max > 127)
+ return false;
+ }
+ else
+ if (mapSize < 0) {
+ mapSize = val.toInt(&ok);
+ if (!ok || mapSize < 0)
+ return false;
+ }
+ else
+ if (firstNote < 0) {
+ firstNote = val.toInt(&ok);
+ if (!ok || firstNote < 0 || firstNote > 127)
+ return false;
+ }
+ else
+ if (lastNote < 0) {
+ lastNote = val.toInt(&ok);
+ if (!ok || lastNote < 0 || lastNote > 127)
+ return false;
+ }
+ else
+ if (zeroNote < 0) {
+ zeroNote = val.toInt(&ok);
+ if (!ok || zeroNote < 0 || zeroNote > 127)
+ return false;
+ }
+ else
+ if (refNote < 0) {
+ refNote = val.toInt(&ok);
+ if (!ok || refNote < 0 || refNote > 127)
+ return false;
+ }
+ else
+ if (refPitch <= 0.0f) {
+ refPitch = val.toFloat(&ok);
+ if (!ok || refPitch < 0.001f)
+ return false;
+ }
+ else
+ if (mapRepeatInc < 0) {
+ mapRepeatInc = val.toInt(&ok);
+ if (!ok || mapRepeatInc < 0)
+ return false;
+ }
+ else
+ if (line.at(0).toLower() == 'x') {
+ mapping.push_back(-1); // unmapped key
+ }
+ else {
+ const int mapEntry = val.toInt(&ok);
+ if (!ok || mapEntry < 0)
+ return false;
+ mapping.push_back(mapEntry);
+ }
+ }
+
+ // Didn't get far enough?
+ if (mapRepeatInc < 0)
+ return false;
+
+ // Special case for "automatic" linear mapping
+ if (mapSize == 0) {
+ if (!mapping.empty())
+ return false;
+ m_keyMapFile = keyMapFile;
+ m_zeroNote = zeroNote;
+ m_refNote = refNote;
+ m_refPitch = refPitch;
+ m_mapRepeatInc = 1;
+ m_mapping.clear();
+ m_mapping.push_back(0);
+ updateBasePitch();
+ return true;
+ }
+
+ // Some of the kbm files included with Scala have
+ // extra x's at the end for no good reason
+ //if (mapping.size() > mapSize)
+ // return false;
+
+ mapping.resize(mapSize);
+
+ // Check to make sure reference pitch is actually mapped
+ int refIndex = (refNote - zeroNote) % mapSize;
+ if (refIndex < 0)
+ refIndex += mapSize;
+ if (mapping.at(refIndex) < 0)
+ return false;
+
+ m_keyMapFile = keyMapFile;
+ m_zeroNote = zeroNote;
+ m_refNote = refNote;
+ m_refPitch = refPitch;
+
+ if (mapRepeatInc == 0)
+ m_mapRepeatInc = mapSize;
+ else
+ m_mapRepeatInc = mapRepeatInc;
+
+ m_mapping = mapping;
+
+ updateBasePitch();
+ return true;
+}
+
+
+// Load custom Scala scale file (.scl)
+bool synthv1_tuning::loadScaleFile ( const QString& scaleFile )
+{
+ QFile file(scaleFile);
+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
+ return false;
+
+ QTextStream fs(&file);
+ QString scaleDesc;
+ int scaleSize = -1;
+ QVector scale;
+
+ while (!fs.atEnd()) {
+ const QString& line
+ = fs.readLine().simplified();
+ // Skip all-whitespace lines after description...
+ if (line.isEmpty() && !scaleDesc.isEmpty())
+ continue;
+ // Skip comment lines
+ if (line.at(0) == '!')
+ continue;
+ if (scaleDesc.isEmpty())
+ scaleDesc = line;
+ else
+ if (scaleSize < 0) {
+ bool ok = false;
+ scaleSize = line.section(' ', 0, 0).toInt(&ok);
+ if (!ok || scaleSize < 0)
+ return false;
+ }
+ else scale.push_back(parseScaleLine(line));
+ }
+
+ if (scaleDesc.isEmpty() || scale.size() != scaleSize)
+ return false;
+
+ m_scaleFile = scaleFile;
+ m_scaleDesc = scaleDesc;
+
+ m_scale = scale;
+
+ updateBasePitch();
+ return true;
+}
+
+
+// Convert a single line of a Scala scale file to a frequency relative to 1/1.
+float synthv1_tuning::parseScaleLine ( const QString& line ) const
+{
+ bool ok = false;
+
+ if (line.contains('.')) {
+ // Treat as cents...
+ const float cents = line.section(' ', 0, 0).toFloat(&ok);
+ if (!ok || cents < 0.001f)
+ return 0.0f;
+ else
+ return ::powf(2.0f, cents / 1200.0f);
+ } else {
+ // Treat as ratio...
+ const long n = line.section('/', 0, 0).toLong(&ok);
+ if (!ok || n < 0)
+ return 0.0f;
+ ok = false;
+ const long d = line.section('/', 1, 1).toLong(&ok);
+ if (!ok || d < 0)
+ return 0.0f;
+ else
+ return float(n) / float(d);
+ }
+}
+
+
+// The main pitch/frequency (Hz) getter.
+float synthv1_tuning::noteToPitch ( int note ) const
+{
+ if (note < 0 || note > 127 || m_mapping.empty())
+ return 0.0f;
+
+ const int mapSize = m_mapping.size();
+
+ int nRepeats = (note - m_zeroNote) / mapSize;
+ int mapIndex = (note - m_zeroNote) % mapSize;
+
+ if (mapIndex < 0) {
+ mapIndex += mapSize;
+ --nRepeats;
+ }
+
+ if (m_mapping.at(mapIndex) < 0)
+ return 0.0f; // unmapped note
+
+ const int scaleDegree = nRepeats * m_mapRepeatInc + m_mapping.at(mapIndex);
+ const int scaleSize = m_scale.size();
+
+ int nOctaves = scaleDegree / scaleSize;
+ int scaleIndex = scaleDegree % scaleSize;
+
+ if (scaleIndex < 0) {
+ scaleIndex += scaleSize;
+ --nOctaves;
+ }
+
+ const float pitch
+ = m_basePitch * ::powf(m_scale.at(scaleSize - 1), nOctaves);
+ if (scaleIndex > 0)
+ return pitch * m_scale.at(scaleIndex - 1);
+ else
+ return pitch;
+}
+
+
+// end of synthv1_tuning.cpp
diff -Nru synthv1-0.8.6/src/synthv1_tuning.h synthv1-0.9.10+git20190929/src/synthv1_tuning.h
--- synthv1-0.8.6/src/synthv1_tuning.h 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_tuning.h 2019-09-28 23:00:43.000000000 +0000
@@ -0,0 +1,108 @@
+// synthv1_tuning.h
+//
+/****************************************************************************
+ Copyright (C) 2012-2018, rncbc aka Rui Nuno Capela. All rights reserved.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+*****************************************************************************/
+
+#ifndef __synthv1_tuning_h
+#define __synthv1_tuning_h
+
+#include
+#include
+
+//-------------------------------------------------------------------------
+// TuningMap
+//
+// -- borrowed, stirred and refactored from amsynth --
+// https://github.com/amsynth/amsynth
+// Copyright (C) 2001-2012 Nick Dowell
+//
+
+/*
+ * A TuningMap consists of two parts.
+ *
+ * The "key map" maps from MIDI note numbers to logical note numbers
+ * for the scale. This is often the identity mapping, but if your
+ * scale has, for example, 11 notes in it, you'll want to skip one
+ * per octave so the scale lines up with the pattern of keys on a
+ * standard keyboard.
+ *
+ * The "scale" maps from those logical note numbers to actual pitches.
+ * In terms of member variables, "scale" and "scaleDesc" belong to the
+ * scale, and everything else belongs to the mapping.
+ *
+ * For more information, refer to http://www.huygens-fokker.org/scala/
+ */
+
+class synthv1_tuning
+{
+public:
+
+ // Default reference note and pitch (A4 @440hz)
+ synthv1_tuning(float refPitch = 440.0f, int refNote = 69);
+
+ // Default 12-tone equal temperament, wstern standard mapping
+ void reset(float refPitch, int refNote);
+
+ // Reference note and pitch accessors.
+ float refPitch() const { return m_refPitch; }
+ int refNote() const { return m_refNote; }
+
+ // Load custom Scala key map file (.kbm)
+ bool loadKeyMapFile (const QString& filename);
+
+ // Load custom Scala scale file (.scl)
+ bool loadScaleFile (const QString& filename);
+
+ const QString& keyMapFile() const { return m_keyMapFile; }
+
+ const QString& scaleFile() const { return m_scaleFile; }
+ const QString& scaleDesc() const { return m_scaleDesc; }
+
+ // The main pitch/frequency (Hz) getter
+ float noteToPitch(int note) const;
+
+protected:
+
+ float parseScaleLine(const QString& line) const;
+
+ void updateBasePitch();
+
+private:
+
+ // Instance member variables.
+ QString m_keyMapFile;
+
+ QString m_scaleFile;
+ QString m_scaleDesc;
+
+ QVector m_scale;
+
+ float m_refPitch;
+ int m_refNote;
+ int m_zeroNote;
+ int m_mapRepeatInc;
+ float m_basePitch;
+
+ QVector m_mapping;
+};
+
+
+#endif // __synthv1_tuning_h
+
+// end of synthv1_tuning.h
diff -Nru synthv1-0.8.6/src/synthv1_ui.cpp synthv1-0.9.10+git20190929/src/synthv1_ui.cpp
--- synthv1-0.8.6/src/synthv1_ui.cpp 2017-12-20 07:56:50.311842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_ui.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_ui.cpp
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -110,4 +110,88 @@
}
+void synthv1_ui::setTuningEnabled ( bool enabled )
+{
+ m_pSynth->setTuningEnabled(enabled);
+}
+
+bool synthv1_ui::isTuningEnabled (void) const
+{
+ return m_pSynth->isTuningEnabled();
+}
+
+
+void synthv1_ui::setTuningRefPitch ( float refPitch )
+{
+ m_pSynth->setTuningRefPitch(refPitch);
+}
+
+float synthv1_ui::tuningRefPitch (void) const
+{
+ return m_pSynth->tuningRefPitch();
+}
+
+
+void synthv1_ui::setTuningRefNote ( int refNote )
+{
+ m_pSynth->setTuningRefNote(refNote);
+}
+
+int synthv1_ui::tuningRefNote (void) const
+{
+ return m_pSynth->tuningRefNote();
+}
+
+
+void synthv1_ui::setTuningScaleFile ( const char *pszScaleFile )
+{
+ m_pSynth->setTuningScaleFile(pszScaleFile);
+}
+
+const char *synthv1_ui::tuningScaleFile (void) const
+{
+ return m_pSynth->tuningScaleFile();
+}
+
+
+void synthv1_ui::setTuningKeyMapFile ( const char *pszKeyMapFile )
+{
+ m_pSynth->setTuningKeyMapFile(pszKeyMapFile);
+}
+
+const char *synthv1_ui::tuningKeyMapFile (void) const
+{
+ return m_pSynth->tuningKeyMapFile();
+}
+
+
+void synthv1_ui::resetTuning (void)
+{
+ m_pSynth->resetTuning();
+}
+
+
+// MIDI note/octave name helper (static).
+QString synthv1_ui::noteName ( int note )
+{
+ static const char *s_notes[] =
+ {
+ QT_TR_NOOP("C"),
+ QT_TR_NOOP("C#/Db"),
+ QT_TR_NOOP("D"),
+ QT_TR_NOOP("D#/Eb"),
+ QT_TR_NOOP("E"),
+ QT_TR_NOOP("F"),
+ QT_TR_NOOP("F#/Gb"),
+ QT_TR_NOOP("G"),
+ QT_TR_NOOP("G#/Ab"),
+ QT_TR_NOOP("A"),
+ QT_TR_NOOP("A#/Bb"),
+ QT_TR_NOOP("B")
+ };
+
+ return QString("%1 %2").arg(s_notes[note % 12]).arg((note / 12) - 1);
+}
+
+
// end of synthv1_ui.cpp
diff -Nru synthv1-0.8.6/src/synthv1_ui.h synthv1-0.9.10+git20190929/src/synthv1_ui.h
--- synthv1-0.8.6/src/synthv1_ui.h 2017-12-20 07:56:50.311842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_ui.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_ui.h
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -59,6 +59,26 @@
void directNoteOn(int note, int vel);
+ void setTuningEnabled(bool enabled);
+ bool isTuningEnabled() const;
+
+ void setTuningRefPitch(float refPitch);
+ float tuningRefPitch() const;
+
+ void setTuningRefNote(int refNote);
+ int tuningRefNote() const;
+
+ void setTuningScaleFile(const char *pszScaleFile);
+ const char *tuningScaleFile() const;
+
+ void setTuningKeyMapFile(const char *pszKeyMapFile);
+ const char *tuningKeyMapFile() const;
+
+ void resetTuning();
+
+ // MIDI note/octave name helper.
+ static QString noteName(int note);
+
private:
synthv1 *m_pSynth;
diff -Nru synthv1-0.8.6/src/synthv1_wave.cpp synthv1-0.9.10+git20190929/src/synthv1_wave.cpp
--- synthv1-0.8.6/src/synthv1_wave.cpp 2017-12-20 07:56:50.311842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_wave.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_wave.cpp
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -38,7 +38,7 @@
// ctor.
synthv1_wave_sched (synthv1_wave *wave)
- : synthv1_sched(NULL, Wave), m_wave(wave) {}
+ : synthv1_sched(nullptr, Wave), m_wave(wave) {}
// process reset (virtual).
void process(int)
@@ -59,8 +59,8 @@
synthv1_wave::synthv1_wave ( uint32_t nsize, uint16_t nover, uint16_t ntabs )
: m_nsize(nsize), m_nover(nover), m_ntabs(ntabs),
m_shape(Saw), m_width(1.0f), m_bandl(false),
- m_srate(44100.0f), m_srand(0),
- m_min_freq(0.0f), m_max_freq(0.0f), m_sched(NULL)
+ m_srate(44100.0f), m_phase0(0.0f), m_srand(0),
+ m_min_freq(0.0f), m_max_freq(0.0f), m_sched(nullptr)
{
const uint16_t ntabs1 = m_ntabs + 1;
@@ -121,7 +121,7 @@
break;
case Noise:
reset_noise();
- // thru...
+ // Fall thru...
default:
break;
}
@@ -438,19 +438,25 @@
uint32_t i;
float pmax = 0.0f;
- float pmin = 0.0f;
+ float pmid = 0.0f;
- for (i = 0; i < m_nsize; ++i) {
- const float p = frames[i];
- if (pmax < p)
- pmax = p;
- else
- if (pmin > p)
- pmin = p;
+ if (m_ntabs > 0) {
+ for (i = 0; i < m_nsize; ++i)
+ pmid += frames[i];
+ pmid /= float(m_nsize);
+ } else {
+ for (i = 0; i < m_nsize; ++i) {
+ const float p = frames[i];
+ if (pmax < p)
+ pmax = p;
+ else
+ if (pmid > p)
+ pmid = p;
+ }
+ pmid = 0.5f * (pmax + pmid);
+ pmax = 0.0f;
}
- const float pmid = 0.5f * (pmax + pmin);
-
pmax = 0.0f;
for (i = 0; i < m_nsize; ++i) {
frames[i] -= pmid;
@@ -477,14 +483,14 @@
frames[i] = frames[i - m_nsize];
if (itab == m_ntabs) {
- uint32_t pk = 0;
+ uint32_t k = 0;
for (i = 1; i < m_nsize; ++i) {
const float p1 = frames[i - 1];
const float p2 = frames[i];
if (p1 < 0.0f && p2 >= 0.0f)
- pk = i;
+ k = i;
}
- m_phase0 = float(pk);
+ m_phase0 = float(k) / float(m_nsize);
}
}
diff -Nru synthv1-0.8.6/src/synthv1_wave.h synthv1-0.9.10+git20190929/src/synthv1_wave.h
--- synthv1-0.8.6/src/synthv1_wave.h 2017-12-20 07:56:50.311842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1_wave.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1_wave.h
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -50,7 +50,7 @@
{ return m_shape; }
float width() const
{ return m_width; }
- bool bandlimited() const
+ bool bandl() const
{ return m_bandl; }
// sample rate.
@@ -101,15 +101,13 @@
};
// begin.
- float start(Phase& phase, float pshift = 0.0f, float freq = 0.0f)
+ float start(Phase& phase, float pshift = 0.0f, float freq = 0.0f) const
{
- const float p0 = float(m_nsize);
-
update(phase, freq);
- phase.phase = m_phase0 + pshift * p0;
- if (phase.phase >= p0)
- phase.phase -= p0;
+ phase.phase = m_phase0 + pshift;
+ if (phase.phase >= 1.0f)
+ phase.phase -= 1.0f;
return sample(phase, freq);
}
@@ -117,13 +115,13 @@
// iterate.
float sample(Phase& phase, float freq) const
{
- const uint32_t i = uint32_t(phase.phase);
- const float alpha = phase.phase - float(i);
- const float p0 = float(m_nsize);
-
- phase.phase += p0 * freq / m_srate;
- if (phase.phase >= p0) {
- phase.phase -= p0;
+ const float index = phase.phase * float(m_nsize);
+ const uint32_t i = uint32_t(index);
+ const float alpha = index - float(i);
+
+ phase.phase += freq / m_srate;
+ if (phase.phase >= 1.0f) {
+ phase.phase -= 1.0f;
if (phase.slave)
phase.slave->phase = phase.slave_phase0;
}
@@ -163,18 +161,15 @@
// absolute value.
float value(float phase) const
{
- const float p0 = float(m_nsize);
-
- phase *= p0;
phase += m_phase0;
- if (phase >= p0)
- phase -= p0;
+ if (phase >= 1.0f)
+ phase -= 1.0f;
- return m_tables[m_ntabs][uint32_t(phase)];
+ return m_tables[m_ntabs][uint32_t(phase * float(m_nsize))];
}
// post-iter.
- void update(Phase& phase, float freq)
+ void update(Phase& phase, float freq) const
{
if (freq < m_min_freq) {
phase.itab = m_ntabs;
@@ -314,6 +309,13 @@
}
}
+ // phase-shift accessor.
+ float pshift() const
+ {
+ const float pshift = m_wave->phase0() + m_phase.phase;
+ return (pshift >= 1.0f ? pshift - 1.0f : pshift);
+ }
+
private:
synthv1_wave *m_wave;
diff -Nru synthv1-0.8.6/src/synthv1widget_config.cpp synthv1-0.9.10+git20190929/src/synthv1widget_config.cpp
--- synthv1-0.8.6/src/synthv1widget_config.cpp 2017-12-20 07:56:50.325842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget_config.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1widget_config.cpp
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -30,7 +30,12 @@
#include "ui_synthv1widget_config.h"
#include
+#include
+
#include
+#include
+#include
+#include
#include
@@ -54,6 +59,22 @@
//m_ui.CustomStyleThemeComboBox->addItem(tr("(default)"));
m_ui.CustomStyleThemeComboBox->addItems(QStyleFactory::keys());
+ // Note names.
+ QStringList notes;
+ for (int note = 0; note < 128; ++note)
+ notes << synthv1_ui::noteName(note);
+ m_ui.TuningRefNoteComboBox->insertItems(0, notes);
+
+ // Tuning specifics setup...
+ m_ui.TuningTabBar->addTab(tr("&Global"));
+ m_ui.TuningTabBar->addTab(tr("&Instance"));
+
+ // Dialog dirty flags.
+ m_iDirtyTuning = 0;
+ m_iDirtyControls = 0;
+ m_iDirtyPrograms = 0;
+ m_iDirtyOptions = 0;
+
// Setup options...
synthv1_config *pConfig = synthv1_config::getInstance();
if (pConfig && m_pSynthUi) {
@@ -69,6 +90,7 @@
m_ui.CustomStyleThemeComboBox->setCurrentIndex(iCustomStyleTheme);
m_ui.CustomStyleThemeTextLabel->setEnabled(!bPlugin);
m_ui.CustomStyleThemeComboBox->setEnabled(!bPlugin);
+ m_ui.RandomizePercentSpinBox->setValue(pConfig->fRandomizePercent);
// Load controllers database...
synthv1_controls *pControls = m_pSynthUi->controls();
if (pControls) {
@@ -84,6 +106,13 @@
m_ui.ProgramsPreviewCheckBox->setEnabled(!bPlugin);
m_ui.ProgramsEnabledCheckBox->setChecked(pPrograms->enabled());
}
+ // Initialize conveniency options...
+ loadComboBoxHistory(m_ui.TuningScaleFileComboBox);
+ loadComboBoxHistory(m_ui.TuningKeyMapFileComboBox);
+ // Micro-tonal tuning settings...
+ const int iTuningTab = (m_pSynthUi->isTuningEnabled() ? 1 : 0);
+ m_ui.TuningTabBar->setCurrentIndex(iTuningTab);
+ tuningTabChanged(iTuningTab);
}
// Signal/slots connections...
@@ -146,6 +175,35 @@
SIGNAL(customContextMenuRequested(const QPoint&)),
SLOT(programsContextMenuRequested(const QPoint&)));
+ // Tuning slots...
+ QObject::connect(m_ui.TuningTabBar,
+ SIGNAL(currentChanged(int)),
+ SLOT(tuningTabChanged(int)));
+ QObject::connect(m_ui.TuningEnabledCheckBox,
+ SIGNAL(toggled(bool)),
+ SLOT(tuningChanged()));
+ QObject::connect(m_ui.TuningRefNoteComboBox,
+ SIGNAL(activated(int)),
+ SLOT(tuningChanged()));
+ QObject::connect(m_ui.TuningRefPitchSpinBox,
+ SIGNAL(valueChanged(double)),
+ SLOT(tuningChanged()));
+ QObject::connect(m_ui.TuningRefNotePushButton,
+ SIGNAL(clicked()),
+ SLOT(tuningRefNoteClicked()));
+ QObject::connect(m_ui.TuningScaleFileComboBox,
+ SIGNAL(activated(const QString&)),
+ SLOT(tuningChanged()));
+ QObject::connect(m_ui.TuningScaleFileToolButton,
+ SIGNAL(clicked()),
+ SLOT(tuningScaleFileClicked()));
+ QObject::connect(m_ui.TuningKeyMapFileToolButton,
+ SIGNAL(clicked()),
+ SLOT(tuningKeyMapFileClicked()));
+ QObject::connect(m_ui.TuningKeyMapFileComboBox,
+ SIGNAL(activated(const QString&)),
+ SLOT(tuningChanged()));
+
// Options slots...
QObject::connect(m_ui.ProgramsPreviewCheckBox,
SIGNAL(toggled(bool)),
@@ -162,6 +220,9 @@
QObject::connect(m_ui.CustomStyleThemeComboBox,
SIGNAL(activated(int)),
SLOT(optionsChanged()));
+ QObject::connect(m_ui.RandomizePercentSpinBox,
+ SIGNAL(valueChanged(double)),
+ SLOT(optionsChanged()));
// Dialog commands...
QObject::connect(m_ui.DialogButtonBox,
@@ -171,11 +232,6 @@
SIGNAL(rejected()),
SLOT(reject()));
- // Dialog dirty flags.
- m_iDirtyControls = 0;
- m_iDirtyPrograms = 0;
- m_iDirtyOptions = 0;
-
// Done.
stabilize();
}
@@ -237,7 +293,7 @@
QMenu menu(this);
QAction *pAction;
- bool bEnabled = (m_pSynthUi && m_pSynthUi->controls() != NULL);
+ bool bEnabled = (m_pSynthUi && m_pSynthUi->controls() != nullptr);
pAction = menu.addAction(QIcon(":/images/synthv1_preset.png"),
tr("&Add Controller"), this, SLOT(controlsAddItem()));
@@ -245,7 +301,7 @@
menu.addSeparator();
- bEnabled = bEnabled && (pItem != NULL);
+ bEnabled = bEnabled && (pItem != nullptr);
pAction = menu.addAction(QIcon(":/images/presetEdit.png"),
tr("&Edit"), this, SLOT(controlsEditItem()));
@@ -332,7 +388,7 @@
QMenu menu(this);
QAction *pAction;
- bool bEnabled = (m_pSynthUi && m_pSynthUi->programs() != NULL);
+ bool bEnabled = (m_pSynthUi && m_pSynthUi->programs() != nullptr);
pAction = menu.addAction(QIcon(":/images/presetBank.png"),
tr("Add &Bank"), this, SLOT(programsAddBankItem()));
@@ -344,7 +400,7 @@
menu.addSeparator();
- bEnabled = bEnabled && (pItem != NULL);
+ bEnabled = bEnabled && (pItem != nullptr);
pAction = menu.addAction(QIcon(":/images/presetEdit.png"),
tr("&Edit"), this, SLOT(programsEditItem()));
@@ -392,6 +448,173 @@
}
+// tuning command slots
+void synthv1widget_config::tuningTabChanged ( int iTuningTab )
+{
+ // Prevent loss of some tuning changes here...
+ if (m_iDirtyTuning > 0 &&
+ QMessageBox::warning(this,
+ tr("Warning"),
+ tr("%1 tuning settings have been changed.\n\n"
+ "Do you want to discard the changes?")
+ .arg(m_ui.TuningTabBar->tabText(1 - iTuningTab).remove('&')),
+ QMessageBox::Discard | QMessageBox::Cancel)
+ == QMessageBox::Cancel) {
+ const bool bBlockSignals = m_ui.TuningTabBar->blockSignals(true);
+ m_ui.TuningTabBar->setCurrentIndex(1 - iTuningTab);
+ m_ui.TuningTabBar->blockSignals(bBlockSignals);
+ return;
+ }
+
+ if (iTuningTab == 0) {
+ // Global (default) scope...
+ synthv1_config *pConfig = synthv1_config::getInstance();
+ if (pConfig) {
+ m_ui.TuningEnabledCheckBox->setChecked(pConfig->bTuningEnabled);
+ m_ui.TuningRefNoteComboBox->setCurrentIndex(pConfig->iTuningRefNote);
+ m_ui.TuningRefPitchSpinBox->setValue(double(pConfig->fTuningRefPitch));
+ setComboBoxCurrentItem(
+ m_ui.TuningScaleFileComboBox,
+ QFileInfo(pConfig->sTuningScaleFile));
+ setComboBoxCurrentItem(
+ m_ui.TuningKeyMapFileComboBox,
+ QFileInfo(pConfig->sTuningKeyMapFile));
+ }
+ }
+ else
+ if (m_pSynthUi) {
+ // Instance scope...
+ m_ui.TuningEnabledCheckBox->setChecked(m_pSynthUi->isTuningEnabled());
+ m_ui.TuningRefNoteComboBox->setCurrentIndex(m_pSynthUi->tuningRefNote());
+ m_ui.TuningRefPitchSpinBox->setValue(double(m_pSynthUi->tuningRefPitch()));
+ setComboBoxCurrentItem(
+ m_ui.TuningScaleFileComboBox,
+ QFileInfo(QString::fromUtf8(m_pSynthUi->tuningScaleFile())));
+ setComboBoxCurrentItem(
+ m_ui.TuningKeyMapFileComboBox,
+ QFileInfo(QString::fromUtf8(m_pSynthUi->tuningKeyMapFile())));
+ }
+
+ // Reset tuning dirty flag...
+ m_iDirtyTuning = 0;
+}
+
+
+void synthv1widget_config::tuningRefNoteClicked (void)
+{
+ m_ui.TuningRefNoteComboBox->setCurrentIndex(69);
+ m_ui.TuningRefPitchSpinBox->setValue(double(440.0f));
+
+ tuningChanged();
+}
+
+
+void synthv1widget_config::tuningScaleFileClicked (void)
+{
+ synthv1_config *pConfig = synthv1_config::getInstance();
+ if (pConfig == nullptr)
+ return;
+
+ QString sTuningScaleFile = m_ui.TuningScaleFileComboBox->currentText();
+
+ const QString sExt("scl");
+ const QString& sTitle = tr("Open Scale File");
+
+ QStringList filters;
+ filters.append(tr("Scale files (*.%1)").arg(sExt));
+ filters.append(tr("All files (*.*)"));
+ const QString& sFilter = filters.join(";;");
+
+ QWidget *pParentWidget = nullptr;
+ QFileDialog::Options options = 0;
+ if (pConfig->bDontUseNativeDialogs) {
+ options |= QFileDialog::DontUseNativeDialog;
+ pParentWidget = QWidget::window();
+ }
+#if 1//QT_VERSION < QT_VERSION_CHECK(4, 4, 0)
+ sTuningScaleFile = QFileDialog::getOpenFileName(pParentWidget,
+ sTitle, pConfig->sTuningScaleDir, sFilter, nullptr, options);
+#else
+ QFileDialog fileDialog(pParentWidget,
+ sTitle, sTuningScaleFile, sFilter);
+ fileDialog.setAcceptMode(QFileDialog::AcceptOpen);
+ fileDialog.setFileMode(QFileDialog::ExistingFiles);
+ fileDialog.setDefaultSuffix(sExt);
+ QList urls(fileDialog.sidebarUrls());
+ urls.append(QUrl::fromLocalFile(pConfig->sTuningScaleDir));
+ fileDialog.setSidebarUrls(urls);
+ fileDialog.setOptions(options);
+ if (fileDialog.exec())
+ sTuningScaleFile = fileDialog.selectedFiles().first();
+#endif
+
+ if (!sTuningScaleFile.isEmpty()) {
+ const QFileInfo info(sTuningScaleFile);
+ if (setComboBoxCurrentItem(m_ui.TuningScaleFileComboBox, info)) {
+ pConfig->sTuningScaleDir = info.absolutePath();
+ tuningChanged();
+ }
+ }
+}
+
+
+void synthv1widget_config::tuningKeyMapFileClicked (void)
+{
+ synthv1_config *pConfig = synthv1_config::getInstance();
+ if (pConfig == nullptr)
+ return;
+
+ QString sTuningKeyMapFile = m_ui.TuningKeyMapFileComboBox->currentText();
+
+ const QString sExt("kbm");
+ const QString& sTitle = tr("Open Key Map File");
+
+ QStringList filters;
+ filters.append(tr("Key Map files (*.%1)").arg(sExt));
+ filters.append(tr("All files (*.*)"));
+ const QString& sFilter = filters.join(";;");
+
+ QWidget *pParentWidget = nullptr;
+ QFileDialog::Options options = 0;
+ if (pConfig->bDontUseNativeDialogs) {
+ options |= QFileDialog::DontUseNativeDialog;
+ pParentWidget = QWidget::window();
+ }
+#if 1//QT_VERSION < QT_VERSION_CHECK(4, 4, 0)
+ sTuningKeyMapFile = QFileDialog::getOpenFileName(pParentWidget,
+ sTitle, pConfig->sTuningKeyMapDir, sFilter, nullptr, options);
+#else
+ QFileDialog fileDialog(pParentWidget,
+ sTitle, sTuningScaleFile, sFilter);
+ fileDialog.setAcceptMode(QFileDialog::AcceptOpen);
+ fileDialog.setFileMode(QFileDialog::ExistingFiles);
+ fileDialog.setDefaultSuffix(sExt);
+ QList urls(fileDialog.sidebarUrls());
+ urls.append(QUrl::fromLocalFile(pConfig->sTuningKeyMapDir));
+ fileDialog.setSidebarUrls(urls);
+ fileDialog.setOptions(options);
+ if (fileDialog.exec())
+ sTuningKeyMapFile = fileDialog.selectedFiles().first();
+#endif
+
+ if (!sTuningKeyMapFile.isEmpty()) {
+ const QFileInfo info(sTuningKeyMapFile);
+ if (setComboBoxCurrentItem(m_ui.TuningKeyMapFileComboBox, info)) {
+ pConfig->sTuningKeyMapDir = info.absolutePath();
+ tuningChanged();
+ }
+ }
+}
+
+
+void synthv1widget_config::tuningChanged (void)
+{
+ ++m_iDirtyTuning;
+
+ stabilize();
+}
+
+
// options slot.
void synthv1widget_config::optionsChanged (void)
{
@@ -405,24 +628,41 @@
void synthv1widget_config::stabilize (void)
{
QTreeWidgetItem *pItem = m_ui.ControlsTreeWidget->currentItem();
- bool bEnabled = (m_pSynthUi && m_pSynthUi->controls() != NULL);
+ bool bEnabled = (m_pSynthUi && m_pSynthUi->controls() != nullptr);
m_ui.ControlsAddItemToolButton->setEnabled(bEnabled);
- bEnabled = bEnabled && (pItem != NULL);
+ bEnabled = bEnabled && (pItem != nullptr);
m_ui.ControlsEditToolButton->setEnabled(bEnabled);
m_ui.ControlsDeleteToolButton->setEnabled(bEnabled);
pItem = m_ui.ProgramsTreeWidget->currentItem();
- bEnabled = (m_pSynthUi && m_pSynthUi->programs() != NULL);
+ bEnabled = (m_pSynthUi && m_pSynthUi->programs() != nullptr);
m_ui.ProgramsPreviewCheckBox->setEnabled(
bEnabled && m_ui.ProgramsEnabledCheckBox->isChecked());
m_ui.ProgramsAddBankToolButton->setEnabled(bEnabled);
m_ui.ProgramsAddItemToolButton->setEnabled(bEnabled);
- bEnabled = bEnabled && (pItem != NULL);
+ bEnabled = bEnabled && (pItem != nullptr);
m_ui.ProgramsEditToolButton->setEnabled(bEnabled);
m_ui.ProgramsDeleteToolButton->setEnabled(bEnabled);
+ bEnabled = m_ui.TuningEnabledCheckBox->isChecked();
+ const bool bTuningRefEnabled = bEnabled
+ && comboBoxCurrentItem(m_ui.TuningKeyMapFileComboBox).isEmpty();
+ m_ui.TuningRefNoteTextLabel->setEnabled(bTuningRefEnabled);
+ m_ui.TuningRefNoteComboBox->setEnabled(bTuningRefEnabled);
+ m_ui.TuningRefPitchSpinBox->setEnabled(bTuningRefEnabled);
+ m_ui.TuningRefNotePushButton->setEnabled(bTuningRefEnabled);
+ m_ui.TuningScaleFileTextLabel->setEnabled(bEnabled);
+ m_ui.TuningScaleFileComboBox->setEnabled(bEnabled);
+ m_ui.TuningScaleFileToolButton->setEnabled(bEnabled);
+ m_ui.TuningKeyMapFileTextLabel->setEnabled(bEnabled);
+ m_ui.TuningKeyMapFileComboBox->setEnabled(bEnabled);
+ m_ui.TuningKeyMapFileToolButton->setEnabled(bEnabled);
+
const bool bValid
- = (m_iDirtyControls > 0 || m_iDirtyPrograms > 0 || m_iDirtyOptions > 0);
+ = (m_iDirtyTuning > 0
+ || m_iDirtyControls > 0
+ || m_iDirtyPrograms > 0
+ || m_iDirtyOptions > 0);
m_ui.DialogButtonBox->button(QDialogButtonBox::Ok)->setEnabled(bValid);
}
@@ -432,6 +672,36 @@
{
synthv1_config *pConfig = synthv1_config::getInstance();
+ if (m_iDirtyTuning > 0 && pConfig && m_pSynthUi) {
+ // Micro-tonal tuning settings...
+ if (m_ui.TuningTabBar->currentIndex() == 0) {
+ // Global (default) scope...
+ pConfig->bTuningEnabled = m_ui.TuningEnabledCheckBox->isChecked();
+ pConfig->iTuningRefNote = m_ui.TuningRefNoteComboBox->currentIndex();
+ pConfig->fTuningRefPitch = float(m_ui.TuningRefPitchSpinBox->value());
+ pConfig->sTuningScaleFile = comboBoxCurrentItem(m_ui.TuningScaleFileComboBox);
+ pConfig->sTuningKeyMapFile = comboBoxCurrentItem(m_ui.TuningKeyMapFileComboBox);
+ } else {
+ m_pSynthUi->setTuningEnabled(
+ m_ui.TuningEnabledCheckBox->isChecked());
+ m_pSynthUi->setTuningRefNote(
+ m_ui.TuningRefNoteComboBox->currentIndex());
+ m_pSynthUi->setTuningRefPitch(
+ float(m_ui.TuningRefPitchSpinBox->value()));
+ m_pSynthUi->setTuningScaleFile(comboBoxCurrentItem(
+ m_ui.TuningScaleFileComboBox).toUtf8().constData());
+ m_pSynthUi->setTuningKeyMapFile(comboBoxCurrentItem(
+ m_ui.TuningKeyMapFileComboBox).toUtf8().constData());
+ }
+ // Reset/update micro-tonal tuning...
+ m_pSynthUi->resetTuning();
+ // Save other conveniency options...
+ saveComboBoxHistory(m_ui.TuningScaleFileComboBox);
+ saveComboBoxHistory(m_ui.TuningKeyMapFileComboBox);
+ // Reset dirty flag.
+ m_iDirtyTuning = 0;
+ }
+
if (m_iDirtyControls > 0 && pConfig && m_pSynthUi) {
// Save controls...
synthv1_controls *pControls = m_pSynthUi->controls();
@@ -470,6 +740,7 @@
pConfig->sCustomStyleTheme = m_ui.CustomStyleThemeComboBox->currentText();
else
pConfig->sCustomStyleTheme.clear();
+ pConfig->fRandomizePercent = float(m_ui.RandomizePercentSpinBox->value());
int iNeedRestart = 0;
if (pConfig->sCustomStyleTheme != sOldCustomStyleTheme) {
if (pConfig->sCustomStyleTheme.isEmpty()) {
@@ -482,7 +753,7 @@
// Show restart message if needed...
if (iNeedRestart > 0) {
QMessageBox::information(this,
- tr("Information") + " - " SYNTHV1_TITLE,
+ tr("Information"),
tr("Some settings may be only effective\n"
"next time you start this application."));
}
@@ -500,13 +771,16 @@
bool bReject = true;
// Check if there's any pending changes...
- if (m_iDirtyControls > 0 || m_iDirtyPrograms > 0 || m_iDirtyOptions > 0) {
+ if (m_iDirtyTuning > 0 ||
+ m_iDirtyControls > 0 ||
+ m_iDirtyPrograms > 0 ||
+ m_iDirtyOptions > 0) {
QMessageBox::StandardButtons buttons
= QMessageBox::Discard | QMessageBox::Cancel;
if (m_ui.DialogButtonBox->button(QDialogButtonBox::Ok)->isEnabled())
buttons |= QMessageBox::Apply;
switch (QMessageBox::warning(this,
- tr("Warning") + " - " SYNTHV1_TITLE,
+ tr("Warning"),
tr("Some settings have been changed.\n\n"
"Do you want to apply the changes?"),
buttons)) {
@@ -525,4 +799,88 @@
}
+// Combo box history persistence helper implementation.
+void synthv1widget_config::loadComboBoxHistory ( QComboBox *pComboBox )
+{
+ synthv1_config *pConfig = synthv1_config::getInstance();
+ if (pConfig == nullptr)
+ return;
+
+ // Load combobox list from configuration settings file...
+ const bool bBlockSignals = pComboBox->blockSignals(true);
+ pConfig->beginGroup("/History");
+ const QStringList& history
+ = pConfig->value('/' + pComboBox->objectName()).toStringList();
+ QStringListIterator iter(history);
+ while (iter.hasNext()) {
+ const QFileInfo info(iter.next());
+ if (info.exists() && info.isReadable()) {
+ const QString& sPath = info.canonicalFilePath();
+ pComboBox->insertItem(0, info.fileName(), sPath);
+ }
+ }
+ pConfig->endGroup();
+ pComboBox->blockSignals(bBlockSignals);
+}
+
+
+void synthv1widget_config::saveComboBoxHistory ( QComboBox *pComboBox )
+{
+ synthv1_config *pConfig = synthv1_config::getInstance();
+ if (pConfig == nullptr)
+ return;
+
+ // Save combobox list to configuration settings file...
+ const bool bBlockSignals = pComboBox->blockSignals(true);
+ pConfig->beginGroup("/History");
+ QStringList history;
+ const int iCount = pComboBox->count();
+ for (int i = 0; i < iCount; ++i) {
+ const QString& sData = pComboBox->itemData(i).toString();
+ if (!sData.isEmpty())
+ history.prepend(sData);
+ }
+ pConfig->setValue('/' + pComboBox->objectName(), history);
+ pConfig->endGroup();
+ pComboBox->blockSignals(bBlockSignals);
+}
+
+
+// Combo box settter/gettter helper prototypes.
+bool synthv1widget_config::setComboBoxCurrentItem (
+ QComboBox *pComboBox, const QFileInfo& info )
+{
+ const bool bBlockSignals = pComboBox->blockSignals(true);
+ const bool bResult = info.exists() && info.isReadable();
+ if (bResult) {
+ const QString& sData = info.canonicalFilePath();
+ int iIndex = pComboBox->findData(sData);
+ if (iIndex < 0) {
+ pComboBox->insertItem(0, info.fileName(), sData);
+ iIndex = 0;
+ }
+ pComboBox->setCurrentIndex(iIndex);
+ pComboBox->setToolTip(sData);
+ } else {
+ pComboBox->setCurrentIndex(pComboBox->count() - 1);
+ pComboBox->setToolTip(pComboBox->currentText());
+ }
+ pComboBox->blockSignals(bBlockSignals);
+
+ return bResult;
+}
+
+
+QString synthv1widget_config::comboBoxCurrentItem ( QComboBox *pComboBox )
+{
+ QString sData;
+
+ const int iIndex = pComboBox->currentIndex();
+ if (iIndex >= 0)
+ sData = pComboBox->itemData(iIndex).toString();
+
+ return sData;
+}
+
+
// end of synthv1widget_config.cpp
diff -Nru synthv1-0.8.6/src/synthv1widget_config.h synthv1-0.9.10+git20190929/src/synthv1widget_config.h
--- synthv1-0.8.6/src/synthv1widget_config.h 2017-12-20 07:56:50.325842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget_config.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1widget_config.h
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -32,6 +32,9 @@
class synthv1_ui;
+class QComboBox;
+class QFileInfo;
+
//----------------------------------------------------------------------------
// synthv1widget_config -- UI wrapper form.
@@ -75,6 +78,12 @@
void controlsEnabled(bool);
void programsEnabled(bool);
+ void tuningTabChanged(int);
+ void tuningRefNoteClicked();
+ void tuningScaleFileClicked();
+ void tuningKeyMapFileClicked();
+
+ void tuningChanged();
void controlsChanged();
void programsChanged();
void optionsChanged();
@@ -85,6 +94,14 @@
protected:
+ // Combo box history persistence helper prototypes.
+ void loadComboBoxHistory(QComboBox *pComboBox);
+ void saveComboBoxHistory(QComboBox *pComboBox);
+
+ // Combo box settter/gettter helper prototypes.
+ bool setComboBoxCurrentItem(QComboBox *pComboBox, const QFileInfo& info);
+ QString comboBoxCurrentItem(QComboBox *pComboBox);
+
// stabilizer.
void stabilize();
@@ -98,6 +115,7 @@
synthv1_ui *m_pSynthUi;
// Dialog dirty flag.
+ int m_iDirtyTuning;
int m_iDirtyControls;
int m_iDirtyPrograms;
int m_iDirtyOptions;
diff -Nru synthv1-0.8.6/src/synthv1widget_config.ui synthv1-0.9.10+git20190929/src/synthv1widget_config.ui
--- synthv1-0.8.6/src/synthv1widget_config.ui 2017-12-20 07:56:50.326842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget_config.ui 2019-09-28 23:00:43.000000000 +0000
@@ -3,7 +3,7 @@
rncbc aka Rui Nuno Capela
synthv1 - An old-school polyphonic synthesizer
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -31,7 +31,7 @@
- Configure - synthv1
+ Configure
:/images/synthv1.png
@@ -95,7 +95,7 @@
- -
+
-
Qt::Horizontal
@@ -163,7 +163,45 @@
- -
+
-
+
+
+ &Randomize factor:
+
+
+ RandomizePercentSpinBox
+
+
+
+ -
+
+
+ Randomizer deviation from current value
+
+
+ %
+
+
+ true
+
+
+ 1
+
+
+ 0.1
+
+
+ 100.0
+
+
+ 0.1
+
+
+ 20.0
+
+
+
+ -
Qt::Vertical
@@ -254,7 +292,7 @@
Qt::Horizontal
-
+
20
20
@@ -312,11 +350,11 @@
-
-
-
-
+
+
Whether MIDI bank/programs will be enabled
-
+
E&nabled
@@ -335,11 +373,11 @@
-
-
-
+
+
Whether to preview the current selected program
-
+
&Preview current program
@@ -408,7 +446,7 @@
Qt::Horizontal
-
+
20
20
@@ -476,11 +514,11 @@
-
-
-
-
+
+
Whether MIDI controllers will be enabled
-
+
E&nabled
@@ -502,6 +540,269 @@
+
+
+ &Tuning
+
+
+ Tuning
+
+
+ -
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+ QTabBar::RoundedNorth
+
+
+
+ -
+
+
+ true
+
+
+ QFrame::NoFrame
+
+
+ QFrame::Plain
+
+
+
-
+
+
+ Whether to use custom tuning (micro-tonal)
+
+
+ &Enable custom tuning (micro-tonal)
+
+
+
+ -
+
+
+ Re&ference:
+
+
+ TuningRefNoteComboBox
+
+
+
+ -
+
+
+
+ 64
+ 24
+
+
+
+ Reference note
+
+
+ false
+
+
+
+ -
+
+
+
+ 96
+ 24
+
+
+
+ Reference pitch
+
+
+ Hz
+
+
+ 1
+
+
+ 20.0
+
+
+ 20000.0
+
+
+ 440.0
+
+
+
+ -
+
+
+ Reset reference note and pitch to default (A4@440Hz)
+
+
+ &Reset
+
+
+ false
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 20
+ 8
+
+
+
+
+ -
+
+
+ Whether to use an alternate scale definition file (*.scl)
+
+
+ &Scale:
+
+
+ TuningScaleFileComboBox
+
+
+
+ -
+
+
+
+ 360
+ 0
+
+
+
+ Scale definition file (*.scl)
+
+
+ false
+
+
-
+
+ (default)
+
+
+
+
+ -
+
+
+
+ 22
+ 22
+
+
+
+
+ 24
+ 24
+
+
+
+ Qt::TabFocus
+
+
+ Browse for the scale file location (*.scl)
+
+
+ :/images/fileOpen.png
+
+
+
+ -
+
+
+ Whether to use an alternate keyboard-map file (*.kbm)
+
+
+ &Key map:
+
+
+ TuningKeyMapFileComboBox
+
+
+
+ -
+
+
+
+ 360
+ 0
+
+
+
+ Keyboard map file (*.kbm)
+
+
+ false
+
+
-
+
+ (default)
+
+
+
+
+ -
+
+
+
+ 22
+ 22
+
+
+
+
+ 24
+ 24
+
+
+
+ Qt::TabFocus
+
+
+ Browse for the keyboard-map file location (*.kbm)
+
+
+ :/images/fileOpen.png
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 20
+
+
+
+
+
+
+
+
+
+
+
-
@@ -543,6 +844,14 @@
ControlsDeleteToolButton
ControlsTreeWidget
ControlsEnabledCheckBox
+ TuningEnabledCheckBox
+ TuningRefNoteComboBox
+ TuningRefPitchSpinBox
+ TuningRefNotePushButton
+ TuningScaleFileComboBox
+ TuningScaleFileToolButton
+ TuningKeyMapFileComboBox
+ TuningKeyMapFileToolButton
DialogButtonBox
diff -Nru synthv1-0.8.6/src/synthv1widget_control.cpp synthv1-0.9.10+git20190929/src/synthv1widget_control.cpp
--- synthv1-0.8.6/src/synthv1widget_control.cpp 2017-12-20 07:56:50.326842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget_control.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1widget_control.cpp
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -35,7 +35,7 @@
// synthv1widget_control -- UI wrapper form.
// Kind of singleton reference.
-synthv1widget_control *synthv1widget_control::g_pInstance = NULL;
+synthv1widget_control *synthv1widget_control::g_pInstance = nullptr;
// Constructor.
@@ -207,7 +207,7 @@
void synthv1widget_control::closeEvent ( QCloseEvent *pCloseEvent )
{
// Pseudo-singleton reference setup.
- g_pInstance = NULL;
+ g_pInstance = nullptr;
// Sure acceptance and probable destruction (cf. WA_DeleteOnClose).
QDialog::closeEvent(pCloseEvent);
@@ -276,7 +276,7 @@
// Reset settings (Reset button slot).
void synthv1widget_control::reset (void)
{
- if (m_pControls == NULL)
+ if (m_pControls == nullptr)
return;
#ifdef CONFIG_DEBUG_0
@@ -307,7 +307,7 @@
// Accept settings (OK button slot).
void synthv1widget_control::accept (void)
{
- if (m_pControls == NULL)
+ if (m_pControls == nullptr)
return;
#ifdef CONFIG_DEBUG_0
diff -Nru synthv1-0.8.6/src/synthv1widget_control.h synthv1-0.9.10+git20190929/src/synthv1widget_control.h
--- synthv1-0.8.6/src/synthv1widget_control.h 2017-12-20 07:56:50.327842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget_control.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1widget_control.h
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
diff -Nru synthv1-0.8.6/src/synthv1widget_controls.cpp synthv1-0.9.10+git20190929/src/synthv1widget_controls.cpp
--- synthv1-0.8.6/src/synthv1widget_controls.cpp 2017-12-20 07:56:50.328842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget_controls.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1widget_controls.cpp
//
/****************************************************************************
- Copyright (C) 2012-2015, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -24,14 +24,42 @@
#include "synthv1_controls.h"
#include "synthv1_config.h"
+#include
#include
-
#include
#include
#include
//----------------------------------------------------------------------------
+// synthv1widget_controls::ItemDelegate -- Custom (tree) list item delegate.
+
+class synthv1widget_controls::ItemDelegate : public QItemDelegate
+{
+public:
+
+ // ctor.
+ ItemDelegate(QObject *pParent = 0);
+
+ // QItemDelegate interface...
+ QSize sizeHint(
+ const QStyleOptionViewItem& option,
+ const QModelIndex& index) const;
+
+ QWidget *createEditor(QWidget *pParent,
+ const QStyleOptionViewItem& option,
+ const QModelIndex& index) const;
+
+ void setEditorData(QWidget *pEditor,
+ const QModelIndex& index) const;
+
+ void setModelData(QWidget *pEditor,
+ QAbstractItemModel *pModel,
+ const QModelIndex& index) const;
+};
+
+
+//----------------------------------------------------------------------------
// MIDI Controller Names - Default controller names hash map.
const synthv1widget_controls::Names& synthv1widget_controls::controllerNames (void)
@@ -111,7 +139,7 @@
{126, QT_TR_NOOP("Mono Operation") },
{127, QT_TR_NOOP("Poly Operation") },
- { 0, NULL }
+ { 0, nullptr }
};
static Names s_controllerNames;
@@ -146,7 +174,7 @@
{ 3, QT_TR_NOOP("Tuning Program") },
{ 4, QT_TR_NOOP("Tuning Bank") },
- { 0, NULL }
+ { 0, nullptr }
};
static Names s_rpnNames;
@@ -197,7 +225,7 @@
{ 3840, QT_TR_NOOP("Drum Chorus Send") },
{ 3968, QT_TR_NOOP("Drum Variation Send") },
- { 0, NULL }
+ { 0, nullptr }
};
static struct
@@ -256,7 +284,7 @@
{ 80, QT_TR_NOOP("Mute Triangle") },
{ 81, QT_TR_NOOP("Open Triangle") },
- { 0, NULL }
+ { 0, nullptr }
};
static Names s_nrpnNames;
@@ -310,7 +338,7 @@
{ 18, QT_TR_NOOP("General Purpose Slider 3 (14bit)") },
{ 19, QT_TR_NOOP("General Purpose Slider 4 (14bit)") },
- { 0, NULL }
+ { 0, nullptr }
};
static Names s_control14Names;
@@ -420,17 +448,17 @@
//----------------------------------------------------------------------------
-// synthv1widget_controls_item_delegate -- Custom (tree) list item delegate.
+// synthv1widget_controls::ItemDelegate -- Custom (tree) list item delegate.
// ctor.
-synthv1widget_controls_item_delegate::synthv1widget_controls_item_delegate (
- QObject *pParent ) : QItemDelegate(pParent)
+synthv1widget_controls::ItemDelegate::ItemDelegate ( QObject *pParent )
+ : QItemDelegate(pParent)
{
}
// QItemDelegate interface...
-QSize synthv1widget_controls_item_delegate::sizeHint (
+QSize synthv1widget_controls::ItemDelegate::sizeHint (
const QStyleOptionViewItem& option, const QModelIndex& index ) const
{
const int x = (index.column() == 1 ? 32 : 4); // Type is special.
@@ -438,10 +466,10 @@
}
-QWidget *synthv1widget_controls_item_delegate::createEditor ( QWidget *pParent,
+QWidget *synthv1widget_controls::ItemDelegate::createEditor ( QWidget *pParent,
const QStyleOptionViewItem& /*option*/, const QModelIndex& index ) const
{
- QWidget *pEditor = NULL;
+ QWidget *pEditor = nullptr;
switch (index.column()) {
case 0: // Channel.
@@ -496,7 +524,7 @@
}
#ifdef CONFIG_DEBUG_0
- qDebug("synthv1widget_controls_item_delegate::createEditor(%p, %d, %d) = %p",
+ qDebug("synthv1widget_controls::ItemDelegate::createEditor(%p, %d, %d) = %p",
pParent, index.row(), index.column(), pEditor);
#endif
@@ -504,11 +532,11 @@
}
-void synthv1widget_controls_item_delegate::setEditorData (
+void synthv1widget_controls::ItemDelegate::setEditorData (
QWidget *pEditor, const QModelIndex& index ) const
{
#ifdef CONFIG_DEBUG_0
- qDebug("synthv1widget_controls_item_delegate::setEditorData(%p, %d, %d)",
+ qDebug("synthv1widget_controls::ItemDelegate::setEditorData(%p, %d, %d)",
pEditor, index.row(), index.column());
#endif
@@ -567,7 +595,7 @@
}
-void synthv1widget_controls_item_delegate::setModelData ( QWidget *pEditor,
+void synthv1widget_controls::ItemDelegate::setModelData ( QWidget *pEditor,
QAbstractItemModel *pModel, const QModelIndex& index ) const
{
#ifdef CONFIG_DEBUG_0
@@ -656,14 +684,14 @@
QTreeWidget::setSelectionMode(QAbstractItemView::SingleSelection);
QHeaderView *pHeaderView = QTreeWidget::header();
-#if QT_VERSION < 0x050000
+#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
pHeaderView->setResizeMode(QHeaderView::ResizeToContents);
#else
pHeaderView->setSectionResizeMode(QHeaderView::ResizeToContents);
#endif
// pHeaderView->hide();
- QTreeWidget::setItemDelegate(new synthv1widget_controls_item_delegate(this));
+ QTreeWidget::setItemDelegate(new ItemDelegate(this));
QObject::connect(this,
SIGNAL(itemChanged(QTreeWidgetItem *, int)),
diff -Nru synthv1-0.8.6/src/synthv1widget_controls.h synthv1-0.9.10+git20190929/src/synthv1widget_controls.h
--- synthv1-0.8.6/src/synthv1widget_controls.h 2017-12-20 07:56:50.328842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget_controls.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1widget_controls.h
//
/****************************************************************************
- Copyright (C) 2012-2015, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -22,7 +22,6 @@
#ifndef __synthv1widget_controls_h
#define __synthv1widget_controls_h
-#include
#include
#include
@@ -33,37 +32,6 @@
//----------------------------------------------------------------------------
-// synthv1widget_controls_item_delegate -- Custom (tree) list item delegate.
-
-class synthv1widget_controls_item_delegate : public QItemDelegate
-{
- Q_OBJECT
-
-public:
-
- // ctor.
- synthv1widget_controls_item_delegate(QObject *pParent = 0);
-
- // QItemDelegate interface...
- QSize sizeHint(
- const QStyleOptionViewItem& option,
- const QModelIndex& index) const;
-
- QWidget *createEditor(QWidget *pParent,
- const QStyleOptionViewItem& option,
- const QModelIndex& index) const;
-
- void setEditorData(QWidget *pEditor,
- const QModelIndex& index) const;
-
- void setModelData(QWidget *pEditor,
- QAbstractItemModel *pModel,
- const QModelIndex& index) const;
-};
-
-
-
-//----------------------------------------------------------------------------
// synthv1widget_controls -- Custom (tree) widget.
class synthv1widget_controls : public QTreeWidget
@@ -101,6 +69,9 @@
protected:
+ // item delegate decl..
+ class ItemDelegate;
+
// factory methods.
QTreeWidgetItem *newControlItem();
};
diff -Nru synthv1-0.8.6/src/synthv1widget_control.ui synthv1-0.9.10+git20190929/src/synthv1widget_control.ui
--- synthv1-0.8.6/src/synthv1widget_control.ui 2017-12-20 07:56:50.327842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget_control.ui 2019-09-28 23:00:43.000000000 +0000
@@ -1,23 +1,23 @@
rncbc aka Rui Nuno Capela
- qtractor - An Audio/MIDI multi-track sequencer.
+ synthv1 - An old-school polyphonic synthesizer
- Copyright (C) 2012-2015, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
synthv1widget_control
diff -Nru synthv1-0.8.6/src/synthv1widget.cpp synthv1-0.9.10+git20190929/src/synthv1widget.cpp
--- synthv1-0.8.6/src/synthv1widget.cpp 2017-12-20 07:56:50.312842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1widget.cpp
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -28,6 +28,8 @@
#include "synthv1widget_config.h"
#include "synthv1widget_control.h"
+#include "synthv1widget_keybd.h"
+
#include "synthv1_controls.h"
#include "synthv1_programs.h"
@@ -40,6 +42,10 @@
#include
#include
+#include
+
+#include
+
//-------------------------------------------------------------------------
// synthv1widget - impl.
@@ -51,7 +57,7 @@
{
Q_INIT_RESOURCE(synthv1);
-#if QT_VERSION >= 0x050000
+#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
// HACK: Dark themes grayed/disabled color group fix...
QPalette pal;
if (pal.base().color().value() < 0x7f) {
@@ -73,7 +79,7 @@
m_ui.setupUi(this);
// Init sched notifier.
- m_sched_notifier = NULL;
+ m_sched_notifier = nullptr;
// Init swapable params A/B to default.
for (uint32_t i = 0; i < synthv1::NUM_PARAMS; ++i)
@@ -338,6 +344,7 @@
m_ui.Dco1Width2Knob, SLOT(setValue(float)));
// DCF1
+ setParamKnob(synthv1::DCF1_ENABLED, m_ui.Dcf1GroupBox->param());
setParamKnob(synthv1::DCF1_CUTOFF, m_ui.Dcf1CutoffKnob);
setParamKnob(synthv1::DCF1_RESO, m_ui.Dcf1ResoKnob);
setParamKnob(synthv1::DCF1_TYPE, m_ui.Dcf1TypeKnob);
@@ -398,6 +405,7 @@
m_ui.Dcf1Env, SLOT(setRelease(float)));
// LFO1
+ setParamKnob(synthv1::LFO1_ENABLED, m_ui.Lfo1GroupBox->param());
setParamKnob(synthv1::LFO1_SHAPE, m_ui.Lfo1ShapeKnob);
setParamKnob(synthv1::LFO1_WIDTH, m_ui.Lfo1WidthKnob);
setParamKnob(synthv1::LFO1_BPM, m_ui.Lfo1BpmKnob);
@@ -552,6 +560,7 @@
m_ui.Dco2Width2Knob, SLOT(setValue(float)));
// DCF2
+ setParamKnob(synthv1::DCF2_ENABLED, m_ui.Dcf2GroupBox->param());
setParamKnob(synthv1::DCF2_CUTOFF, m_ui.Dcf2CutoffKnob);
setParamKnob(synthv1::DCF2_RESO, m_ui.Dcf2ResoKnob);
setParamKnob(synthv1::DCF2_TYPE, m_ui.Dcf2TypeKnob);
@@ -612,6 +621,7 @@
m_ui.Dcf2Env, SLOT(setRelease(float)));
// LFO2
+ setParamKnob(synthv1::LFO2_ENABLED, m_ui.Lfo2GroupBox->param());
setParamKnob(synthv1::LFO2_SHAPE, m_ui.Lfo2ShapeKnob);
setParamKnob(synthv1::LFO2_WIDTH, m_ui.Lfo2WidthKnob);
setParamKnob(synthv1::LFO2_BPM, m_ui.Lfo2BpmKnob);
@@ -755,6 +765,8 @@
setParamKnob(synthv1::DYN1_COMPRESS, m_ui.Dyn1CompressKnob);
setParamKnob(synthv1::DYN1_LIMITER, m_ui.Dyn1LimiterKnob);
+ // Make status-bar keyboard range active.
+ m_ui.StatusBar->keybd()->setNoteRange(true);
// Preset management
QObject::connect(m_ui.Preset,
@@ -771,6 +783,11 @@
SLOT(resetParams()));
+ // Randomize params...
+ QObject::connect(m_ui.RandomParamsButton,
+ SIGNAL(clicked()),
+ SLOT(randomParams()));
+
// Swap params A/B
QObject::connect(m_ui.SwapParamsAButton,
SIGNAL(toggled(bool)),
@@ -783,6 +800,14 @@
QObject::connect(m_ui.TabBar, SIGNAL(currentChanged(int)),
m_ui.StackedWidget, SLOT(setCurrentIndex(int)));
+ // Direct status-bar keyboard input
+ QObject::connect(m_ui.StatusBar->keybd(),
+ SIGNAL(noteOnClicked(int, int)),
+ SLOT(directNoteOn(int, int)));
+ QObject::connect(m_ui.StatusBar->keybd(),
+ SIGNAL(noteRangeChanged()),
+ SLOT(noteRangeChanged()));
+
// Menu actions
QObject::connect(m_ui.helpConfigureAction,
SIGNAL(triggered(bool)),
@@ -829,7 +854,7 @@
return;
synthv1_ui *pSynthUi = ui_instance();
- if (pSynthUi == NULL)
+ if (pSynthUi == nullptr)
return;
m_sched_notifier = new synthv1widget_sched(pSynthUi->instance(), this);
@@ -846,7 +871,7 @@
{
if (m_sched_notifier) {
delete m_sched_notifier;
- m_sched_notifier = NULL;
+ m_sched_notifier = nullptr;
}
synthv1_ui *pSynthUi = ui_instance();
@@ -893,19 +918,18 @@
synthv1widget_param *synthv1widget::paramKnob ( synthv1::ParamIndex index ) const
{
- return m_paramKnobs.value(index, NULL);
+ return m_paramKnobs.value(index, nullptr);
}
// Param port accessors.
-void synthv1widget::setParamValue (
- synthv1::ParamIndex index, float fValue, bool bDefault )
+void synthv1widget::setParamValue ( synthv1::ParamIndex index, float fValue )
{
++m_iUpdate;
synthv1widget_param *pParam = paramKnob(index);
if (pParam)
- pParam->setValue(fValue, bDefault);
+ pParam->setValue(fValue);
updateParamEx(index, fValue);
@@ -955,10 +979,12 @@
switch (index) {
case synthv1::DCO1_SHAPE1:
+ m_ui.Dco1Wave1->setWaveShape(fValue);
m_ui.Dco1Bandl1Knob->setEnabled(
synthv1_wave::Shape(int(fValue)) != synthv1_wave::Noise);
break;
case synthv1::DCO1_SHAPE2:
+ m_ui.Dco1Wave2->setWaveShape(fValue);
m_ui.Dco1Bandl2Knob->setEnabled(
synthv1_wave::Shape(int(fValue)) != synthv1_wave::Noise);
break;
@@ -975,10 +1001,12 @@
}
break;
case synthv1::DCO2_SHAPE1:
+ m_ui.Dco2Wave1->setWaveShape(fValue);
m_ui.Dco2Bandl1Knob->setEnabled(
synthv1_wave::Shape(int(fValue)) != synthv1_wave::Noise);
break;
case synthv1::DCO2_SHAPE2:
+ m_ui.Dco2Wave2->setWaveShape(fValue);
m_ui.Dco2Bandl2Knob->setEnabled(
synthv1_wave::Shape(int(fValue)) != synthv1_wave::Noise);
break;
@@ -994,12 +1022,59 @@
updateParam(synthv1::DCO1_SYNC1, 0.0f);
}
break;
+ case synthv1::DCF1_ENABLED:
+ if (m_ui.Lfo1GroupBox->isChecked()) {
+ const bool bDcf1Enabled = (fValue > 0.5f);
+ m_ui.Lfo1CutoffKnob->setEnabled(bDcf1Enabled);
+ m_ui.Lfo1ResoKnob->setEnabled(bDcf1Enabled);
+ }
+ break;
+ case synthv1::LFO1_ENABLED:
+ if (fValue > 0.5f) {
+ const bool bDcf1Enabled = m_ui.Dcf1GroupBox->isChecked();
+ m_ui.Lfo1CutoffKnob->setEnabled(bDcf1Enabled);
+ m_ui.Lfo1ResoKnob->setEnabled(bDcf1Enabled);
+ }
+ break;
+ case synthv1::DCF2_ENABLED:
+ if (m_ui.Lfo2GroupBox->isChecked()) {
+ const bool bDcf2Enabled = (fValue > 0.5f);
+ m_ui.Lfo2CutoffKnob->setEnabled(bDcf2Enabled);
+ m_ui.Lfo2ResoKnob->setEnabled(bDcf2Enabled);
+ }
+ break;
+ case synthv1::LFO2_ENABLED:
+ if (fValue > 0.5f) {
+ const bool bDcf2Enabled = m_ui.Dcf2GroupBox->isChecked();
+ m_ui.Lfo2CutoffKnob->setEnabled(bDcf2Enabled);
+ m_ui.Lfo2ResoKnob->setEnabled(bDcf2Enabled);
+ }
+ break;
case synthv1::DCF1_SLOPE:
- m_ui.Dcf1TypeKnob->setEnabled(int(fValue) != 3); // !Formant
+ if (m_ui.Dcf1GroupBox->isChecked())
+ m_ui.Dcf1TypeKnob->setEnabled(int(fValue) != 3); // !Formant
break;
case synthv1::DCF2_SLOPE:
- m_ui.Dcf2TypeKnob->setEnabled(int(fValue) != 3); // !Formant
- // Fall thru...
+ if (m_ui.Dcf2GroupBox->isChecked())
+ m_ui.Dcf2TypeKnob->setEnabled(int(fValue) != 3); // !Formant
+ break;
+ case synthv1::LFO1_SHAPE:
+ m_ui.Lfo1Wave->setWaveShape(fValue);
+ break;
+ case synthv1::LFO2_SHAPE:
+ m_ui.Lfo2Wave->setWaveShape(fValue);
+ break;
+ case synthv1::KEY1_LOW:
+ m_ui.StatusBar->keybd()->setNoteLow(int(fValue));
+ break;
+ case synthv1::KEY1_HIGH:
+ m_ui.StatusBar->keybd()->setNoteHigh(int(fValue));
+ break;
+ case synthv1::DEF1_VELOCITY: {
+ const int vel = int(79.375f * fValue + 47.625f) & 0x7f;
+ m_ui.StatusBar->keybd()->setVelocity(vel);
+ break;
+ }
default:
break;
}
@@ -1015,7 +1090,7 @@
synthv1widget_param *pParam = paramKnob(index);
if (pParam) {
- pParam->setValue(fValue, false);
+ pParam->setValue(fValue);
updateParam(index, fValue);
updateParamEx(index, fValue);
m_ui.StatusBar->showMessage(QString("%1: %2")
@@ -1032,7 +1107,7 @@
void synthv1widget::resetParams (void)
{
synthv1_ui *pSynthUi = ui_instance();
- if (pSynthUi == NULL)
+ if (pSynthUi == nullptr)
return;
pSynthUi->reset();
@@ -1055,6 +1130,72 @@
}
+// Randomize params (partial).
+void synthv1widget::randomParams (void)
+{
+ synthv1_ui *pSynthUi = ui_instance();
+ if (pSynthUi == nullptr)
+ return;
+
+ float p = 1.0f;
+
+ synthv1_config *pConfig = synthv1_config::getInstance();
+ if (pConfig)
+ p = 0.01f * pConfig->fRandomizePercent;
+
+ if (QMessageBox::warning(this,
+ tr("Warning"),
+ tr("About to randomize current parameter values:\n\n"
+ "-/+ %1%.\n\n"
+ "Are you sure?").arg(100.0f * p),
+ QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Cancel)
+ return;
+
+ std::default_random_engine re(::time(nullptr));
+
+ for (uint32_t i = 0; i < synthv1::NUM_PARAMS; ++i) {
+ const synthv1::ParamIndex index = synthv1::ParamIndex(i);
+ // Filter out some non-randomizable parameters!...
+ if (index == synthv1::DCO1_OCTAVE ||
+ index == synthv1::DCO1_TUNING ||
+ index == synthv1::DCO1_ENVTIME ||
+ index == synthv1::DCF1_ENABLED ||
+ index == synthv1::LFO1_ENABLED)
+ continue;
+ if (index >= synthv1::OUT1_WIDTH && index < synthv1::DCO2_SHAPE1)
+ continue;
+ if (index == synthv1::DCO2_OCTAVE ||
+ index == synthv1::DCO2_TUNING ||
+ index == synthv1::DCO2_ENVTIME ||
+ index == synthv1::DCF2_ENABLED ||
+ index == synthv1::LFO2_ENABLED)
+ continue;
+ if (index >= synthv1::OUT2_WIDTH)
+ break;
+ synthv1widget_param *pParam = paramKnob(index);
+ if (pParam) {
+ std::normal_distribution nd;
+ const float q = p * (pParam->maximum() - pParam->minimum());
+ float fValue = pParam->value();
+ if (synthv1_param::paramFloat(index))
+ fValue += 0.5f * q * nd(re);
+ else
+ fValue = std::round(fValue + q * nd(re));
+ if (fValue < pParam->minimum())
+ fValue = pParam->minimum();
+ else
+ if (fValue > pParam->maximum())
+ fValue = pParam->maximum();
+ setParamValue(index, fValue);
+ updateParam(index, fValue);
+ }
+ }
+
+ m_ui.StatusBar->showMessage(tr("Randomize"), 5000);
+ updateDirtyPreset(true);
+}
+
+
// Swap params A/B.
void synthv1widget::swapParams ( bool bOn )
{
@@ -1064,7 +1205,6 @@
#ifdef CONFIG_DEBUG
qDebug("synthv1widget::swapParams(%d)", int(bOn));
#endif
-// resetParamKnobs();
for (uint32_t i = 0; i < synthv1::NUM_PARAMS; ++i) {
const synthv1::ParamIndex index = synthv1::ParamIndex(i);
@@ -1105,7 +1245,7 @@
const float fValue = (pSynthUi
? pSynthUi->paramValue(index)
: synthv1_param::paramDefaultValue(index));
- setParamValue(index, fValue, true);
+ setParamValue(index, fValue);
updateParam(index, fValue);
// updateParamEx(index, fValue);
m_params_ab[i] = fValue;
@@ -1121,7 +1261,7 @@
for (uint32_t i = 0; i < synthv1::NUM_PARAMS; ++i) {
const synthv1::ParamIndex index = synthv1::ParamIndex(i);
const float fValue = synthv1_param::paramDefaultValue(index);
- setParamValue(index, fValue, true);
+ setParamValue(index, fValue);
updateParam(index, fValue);
// updateParamEx(index, fValue);
m_params_ab[i] = fValue;
@@ -1215,6 +1355,7 @@
// Preset status updater.
void synthv1widget::updateLoadPreset ( const QString& sPreset )
{
+ resetParamKnobs();
updateParamValues();
m_ui.Preset->setPreset(sPreset);
@@ -1227,15 +1368,21 @@
void synthv1widget::updateSchedNotify ( int stype, int sid )
{
synthv1_ui *pSynthUi = ui_instance();
- if (pSynthUi == NULL)
+ if (pSynthUi == nullptr)
return;
#ifdef CONFIG_DEBUG_0
- qDebug("samplv1widget::updateSchedNotify(%d, 0x%04x)", stype, sid);
+ qDebug("synthv1widget::updateSchedNotify(%d, 0x%04x)", stype, sid);
#endif
switch (synthv1_sched::Type(stype)) {
case synthv1_sched::MidiIn:
+ if (sid >= 0) {
+ const int key = (sid & 0x7f);
+ const int vel = (sid >> 7) & 0x7f;
+ m_ui.StatusBar->midiInNote(key, vel);
+ }
+ else
if (pSynthUi->midiInCount() > 0) {
m_ui.StatusBar->midiInLed(true);
QTimer::singleShot(200, this, SLOT(midiInLedTimeout()));
@@ -1262,12 +1409,52 @@
break;
}
case synthv1_sched::Wave:
+ if (sid > 0) {
+ updateParamValues();
+ resetParamKnobs();
+ updateDirtyPreset(false);
+ }
+ // fall thru...
default:
break;
}
}
+// Direct note-on/off slot.
+void synthv1widget::directNoteOn ( int iNote, int iVelocity )
+{
+#ifdef CONFIG_DEBUG
+ qDebug("synthv1widget::directNoteOn(%d, %d)", iNote, iVelocity);
+#endif
+
+ synthv1_ui *pSynthUi = ui_instance();
+ if (pSynthUi)
+ pSynthUi->directNoteOn(iNote, iVelocity); // note-on!
+}
+
+
+// Keyboard note range change.
+void synthv1widget::noteRangeChanged (void)
+{
+ const int iNoteLow = m_ui.StatusBar->keybd()->noteLow();
+ const int iNoteHigh = m_ui.StatusBar->keybd()->noteHigh();
+
+#ifdef CONFIG_DEBUG
+ qDebug("padthv1widget::noteRangeChanged(%d, %d)", iNoteLow, iNoteHigh);
+#endif
+
+ updateParam(synthv1::KEY1_LOW, float(iNoteLow));
+ updateParam(synthv1::KEY1_HIGH, float(iNoteHigh));
+
+ m_ui.StatusBar->showMessage(QString("KEY Low: %1 (%2) High: %3 (%4)")
+ .arg(synthv1_ui::noteName(iNoteLow)).arg(iNoteLow)
+ .arg(synthv1_ui::noteName(iNoteHigh)).arg(iNoteHigh), 5000);
+
+ updateDirtyPreset(true);
+}
+
+
// MIDI In LED timeout.
void synthv1widget::midiInLedTimeout (void)
{
@@ -1279,7 +1466,7 @@
void synthv1widget::helpConfigure (void)
{
synthv1_ui *pSynthUi = ui_instance();
- if (pSynthUi == NULL)
+ if (pSynthUi == nullptr)
return;
synthv1widget_config(pSynthUi, this).exec();
@@ -1330,7 +1517,7 @@
sText += "";
sText += "\n";
- QMessageBox::about(this, tr("About") + " " SYNTHV1_TITLE, sText);
+ QMessageBox::about(this, tr("About"), sText);
}
@@ -1358,15 +1545,15 @@
{
synthv1widget_param *pParam
= qobject_cast (sender());
- if (pParam == NULL)
+ if (pParam == nullptr)
return;
synthv1_ui *pSynthUi = ui_instance();
- if (pSynthUi == NULL)
+ if (pSynthUi == nullptr)
return;
synthv1_controls *pControls = pSynthUi->controls();
- if (pControls == NULL)
+ if (pControls == nullptr)
return;
if (!pControls->enabled())
diff -Nru synthv1-0.8.6/src/synthv1widget.h synthv1-0.9.10+git20190929/src/synthv1widget.h
--- synthv1-0.8.6/src/synthv1widget.h 2017-12-20 07:56:50.312842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1widget.h
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -58,8 +58,7 @@
void closeSchedNotifier();
// Param port accessors.
- void setParamValue(
- synthv1::ParamIndex index, float fValue, bool bDefault = false);
+ void setParamValue(synthv1::ParamIndex index, float fValue);
float paramValue(synthv1::ParamIndex index) const;
// Param kbob (widget) mapper.
@@ -80,6 +79,9 @@
void loadPreset(const QString& sFilename);
void savePreset(const QString& sFilename);
+ // Direct note-on/off slot.
+ void directNoteOn(int iNote, int iVelocity);
+
protected slots:
// Preset renewal.
@@ -91,6 +93,9 @@
// Reset param knobs to default value.
void resetParams();
+ // Randomize params (partial).
+ void randomParams();
+
// Swap params A/B.
void swapParams(bool bOn);
@@ -100,6 +105,9 @@
// MIDI In LED timeout.
void midiInLedTimeout();
+ // Keyboard note range change.
+ void noteRangeChanged();
+
// Param knob context menu.
void paramContextMenu(const QPoint& pos);
@@ -171,7 +179,7 @@
public:
// ctor.
- synthv1widget_sched(synthv1 *pSynth, QObject *pParent = NULL)
+ synthv1widget_sched(synthv1 *pSynth, QObject *pParent = nullptr)
: QObject(pParent), m_notifier(pSynth, this) {}
signals:
@@ -182,12 +190,12 @@
protected:
// Notififier visitor.
- class Notifier : public synthv1_sched_notifier
+ class Notifier : public synthv1_sched::Notifier
{
public:
Notifier(synthv1 *pSynth, synthv1widget_sched *pSched)
- : synthv1_sched_notifier(pSynth), m_pSched(pSched) {}
+ : synthv1_sched::Notifier(pSynth), m_pSched(pSched) {}
void notify(synthv1_sched::Type stype, int sid) const
{ m_pSched->emit_notify(stype, sid); }
diff -Nru synthv1-0.8.6/src/synthv1widget_jack.cpp synthv1-0.9.10+git20190929/src/synthv1widget_jack.cpp
--- synthv1-0.8.6/src/synthv1widget_jack.cpp 2017-12-20 07:56:50.328842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget_jack.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1widget_jack.cpp
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -43,7 +43,7 @@
#endif
#endif
-#if QT_VERSION < 0x050000
+#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
#define CONFIG_PLUGINSDIR CONFIG_LIBDIR "/qt4/plugins"
#else
#define CONFIG_PLUGINSDIR CONFIG_LIBDIR "/qt5/plugins"
@@ -58,7 +58,7 @@
synthv1widget_jack::synthv1widget_jack ( synthv1_jack *pSynth )
: synthv1widget(), m_pSynth(pSynth)
#ifdef CONFIG_NSM
- , m_pNsmClient(NULL)
+ , m_pNsmClient(nullptr)
#endif
{
// Special style paths...
@@ -73,12 +73,15 @@
// Initialize (user) interface stuff...
m_pSynthUi = new synthv1_ui(m_pSynth, false);
+ // Initialise preset stuff...
+ clearPreset();
+
+ // Initial update, always...
+ resetParamValues();
+ resetParamKnobs();
+
// May initialize the scheduler/work notifier.
openSchedNotifier();
-
- // Initialize preset stuff...
- // initPreset();
- updateParamValues();
}
@@ -101,10 +104,6 @@
void synthv1widget_jack::setNsmClient ( synthv1_nsm *pNsmClient )
{
m_pNsmClient = pNsmClient;
-
- synthv1_config *pConfig = synthv1_config::getInstance();
- if (pConfig)
- pConfig->bDontUseNativeDialogs = true;
}
synthv1_nsm *synthv1widget_jack::nsmClient (void) const
@@ -130,7 +129,7 @@
#ifdef CONFIG_NSM
if (m_pNsmClient && m_pNsmClient->is_active())
- m_pNsmClient->dirty(bDirtyPreset);
+ m_pNsmClient->dirty(true); // as far as NSM goes, we're always filthy!
#endif
}
@@ -158,7 +157,7 @@
// Optional GUI handlers.
void synthv1widget_jack::showEvent ( QShowEvent *pShowEvent )
{
- QWidget::showEvent(pShowEvent);
+ synthv1widget::showEvent(pShowEvent);
if (m_pNsmClient)
m_pNsmClient->visible(true);
@@ -169,7 +168,7 @@
if (m_pNsmClient)
m_pNsmClient->visible(false);
- QWidget::hideEvent(pHideEvent);
+ synthv1widget::hideEvent(pHideEvent);
}
#endif // CONFIG_NSM
diff -Nru synthv1-0.8.6/src/synthv1widget_jack.h synthv1-0.9.10+git20190929/src/synthv1widget_jack.h
--- synthv1-0.8.6/src/synthv1widget_jack.h 2017-12-20 07:56:50.328842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget_jack.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1widget_jack.h
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
diff -Nru synthv1-0.8.6/src/synthv1widget_keybd.cpp synthv1-0.9.10+git20190929/src/synthv1widget_keybd.cpp
--- synthv1-0.8.6/src/synthv1widget_keybd.cpp 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget_keybd.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -0,0 +1,733 @@
+// synthv1widget_keybd.cpp
+//
+/****************************************************************************
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+*****************************************************************************/
+
+#include "synthv1widget_keybd.h"
+
+#include "synthv1_ui.h"
+
+#include
+#include
+
+#include
+
+#include
+#include
+#include
+#include
+
+#include
+
+#include
+
+
+//-------------------------------------------------------------------------
+// synthv1widget_keybd - A horizontal piano keyboard widget.
+
+
+// Constructor.
+synthv1widget_keybd::synthv1widget_keybd ( QWidget *pParent )
+ : QWidget(pParent)
+{
+ const QFont& font = QWidget::font();
+ QWidget::setFont(QFont(font.family(), font.pointSize() - 3));
+ QWidget::setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+ QWidget::setMinimumSize(QSize(440, 22));
+ QWidget::setMouseTracking(true);
+
+ for (int n = 0; n < NUM_NOTES; ++n)
+ m_notes[n].on = false;
+
+ m_dragCursor = DragNone;
+
+ m_bNoteRange = false;
+
+ m_iNoteLow = MIN_NOTE;
+ m_iNoteLowX = 0;
+
+ m_iNoteHigh = MAX_NOTE;
+ m_iNoteHighX = 0;
+
+ m_iNoteOn = -1;
+ m_iTimeout = 0;
+ m_iVelocity = (MIN_VELOCITY + MAX_VELOCITY) / 2;
+
+ m_iNoteKey = -1;
+
+ resetDragState();
+
+ // Trap for help/tool-tips and leave events.
+ QWidget::installEventFilter(this);
+}
+
+
+// Note range predicate.
+void synthv1widget_keybd::setNoteRange ( bool bNoteRange )
+{
+ m_bNoteRange = bNoteRange;
+
+ QWidget::update();
+}
+
+
+bool synthv1widget_keybd::isNoteRange (void) const
+{
+ return m_bNoteRange;
+}
+
+
+// Default note-on velocity.
+void synthv1widget_keybd::setVelocity ( int iVelocity )
+{
+ if (iVelocity < MIN_VELOCITY)
+ iVelocity = MIN_VELOCITY;
+ if (iVelocity > MAX_VELOCITY)
+ iVelocity = MAX_VELOCITY;
+
+ m_iVelocity = iVelocity;
+}
+
+
+int synthv1widget_keybd::velocity (void) const
+{
+ return m_iVelocity;
+}
+
+
+// Keyboard note range sanitizers.
+int synthv1widget_keybd::safeNoteLow ( int iNoteLow ) const
+{
+ if (iNoteLow < MIN_NOTE)
+ iNoteLow = MIN_NOTE;
+ if (iNoteLow > m_iNoteHigh)
+ iNoteLow = m_iNoteHigh;
+
+ return iNoteLow;
+}
+
+
+int synthv1widget_keybd::safeNoteHigh ( int iNoteHigh ) const
+{
+ if (iNoteHigh > MAX_NOTE)
+ iNoteHigh = MAX_NOTE;
+ if (iNoteHigh < m_iNoteLow)
+ iNoteHigh = m_iNoteLow;
+
+ return iNoteHigh;
+}
+
+
+// Keyboard note range setters/getters.
+void synthv1widget_keybd::setNoteLow ( int iNoteLow )
+{
+ m_iNoteLow = safeNoteLow(iNoteLow);
+ m_iNoteLowX = noteRect(m_iNoteLow).left();
+
+ QWidget::update();
+}
+
+
+int synthv1widget_keybd::noteLow (void) const
+{
+ return m_iNoteLow;
+}
+
+
+void synthv1widget_keybd::setNoteHigh ( int iNoteHigh )
+{
+ m_iNoteHigh = safeNoteHigh(iNoteHigh);
+ m_iNoteHighX = noteRect(m_iNoteHigh).right();
+
+ QWidget::update();
+}
+
+
+int synthv1widget_keybd::noteHigh (void) const
+{
+ return m_iNoteHigh;
+}
+
+
+void synthv1widget_keybd::setNoteKey ( int iNoteKey )
+{
+ if (iNoteKey >= MIN_NOTE && MAX_NOTE >= iNoteKey) {
+ m_notes[iNoteKey].rect = noteRect(iNoteKey, true);
+ m_iNoteKey = iNoteKey;
+ } else {
+ m_iNoteKey = -1;
+ }
+
+ QWidget::update();
+}
+
+
+int synthv1widget_keybd::noteKey (void) const
+{
+ return m_iNoteKey;
+}
+
+
+// Piano key rectangle finder.
+QRect synthv1widget_keybd::noteRect ( int iNote, bool bOn ) const
+{
+ const int w = QWidget::width();
+ const int h = QWidget::height();
+
+ const float wn = float(w - 4) / float(NUM_NOTES);
+ const float wk = 12.0f * wn / 7.0f;
+
+ int k = (iNote % 12);
+ if (k >= 5) ++k;
+
+ const int nk = (iNote / 12) * 7 + (k >> 1);
+ int x2 = int(wk * float(nk));
+ int w2 = int(wn + 0.5f);
+ int h2 = h;
+ if (k & 1) {
+ x2 += int(wk - float(w2 >> 1));
+ h2 = (h << 1) / 3;
+ ++w2;
+ } else if (bOn) {
+ x2 += (w2 >> 1);
+ --w2;
+ } else {
+ w2 <<= 1;
+ }
+
+ return QRect(x2, 0, w2, h2);
+}
+
+
+// Piano keyboard note/key actions.
+void synthv1widget_keybd::noteOn ( int iNote )
+{
+ if (iNote < m_iNoteLow || iNote > m_iNoteHigh)
+ return;
+
+ // If it ain't changed we won't change it ;)
+ Note& note = m_notes[iNote];
+ if (note.on)
+ return;
+
+ // Now for the sounding new one...
+ note.on = true;
+ note.rect = noteRect(iNote, true);
+
+ QWidget::update(note.rect);
+}
+
+
+void synthv1widget_keybd::noteOff ( int iNote )
+{
+ if (iNote < m_iNoteLow || iNote > m_iNoteHigh)
+ return;
+
+ // Turn off old note...
+ Note& note = m_notes[iNote];
+ if (!note.on)
+ return;
+
+ // Now for the sounding new one...
+ note.on = false;
+
+ QWidget::update(note.rect);
+}
+
+
+void synthv1widget_keybd::allNotesOff (void)
+{
+ for (int n = 0; n < NUM_NOTES; ++n)
+ noteOff(n);
+}
+
+
+// Kill dangling notes, if any...
+void synthv1widget_keybd::allNotesTimeout (void)
+{
+ if (m_iTimeout < 1)
+ return;
+
+ if (m_iNoteOn >= 0) {
+ ++m_iTimeout;
+ QTimer::singleShot(1200, this, SLOT(allNotesTimeout())); // +3sec.
+ return;
+ }
+
+ for (int n = 0; n < NUM_NOTES; ++n) {
+ Note& note = m_notes[n];
+ if (note.on) {
+ note.on = false;
+ QWidget::update(note.rect);
+ emit noteOnClicked(n, 0);
+ }
+ }
+
+ m_iTimeout = 0;
+}
+
+
+// Piano keyboard note-on handler.
+void synthv1widget_keybd::dragNoteOn ( const QPoint& pos )
+{
+ // Compute new key cordinates...
+ const int iNote = (NUM_NOTES * pos.x() / QWidget::width());
+
+ if (iNote < m_iNoteLow || iNote > m_iNoteHigh || iNote == m_iNoteOn)
+ return;
+
+ // Were we pending on some sounding note?
+ dragNoteOff();
+
+ // Now for the sounding new one...
+ m_iNoteOn = iNote;
+
+// noteOn(iNote);
+
+ emit noteOnClicked(iNote, m_iVelocity);
+
+ if (++m_iTimeout == 1)
+ QTimer::singleShot(1200, this, SLOT(allNotesTimeout())); // +3sec.
+}
+
+
+// Piano keyboard note-off handler.
+void synthv1widget_keybd::dragNoteOff (void)
+{
+ if (m_iNoteOn < 0)
+ return;
+
+ // Turn off old note...
+ const int iNote = m_iNoteOn;
+
+ m_iNoteOn = -1;
+
+// noteOff(iNote);
+
+ emit noteOnClicked(iNote, 0);
+}
+
+
+// (Re)create the complete view pixmap.
+void synthv1widget_keybd::updatePixmap (void)
+{
+ const int w = QWidget::width();
+ const int h = QWidget::height();
+ if (w < 4 || h < 4)
+ return;
+
+ const QPalette& pal = QWidget::palette();
+ const bool bDark = (pal.base().color().value() < 128);
+ const QColor& rgbLine = pal.mid().color();
+ const QColor& rgbLight = QColor(Qt::white).darker(bDark ? 240 : 160);
+ const QColor& rgbDark = QColor(Qt::black).lighter(bDark ? 120 : 180);
+
+ m_pixmap = QPixmap(w, h);
+ m_pixmap.fill(pal.window().color());
+
+ QPainter painter(&m_pixmap);
+// painter.initFrom(this);
+
+ const float wn = float(w - 4) / float(NUM_NOTES);
+ const float wk = 12.0f * wn / 7.0f;
+ const int w2 = int(wn + 0.5f);
+ const int h3 = (h << 1) / 3;
+
+ QLinearGradient gradLight(0, 0, 0, h);
+ gradLight.setColorAt(0.0, rgbLight);
+ gradLight.setColorAt(0.1, rgbLight.lighter());
+ painter.fillRect(0, 0, w, h, gradLight);
+ painter.setPen(rgbLine);
+
+ int n, k;
+
+ for (n = 0; n < NUM_NOTES; ++n) {
+ k = (n % 12);
+ if (k >= 5) ++k;
+ if ((k & 1) == 0) {
+ const int nk = (n / 12) * 7 + (k >> 1);
+ const int x1 = int(wk * float(nk));
+ painter.drawLine(x1, 0, x1, h);
+ if (k == 0 && w2 > 10)
+ painter.drawText(x1 + 4, h - 4, noteName(n));
+ }
+ }
+
+ QLinearGradient gradDark(0, 0, 0, h3);
+ gradDark.setColorAt(0.0, rgbLight);
+ gradDark.setColorAt(0.4, rgbDark);
+ gradDark.setColorAt(0.92, rgbDark);
+ gradDark.setColorAt(0.96, rgbLight);
+ gradDark.setColorAt(1.0, rgbDark);
+ painter.setBrush(gradDark);
+
+ for (n = 0; n < NUM_NOTES; ++n) {
+ k = (n % 12);
+ if (k >= 5) ++k;
+ if (k & 1) {
+ const int nk = (n / 12) * 7 + (k >> 1);
+ const int x1 = int(wk * float(nk + 1) - float(w2 >> 1));
+ painter.drawRect(x1, 0, w2, h3);
+ }
+ }
+
+ m_iNoteLowX = noteRect(m_iNoteLow).left();
+ m_iNoteHighX = noteRect(m_iNoteHigh).right();
+
+ if (m_iNoteKey >= MIN_NOTE && MAX_NOTE >= m_iNoteKey)
+ m_notes[m_iNoteKey].rect = noteRect(m_iNoteKey, true);
+}
+
+
+// Paint event handler.
+void synthv1widget_keybd::paintEvent ( QPaintEvent *pPaintEvent )
+{
+ QPainter painter(this);
+
+ // Render the pixmap region...
+ const QRect& rect = pPaintEvent->rect();
+ painter.drawPixmap(rect, m_pixmap, rect);
+
+ const QPalette& pal = QWidget::palette();
+ QColor rgbOver;
+
+ // Are we enabled still?
+ if (!QWidget::isEnabled()) {
+ rgbOver = pal.mid().color();
+ rgbOver.setAlpha(120);
+ painter.fillRect(rect, rgbOver);
+ return;
+ }
+
+ // Are we sticking in some note?
+ rgbOver = pal.highlight().color().darker(120);
+ rgbOver.setAlpha(180);
+ for (int n = 0; n < NUM_NOTES; ++n) {
+ Note& note = m_notes[n];
+ if (note.on)
+ painter.fillRect(note.rect, rgbOver);
+ }
+
+ // Keyboard range lines...
+ if (m_bNoteRange) {
+ const int w = QWidget::width();
+ const int h = QWidget::height();
+ const int x1 = m_iNoteLowX;
+ const int x2 = m_iNoteHighX;
+ rgbOver = pal.dark().color().darker();
+ rgbOver.setAlpha(120);
+ if (x1 > 0)
+ painter.fillRect(0, 0, x1, h, rgbOver);
+ if (x2 < w)
+ painter.fillRect(x2, 0, w, h, rgbOver);
+ }
+
+ // Current highlighted note.
+ if (m_iNoteKey >= MIN_NOTE && MAX_NOTE >= m_iNoteKey) {
+ rgbOver = pal.highlight().color().lighter();
+ rgbOver.setAlpha(120);
+ painter.fillRect(m_notes[m_iNoteKey].rect, rgbOver);
+ }
+}
+
+
+// Resize event handler.
+void synthv1widget_keybd::resizeEvent ( QResizeEvent *pResizeEvent )
+{
+ updatePixmap();
+
+ return QWidget::resizeEvent(pResizeEvent);
+}
+
+
+// Alternate mouse behavior event handlers.
+void synthv1widget_keybd::mousePressEvent ( QMouseEvent *pMouseEvent )
+{
+ const QPoint& pos = pMouseEvent->pos();
+
+ switch (pMouseEvent->button()) {
+ case Qt::LeftButton:
+ if (m_dragCursor == DragNone) {
+ // Are we keying in some keyboard?
+ if ((pMouseEvent->modifiers()
+ & (Qt::ShiftModifier | Qt::ControlModifier)) == 0) {
+ dragNoteOn(pos);
+ noteToolTip(pos);
+ }
+ // Maybe we'll start something...
+ m_dragState = DragStart;
+ m_posDrag = pos;
+ } else {
+ m_dragState = m_dragCursor;
+ }
+ // Fall thru...
+ default:
+ break;
+ }
+
+// QWidget::mousePressEvent(pMouseEvent);
+}
+
+
+void synthv1widget_keybd::mouseMoveEvent ( QMouseEvent *pMouseEvent )
+{
+ const QPoint& pos = pMouseEvent->pos();
+
+ switch (m_dragState) {
+ case DragNone:
+ if (m_bNoteRange) {
+ // Are we already moving/dragging something?
+ const int dx = 4;
+ const int x1 = m_iNoteLowX;
+ const int x2 = m_iNoteHighX;
+ if (::abs(x2 - pos.x()) < dx) {
+ m_dragCursor = DragNoteHigh;
+ QWidget::setCursor(QCursor(Qt::SizeHorCursor));
+ QToolTip::showText(
+ QWidget::mapToGlobal(pos),
+ tr("High: %1 (%2)")
+ .arg(noteName(m_iNoteHigh)).arg(m_iNoteHigh), this);
+ }
+ else
+ if (::abs(x1 - pos.x()) < dx) {
+ m_dragCursor = DragNoteLow;
+ QWidget::setCursor(QCursor(Qt::SizeHorCursor));
+ QToolTip::showText(
+ QWidget::mapToGlobal(pos),
+ tr("Low: %1 (%2)")
+ .arg(noteName(m_iNoteLow)).arg(m_iNoteLow), this);
+ }
+ else
+ if (m_dragCursor != DragNone) {
+ m_dragCursor = DragNone;
+ QWidget::unsetCursor();
+ }
+ }
+ break;
+ case DragNoteLow:
+ if (m_bNoteRange) {
+ const int w = QWidget::width();
+ if (w > 0) {
+ const int iNoteLow = safeNoteLow((NUM_NOTES * pos.x()) / w);
+ m_iNoteLowX = noteRect(iNoteLow).left();
+ QWidget::update();
+ QToolTip::showText(
+ QCursor::pos(),
+ tr("Low: %1 (%2)")
+ .arg(noteName(iNoteLow)).arg(iNoteLow), this);
+ }
+ }
+ break;
+ case DragNoteHigh:
+ if (m_bNoteRange) {
+ const int w = QWidget::width();
+ if (w > 0) {
+ const int iNoteHigh = safeNoteHigh((NUM_NOTES * pos.x()) / w);
+ m_iNoteHighX = noteRect(iNoteHigh).right();
+ QWidget::update();
+ QToolTip::showText(
+ QCursor::pos(),
+ tr("High: %1 (%2)")
+ .arg(noteName(iNoteHigh)).arg(iNoteHigh), this);
+ }
+ }
+ break;
+ case DragNoteRange:
+ if (m_bNoteRange) {
+ const int w = QWidget::width();
+ if (w > 0) {
+ // Rubber-band offset selection...
+ const QRect& rect = QRect(m_posDrag, pos).normalized();
+ int iNoteLow = (NUM_NOTES * rect.left()) / w;
+ int iNoteHigh = (NUM_NOTES * rect.right()) / w;
+ if (iNoteLow < MIN_NOTE)
+ iNoteLow = MIN_NOTE;
+ if (iNoteLow > iNoteHigh)
+ iNoteLow = iNoteHigh;
+ if (iNoteHigh > MAX_NOTE)
+ iNoteHigh = MAX_NOTE;
+ if (iNoteHigh < iNoteLow)
+ iNoteHigh = iNoteLow;
+ m_iNoteLowX = noteRect(iNoteLow).left();
+ m_iNoteHighX = noteRect(iNoteHigh).right();
+ QWidget::update();
+ QToolTip::showText(
+ QWidget::mapToGlobal(pos),
+ tr("Low: %1 (%2) High: %3 (%4)")
+ .arg(noteName(iNoteLow)).arg(iNoteLow)
+ .arg(noteName(iNoteHigh)).arg(iNoteHigh), this);
+ }
+ }
+ break;
+ case DragStart:
+ if (m_bNoteRange) {
+ if ((m_posDrag - pos).manhattanLength()
+ > QApplication::startDragDistance()) {
+ // Start dragging alright...
+ if (m_dragCursor != DragNone)
+ m_dragState = m_dragCursor;
+ else
+ if (pMouseEvent->modifiers()
+ & (Qt::ShiftModifier | Qt::ControlModifier)) {
+ // Rubber-band starting...
+ m_dragState = m_dragCursor = DragNoteRange;
+ QWidget::setCursor(QCursor(Qt::SizeHorCursor));
+ }
+ }
+ }
+ // Are we still hovering the keyboard?
+ if (m_dragState == DragStart) {
+ dragNoteOn(pos);
+ noteToolTip(pos);
+ }
+ // Fall thru...
+ default:
+ break;
+ }
+
+// QWidget::mouseMoveEvent(pMouseEvent);
+}
+
+
+void synthv1widget_keybd::mouseReleaseEvent ( QMouseEvent *pMouseEvent )
+{
+ const QPoint& pos = pMouseEvent->pos();
+
+ switch (m_dragState) {
+ case DragNoteLow:
+ if (m_bNoteRange) {
+ const int w = QWidget::width();
+ if (w > 0) {
+ setNoteLow((NUM_NOTES * pos.x()) / w);
+ emit noteRangeChanged();
+ }
+ }
+ break;
+ case DragNoteHigh:
+ if (m_bNoteRange) {
+ const int w = QWidget::width();
+ if (w > 0) {
+ setNoteHigh((NUM_NOTES * pos.x()) / w);
+ emit noteRangeChanged();
+ }
+ }
+ break;
+ case DragNoteRange:
+ if (m_bNoteRange) {
+ const int w = QWidget::width();
+ if (w > 0) {
+ const QRect& rect = QRect(m_posDrag, pos).normalized();
+ int iNoteLow = (NUM_NOTES * rect.left()) / w;
+ int iNoteHigh = (NUM_NOTES * rect.right()) / w;
+ if (iNoteLow < MIN_NOTE)
+ iNoteLow = MIN_NOTE;
+ if (iNoteHigh > MAX_NOTE)
+ iNoteHigh = MAX_NOTE;
+ if (iNoteLow > iNoteHigh)
+ iNoteLow = iNoteHigh;
+ if (iNoteHigh < iNoteLow)
+ iNoteHigh = iNoteLow;
+ m_iNoteLow = iNoteLow;
+ m_iNoteLowX = noteRect(iNoteLow).left();
+ m_iNoteHigh = iNoteHigh;
+ m_iNoteHighX = noteRect(iNoteHigh).right();
+ QWidget::update();
+ emit noteRangeChanged();
+ }
+ }
+ break;
+ // Fall thru...
+ default:
+ break;
+ }
+
+ // Were we stuck on some keyboard note?
+ resetDragState();
+
+// QWidget::mouseReleaseEvent(pMouseEvent);
+}
+
+
+// Keyboard event handler.
+void synthv1widget_keybd::keyPressEvent ( QKeyEvent *pKeyEvent )
+{
+ switch (pKeyEvent->key()) {
+ case Qt::Key_Escape:
+ resetDragState();
+ QWidget::update();
+ break;
+ default:
+ QWidget::keyPressEvent(pKeyEvent);
+ break;
+ }
+}
+
+
+ // Trap for help/tool-tip events.
+bool synthv1widget_keybd::eventFilter ( QObject *pObject, QEvent *pEvent )
+{
+ if (static_cast (pObject) == this) {
+ if (pEvent->type() == QEvent::ToolTip) {
+ QHelpEvent *pHelpEvent = static_cast (pEvent);
+ if (pHelpEvent && m_dragCursor == DragNone) {
+ noteToolTip(pHelpEvent->pos());
+ return true;
+ }
+ }
+ else
+ if (pEvent->type() == QEvent::Leave) {
+ dragNoteOff();
+ return true;
+ }
+ }
+
+ // Not handled here.
+ return QWidget::eventFilter(pObject, pEvent);
+}
+
+
+// Present a tooltip for a note.
+void synthv1widget_keybd::noteToolTip ( const QPoint& pos ) const
+{
+ const int iNote = (NUM_NOTES * pos.x() / QWidget::width());
+ QToolTip::showText(QWidget::mapToGlobal(pos),
+ QString("%1 (%2)").arg(noteName(iNote)).arg(iNote));
+}
+
+
+// Default note name map accessor.
+QString synthv1widget_keybd::noteName ( int iNote ) const
+{
+ return synthv1_ui::noteName(iNote);
+}
+
+
+// Reset drag/select state.
+void synthv1widget_keybd::resetDragState (void)
+{
+ dragNoteOff();
+
+ if (m_dragCursor != DragNone)
+ QWidget::unsetCursor();
+
+ m_dragState = m_dragCursor = DragNone;
+}
+
+
+// end of synthv1widget_keybd.cpp
diff -Nru synthv1-0.8.6/src/synthv1widget_keybd.h synthv1-0.9.10+git20190929/src/synthv1widget_keybd.h
--- synthv1-0.8.6/src/synthv1widget_keybd.h 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget_keybd.h 2019-09-28 23:00:43.000000000 +0000
@@ -0,0 +1,181 @@
+// synthv1widget_keybd.h
+//
+/****************************************************************************
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+*****************************************************************************/
+
+#ifndef __synthv1widget_keybd_h
+#define __synthv1widget_keybd_h
+
+#include
+#include
+
+
+//-------------------------------------------------------------------------
+// synthv1widget_keybd - A horizontal piano keyboard widget.
+
+class synthv1widget_keybd : public QWidget
+{
+ Q_OBJECT
+
+public:
+
+ // Constructor.
+ synthv1widget_keybd(QWidget *pParent = 0);
+
+ // Note range predicate.
+ void setNoteRange(bool bNoteRange);
+ bool isNoteRange() const;
+
+ // Default note-on velocity.
+ void setVelocity(int iVelocity);
+ int velocity() const;
+
+ // Keyboard note range getters.
+ int noteLow() const;
+ int noteHigh() const;
+
+ // Highlighted note getter.
+ int noteKey() const;
+
+public slots:
+
+ // Keyboard note range setters.
+ void setNoteLow(int iNoteLow);
+ void setNoteHigh(int iNoteHigh);
+
+ // Keyboard note/key actions.
+ void noteOn(int iNote);
+ void noteOff(int iNote);
+
+ void allNotesOff();
+
+ // Highlighted note setter.
+ void setNoteKey(int iNoteKey);
+
+signals:
+
+ // Piano keyboard note-on/off signal.
+ void noteOnClicked(int iNote, int iVelocity);
+
+ // Keyboard note range changed signal.
+ void noteRangeChanged();
+
+protected slots:
+
+ // Kill dangling notes, if any...
+ void allNotesTimeout();
+
+protected:
+
+ // Keyboard note range sanitizers.
+ int safeNoteLow(int iNoteLow) const;
+ int safeNoteHigh(int iNoteHigh) const;
+
+ // Piano key rectangle finder.
+ QRect noteRect(int iNote, bool bOn = false) const;
+
+ // Piano keyboard note-on/off handlers.
+ void dragNoteOn(const QPoint& pos);
+ void dragNoteOff();
+
+ // (Re)create the complete view pixmap.
+ void updatePixmap();
+
+ // Paint event handler.
+ void paintEvent(QPaintEvent *pPaintEvent);
+
+ // Resize event handler.
+ void resizeEvent(QResizeEvent *pResizeEvent);
+
+ // Alternate mouse behavior event handlers.
+ void mousePressEvent(QMouseEvent *pMouseEvent);
+ void mouseMoveEvent(QMouseEvent *pMouseEvent);
+ void mouseReleaseEvent(QMouseEvent *pMouseEvent);
+
+ // Keyboard event handler.
+ void keyPressEvent(QKeyEvent *pKeyEvent);
+
+ // Trap for help/tool-tip events.
+ bool eventFilter(QObject *pObject, QEvent *pEvent);
+
+ // Present a tooltip for a note.
+ void noteToolTip(const QPoint& pos) const;
+
+ // Default note name map accessor.
+ QString noteName(int iNote) const;
+
+ // Reset drag/select state.
+ void resetDragState();
+
+protected:
+
+ // Constants
+ static const int NUM_NOTES = 128;
+
+ static const int MIN_NOTE = 0;
+ static const int MAX_NOTE = 127;
+
+ static const int MIN_VELOCITY = 1;
+ static const int MAX_VELOCITY = 127;
+
+ // Local double-buffering pixmap.
+ QPixmap m_pixmap;
+
+ // Current notes being keyed on.
+ struct Note
+ {
+ bool on;
+ QRect rect;
+
+ } m_notes[NUM_NOTES];
+
+ // Keyboard note range state.
+ enum DragState {
+ DragNone = 0, DragStart,
+ DragNoteRange, DragNoteLow, DragNoteHigh
+ } m_dragState, m_dragCursor;
+
+ QPoint m_posDrag;
+
+ // Piano keyboard note range.
+ bool m_bNoteRange;
+
+ int m_iNoteLow;
+ int m_iNoteLowX;
+
+ int m_iNoteHigh;
+ int m_iNoteHighX;
+
+ // Current note being keyed on.
+ int m_iNoteOn;
+
+ // Current note-on timeout.
+ int m_iTimeout;
+
+ // Default note-on velocity.
+ int m_iVelocity;
+
+ // Current highlighted note.
+ int m_iNoteKey;
+};
+
+
+#endif // __synthv1widget_keybd_h
+
+// end of synthv1widget_keybd.h
diff -Nru synthv1-0.8.6/src/synthv1widget_lv2.cpp synthv1-0.9.10+git20190929/src/synthv1widget_lv2.cpp
--- synthv1-0.8.6/src/synthv1widget_lv2.cpp 2017-12-20 07:56:50.328842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget_lv2.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1widget_lv2.cpp
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -37,20 +37,22 @@
{
m_pSynthUi = new synthv1_lv2ui(pSynth, controller, write_function);
-#ifdef CONFIG_LV2_EXTERNAL_UI
- m_external_host = NULL;
+#ifdef CONFIG_LV2_UI_EXTERNAL
+ m_external_host = nullptr;
#endif
#ifdef CONFIG_LV2_UI_IDLE
m_bIdleClosed = false;
#endif
- for (uint32_t i = 0; i < synthv1::NUM_PARAMS; ++i)
- m_params_def[i] = true;
+ // Initialise preset stuff...
+ clearPreset();
+
+ // Initial update, always...
+ //resetParamValues();
+ resetParamKnobs();
// May initialize the scheduler/work notifier.
openSchedNotifier();
-
- clearPreset();
}
@@ -68,7 +70,7 @@
}
-#ifdef CONFIG_LV2_EXTERNAL_UI
+#ifdef CONFIG_LV2_UI_EXTERNAL
void synthv1widget_lv2::setExternalHost ( LV2_External_UI_Host *external_host )
{
@@ -83,7 +85,7 @@
return m_external_host;
}
-#endif // CONFIG_LV2_EXTERNAL_UI
+#endif // CONFIG_LV2_UI_EXTERNAL
#ifdef CONFIG_LV2_UI_IDLE
@@ -105,7 +107,7 @@
if (pCloseEvent->isAccepted())
m_bIdleClosed = true;
#endif
-#ifdef CONFIG_LV2_EXTERNAL_UI
+#ifdef CONFIG_LV2_UI_EXTERNAL
if (m_external_host && m_external_host->ui_closed) {
if (pCloseEvent->isAccepted())
m_external_host->ui_closed(m_pSynthUi->controller());
@@ -122,8 +124,7 @@
const synthv1::ParamIndex index
= synthv1::ParamIndex(port_index - synthv1_lv2::ParamBase);
const float fValue = *(float *) buffer;
- setParamValue(index, fValue, m_params_def[index]);
- m_params_def[index] = false;
+ setParamValue(index, fValue);
}
}
diff -Nru synthv1-0.8.6/src/synthv1widget_lv2.h synthv1-0.9.10+git20190929/src/synthv1widget_lv2.h
--- synthv1-0.8.6/src/synthv1widget_lv2.h 2017-12-20 07:56:50.328842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget_lv2.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1widget_lv2.h
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -45,7 +45,7 @@
void port_event(uint32_t port_index,
uint32_t buffer_size, uint32_t format, const void *buffer);
-#ifdef CONFIG_LV2_EXTERNAL_UI
+#ifdef CONFIG_LV2_UI_EXTERNAL
void setExternalHost(LV2_External_UI_Host *external_host);
const LV2_External_UI_Host *externalHost() const;
#endif
@@ -70,9 +70,7 @@
// Instance variables.
synthv1_lv2ui *m_pSynthUi;
- bool m_params_def[synthv1::NUM_PARAMS];
-
-#ifdef CONFIG_LV2_EXTERNAL_UI
+#ifdef CONFIG_LV2_UI_EXTERNAL
LV2_External_UI_Host *m_external_host;
#endif
#ifdef CONFIG_LV2_UI_IDLE
diff -Nru synthv1-0.8.6/src/synthv1widget_param.cpp synthv1-0.9.10+git20190929/src/synthv1widget_param.cpp
--- synthv1-0.8.6/src/synthv1widget_param.cpp 2017-12-20 07:56:50.329842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget_param.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1widget_param.cpp
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -38,102 +38,95 @@
//-------------------------------------------------------------------------
-// synthv1widget_dial - A better QDial widget.
-
-synthv1widget_dial::DialMode
-synthv1widget_dial::g_dialMode = synthv1widget_dial::DefaultMode;
-
-// Set knob dial mode behavior.
-void synthv1widget_dial::setDialMode ( DialMode dialMode )
- { g_dialMode = dialMode; }
+// synthv1widget_param_style - Custom widget style.
+//
-synthv1widget_dial::DialMode synthv1widget_dial::dialMode (void)
- { return g_dialMode; }
+#include
+#include
+#include
-// Constructor.
-synthv1widget_dial::synthv1widget_dial ( QWidget *pParent )
- : QDial(pParent), m_bMousePressed(false), m_fLastDragValue(0.0f)
+class synthv1widget_param_style : public QProxyStyle
{
-}
-
+public:
-// Mouse angle determination.
-float synthv1widget_dial::mouseAngle ( const QPoint& pos )
-{
- const float dx = pos.x() - (width() >> 1);
- const float dy = (height() >> 1) - pos.y();
- return 180.0f * ::atan2f(dx, dy) / float(M_PI);
-}
+ // Constructor.
+ synthv1widget_param_style() : QProxyStyle()
+ {
+ m_icon.addPixmap(
+ QPixmap(":/images/ledOff.png"), QIcon::Normal, QIcon::Off);
+ m_icon.addPixmap(
+ QPixmap(":/images/ledOn.png"), QIcon::Normal, QIcon::On);
+ }
-// Alternate mouse behavior event handlers.
-void synthv1widget_dial::mousePressEvent ( QMouseEvent *pMouseEvent )
-{
- if (g_dialMode == DefaultMode) {
- QDial::mousePressEvent(pMouseEvent);
- } else if (pMouseEvent->button() == Qt::LeftButton) {
- m_bMousePressed = true;
- m_posMouse = pMouseEvent->pos();
- m_fLastDragValue = float(value());
- emit sliderPressed();
+ // Hints override.
+ int styleHint(StyleHint hint, const QStyleOption *option,
+ const QWidget *widget, QStyleHintReturn *retdata) const
+ {
+ if (hint == QStyle::SH_UnderlineShortcut)
+ return 0;
+ else
+ return QProxyStyle::styleHint(hint, option, widget, retdata);
}
-}
+ // Paint job.
+ void drawPrimitive(PrimitiveElement element,
+ const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const
+ {
+ if (element == PE_IndicatorRadioButton ||
+ element == PE_IndicatorCheckBox) {
+ const QRect& rect = option->rect;
+ if (option->state & State_Enabled) {
+ if (option->state & State_On)
+ m_icon.paint(painter, rect,
+ Qt::AlignCenter, QIcon::Normal, QIcon::On);
+ else
+ // if (option->state & State_Off)
+ m_icon.paint(painter, rect,
+ Qt::AlignCenter, QIcon::Normal, QIcon::Off);
+ } else {
+ m_icon.paint(painter, rect,
+ Qt::AlignCenter, QIcon::Disabled, QIcon::Off);
+ }
+ }
+ else
+ QProxyStyle::drawPrimitive(element, option, painter, widget);
+ }
-void synthv1widget_dial::mouseMoveEvent ( QMouseEvent *pMouseEvent )
-{
- if (g_dialMode == DefaultMode) {
- QDial::mouseMoveEvent(pMouseEvent);
- return;
+ // Spiced up text margins
+ void drawItemText(QPainter *painter, const QRect& rectangle,
+ int alignment, const QPalette& palette, bool enabled,
+ const QString& text, QPalette::ColorRole textRole) const
+ {
+ QRect rect = rectangle;
+ rect.setLeft(rect.left() - 4);
+ rect.setRight(rect.right() + 4);
+ QProxyStyle::drawItemText(painter, rect,
+ alignment, palette, enabled, text, textRole);
}
- if (!m_bMousePressed)
- return;
+ static void addRef ()
+ { if (++g_iRefCount == 1) g_pStyle = new synthv1widget_param_style(); }
- const QPoint& pos = pMouseEvent->pos();
- const int dx = pos.x() - m_posMouse.x();
- const int dy = pos.y() - m_posMouse.y();
- float fAngleDelta = mouseAngle(pos) - mouseAngle(m_posMouse);
- int iNewValue = value();
+ static void releaseRef ()
+ { if (--g_iRefCount == 0) { delete g_pStyle; g_pStyle = nullptr; } }
- switch (g_dialMode) {
- case LinearMode:
- iNewValue = int(m_fLastDragValue) + dx - dy;
- break;
- case AngularMode:
- default:
- // Forget about the drag origin to be robust on full rotations
- if (fAngleDelta > +180.0f) fAngleDelta -= 360.0f;
- else
- if (fAngleDelta < -180.0f) fAngleDelta += 360.0f;
- m_fLastDragValue += float(maximum() - minimum()) * fAngleDelta / 270.0f;
- if (m_fLastDragValue > float(maximum()))
- m_fLastDragValue = float(maximum());
- else
- if (m_fLastDragValue < float(minimum()))
- m_fLastDragValue = float(minimum());
- m_posMouse = pos;
- iNewValue = int(m_fLastDragValue + 0.5f);
- break;
- }
+ static synthv1widget_param_style *getRef ()
+ { return g_pStyle; }
- setValue(iNewValue);
- update();
+private:
- emit sliderMoved(value());
-}
+ QIcon m_icon;
+
+ static synthv1widget_param_style *g_pStyle;
+ static unsigned int g_iRefCount;
+};
-void synthv1widget_dial::mouseReleaseEvent ( QMouseEvent *pMouseEvent )
-{
- if (g_dialMode == DefaultMode
- && pMouseEvent->button() != Qt::MidButton) {
- QDial::mouseReleaseEvent(pMouseEvent);
- } else if (m_bMousePressed) {
- m_bMousePressed = false;
- }
-}
+synthv1widget_param_style *synthv1widget_param_style::g_pStyle = nullptr;
+unsigned int synthv1widget_param_style::g_iRefCount = 0;
//-------------------------------------------------------------------------
@@ -178,11 +171,11 @@
}
-void synthv1widget_param::setValue ( float fValue, bool bDefault )
+void synthv1widget_param::setValue ( float fValue )
{
QPalette pal;
- if (bDefault) {
+ if (m_iDefaultValue == 0) {
m_fDefaultValue = fValue;
m_iDefaultValue++;
}
@@ -306,6 +299,105 @@
//-------------------------------------------------------------------------
+// synthv1widget_dial - A better QDial widget.
+
+synthv1widget_dial::DialMode
+synthv1widget_dial::g_dialMode = synthv1widget_dial::DefaultMode;
+
+// Set knob dial mode behavior.
+void synthv1widget_dial::setDialMode ( DialMode dialMode )
+ { g_dialMode = dialMode; }
+
+synthv1widget_dial::DialMode synthv1widget_dial::dialMode (void)
+ { return g_dialMode; }
+
+
+// Constructor.
+synthv1widget_dial::synthv1widget_dial ( QWidget *pParent )
+ : QDial(pParent), m_bMousePressed(false), m_fLastDragValue(0.0f)
+{
+}
+
+
+// Mouse angle determination.
+float synthv1widget_dial::mouseAngle ( const QPoint& pos )
+{
+ const float dx = pos.x() - (width() >> 1);
+ const float dy = (height() >> 1) - pos.y();
+ return 180.0f * ::atan2f(dx, dy) / float(M_PI);
+}
+
+
+// Alternate mouse behavior event handlers.
+void synthv1widget_dial::mousePressEvent ( QMouseEvent *pMouseEvent )
+{
+ if (g_dialMode == DefaultMode) {
+ QDial::mousePressEvent(pMouseEvent);
+ } else if (pMouseEvent->button() == Qt::LeftButton) {
+ m_bMousePressed = true;
+ m_posMouse = pMouseEvent->pos();
+ m_fLastDragValue = float(value());
+ emit sliderPressed();
+ }
+}
+
+
+void synthv1widget_dial::mouseMoveEvent ( QMouseEvent *pMouseEvent )
+{
+ if (g_dialMode == DefaultMode) {
+ QDial::mouseMoveEvent(pMouseEvent);
+ return;
+ }
+
+ if (!m_bMousePressed)
+ return;
+
+ const QPoint& pos = pMouseEvent->pos();
+ const int dx = pos.x() - m_posMouse.x();
+ const int dy = pos.y() - m_posMouse.y();
+ float fAngleDelta = mouseAngle(pos) - mouseAngle(m_posMouse);
+ int iNewValue = value();
+
+ switch (g_dialMode) {
+ case LinearMode:
+ iNewValue = int(m_fLastDragValue) + dx - dy;
+ break;
+ case AngularMode:
+ default:
+ // Forget about the drag origin to be robust on full rotations
+ if (fAngleDelta > +180.0f) fAngleDelta -= 360.0f;
+ else
+ if (fAngleDelta < -180.0f) fAngleDelta += 360.0f;
+ m_fLastDragValue += float(maximum() - minimum()) * fAngleDelta / 270.0f;
+ if (m_fLastDragValue > float(maximum()))
+ m_fLastDragValue = float(maximum());
+ else
+ if (m_fLastDragValue < float(minimum()))
+ m_fLastDragValue = float(minimum());
+ m_posMouse = pos;
+ iNewValue = int(m_fLastDragValue + 0.5f);
+ break;
+ }
+
+ setValue(iNewValue);
+ update();
+
+ emit sliderMoved(value());
+}
+
+
+void synthv1widget_dial::mouseReleaseEvent ( QMouseEvent *pMouseEvent )
+{
+ if (g_dialMode == DefaultMode
+ && pMouseEvent->button() != Qt::MidButton) {
+ QDial::mouseReleaseEvent(pMouseEvent);
+ } else if (m_bMousePressed) {
+ m_bMousePressed = false;
+ }
+}
+
+
+//-------------------------------------------------------------------------
// synthv1widget_knob - Custom knob/dial widget.
//
@@ -343,10 +435,10 @@
}
-void synthv1widget_knob::setValue ( float fValue, bool bDefault )
+void synthv1widget_knob::setValue ( float fValue )
{
const bool bDialBlock = m_pDial->blockSignals(true);
- synthv1widget_param::setValue(fValue, bDefault);
+ synthv1widget_param::setValue(fValue);
m_pDial->setValue(scaleFromValue(fValue));
m_pDial->blockSignals(bDialBlock);
}
@@ -404,7 +496,7 @@
synthv1widget_edit::synthv1widget_edit ( QWidget *pParent )
: QDoubleSpinBox(pParent), m_iTextChanged(0)
{
- QObject::connect(lineEdit(),
+ QObject::connect(QDoubleSpinBox::lineEdit(),
SIGNAL(textChanged(const QString&)),
SLOT(lineEditTextChanged(const QString&)));
QObject::connect(this,
@@ -428,7 +520,7 @@
{
if (g_editMode == DeferredMode) {
m_iTextChanged = 0;
- emit valueChangedEx(value());
+ emit valueChangedEx(QDoubleSpinBox::value());
}
}
@@ -440,6 +532,21 @@
}
+// Inherited/override methods.
+QValidator::State synthv1widget_edit::validate ( QString& sText, int& iPos ) const
+{
+ const QValidator::State state
+ = QDoubleSpinBox::validate(sText, iPos);
+
+ if (state == QValidator::Acceptable
+ && g_editMode == DeferredMode
+ && m_iTextChanged == 0)
+ return QValidator::Intermediate;
+
+ return state;
+}
+
+
//-------------------------------------------------------------------------
// synthv1widget_spin - Custom knob/spin-box widget.
//
@@ -473,10 +580,10 @@
// Virtual accessors.
-void synthv1widget_spin::setValue ( float fValue, bool bDefault )
+void synthv1widget_spin::setValue ( float fValue )
{
const bool bSpinBlock = m_pSpinBox->blockSignals(true);
- synthv1widget_knob::setValue(fValue, bDefault);
+ synthv1widget_knob::setValue(fValue);
m_pSpinBox->setValue(scaleFromValue(fValue));
m_pSpinBox->blockSignals(bSpinBlock);
}
@@ -569,10 +676,10 @@
// Virtual accessors.
-void synthv1widget_combo::setValue ( float fValue, bool bDefault )
+void synthv1widget_combo::setValue ( float fValue )
{
const bool bComboBlock = m_pComboBox->blockSignals(true);
- synthv1widget_knob::setValue(fValue, bDefault);
+ synthv1widget_knob::setValue(fValue);
m_pComboBox->setCurrentIndex(iroundf(fValue));
m_pComboBox->blockSignals(bComboBlock);
}
@@ -637,98 +744,6 @@
//-------------------------------------------------------------------------
-// synthv1widget_param_style - Custom widget style.
-//
-
-#include
-#include
-#include
-
-
-class synthv1widget_param_style : public QProxyStyle
-{
-public:
-
- // Constructor.
- synthv1widget_param_style() : QProxyStyle()
- {
- m_icon.addPixmap(
- QPixmap(":/images/ledOff.png"), QIcon::Normal, QIcon::Off);
- m_icon.addPixmap(
- QPixmap(":/images/ledOn.png"), QIcon::Normal, QIcon::On);
- }
-
-
- // Hints override.
- int styleHint(StyleHint hint, const QStyleOption *option,
- const QWidget *widget, QStyleHintReturn *retdata) const
- {
- if (hint == QStyle::SH_UnderlineShortcut)
- return 0;
- else
- return QProxyStyle::styleHint(hint, option, widget, retdata);
- }
-
- // Paint job.
- void drawPrimitive(PrimitiveElement element,
- const QStyleOption *option,
- QPainter *painter, const QWidget *widget) const
- {
- if (element == PE_IndicatorRadioButton ||
- element == PE_IndicatorCheckBox) {
- const QRect& rect = option->rect;
- if (option->state & State_Enabled) {
- if (option->state & State_On)
- m_icon.paint(painter, rect,
- Qt::AlignCenter, QIcon::Normal, QIcon::On);
- else
- // if (option->state & State_Off)
- m_icon.paint(painter, rect,
- Qt::AlignCenter, QIcon::Normal, QIcon::Off);
- } else {
- m_icon.paint(painter, rect,
- Qt::AlignCenter, QIcon::Disabled, QIcon::Off);
- }
- }
- else
- QProxyStyle::drawPrimitive(element, option, painter, widget);
- }
-
- // Spiced up text margins
- void drawItemText(QPainter *painter, const QRect& rectangle,
- int alignment, const QPalette& palette, bool enabled,
- const QString& text, QPalette::ColorRole textRole) const
- {
- QRect rect = rectangle;
- rect.setLeft(rect.left() - 4);
- rect.setRight(rect.right() + 4);
- QProxyStyle::drawItemText(painter, rect,
- alignment, palette, enabled, text, textRole);
- }
-
- static void addRef ()
- { if (++g_iRefCount == 1) g_pStyle = new synthv1widget_param_style(); }
-
- static void releaseRef ()
- { if (--g_iRefCount == 0) { delete g_pStyle; g_pStyle = NULL; } }
-
- static synthv1widget_param_style *getRef ()
- { return g_pStyle; }
-
-private:
-
- QIcon m_icon;
-
- static synthv1widget_param_style *g_pStyle;
- static unsigned int g_iRefCount;
-};
-
-
-synthv1widget_param_style *synthv1widget_param_style::g_pStyle = NULL;
-unsigned int synthv1widget_param_style::g_iRefCount = 0;
-
-
-//-------------------------------------------------------------------------
// synthv1widget_radio - Custom radio/button widget.
//
@@ -759,14 +774,14 @@
// Virtual accessors.
-void synthv1widget_radio::setValue ( float fValue, bool bDefault )
+void synthv1widget_radio::setValue ( float fValue )
{
const int iRadioValue = iroundf(fValue);
QRadioButton *pRadioButton
= static_cast (m_group.button(iRadioValue));
if (pRadioButton) {
const bool bRadioBlock = pRadioButton->blockSignals(true);
- synthv1widget_param::setValue(float(iRadioValue), bDefault);
+ synthv1widget_param::setValue(float(iRadioValue));
pRadioButton->setChecked(true);
pRadioButton->blockSignals(bRadioBlock);
}
@@ -910,11 +925,11 @@
// Virtual accessors.
-void synthv1widget_check::setValue ( float fValue, bool bDefault )
+void synthv1widget_check::setValue ( float fValue )
{
const bool bCheckValue = (fValue > 0.5f * (maximum() + minimum()));
const bool bCheckBlock = m_pCheckBox->blockSignals(true);
- synthv1widget_param::setValue(bCheckValue ? maximum() : minimum(), bDefault);
+ synthv1widget_param::setValue(bCheckValue ? maximum() : minimum());
m_pCheckBox->setChecked(bCheckValue);
m_pCheckBox->blockSignals(bCheckBlock);
}
@@ -926,4 +941,85 @@
}
+//-------------------------------------------------------------------------
+// synthv1widget_group - Custom checkable group-box widget.
+//
+
+// Constructor.
+synthv1widget_group::synthv1widget_group ( QWidget *pParent )
+ : QGroupBox(pParent)
+{
+ synthv1widget_param_style::addRef();
+#if 0
+ QGroupBox::setStyleSheet(
+ // "QGroupBox::indicator { width: 16px; height: 16px; }"
+ "QGroupBox::indicator::unchecked { image: url(:/images/ledOff.png); }"
+ "QGroupBox::indicator::checked { image: url(:/images/ledOn.png); }"
+ );
+#endif
+ QGroupBox::setStyle(synthv1widget_param_style::getRef());
+
+ m_pParam = new synthv1widget_param(this);
+ m_pParam->setToolTip(QGroupBox::toolTip());
+
+ QObject::connect(m_pParam,
+ SIGNAL(valueChanged(float)),
+ SLOT(paramValueChanged(float)));
+
+ QObject::connect(this,
+ SIGNAL(toggled(bool)),
+ SLOT(groupBoxValueChanged(bool)));
+}
+
+
+// Destructor.
+synthv1widget_group::~synthv1widget_group (void)
+{
+ synthv1widget_param_style::releaseRef();
+
+ delete m_pParam;
+}
+
+
+// Accessors.
+void synthv1widget_group::setToolTip ( const QString& sToolTip )
+{
+ m_pParam->setToolTip(sToolTip);
+}
+
+
+QString synthv1widget_group::toolTip (void) const
+{
+ return m_pParam->toolTip();
+}
+
+
+synthv1widget_param *synthv1widget_group::param (void) const
+{
+ return m_pParam;
+}
+
+
+// Virtual accessors.
+void synthv1widget_group::paramValueChanged ( float fValue )
+{
+ const float fMaximum = m_pParam->maximum();
+ const float fMinimum = m_pParam->minimum();
+
+ const bool bGroupValue = (fValue > 0.5f * (fMaximum + fMinimum));
+ const bool bGroupBlock = QGroupBox::blockSignals(true);
+ QGroupBox::setChecked(bGroupValue);
+ QGroupBox::blockSignals(bGroupBlock);
+}
+
+
+void synthv1widget_group::groupBoxValueChanged ( bool bGroupValue )
+{
+ const float fMaximum = m_pParam->maximum();
+ const float fMinimum = m_pParam->minimum();
+
+ m_pParam->setValue(bGroupValue ? fMaximum : fMinimum);
+}
+
+
// end of synthv1widget_param.cpp
diff -Nru synthv1-0.8.6/src/synthv1widget_param.h synthv1-0.9.10+git20190929/src/synthv1widget_param.h
--- synthv1-0.8.6/src/synthv1widget_param.h 2017-12-20 07:56:50.329842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget_param.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1widget_param.h
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -26,6 +26,7 @@
#include
#include
#include
+#include
// Forward declarations.
@@ -35,52 +36,6 @@
//-------------------------------------------------------------------------
-// synthv1widget_dial - A better QDial widget.
-
-class synthv1widget_dial : public QDial
-{
- Q_OBJECT
-
-public:
-
- // Constructor.
- synthv1widget_dial(QWidget *pParent = 0);
-
- // Dial mode behavior:
- // DefaultMode - default (old) QDial behavior.
- // LinearMode - proportionally to distance in one ortogonal axis.
- // AngularMode - angularly relative to widget center.
- enum DialMode { DefaultMode = 0, LinearMode, AngularMode };
-
- // Set knob dial mode behavior.
- static void setDialMode(DialMode dialMode);
- static DialMode dialMode();
-
-protected:
-
- // Mouse angle determination.
- float mouseAngle(const QPoint& pos);
-
- // Alternate mouse behavior event handlers.
- void mousePressEvent(QMouseEvent *pMouseEvent);
- void mouseMoveEvent(QMouseEvent *pMouseEvent);
- void mouseReleaseEvent(QMouseEvent *pMouseEvent);
-
-private:
-
- // Alternate mouse behavior tracking.
- bool m_bMousePressed;
- QPoint m_posMouse;
-
- // Just for more precission on the movement
- float m_fLastDragValue;
-
- // Knob dial mode behavior.
- static DialMode g_dialMode;
-};
-
-
-//-------------------------------------------------------------------------
// synthv1widget_param - Custom composite widget.
class synthv1widget_param : public QWidget
@@ -117,7 +72,7 @@
public slots:
// Virtual accessor.
- virtual void setValue(float fValue, bool bDefault = false);
+ virtual void setValue(float fValue);
signals:
@@ -152,6 +107,52 @@
//-------------------------------------------------------------------------
+// synthv1widget_dial - A better QDial widget.
+
+class synthv1widget_dial : public QDial
+{
+ Q_OBJECT
+
+public:
+
+ // Constructor.
+ synthv1widget_dial(QWidget *pParent = 0);
+
+ // Dial mode behavior:
+ // DefaultMode - default (old) QDial behavior.
+ // LinearMode - proportionally to distance in one ortogonal axis.
+ // AngularMode - angularly relative to widget center.
+ enum DialMode { DefaultMode = 0, LinearMode, AngularMode };
+
+ // Set knob dial mode behavior.
+ static void setDialMode(DialMode dialMode);
+ static DialMode dialMode();
+
+protected:
+
+ // Mouse angle determination.
+ float mouseAngle(const QPoint& pos);
+
+ // Alternate mouse behavior event handlers.
+ void mousePressEvent(QMouseEvent *pMouseEvent);
+ void mouseMoveEvent(QMouseEvent *pMouseEvent);
+ void mouseReleaseEvent(QMouseEvent *pMouseEvent);
+
+private:
+
+ // Alternate mouse behavior tracking.
+ bool m_bMousePressed;
+ QPoint m_posMouse;
+
+ // Just for more precission on the movement
+ float m_fLastDragValue;
+
+ // Knob dial mode behavior.
+ static DialMode g_dialMode;
+};
+
+
+//-------------------------------------------------------------------------
// synthv1widget_knob - Custom knob/dial widget.
class synthv1widget_knob : public synthv1widget_param
@@ -173,7 +174,7 @@
public slots:
// Virtual accessor.
- void setValue(float fValue, bool bDefault = false);
+ void setValue(float fValue);
protected slots:
@@ -228,6 +229,11 @@
// Alternate value change signal.
void valueChangedEx(double);
+protected:
+
+ // Inherited/override methods.
+ QValidator::State validate(QString& sText, int& iPos) const;
+
private:
// Alternate edit behavior tracking.
@@ -268,7 +274,7 @@
public slots:
// Virtual accessor.
- void setValue(float fValue, bool bDefault = false);
+ void setValue(float fValue);
protected slots:
@@ -304,7 +310,7 @@
public slots:
// Virtual accessor.
- void setValue(float fValue, bool bDefault = false);
+ void setValue(float fValue);
protected slots:
@@ -348,7 +354,7 @@
public slots:
// Virtual accessor.
- void setValue(float fValue, bool bDefault = false);
+ void setValue(float fValue);
protected slots:
@@ -387,7 +393,7 @@
public slots:
// Virtual accessor.
- void setValue(float fValue, bool bDefault = false);
+ void setValue(float fValue);
protected slots:
@@ -403,6 +409,40 @@
};
+//-------------------------------------------------------------------------
+// synthv1widget_group - Custom checkable group-box widget.
+
+class synthv1widget_group : public QGroupBox
+{
+ Q_OBJECT
+
+public:
+
+ // Constructor.
+ synthv1widget_group(QWidget *pParent = 0);
+
+ // Desstructor.
+ ~synthv1widget_group();
+
+ // Accessors.
+ void setToolTip(const QString& sToolTip);
+ QString toolTip() const;
+
+ synthv1widget_param *param() const;
+
+protected slots:
+
+ // Change slot.
+ void paramValueChanged(float);
+ void groupBoxValueChanged(bool);
+
+private:
+
+ // Widget members.
+ synthv1widget_param *m_pParam;
+};
+
+
#endif // __synthv1widget_param_h
// end of synthv1widget_param.h
diff -Nru synthv1-0.8.6/src/synthv1widget_preset.cpp synthv1-0.9.10+git20190929/src/synthv1widget_preset.cpp
--- synthv1-0.8.6/src/synthv1widget_preset.cpp 2017-12-20 07:56:50.329842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget_preset.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1widget_preset.cpp
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -52,8 +52,8 @@
m_pOpenButton->setIcon(QIcon(":/images/presetOpen.png"));
m_pComboBox->setEditable(true);
m_pComboBox->setMinimumWidth(240);
-#if QT_VERSION >= 0x040200
- m_pComboBox->setCompleter(NULL);
+#if QT_VERSION >= QT_VERSION_CHECK(4, 2, 0)
+ m_pComboBox->setCompleter(nullptr);
#endif
m_pComboBox->setInsertPolicy(QComboBox::NoInsert);
m_pSaveButton->setIcon(QIcon(":/images/presetSave.png"));
@@ -114,10 +114,6 @@
{
++m_iInitPreset;
- synthv1_config *pConfig = synthv1_config::getInstance();
- if (pConfig)
- pConfig->sPreset.clear();
-
const bool bBlockSignals = m_pComboBox->blockSignals(true);
m_pComboBox->clearEditText();
m_pComboBox->blockSignals(bBlockSignals);
@@ -126,10 +122,6 @@
void synthv1widget_preset::setPreset ( const QString& sPreset )
{
- synthv1_config *pConfig = synthv1_config::getInstance();
- if (pConfig)
- pConfig->sPreset = sPreset;
-
const bool bBlockSignals = m_pComboBox->blockSignals(true);
m_pComboBox->setEditText(sPreset);
m_pComboBox->blockSignals(bBlockSignals);
@@ -148,14 +140,14 @@
return true;
synthv1_config *pConfig = synthv1_config::getInstance();
- if (pConfig == NULL)
+ if (pConfig == nullptr)
return false;
if (m_iDirtyPreset > 0) {
- const QString sPreset(pConfig->sPreset);
+ const QString& sPreset(pConfig->sPreset);
if (sPreset.isEmpty()) {
if (QMessageBox::warning(this,
- tr("Warning") + " - " SYNTHV1_TITLE,
+ tr("Warning"),
tr("Some parameters have been changed.\n\n"
"Do you want to discard the changes?"),
QMessageBox::Discard |
@@ -163,7 +155,7 @@
return false;
} else {
switch (QMessageBox::warning(this,
- tr("Warning") + " - " SYNTHV1_TITLE,
+ tr("Warning"),
tr("Some preset parameters have been changed:\n\n"
"\"%1\".\n\nDo you want to save the changes?")
.arg(sPreset),
@@ -203,8 +195,8 @@
if (pConfig) {
emit loadPresetFile(pConfig->presetFile(sPreset));
++m_iInitPreset;
- // pConfig->sPreset = sPreset;
- // setPreset(sPreset);
+ pConfig->sPreset = sPreset;
+ setPreset(sPreset);
refreshPreset();
}
@@ -214,8 +206,13 @@
void synthv1widget_preset::newPreset (void)
{
- if (queryPreset()) {
+ if (!queryPreset())
+ return;
+
+ synthv1_config *pConfig = synthv1_config::getInstance();
+ if (pConfig) {
emit newPresetFile();
+ pConfig->sPreset.clear();
clearPreset();
refreshPreset();
}
@@ -227,24 +224,24 @@
void synthv1widget_preset::openPreset (void)
{
synthv1_config *pConfig = synthv1_config::getInstance();
- if (pConfig == NULL)
+ if (pConfig == nullptr)
return;
QStringList files;
const QString sExt(SYNTHV1_TITLE);
- const QString& sTitle = tr("Open Preset") + " - " SYNTHV1_TITLE;
+ const QString& sTitle = tr("Open Preset");
const QString& sFilter = tr("Preset files (*.%1)").arg(sExt);
- QWidget *pParentWidget = NULL;
+ QWidget *pParentWidget = nullptr;
QFileDialog::Options options = 0;
if (pConfig->bDontUseNativeDialogs) {
options |= QFileDialog::DontUseNativeDialog;
- pParentWidget = parentWidget();
+ pParentWidget = QWidget::window();
}
-#if 1//QT_VERSION < 0x040400
+#if 1//QT_VERSION < QT_VERSION_CHECK(4, 4, 0)
files = QFileDialog::getOpenFileNames(pParentWidget,
- sTitle, pConfig->sPresetDir, sFilter, NULL, options);
+ sTitle, pConfig->sPresetDir, sFilter, nullptr, options);
#else
QFileDialog fileDialog(pParentWidget,
sTitle, pConfig->sPresetDir, sFilter);
@@ -271,7 +268,7 @@
if (++iPreset == 1) {
++m_iInitPreset;
emit loadPresetFile(sFilename);
- // pConfig->sPreset = sPreset;
+ pConfig->sPreset = sPreset;
pConfig->sPresetDir = fi.absolutePath();
setPreset(sPreset);
}
@@ -295,24 +292,24 @@
return;
synthv1_config *pConfig = synthv1_config::getInstance();
- if (pConfig == NULL)
+ if (pConfig == nullptr)
return;
const QString sExt(SYNTHV1_TITLE);
QFileInfo fi(QDir(pConfig->sPresetDir), sPreset + '.' + sExt);
QString sFilename = fi.absoluteFilePath();
if (!fi.exists()) {
- const QString& sTitle = tr("Save Preset") + " - " SYNTHV1_TITLE;
+ const QString& sTitle = tr("Save Preset");
const QString& sFilter = tr("Preset files (*.%1)").arg(sExt);
- QWidget *pParentWidget = NULL;
+ QWidget *pParentWidget = nullptr;
QFileDialog::Options options = 0;
if (pConfig->bDontUseNativeDialogs) {
options |= QFileDialog::DontUseNativeDialog;
- pParentWidget = parentWidget();
+ pParentWidget = QWidget::window();
}
- #if 1//QT_VERSION < 0x040400
+ #if 1//QT_VERSION < QT_VERSION_CHECK(4, 4, 0)
sFilename = QFileDialog::getSaveFileName(pParentWidget,
- sTitle, sFilename, sFilter, NULL, options);
+ sTitle, sFilename, sFilter, nullptr, options);
#else
QFileDialog fileDialog(pParentWidget,
sTitle, sFilename, sFilter);
@@ -327,8 +324,8 @@
sFilename = fileDialog.selectedFiles().first();
#endif
} else {
- if (QMessageBox::warning(parentWidget(),
- tr("Warning") + " - " SYNTHV1_TITLE,
+ if (QMessageBox::warning(QWidget::window(),
+ tr("Warning"),
tr("About to replace preset:\n\n"
"\"%1\"\n\n"
"Are you sure?")
@@ -361,11 +358,10 @@
return;
synthv1_config *pConfig = synthv1_config::getInstance();
- if (pConfig == NULL)
+ if (pConfig == nullptr)
return;
-
- if (QMessageBox::warning(parentWidget(),
- tr("Warning") + " - " SYNTHV1_TITLE,
+ if (QMessageBox::warning(QWidget::window(),
+ tr("Warning"),
tr("About to remove preset:\n\n"
"\"%1\"\n\n"
"Are you sure?")
@@ -375,6 +371,7 @@
return;
pConfig->removePreset(sPreset);
+ pConfig->sPreset.clear();
clearPreset();
refreshPreset();
diff -Nru synthv1-0.8.6/src/synthv1widget_preset.h synthv1-0.9.10+git20190929/src/synthv1widget_preset.h
--- synthv1-0.8.6/src/synthv1widget_preset.h 2017-12-20 07:56:50.329842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget_preset.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1widget_preset.h
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
diff -Nru synthv1-0.8.6/src/synthv1widget_programs.cpp synthv1-0.9.10+git20190929/src/synthv1widget_programs.cpp
--- synthv1-0.8.6/src/synthv1widget_programs.cpp 2017-12-20 07:56:50.329842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget_programs.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1widget_programs.cpp
//
/****************************************************************************
- Copyright (C) 2012-2015, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -24,35 +24,63 @@
#include "synthv1_programs.h"
#include "synthv1_config.h"
+#include
#include
-
#include
#include
#include
//----------------------------------------------------------------------------
+// synthv1widget_programs::ItemDelegate -- Custom (tree) list item delegate.
+
+class synthv1widget_programs::ItemDelegate : public QItemDelegate
+{
+public:
+
+ // ctor.
+ ItemDelegate(QObject *pParent = 0);
+
+ // QItemDelegate interface...
+ QSize sizeHint(
+ const QStyleOptionViewItem& option,
+ const QModelIndex& index) const;
+
+ QWidget *createEditor(QWidget *pParent,
+ const QStyleOptionViewItem& option,
+ const QModelIndex& index) const;
+
+ void setEditorData(QWidget *pEditor,
+ const QModelIndex& index) const;
+
+ void setModelData(QWidget *pEditor,
+ QAbstractItemModel *pModel,
+ const QModelIndex& index) const;
+};
+
+
+//----------------------------------------------------------------------------
// synthv1widget_programs_item_delegate -- Custom (tree) list item delegate.
// ctor.
-synthv1widget_programs_item_delegate::synthv1widget_programs_item_delegate (
- QObject *pParent ) : QItemDelegate(pParent)
+synthv1widget_programs::ItemDelegate::ItemDelegate ( QObject *pParent )
+ : QItemDelegate(pParent)
{
}
// QItemDelegate interface...
-QSize synthv1widget_programs_item_delegate::sizeHint (
+QSize synthv1widget_programs::ItemDelegate::sizeHint (
const QStyleOptionViewItem& option, const QModelIndex& index ) const
{
return QItemDelegate::sizeHint(option, index) + QSize(4, 4);
}
-QWidget *synthv1widget_programs_item_delegate::createEditor ( QWidget *pParent,
+QWidget *synthv1widget_programs::ItemDelegate::createEditor ( QWidget *pParent,
const QStyleOptionViewItem& /*option*/, const QModelIndex& index ) const
{
- QWidget *pEditor = NULL;
+ QWidget *pEditor = nullptr;
switch (index.column()) {
case 0: // Data.
@@ -88,7 +116,7 @@
}
#ifdef CONFIG_DEBUG_0
- qDebug("synthv1widget_programs_item_delegate::createEditor(%p, %d, %d) = %p",
+ qDebug("synthv1widget_programs::ItemDelegate::createEditor(%p, %d, %d) = %p",
pParent, index.row(), index.column(), pEditor);
#endif
@@ -96,11 +124,11 @@
}
-void synthv1widget_programs_item_delegate::setEditorData (
+void synthv1widget_programs::ItemDelegate::setEditorData (
QWidget *pEditor, const QModelIndex& index ) const
{
#ifdef CONFIG_DEBUG_0
- qDebug("synthv1widget_programs_item_delegate::setEditorData(%p, %d, %d)",
+ qDebug("synthv1widget_programs::ItemDelegate::setEditorData(%p, %d, %d)",
pEditor, index.row(), index.column());
#endif
@@ -137,11 +165,11 @@
}
-void synthv1widget_programs_item_delegate::setModelData ( QWidget *pEditor,
+void synthv1widget_programs::ItemDelegate::setModelData ( QWidget *pEditor,
QAbstractItemModel *pModel, const QModelIndex& index ) const
{
#ifdef CONFIG_DEBUG_0
- qDebug("synthv1widget_programs_item_delegate::setModelData(%p, %d, %d)",
+ qDebug("synthv1widget_programs::ItemDelegate::setModelData(%p, %d, %d)",
pEditor, index.row(), index.column());
#endif
@@ -203,14 +231,14 @@
QTreeWidget::setSelectionMode(QAbstractItemView::SingleSelection);
QHeaderView *pHeaderView = QTreeWidget::header();
-#if QT_VERSION < 0x050000
+#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
pHeaderView->setResizeMode(QHeaderView::ResizeToContents);
#else
pHeaderView->setSectionResizeMode(QHeaderView::ResizeToContents);
#endif
pHeaderView->hide();
- QTreeWidget::setItemDelegate(new synthv1widget_programs_item_delegate(this));
+ QTreeWidget::setItemDelegate(new ItemDelegate(this));
QObject::connect(this,
SIGNAL(itemChanged(QTreeWidgetItem *, int)),
@@ -237,7 +265,7 @@
QTreeWidget::clear();
QList items;
- QTreeWidgetItem *pCurrentItem = NULL;
+ QTreeWidgetItem *pCurrentItem = nullptr;
const synthv1_programs::Banks& banks = pPrograms->banks();
synthv1_programs::Banks::ConstIterator bank_iter = banks.constBegin();
const synthv1_programs::Banks::ConstIterator& bank_end = banks.constEnd();
@@ -342,8 +370,8 @@
QTreeWidgetItem *synthv1widget_programs::newBankItem (void)
{
QTreeWidgetItem *pItem = QTreeWidget::currentItem();
- QTreeWidgetItem *pBankItem = (pItem ? pItem->parent() : NULL);
- if (pBankItem == NULL)
+ QTreeWidgetItem *pBankItem = (pItem ? pItem->parent() : nullptr);
+ if (pBankItem == nullptr)
pBankItem = pItem;
int iBank = 0;
@@ -362,7 +390,7 @@
if (iBankData < pBankItem->data(0, Qt::UserRole).toInt())
break;
if (++iBankData > 16383)
- return NULL;
+ return nullptr;
}
pBankItem = new QTreeWidgetItem(QStringList()
@@ -379,18 +407,18 @@
QTreeWidgetItem *synthv1widget_programs::newProgramItem (void)
{
QTreeWidgetItem *pItem = QTreeWidget::currentItem();
- QTreeWidgetItem *pBankItem = (pItem ? pItem->parent() : NULL);
- QTreeWidgetItem *pProgItem = NULL;
- if (pBankItem == NULL)
+ QTreeWidgetItem *pBankItem = (pItem ? pItem->parent() : nullptr);
+ QTreeWidgetItem *pProgItem = nullptr;
+ if (pBankItem == nullptr)
pBankItem = pItem;
else
pProgItem = pItem;
- if (pBankItem == NULL)
+ if (pBankItem == nullptr)
pBankItem = QTreeWidget::topLevelItem(0);
- if (pBankItem == NULL)
+ if (pBankItem == nullptr)
pBankItem = newBankItem();
- if (pBankItem == NULL)
- return NULL;
+ if (pBankItem == nullptr)
+ return nullptr;
const int iBankData
= pBankItem->data(0, Qt::UserRole).toInt();
@@ -411,7 +439,7 @@
if (iProgData < pProgItem->data(0, Qt::UserRole).toInt())
break;
if (++iProgData > 127)
- return NULL;
+ return nullptr;
}
pProgItem = new QTreeWidgetItem(QStringList()
@@ -484,14 +512,14 @@
void synthv1widget_programs::itemExpandedSlot ( QTreeWidgetItem *pItem )
{
- if (pItem->parent() == NULL)
+ if (pItem->parent() == nullptr)
pItem->setIcon(0, QIcon(":/images/presetBankOpen.png"));
}
void synthv1widget_programs::itemCollapsedSlot ( QTreeWidgetItem *pItem )
{
- if (pItem->parent() == NULL)
+ if (pItem->parent() == nullptr)
pItem->setIcon(0, QIcon(":/images/presetBank.png"));
}
diff -Nru synthv1-0.8.6/src/synthv1widget_programs.h synthv1-0.9.10+git20190929/src/synthv1widget_programs.h
--- synthv1-0.8.6/src/synthv1widget_programs.h 2017-12-20 07:56:50.329842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget_programs.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1widget_programs.h
//
/****************************************************************************
- Copyright (C) 2012-2015, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -22,7 +22,6 @@
#ifndef __synthv1widget_programs_h
#define __synthv1widget_programs_h
-#include
#include
@@ -31,37 +30,6 @@
//----------------------------------------------------------------------------
-// synthv1widget_programs_item_delegate -- Custom (tree) list item delegate.
-
-class synthv1widget_programs_item_delegate : public QItemDelegate
-{
- Q_OBJECT
-
-public:
-
- // ctor.
- synthv1widget_programs_item_delegate(QObject *pParent = 0);
-
- // QItemDelegate interface...
- QSize sizeHint(
- const QStyleOptionViewItem& option,
- const QModelIndex& index) const;
-
- QWidget *createEditor(QWidget *pParent,
- const QStyleOptionViewItem& option,
- const QModelIndex& index) const;
-
- void setEditorData(QWidget *pEditor,
- const QModelIndex& index) const;
-
- void setModelData(QWidget *pEditor,
- QAbstractItemModel *pModel,
- const QModelIndex& index) const;
-};
-
-
-
-//----------------------------------------------------------------------------
// synthv1widget_programs -- Custom (tree) widget.
class synthv1widget_programs : public QTreeWidget
@@ -97,6 +65,9 @@
protected:
+ // item delegate decl..
+ class ItemDelegate;
+
// factory methods.
QTreeWidgetItem *newBankItem();
QTreeWidgetItem *newProgramItem();
diff -Nru synthv1-0.8.6/src/synthv1widget_status.cpp synthv1-0.9.10+git20190929/src/synthv1widget_status.cpp
--- synthv1-0.8.6/src/synthv1widget_status.cpp 2017-12-20 07:56:50.329842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget_status.cpp 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1widget_status.cpp
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -21,11 +21,17 @@
#include "synthv1widget_status.h"
+#include "synthv1widget_keybd.h"
+
#include
#include
#include
#include
+#if QT_VERSION < QT_VERSION_CHECK(5, 11, 0)
+#define horizontalAdvance width
+#endif
+
//-------------------------------------------------------------------------
// synthv1widget_status - Custom status-bar widget.
@@ -73,10 +79,14 @@
pMidiInWidget->setLayout(pMidiInLayout);
QStatusBar::addWidget(pMidiInWidget);
+ m_pKeybd = new synthv1widget_keybd();
+ m_pKeybd->setMinimumWidth(760);
+ QStatusBar::addPermanentWidget(m_pKeybd);
+
const QFontMetrics fm(QStatusBar::font());
m_pModifiedLabel = new QLabel();
m_pModifiedLabel->setAlignment(Qt::AlignHCenter);
- m_pModifiedLabel->setMinimumSize(QSize(fm.width("MOD") + 4, fm.height()));
+ m_pModifiedLabel->setMinimumSize(QSize(fm.horizontalAdvance("MOD") + 4, fm.height()));
m_pModifiedLabel->setToolTip(tr("Modification status"));
m_pModifiedLabel->setAutoFillBackground(true);
QStatusBar::addPermanentWidget(m_pModifiedLabel);
@@ -92,12 +102,27 @@
// Permanent widgets accessors.
+synthv1widget_keybd *synthv1widget_status::keybd (void) const
+{
+ return m_pKeybd;
+}
+
+
void synthv1widget_status::midiInLed ( bool bMidiInLed )
{
m_pMidiInLedLabel->setPixmap(*m_midiInLed[bMidiInLed ? 1 : 0]);
}
+void synthv1widget_status::midiInNote ( int iNote, int iVelocity )
+{
+ if (iVelocity > 0)
+ m_pKeybd->noteOn(iNote);
+ else
+ m_pKeybd->noteOff(iNote);
+}
+
+
void synthv1widget_status::modified ( bool bModified )
{
if (bModified)
diff -Nru synthv1-0.8.6/src/synthv1widget_status.h synthv1-0.9.10+git20190929/src/synthv1widget_status.h
--- synthv1-0.8.6/src/synthv1widget_status.h 2017-12-20 07:56:50.329842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget_status.h 2019-09-28 23:00:43.000000000 +0000
@@ -1,7 +1,7 @@
// synthv1widget_status.h
//
/****************************************************************************
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -26,6 +26,8 @@
// Forward declarations.
+class synthv1widget_keybd;
+
class QLabel;
class QPixmap;
@@ -46,7 +48,10 @@
~synthv1widget_status();
// Permanent widgets accessors.
+ synthv1widget_keybd *keybd() const;
+
void midiInLed(bool bMidiInLed);
+ void midiInNote(int iNote, int iVelocity);
void modified(bool bModified);
private:
@@ -56,6 +61,8 @@
QLabel *m_pMidiInLedLabel;
QLabel *m_pModifiedLabel;
+
+ synthv1widget_keybd *m_pKeybd;
};
diff -Nru synthv1-0.8.6/src/synthv1widget.ui synthv1-0.9.10+git20190929/src/synthv1widget.ui
--- synthv1-0.8.6/src/synthv1widget.ui 2017-12-20 07:56:50.325842973 +0000
+++ synthv1-0.9.10+git20190929/src/synthv1widget.ui 2019-09-28 23:00:43.000000000 +0000
@@ -3,7 +3,7 @@
rncbc aka Rui Nuno Capela
synthv1 - An old-school polyphonic synthesizer
- Copyright (C) 2012-2017, rncbc aka Rui Nuno Capela. All rights reserved.
+ Copyright (C) 2012-2019, rncbc aka Rui Nuno Capela. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@@ -22,9 +22,6 @@
synthv1widget
-
- synthv1
-
:/images/synthv1.png
@@ -41,6 +38,16 @@
-
+
+
+ Randomize
+
+
+ Random
+
+
+
+ -
Swap A
@@ -68,6 +75,9 @@
-
+
+ QTabBar::RoundedNorth
+
-
@@ -183,7 +193,7 @@
-
+
-
@@ -260,7 +270,7 @@
-
+
-
@@ -424,10 +434,16 @@
-
-
+
+
+ DCF1 Enabled
+
DCF1
+
+ true
+
-
@@ -545,10 +561,16 @@
-
-
+
+
+ LFO1 Enabled
+
LFO1
+
+ true
+
-
@@ -1095,7 +1117,7 @@
-
+
-
@@ -1172,7 +1194,7 @@
-
+
-
@@ -1336,10 +1358,16 @@
-
-
+
+
+ DCF2 Enabled
+
DCF2
+
+ true
+
-
@@ -1457,10 +1485,16 @@
-
-
+
+
+ LFO2 Enabled
+
LFO2
+
+ true
+
-
@@ -1902,7 +1936,7 @@
OUT2 FX Send
- FX
+ Effects
@@ -2422,6 +2456,11 @@
+ synthv1widget_group
+ QGroupBox
+
+
+
synthv1widget_env
QFrame
diff -Nru synthv1-0.8.6/synthv1_lv2.pro synthv1-0.9.10+git20190929/synthv1_lv2.pro
--- synthv1-0.8.6/synthv1_lv2.pro 2017-12-20 07:56:50.330842973 +0000
+++ synthv1-0.9.10+git20190929/synthv1_lv2.pro 2019-09-28 23:05:55.000000000 +0000
@@ -1,8 +1,6 @@
# synthv1_lv2.pro
#
TEMPLATE = subdirs
-SUBDIRS = src_lv2 src_lv2ui
+SUBDIRS = src_lv2
src_lv2.file = src/src_lv2.pro
-src_lv2ui.file = src/src_lv2ui.pro
-src_lv2ui.depends = src_lv2
diff -Nru synthv1-0.8.6/synthv1.spec.in synthv1-0.9.10+git20190929/synthv1.spec.in
--- synthv1-0.8.6/synthv1.spec.in 2017-12-20 07:56:50.330842973 +0000
+++ synthv1-0.9.10+git20190929/synthv1.spec.in 2019-09-28 23:05:55.000000000 +0000
@@ -1,6 +1,6 @@
%define name @PACKAGE_TARNAME@
%define version @PACKAGE_VERSION@
-%define release 36
+%define release 47
%define _prefix @ac_prefix@
@@ -8,7 +8,7 @@
%define debug_package %{nil}
%endif
-Summary: An old-school polyphonic synthesizer
+#Summary: An old-school polyphonic subtractive synthesizer
Name: %{name}
Version: %{version}
Release: %{release}
@@ -20,23 +20,41 @@
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
-#BuildRequires: libqt4-devel >= 4.4
%if %{defined fedora}
BuildRequires: pkgconfig
-BuildRequires: qt5-qtbase-devel >= 5.1, qt5-linguist
BuildRequires: alsa-lib-devel
%else
BuildRequires: pkg-config
-BuildRequires: libqt5-qtbase-devel >= 5.1, libqt5-linguist
BuildRequires: alsa-devel
%endif
-BuildRequires: libjack-devel >= 0.100.0
+BuildRequires: qtbase-static >= 5.13.1
+BuildRequires: libjack-devel
BuildRequires: liblo-devel
BuildRequires: lv2-devel
-%description
- An old-school all-digital 4-oscillator subtractive polyphonic
- synthesizer with stereo fx.
+#package -n %{name}
+Summary: An old-school polyphonic subtractive synthesizer - JACK standalone
+Provides: %{name}_jack
+Requires: %{name}-common = %{version}
+
+%description -n %{name}
+ An old-school all-digital 4-oscillator subtractive polyphonic synthesizer
+ with stereo fx.
+ .
+ This package provides the standalone JACK client application (synthv1_jack)
+
+
+%package -n %{name}-lv2
+Summary: An old-school polyphonic subtractive synthesizer - LV2 plugin
+Provides: %{name}_lv2, %{name}_lv2ui
+Requires: %{name}-common = %{version}
+
+%description -n %{name}-lv2
+ An old-school all-digital 4-oscillator subtractive polyphonic synthesizer
+ with stereo fx.
+ .
+ This package provides the LV2 plugin (http://synthv1.sourceforge.net/lv2)
+
%prep
%setup
@@ -52,28 +70,14 @@
%clean
[ -d "%{buildroot}" -a "%{buildroot}" != "/" ] && %__rm -rf "%{buildroot}"
-%post
-/sbin/ldconfig
-
-%postun
-/sbin/ldconfig
-%files
+%files -n %{name}
%defattr(-,root,root)
%doc AUTHORS COPYING ChangeLog README TODO
-%{_libdir}/lib%{name}.so*
-%{_libdir}/lib%{name}_ui.so*
-%dir %{_libdir}/lv2
-%dir %{_libdir}/lv2/%{name}.lv2
-%{_libdir}/lv2/%{name}.lv2/manifest.ttl
-%{_libdir}/lv2/%{name}.lv2/%{name}.ttl
-%{_libdir}/lv2/%{name}.lv2/%{name}.so
-%{_libdir}/lv2/%{name}.lv2/%{name}_ui.ttl
-%{_libdir}/lv2/%{name}.lv2/%{name}_ui.so
+#dir %{_datadir}/applications
%dir %{_datadir}/metainfo
#dir %{_datadir}/mime
#dir %{_datadir}/mime/packages
-#dir %{_datadir}/applications
%dir %{_datadir}/icons/hicolor
%dir %{_datadir}/icons/hicolor/32x32
%dir %{_datadir}/icons/hicolor/32x32/apps
@@ -85,17 +89,47 @@
#dir %{_datadir}/man/man1
%{_bindir}/%{name}_jack
%{_datadir}/metainfo/%{name}.appdata.xml
-%{_datadir}/mime/packages/%{name}.xml
%{_datadir}/applications/%{name}.desktop
+%{_datadir}/mime/packages/%{name}.xml
%{_datadir}/icons/hicolor/32x32/apps/%{name}.png
%{_datadir}/icons/hicolor/32x32/mimetypes/application-x-%{name}*.png
%{_datadir}/icons/hicolor/scalable/apps/%{name}.svg
%{_datadir}/icons/hicolor/scalable/mimetypes/application-x-%{name}*.svg
%{_datadir}/man/man1/%{name}*.1.gz
+%files -n %{name}-lv2
+%defattr(-,root,root)
+%dir %{_libdir}/lv2
+%dir %{_libdir}/lv2/%{name}.lv2
+%{_libdir}/lv2/%{name}.lv2/manifest.ttl
+%{_libdir}/lv2/%{name}.lv2/%{name}.ttl
+%{_libdir}/lv2/%{name}.lv2/%{name}.so
+%{_libdir}/lv2/%{name}.lv2/%{name}_ui.ttl
+
+
%changelog
-* Wed Dec 20 2017 Rui Nuno Capela 0.8.6
-- The End of Autumn'17 release.
+* Tue Sep 24 2019 Rui Nuno Capela 0.9.10
+- An Early-Fall'19 release.
+* Thu Jul 18 2019 Rui Nuno Capela 0.9.9
+- A Summer'19 release.
+* Thu Jun 6 2019 Rui Nuno Capela 0.9.8
+- A Spring'19 release.
+* Sun Apr 14 2019 Rui Nuno Capela 0.9.7
+- A Spring-Break'19 release.
+* Mon Mar 18 2019 Rui Nuno Capela 0.9.6
+- Pre-LAC2019 release frenzy.
+* Mon Mar 4 2019 Rui Nuno Capela 0.9.5
+- The End of Winter'19 release.
+* Wed Dec 12 2018 Rui Nuno Capela 0.9.4
+- A Late Autumn'18 release.
+* Mon Oct 22 2018 Rui Nuno Capela 0.9.3
+- An Autumn'18 release.
+* Tue Jul 24 2018 Rui Nuno Capela 0.9.2
+- A Summer'18 release.
+* Tue Jun 26 2018 Rui Nuno Capela 0.9.1
+- An Early Summer'18 release.
+* Wed Mar 7 2018 Rui Nuno Capela 0.9.0
+- The End of Winter'18 release.
* Sun Oct 29 2017 Rui Nuno Capela 0.8.5
- An Autumn'17 release.
* Tue Aug 22 2017 Rui Nuno Capela 0.8.4
diff -Nru synthv1-0.8.6/.travis.yml synthv1-0.9.10+git20190929/.travis.yml
--- synthv1-0.8.6/.travis.yml 1970-01-01 00:00:00.000000000 +0000
+++ synthv1-0.9.10+git20190929/.travis.yml 2019-09-28 23:00:43.000000000 +0000
@@ -0,0 +1,33 @@
+language: cpp
+
+sudo: required
+dist: xenial
+
+notifications:
+ email:
+ recipients:
+ - rncbc@rncbc.org
+ on_success: change
+ on_failure: always
+
+branches:
+ only:
+ - master
+
+before_install:
+- sudo add-apt-repository --yes ppa:ubuntu-sdk-team/ppa
+- sudo add-apt-repository --yes ppa:beineri/opt-qt-5.12.3-xenial
+- sudo apt-get update -qq
+
+install:
+- sudo apt-get install -qq qt512base qt512tools libgl-dev; source /opt/qt512/bin/qt512-env.sh
+- sudo apt-get install -qq libjack-dev libasound2-dev liblo-dev lv2-dev
+
+before_script:
+- git fetch --unshallow --tags -q
+- ./autogen.sh
+
+script:
+- ./configure
+- make
+- sudo make install