Merge branch 'stable-1.2'

# Conflicts:
#	.travis.yml
#	.travis/linux..script.sh
#	.travis/linux.win32.script.sh
#	.travis/linux.win64.script.sh
#	.travis/osx..install.sh
#	.travis/osx..script.sh
#	data/locale/en.ts
#	data/locale/id.ts
#	include/Graph.h
#	include/VstSyncController.h
#	include/lmms_math.h
#	plugins/vst_base/RemoteVstPlugin.cpp
#	src/core/RemotePlugin.cpp
#	src/core/Song.cpp
#	src/core/Track.cpp
#	src/gui/SubWindow.cpp
#	src/gui/widgets/Graph.cpp
This commit is contained in:
Hyunjin Song
2019-02-24 20:43:45 +09:00
92 changed files with 5767 additions and 3727 deletions

View File

@@ -26,3 +26,6 @@ Thomas Clark <the.thomas.j.clark@gmail.com>
Thomas Clark <the.thomas.j.clark@gmail.com> <tjclark@wpi.edu>
anonymous <support@lmms.io> Locale updater <>
grejppi <grejppi@gmail.com>
Johannes Lorenz <j.git@lorenz-ho.me> <johannes89@mailueberfall.de>
Johannes Lorenz <j.git@lorenz-ho.me> <1042576+JohannesLorenz@users.noreply.github.com>
Noah Brecht <noahb2713@gmail.com>

View File

@@ -6,26 +6,35 @@ cache:
directories:
- apt_mingw_cache
- $HOME/.ccache
- $HOME/pbuilder-bases
matrix:
include:
- env: TYPE=style
- os: linux
- env: TARGET_OS=win32
- env: TARGET_OS=win64
- env: TARGET_OS=debian-sid TARGET_DEPLOY=True
- env: TARGET_OS=debian-sid TARGET_ARCH=i386
- compiler: clang
env: TARGET_OS=debian-sid
- os: osx
osx_image: xcode8.3
install: ${TRAVIS_BUILD_DIR}/.travis/install.sh
script: ${TRAVIS_BUILD_DIR}/.travis/script.sh
after_script: ${TRAVIS_BUILD_DIR}/.travis/after_script.sh
before_deploy: make package
before_deploy:
- if [ "$TARGET_OS" != debian-sid ]; then make package; fi
deploy:
provider: releases
api_key:
secure: d4a+x4Gugpss7JK2DcHjyBZDmEFFh4iVfKDfITSD50T6Mc6At4LMgojvEu+6qT6IyOY2vm3UVT6fhyeuWDTRDwW9tfFlaHVA0h8aTRD+eAXOA7pQ8rEMwQO3+WCKuKTfEqUkpL4wxhww8dpkv54tqeIs0S4TBqz9tk8UhzU7XbE=
file: lmms-${TRAVIS_TAG:1}-$TARGET_OS.exe
file_glob: true
file:
- lmms-${TRAVIS_TAG:1}-$TARGET_OS.exe
- /var/cache/pbuilder/result/lmms_*.tar.xz
skip_cleanup: true
on:
tags: true
all_branches: true
condition: '("$TARGET_OS" = win??)'
condition: '"$TARGET_DEPLOY" = True'
repo: LMMS/lmms

View File

@@ -0,0 +1,2 @@
314ef4af137903dfb13e8c3ef1e6ea56cfdb23808d52ec4f5f50e288c73610c5 pbuilder_0.229.1_all.deb
fa82aa8ed3055c6f6330104deedf080b26778295e589426d4c4dd0f2c2a5defa debootstrap_1.0.95_all.deb

View File

@@ -5,5 +5,11 @@ source /opt/qt59/bin/qt59-env.sh
set -e
mkdir build
cd build
# shellcheck disable=SC2086
cmake -DUSE_WERROR=ON -DCMAKE_INSTALL_PREFIX=../target $CMAKE_FLAGS ..
make -j4
make tests
./tests/tests

View File

@@ -0,0 +1,2 @@
#!/bin/sh
sudo apt-get update -qq

View File

@@ -0,0 +1,16 @@
#!/bin/sh
set -e
sudo apt-get install -y \
debian-archive-keyring \
dpkg \
pbuilder
# work around a pbuilder bug which breaks ccache
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=666525
cd /tmp
wget http://archive.ubuntu.com/ubuntu/pool/main/p/pbuilder/pbuilder_0.229.1_all.deb
wget http://archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/debootstrap_1.0.95_all.deb
sha256sum -c "$TRAVIS_BUILD_DIR/.travis/debian_pkgs.sha256"
sudo dpkg -i pbuilder_0.229.1_all.deb debootstrap_1.0.95_all.deb
cd "$OLDPWD"

View File

@@ -0,0 +1,41 @@
#!/bin/sh
set -e
: "${TARGET_ARCH:=amd64}"
BASETGZ="$HOME/pbuilder-bases/debian-sid-$TARGET_ARCH.tgz"
MIRROR=http://cdn-fastly.deb.debian.org/debian
KEYRING=/usr/share/keyrings/debian-archive-keyring.gpg
if [ -z "$TRAVIS_TAG" ]
then
sudo \
sh -c "echo CCACHEDIR=$HOME/.ccache >> /etc/pbuilderrc"
fi
if [ "$CC" = clang ]
then
sudo sh -c "echo EXTRAPACKAGES=clang >> /etc/pbuilderrc"
fi
if [ ! -e "$BASETGZ.stamp" ]
then
mkdir -p "$HOME/pbuilder-bases"
# debootstrap fails to resolve dependencies which are virtual packages
# e.g. perl-openssl-abi-1.1 provided by perl-openssl-defaults, needed for building SWH
# See also: https://bugs.launchpad.net/ubuntu/+source/debootstrap/+bug/86536
sudo pbuilder --create --basetgz "$BASETGZ" --mirror $MIRROR \
--distribution sid --architecture $TARGET_ARCH \
--debootstrapopts --variant=buildd \
--debootstrapopts --keyring=$KEYRING \
--debootstrapopts --include=perl,libxml2-utils,libxml-perl,liblist-moreutils-perl,perl-openssl-defaults
touch "$BASETGZ.stamp"
else
sudo pbuilder --update --basetgz "$BASETGZ"
fi
DIR="$PWD"
cd ..
dpkg-source -b "$DIR"
env -i CC="$CC" CXX="$CXX" sudo pbuilder --build --debbuildopts "--jobs=auto" \
--basetgz "$BASETGZ" ./*.dsc

View File

@@ -1,6 +1,11 @@
#!/usr/bin/env bash
set -e
mkdir build
cd build
export CMAKE_OPTS="$CMAKE_FLAGS -DUSE_WERROR=ON"
../cmake/build_win32.sh
make -j4
make tests

View File

@@ -1,6 +1,11 @@
#!/usr/bin/env bash
set -e
mkdir build
cd build
export CMAKE_OPTS="$CMAKE_FLAGS -DUSE_WERROR=ON"
../cmake/build_win64.sh
make -j4
make tests

View File

@@ -1,10 +1,16 @@
#!/usr/bin/env bash
set -e
mkdir build
cd build
# Workaround; No FindQt5.cmake module exists
CMAKE_PREFIX_PATH="$(brew --prefix qt5)"
export CMAKE_PREFIX_PATH
# shellcheck disable=SC2086
cmake -DUSE_WERROR=OFF -DCMAKE_INSTALL_PREFIX=../target $CMAKE_FLAGS ..
make -j4
make tests
./tests/tests

View File

@@ -13,9 +13,6 @@ if [ "$TYPE" = 'style' ]; then
else
mkdir -p build
cd build
export CMAKE_FLAGS="-DCMAKE_BUILD_TYPE=RelWithDebInfo"
if [ -z "$TRAVIS_TAG" ]; then
@@ -24,25 +21,21 @@ else
"$TRAVIS_BUILD_DIR/.travis/$TRAVIS_OS_NAME.$TARGET_OS.script.sh"
make -j4
make tests
if [[ $TARGET_OS != win* ]]; then
tests/tests
fi
# Package and upload non-tagged builds
if [ ! -z "$TRAVIS_TAG" ]; then
# Skip, handled by travis deploy instead
exit 0
elif [[ $TARGET_OS == win* ]]; then
cd build
make -j4 package
PACKAGE="$(ls lmms-*win*.exe)"
elif [[ $TRAVIS_OS_NAME == osx ]]; then
cd build
make -j4 install > /dev/null
make dmg
PACKAGE="$(ls lmms-*.dmg)"
else
elif [[ $TARGET_OS != debian-sid ]]; then
cd build
make -j4 install > /dev/null
make appimage
PACKAGE="$(ls lmms-*.AppImage)"

View File

@@ -23,7 +23,7 @@ INCLUDE(GenerateExportHeader)
STRING(TOUPPER "${CMAKE_PROJECT_NAME}" PROJECT_NAME_UCASE)
SET(PROJECT_YEAR 2018)
SET(PROJECT_YEAR 2019)
SET(PROJECT_AUTHOR "LMMS Developers")
SET(PROJECT_URL "https://lmms.io")
@@ -33,7 +33,7 @@ SET(PROJECT_COPYRIGHT "2008-${PROJECT_YEAR} ${PROJECT_AUTHOR}")
SET(VERSION_MAJOR "1")
SET(VERSION_MINOR "2")
SET(VERSION_RELEASE "0")
SET(VERSION_STAGE "rc7")
SET(VERSION_STAGE "rc8")
SET(VERSION_BUILD "0")
SET(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_RELEASE}")
IF(VERSION_STAGE)
@@ -73,6 +73,8 @@ OPTION(WANT_DEBUG_FPE "Debug floating point exceptions" OFF)
IF(LMMS_BUILD_APPLE)
# Fix linking on 10.14+. See issue #4762 on github
LINK_DIRECTORIES(/usr/local/lib)
SET(WANT_ALSA OFF)
SET(WANT_PULSEAUDIO OFF)
SET(WANT_VST OFF)
@@ -88,7 +90,6 @@ IF(LMMS_BUILD_WIN32)
SET(WANT_ALSA OFF)
SET(WANT_JACK OFF)
SET(WANT_PULSEAUDIO OFF)
SET(WANT_PORTAUDIO OFF)
SET(WANT_SNDIO OFF)
SET(WANT_SOUNDIO OFF)
SET(WANT_WINMM ON)
@@ -96,7 +97,6 @@ IF(LMMS_BUILD_WIN32)
SET(STATUS_ALSA "<not supported on this platform>")
SET(STATUS_JACK "<not supported on this platform>")
SET(STATUS_PULSEAUDIO "<not supported on this platform>")
SET(STATUS_PORTAUDIO "<disabled on this platform>")
SET(STATUS_SOUNDIO "<disabled in this release>")
SET(STATUS_WINMM "OK")
SET(STATUS_APPLEMIDI "<not supported on this platform>")

View File

@@ -10,7 +10,7 @@ Comment[ca]=Producció fàcil de música per a tothom!
Comment[fr]=Production facile de musique pour tout le monde !
Comment[pl]=Prosta produkcja muzyki dla każdego!
Icon=lmms
Exec=env QT_X11_NO_NATIVE_MENUBAR=1 QT_AUTO_SCREEN_SCALE_FACTOR=1 lmms %f
Exec=lmms %f
Terminal=false
Type=Application
Categories=Qt;AudioVideo;Audio;Midi;

View File

@@ -187,10 +187,16 @@ rm -f "${APPDIR}/usr/lib/libwine.so.1"
# Use system-provided carla
rm -f "${APPDIR}usr/lib/"libcarla*.so
# Move jack out of LD_LIBRARY_PATH
# Remove bundled jack in LD_LIBRARY_PATH if exists
if [ -e "${APPDIR}/usr/lib/libjack.so.0" ]; then
rm "${APPDIR}/usr/lib/libjack.so.0"
fi
# Bundle jack out of LD_LIBRARY_PATH
JACK_LIB=$(ldd "${APPDIR}/usr/bin/lmms.real" | sed -n 's/\tlibjack\.so\.0 => \(.\+\) (0x[0-9a-f]\+)/\1/p')
if [ -e "$JACK_LIB" ]; then
mkdir -p "${APPDIR}usr/lib/lmms/optional/"
mv "${APPDIR}/usr/lib/libjack.so.0" "${APPDIR}usr/lib/lmms/optional/"
cp "$JACK_LIB" "${APPDIR}usr/lib/lmms/optional/"
fi
# Point the AppRun to the shim launcher

View File

@@ -73,9 +73,10 @@ ELSE()
FILE(WRITE ${BASHCOMP_SCRIPT} "\
#!${BASH}\n\
set -e\n\
BASHCOMP_PKG_PATH=\"${BASHCOMP_USER_PATH}\"\n\
if [ -w \"${BASHCOMP_PKG_PATH}\" ]; then\n\
BASHCOMP_PKG_PATH=\"${BASHCOMP_PKG_PATH}\"\n\
else \n\
BASHCOMP_PKG_PATH=\"\$DESTDIR${BASHCOMP_USER_PATH}\"\n\
fi\n\
echo -e \"\\nInstalling bash completion...\\n\"\n\
mkdir -p \"\$BASHCOMP_PKG_PATH\"\n\

View File

@@ -27,6 +27,12 @@ SET(DEPTH_VALUE 100)
SET(MAX_ATTEMPTS 2)
MESSAGE("\nValidating submodules...")
IF(NOT EXISTS "${CMAKE_SOURCE_DIR}/.gitmodules")
MESSAGE("Skipping the check because .gitmodules not detected."
"Please make sure you have all submodules in the source tree!"
)
RETURN()
ENDIF()
FILE(READ "${CMAKE_SOURCE_DIR}/.gitmodules" SUBMODULE_DATA)
# Force English locale

File diff suppressed because it is too large Load Diff

View File

@@ -7359,7 +7359,7 @@ Please make sure you have read-permission to the file and the directory containi
</message>
<message>
<source>Vst Plugin Preset (*.fxp *.fxb)</source>
<translation>Передустановка VST плагіна (*.fxp, *.fxb)</translation>
<translation>Передустановка VST плагіна (*.fxp *.fxb)</translation>
</message>
<message>
<source>: default</source>

1
debian/calf-ladspa.install vendored Normal file
View File

@@ -0,0 +1 @@
usr/lib/*/lmms/ladspa/calf.so usr/lib/ladspa

382
debian/changelog vendored Normal file
View File

@@ -0,0 +1,382 @@
lmms (1.2.0~rc7.1) unstable; urgency=low
* Upstream integration.
* Drop Debian menu entry (policy 9.6).
-- Javier Serrano Polo <javier@jasp.net> Sat, 03 Nov 2018 02:43:42 +0100
lmms (1.1.3-8) unstable; urgency=low
* Fix build (Closes: #897806).
* Allow recommendations (Closes: #891756).
-- Javier Serrano Polo <javier@jasp.net> Sat, 13 Oct 2018 17:05:54 +0200
lmms (1.1.3-7.1) unstable; urgency=high
* Non-maintainer upload.
[ Javier Serrano Polo ]
* Fix build with Clang.
* Fix build with GCC 7 (Closes: #853527).
[ Boyuan Yang ]
* Remove Patrick Winnertz from uploaders list. (Closes: #867759)
Thank you for your previous contributions!
-- Boyuan Yang <073plan@gmail.com> Sat, 10 Mar 2018 11:32:05 +0800
lmms (1.1.3-7) unstable; urgency=low
[ Javier Serrano Polo ]
* Separate flags for WINE_BUILD_FLAGS to fix build problem on i386.
-- Petter Reinholdtsen <pere@debian.org> Mon, 26 Dec 2016 07:36:54 +0000
lmms (1.1.3-6) unstable; urgency=low
[ Javier Serrano Polo ]
* Build with install RUNPATH (reproducibility).
-- Petter Reinholdtsen <pere@debian.org> Sun, 25 Dec 2016 09:38:53 +0000
lmms (1.1.3-5) unstable; urgency=medium
[ Javier Serrano Polo ]
* Add Wine stable path to PATH, otherwise wine package would be required.
* Sort plug-in embedded resources (reproducibility).
* Define NDEBUG instead of setting build type to honor optimization choice.
-- Javier Serrano Polo <javier@jasp.net> Sat, 03 Sep 2016 17:31:05 +0200
lmms (1.1.3-4) unstable; urgency=medium
[ Javier Serrano Polo ]
* Sort lists generated from globbing expressions (reproducibility).
* Fixed upgrade that installs recommended packages (Closes: #827039).
* Dropped unused build dependencies.
* Dropped workaround for #824715, wineg++ is fixed.
* Added contributors.
* Honor CONTRIBUTORS override.
* Replace __FILE__ (reproducibility).
* Use build type "Release" (reproducibility).
-- Javier Serrano Polo <javier@jasp.net> Wed, 08 Jun 2016 01:25:37 +0200
lmms (1.1.3-3) unstable; urgency=medium
[ Javier Serrano Polo ]
* Dropped Wine path from PATH.
* Fixed lmms-common upgrade (Closes: #825287).
* Hide vocoder plug-in, it is now in swh-plugins (Closes: #826110).
* Added workaround for #824715 (Closes: #825286).
-- Petter Reinholdtsen <pere@debian.org> Fri, 03 Jun 2016 08:51:31 +0000
lmms (1.1.3-2) unstable; urgency=medium
[ Javier Serrano Polo ]
* Enabled vst plugin on i386 and amd64 (Closes: #763720).
* Made Calf and vocoder plugins available to other programs (Closes: #758888).
* Fixed version of metalish_dong01.ogg (Closes: #802588).
* Bumped Standards-Version to 3.9.7. Doxygen documentation is not very useful.
* Upgraded to Standards-Version 3.9.8. Ship icons in the default hicolor icon
theme directories.
* Use presets from zynaddsubfx-data.
* Fixed build problems with GCC 6 (Closes: #811697).
* Switch to PulseAudio back end on likely ALSA interception (Closes: #781479).
* Updated copyright information.
* Removed non-free projects.
-- Petter Reinholdtsen <pere@debian.org> Wed, 18 May 2016 09:09:23 +0000
lmms (1.1.3-1) unstable; urgency=low
* New upstream version 1.1.3 (Closes: #788457).
- Drop well-defined-loop.patch, included upstream.
* Add config for git-buildpackage to use pristine-tar all the time.
* Change homepage url to new http://lmms.io/.
* Added fluid as build-depend.
* New patch find-fluid.patch to find the fluid binary in unstable.
* New patch gcc5.patch to get the code building with gcc 5 in
unstable (Closes: #777989).
* Added man-page-adjustment.patch to fix manpage formatting of AUTHOR
block. Discovered thanks to lintian.
-- Petter Reinholdtsen <pere@debian.org> Mon, 21 Sep 2015 13:54:02 +0200
lmms (1.0.3-5) unstable; urgency=low
* Make lmms replace and break lmms-common (<< 1.0.0-1) to handle the
fact that /usr/share/menu/lmms moved from lmms-common to lmms in
this version (Closes: #765970).
-- Petter Reinholdtsen <pere@debian.org> Sun, 19 Oct 2014 23:43:08 +0200
lmms (1.0.3-4) unstable; urgency=low
* Correct watch file to reflect '-src' part of upstream tarball.
* New desktop-argument.patch to let desktops know how to pass files to
lmms. Thanks to lintian for noticing the bug.
* Revert change to enable the vsl plugin in version 1.0.3-3, as it did
not work. Reopen bug #763720.
-- Petter Reinholdtsen <pere@debian.org> Wed, 08 Oct 2014 19:21:53 +0200
lmms (1.0.3-3) unstable; urgency=medium
* Try to get vsl plugin working on i386 by build depending on libwine-dev
and wine32-dev-tools (Closes: #763720). Unable to get it working on
amd64.
-- Petter Reinholdtsen <pere@debian.org> Tue, 07 Oct 2014 12:13:16 +0200
lmms (1.0.3-2) unstable; urgency=medium
* Change build rule to only enable ALSA support on Linux (Closes: #754718).
Patch from Steven Chamberlain with input from Guillem Jover.
* Drop libwine-dev build dependency to avoid build failure in the
vst plugin. It should be enabled when we figure out how to do it.
-- Petter Reinholdtsen <pere@debian.org> Thu, 02 Oct 2014 08:19:53 +0200
lmms (1.0.3-1) unstable; urgency=low
* Move package into Debian Edu git repository and add myself as
co-maintainer.
* Update to upstream version 1.0.3.
* Correct build dependency on i386, use libwine-dev instead of the now
obsolete wine-dev (Closes: #748183).
* Update Standards-Version from 3.9.5 to 3.9.6.
* Add new well-defined-loop.patch to fix compile error triggered by
undefined loop behaviour (Closes: #753177).
-- Petter Reinholdtsen <pere@debian.org> Wed, 01 Oct 2014 23:00:19 +0200
lmms (1.0.0-1) unstable; urgency=low
* New upstream version (Closes: #703900, #735764, #696271)
* Using a wraped-style control (Closes: #689347)
* Don't suggest vcf as it no longer exists (since a long time)
(Closes: #618350)
* Problems with jack backend were fixed long ago (Closes: #557421)
* No depends/recommends on wine anymore (Closes: #622215, #622080)
-- Patrick Winnertz <winnie@debian.org> Thu, 24 Apr 2014 22:30:17 +0200
lmms (0.4.10-2.3) unstable; urgency=low
* Non maintainer upload.
* Remove wine-related dependencies on amd64, thereby disabling building
VST plugin. (Closes: #676760)
-- Hilko Bengen <bengen@debian.org> Wed, 27 Jun 2012 23:14:40 +0200
lmms (0.4.10-2.2) unstable; urgency=low
* Non maintainer upload.
* Fix build failure with GCC 4.7. Closes: #667265.
* Turn on verbose build.
-- Matthias Klose <doko@debian.org> Tue, 17 Apr 2012 14:08:53 +0200
lmms (0.4.10-2.1) unstable; urgency=low
* Non-maintainer upload.
* Fix FTBFS on GNU/kFreeBSD. Thanks Pino Toscano. (Closes: #641064)
-- Robert Millan <rmh@debian.org> Fri, 27 Apr 2012 22:55:55 +0200
lmms (0.4.10-2) unstable; urgency=low
* Removed build-dep on libestools2.0-dev (Closes: #614975)
-- Patrick Winnertz <winnie@debian.org> Fri, 11 Mar 2011 09:37:43 +0100
lmms (0.4.10-1) unstable; urgency=low
* Imported Upstream version 0.4.10
* changed mode of patch
* Add source/format with 3.0 (quilt) and rearrange source a bit
* Bump standarts version to 3.9.1 - no further changes needed
-- Patrick Winnertz <winnie@debian.org> Fri, 11 Feb 2011 20:03:06 +0100
lmms (0.4.7-2) unstable; urgency=low
[ Reinhard Tartler ]
* Depend on wine only on i386 and amd64 (Closes: #590950)
[ Patrick Winnertz ]
* Uploading patch from siretart, thanks for helping.
-- Patrick Winnertz <winnie@debian.org> Mon, 02 Aug 2010 10:13:28 +0200
lmms (0.4.7-1) unstable; urgency=low
* New upstream version
-- Patrick Winnertz <winnie@debian.org> Thu, 29 Jul 2010 16:24:00 +0200
lmms (0.4.6-2) unstable; urgency=low
* Build-depend on libestools2.0-dev (Closes: #589882)
-- Patrick Winnertz <winnie@debian.org> Wed, 28 Jul 2010 11:55:16 +0200
lmms (0.4.6-1) unstable; urgency=low
* New upstream version (Closes: #565733)
* Bumped standards version to 3.8.3, no further changes needed
-- Patrick Winnertz <winnie@debian.org> Sun, 24 Jan 2010 16:40:39 +0100
lmms (0.4.5-1) unstable; urgency=low
* New upstream version (Closes: #543645)
* Fix FTBFS on amd64 (Closes: #540671 #543017)
-- Patrick Winnertz <winnie@debian.org> Fri, 11 Sep 2009 09:56:45 +0200
lmms (0.4.4-1) unstable; urgency=low
* New upstream version (Closes: #511363)
* Provide menu file (Closes: #514905)
- The menufile is included in lmms-common and not in lmms
as it is not arch specific
* Bumped standards version to 3.8.2 no further changes needed
-- Patrick Winnertz <winnie@debian.org> Wed, 05 Aug 2009 20:46:40 +0200
lmms (0.3.2-1) unstable; urgency=low
* Decrease wine dependency to wine-bin as suggested. (Closes: #446163)
* Acknowlegded NMU from Pierre Habouzit <madcoder@debian.org> in order to
fix FTBFS with gcc-4.3 which (Closes: #462202)
* Now including the singerbot plugin. (Closes: #443224)
* Add patch to prevent lmms from crashing.
-- Patrick Winnertz <winnie@debian.org> Mon, 17 Mar 2008 10:56:12 +0100
lmms (0.3.1-1.1) unstable; urgency=low
* Non-maintainer upload.
* Add g++-4.3.patch to fix g++-4.3 FTBFS (Closes: 462202).
-- Pierre Habouzit <madcoder@debian.org> Sun, 16 Mar 2008 23:21:56 +0000
lmms (0.3.1-1) unstable; urgency=low
* Packaging new upstream release.
* Install Upstream Changelog (Closes: #441477)
Thanks to Felipe Sateler
* Lowered the caps dependency to Recommends (Closes: #446163)
* Added -i/-a to the build targets in rules in order to make sure that only
(in)dep packages are build.
* Changed my maintainer address
* Added patch to remove stereo_enhancer plugin which has a ftbfs with gcc
4.2.3
* Added imagemagick as build-dep since we have to convert a .png to a .xpm
via convert
* Doesn't install upstreams menu file, since it's outdated.. instead use
our own.
* Standard-Version bump to 3.7.3
* Remove Homepage field from Description and create a own Header
* Added postinst and postrm for lmms-common to call update-menu if available
(this has to be done manually, since we doesn't use dh_installmenu to install
the menu file)
-- Patrick Winnertz <winnie@debian.org> Thu, 06 Dec 2007 07:08:04 +0100
lmms (0.3.0-1) unstable; urgency=low
[ Tobias Doerffel ]
* New upstream release. (Closes: #439301)
* Removed patch from Thomas Girard as upstream merged changes
[ Patrick Winnertz ]
* Moved manpage into correct package (lmms)
* Removed manuall installation of Upstream Changelog, thanks to the power of
debhelper ;-)
* FTBFS with gcc 4.2 is fixed by upstream (Closes: #383295)
* lmms has now a proper menu entry (Closes: #383406)
* lmms depends now on the same version of lmms-common (Closes: #389037)
* fixed by upstream: arpeggio status is now saved (Closes: #433262)
* Added build-depends libqt3-i18n (Closes: #384406)
* Added watch file for lmms (Closes: #439302)
Thanks to Raphael Geissert
* Improved copyright file
* Doesn't build libsingerbot since it is experimental and doesn't work
correct yet
* Added several build-dependencys (libstk0-dev, libestools1.2-dev, ladspa-sdk,
libflac-dev, libwine-dev [i386], libqt3-i18n, libasound2-dev,
festival-dev, dpatch )
* Take over this package from Florian Ragwitz, so set myself as maintainer
* Add a depends on a specific version of lmms-common
* Added several new dependencys to lmms
* Improved description of lmms and lmms-common
* Die on errors of clean, but don't die if the makefile doesn't exist
* Added watch file
-- Patrick Winnertz <patrick.winnertz@skolelinux.org> Fri, 24 Aug 2007 08:23:34 +0200
lmms (0.2.1-1.1) unstable; urgency=high
* Non-maintainer Upload
* Add Patch by Thomas Girard for segfault right after
lmms starting up (Closes: 382491)
-- Michael Ablassmeier <abi@debian.org> Tue, 5 Sep 2006 12:00:40 +0200
lmms (0.2.1-1) unstable; urgency=low
* New upstream release.
* Bump up Standards-Version to 3.7.2 (no changes).
* Use DH_COMPAT 5.
-- Florian Ragwitz <rafl@debian.org> Sun, 13 Aug 2006 14:40:13 +0200
lmms (0.1.4-1) unstable; urgency=low
* New upstream release.
-- Florian Ragwitz <rafl@debian.org> Sat, 4 Feb 2006 07:16:47 +0100
lmms (0.1.3-1) unstable; urgency=low
* New upstream release.
* debian/lmms.1 was included by upstream. Removed it from debian/.
* Install lmms.1 in lmms-common instead of lmms to safe some mirror space.
* Added a lintian override for the above, as lintian is not smart enough to
check for manpages in other packages from the same source package on which
a package with a missing manpage depends.
-- Florian Ragwitz <rafl@debian.org> Wed, 1 Feb 2006 18:28:42 +0100
lmms (0.1.2-1) unstable; urgency=low
* New upstream release.
-- Florian Ragwitz <rafl@debian.org> Thu, 22 Dec 2005 16:22:50 +0100
lmms (0.1.1-2) unstable; urgency=low
* lmms-common doesn't depend on lmms anymore to remove a circular
dependencies (Closes: #339906).
-- Florian Ragwitz <rafl@debian.org> Sun, 20 Nov 2005 12:27:08 +0100
lmms (0.1.1-1) unstable; urgency=low
* New upstream release.
* Changed Maintainer address.
* Added libjack-dev to Build-Depends.
-- Florian Ragwitz <rafl@debian.org> Mon, 31 Oct 2005 10:48:36 +0100
lmms (0.0.9+0.1.0rc1-1) unstable; urgency=low
* Initial Release (Closes: #315976).
-- Florian Ragwitz <rafl@debianforum.de> Fri, 22 Jul 2005 16:33:17 +0200

1
debian/compat vendored Normal file
View File

@@ -0,0 +1 @@
9

118
debian/control vendored Normal file
View File

@@ -0,0 +1,118 @@
Source: lmms
Section: sound
Priority: optional
Maintainer: Debian Edu Packaging Team <debian-edu-pkg-team@lists.alioth.debian.org>
Uploaders:
Petter Reinholdtsen <pere@debian.org>,
Israel Dahl <israeldahl@gmail.com>,
Javier Serrano Polo <javier@jasp.net>,
Build-Depends:
cmake,
debhelper (>= 9.0.0),
fluid,
ladspa-sdk,
libasound2-dev [linux-any],
libfftw3-dev,
libfltk1.3-dev,
libfluidsynth-dev,
libgig-dev,
libjack-jackd2-dev,
libmp3lame-dev,
libpulse-dev,
libqt5x11extras5-dev,
libsamplerate0-dev,
libsdl1.2-dev,
libsndfile1-dev,
libsndio-dev,
libsoundio-dev,
libstk0-dev,
libvorbis-dev,
libxcb-keysyms1-dev,
libxcb-util0-dev,
portaudio19-dev,
qtbase5-private-dev,
qttools5-dev,
wine32-tools [i386]
Standards-Version: 4.2.1.4
Homepage: http://lmms.io/
Vcs-Browser: https://salsa.debian.org/debian-edu-pkg-team/lmms.git
Package: lmms-bin
Architecture: any
Depends: lmms-common (>= ${source:Version}), ${shlibs:Depends}, ${misc:Depends},
stk
Recommends: calf-ladspa, tap-plugins, caps,
lmms-vst-server:i386 (>= ${source:Version})
Suggests: fil-plugins, mcp-plugins, omins, freepats, fluid-soundfont-gm,
ladspa-plugin
Replaces: lmms-common (<< 1.0.0-1)
Breaks: lmms-common (<< 1.0.0-1)
Multi-Arch: allowed
Description: Linux Multimedia Studio - minimal installation
LMMS aims to be a free alternative to popular (but commercial and closed-
source) programs like FruityLoops, Cubase and Logic giving you the ability of
producing music with your computer by creating cool loops, synthesizing and
mixing sounds, arranging samples, having more fun with your MIDI-keyboard
and much more...
.
LMMS combines the features of a tracker-/sequencer-program (pattern-/channel-/
sample-/song-/effect-management) and those of powerful synthesizers and
samplers in a modern, user-friendly and easy to use graphical user-interface.
.
This package provides the minimal installation.
Package: lmms
Architecture: any
Depends: calf-ladspa, lmms-bin, ${misc:Depends}
Description: Linux Multimedia Studio
LMMS aims to be a free alternative to popular (but commercial and closed-
source) programs like FruityLoops, Cubase and Logic giving you the ability of
producing music with your computer by creating cool loops, synthesizing and
mixing sounds, arranging samples, having more fun with your MIDI-keyboard
and much more...
.
LMMS combines the features of a tracker-/sequencer-program (pattern-/channel-/
sample-/song-/effect-management) and those of powerful synthesizers and
samplers in a modern, user-friendly and easy to use graphical user-interface.
.
This package provides the recommended installation.
Package: lmms-common
Architecture: all
Depends: zynaddsubfx-data, ${shlibs:Depends}, ${misc:Depends}
Pre-Depends: ${misc:Pre-Depends}
Description: Linux Multimedia Studio - common files
LMMS aims to be a free alternative to popular (but commercial and closed-
source) programs like FruityLoops, Cubase and Logic giving you the ability of
producing music with your computer by creating cool loops, synthesizing and
mixing sounds, arranging samples, having more fun with your MIDI-keyboard
and much more...
.
LMMS combines the features of a tracker-/sequencer-program (pattern-/channel-/
sample-/song-/effect-management) and those of powerful synthesizers and
samplers in a modern, user-friendly and easy to use graphical user-interface.
.
This package contains the platform independent files such as samples, presets
and some example projects.
Package: lmms-vst-server
Architecture: i386
# Order matters to avoid wine64
Depends: wine32, wine, ${shlibs:Depends}, ${misc:Depends}
Recommends: lmms-bin:any
Description: Linux Multimedia Studio - VST server
This package contains a helper application that loads VST plugins.
Package: calf-ladspa
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Replaces: calf-plugins (<< 0.0.19)
Provides: ladspa-plugin
Description: Linux Multimedia Studio - Calf LADSPA plugins
Calf is a pack of audio plugins - effects and instruments. The goal is to
create a set of plugins using decent algorithms and parameter settings,
available in a form which is compatible with as many open source applications
as possible.
.
These plugins are distributed as part of Linux Multimedia Studio, but may be
used by other applications.

1373
debian/copyright vendored Normal file

File diff suppressed because it is too large Load Diff

2
debian/gbp.conf vendored Normal file
View File

@@ -0,0 +1,2 @@
[DEFAULT]
pristine-tar = True

7
debian/lmms-bin.install vendored Normal file
View File

@@ -0,0 +1,7 @@
usr/bin/lmms
usr/lib/*/lmms/ladspa/[a-b]*
usr/lib/*/lmms/ladspa/caps.so
usr/lib/*/lmms/ladspa/c[b-z]*
usr/lib/*/lmms/ladspa/[d-z]*
usr/lib/*/lmms/lib*
usr/lib/*/lmms/RemoteZynAddSubFx

9
debian/lmms-bin.lintian-overrides vendored Normal file
View File

@@ -0,0 +1,9 @@
lmms: pkg-has-shlibs-control-file-but-no-actual-shared-libs
lmms: postinst-has-useless-call-to-ldconfig
lmms: postrm-has-useless-call-to-ldconfig
# env is used to set the environment, then lmms is called.
lmms: desktop-command-not-in-package usr/share/applications/lmms.desktop env
# Icon is in lmms-common.
lmms: menu-icon-missing usr/share/pixmaps/lmms.xpm

1
debian/lmms-common.docs vendored Normal file
View File

@@ -0,0 +1 @@
plugins/LadspaEffect/caps/caps.html

25
debian/lmms-common.install vendored Normal file
View File

@@ -0,0 +1,25 @@
usr/share/applications
usr/share/bash-completion
usr/share/icons
usr/share/lmms/[a-o]*
usr/share/lmms/presets/[A-Y]*
usr/share/lmms/projects/demos/Alf42red-*
usr/share/lmms/projects/demos/CapDan
usr/share/lmms/projects/demos/EsoXLB-*
usr/share/lmms/projects/demos/Impulslogik-*
usr/share/lmms/projects/demos/Jousboxx-*
usr/share/lmms/projects/demos/Momo64-*
usr/share/lmms/projects/demos/Oglsdl-*
usr/share/lmms/projects/demos/Settel-*
usr/share/lmms/projects/demos/Socceroos-*
usr/share/lmms/projects/demos/TameAnderson-*
usr/share/lmms/projects/demos/Thomasso-*
usr/share/lmms/projects/shorties/Crunk*
usr/share/lmms/projects/shorties/Greshz-*
usr/share/lmms/projects/shorties/Surrender-*
usr/share/lmms/projects/templates
usr/share/lmms/projects/tutorials
usr/share/lmms/[q-z]*
usr/share/man
usr/share/mime
debian/lmms.xpm usr/share/pixmaps/

1
debian/lmms-common.links vendored Normal file
View File

@@ -0,0 +1 @@
usr/share/zynaddsubfx/banks usr/share/lmms/presets/ZynAddSubFX

1
debian/lmms-common.maintscript vendored Normal file
View File

@@ -0,0 +1 @@
dir_to_symlink /usr/share/lmms/presets/ZynAddSubFX ../../zynaddsubfx/banks 1.1.3-2~

1
debian/lmms-vst-server.install vendored Normal file
View File

@@ -0,0 +1 @@
usr/lib/*/lmms/RemoteVstPlugin*

103
debian/lmms.xpm vendored Normal file
View File

@@ -0,0 +1,103 @@
/* XPM */
static char * lmms_xpm[] = {
"24 24 76 1",
" c None",
". c #208B4D",
"+ c #208C4D",
"@ c #229452",
"# c #239654",
"$ c #239754",
"% c #299557",
"& c #2A9658",
"* c #239B56",
"= c #249B56",
"- c #249C57",
"; c #249D57",
"> c #259E58",
", c #259F59",
"' c #25A059",
") c #25A15A",
"! c #25A25A",
"~ c #25A35A",
"{ c #26A35B",
"] c #26A45B",
"^ c #26A55C",
"/ c #26A65C",
"( c #26A65D",
"_ c #3E9E67",
": c #26A75D",
"< c #28A75E",
"[ c #28A75F",
"} c #27A85E",
"| c #27A95E",
"1 c #27AA5F",
"2 c #27AB5F",
"3 c #29AC60",
"4 c #2AAC61",
"5 c #2FAC64",
"6 c #54A275",
"7 c #33AE67",
"8 c #56A477",
"9 c #2AB365",
"0 c #5BA67B",
"a c #3CB36F",
"b c #41B572",
"c c #64B285",
"d c #50BA7D",
"e c #58B881",
"f c #5CBA84",
"g c #56BC82",
"h c #5FBB86",
"i c #34D07B",
"j c #34D17A",
"k c #34D17B",
"l c #68C28F",
"m c #77C899",
"n c #7DCD9F",
"o c #90C7A8",
"p c #8CD2AA",
"q c #9AD7B4",
"r c #A9DDBF",
"s c #B0E0C5",
"t c #BDDDCB",
"u c #C3DFCF",
"v c #BFE6CF",
"w c #CBE3D5",
"x c #C5E6D3",
"y c #CDE9D9",
"z c #D1EDDD",
"A c #D7EFE2",
"B c #E1F0E8",
"C c #E6F5EC",
"D c #EAF6EF",
"E c #F3FAF6",
"F c #F7FBF9",
"G c #F8FBFA",
"H c #F6FCF9",
"I c #FCFEFD",
"J c #FDFEFE",
"K c #FFFFFF",
" ",
" kiiiiiiiiiiiiiiiiiij ",
" j92222222222222222229i ",
" i22222222222222222222i ",
" i22222222asvb22222222i ",
" i2222223nEKKHp4222222i ",
" i11111dzKKKKKKAg11111i ",
" i|||5qIKKBccBKKJr7|||i ",
" i}}lCKKFo%))&oGKKDm}}i ",
" i::KKKt_*(::(*_tKKK::i ",
" i//KKK@~//////~@KKK//i ",
" i^^KKK^^^^^^^^^^KKK^^i ",
" i]]KKK]]]]]]]]]]KKK]]i ",
" i{{KKKf{{{{{{{{fKKK{{i ",
" i!!KKKKyh!!!!exKKKK!!i ",
" i))KKKKKK))))KKKKKK))i ",
" i''KKKKKK''''KKKKKK''i ",
" i,,KKKKKK,,,,KKKKKK,,i ",
" i>>6uKKw0>>>>6uKKw0>>i ",
" i;;$+88.$;;;;$+88.$;;i ",
" i----##--------##----i ",
" j<==================[i ",
" jiiiiiiiiiiiiiiiiiii ",
" "};

View File

@@ -0,0 +1,46 @@
Description: Fix build as of 2018-10-13
Fix build errors, possibly introduced with GCC 8.
Author: Javier Serrano Polo <javier@jasp.net>
Bug-Debian: https://bugs.debian.org/897806
Index: lmms-1.1.3/plugins/LadspaEffect/caps/dsp/FPTruncateMode.h
===================================================================
--- lmms-1.1.3.orig/plugins/LadspaEffect/caps/dsp/FPTruncateMode.h
+++ lmms-1.1.3/plugins/LadspaEffect/caps/dsp/FPTruncateMode.h
@@ -40,9 +40,11 @@ class FPTruncateMode
FPTruncateMode()
{
+#ifdef __i386__
fstcw (cw0);
cw1 = cw0 | 0xC00;
fldcw (cw1);
+#endif
}
~FPTruncateMode()
Index: lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.cpp
===================================================================
--- lmms-1.1.3.orig/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.cpp
+++ lmms-1.1.3/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.cpp
@@ -33,7 +33,8 @@
//operations on FFTfreqs
inline void clearAll(fft_t *freqs)
{
- memset(freqs, 0, synth->oscilsize / 2 * sizeof(fft_t));
+ for(int i = 0; i < synth->oscilsize / 2; ++i)
+ freqs[i] = fft_t(0.0f, 0.0f);
}
inline void clearDC(fft_t *freqs)
@@ -928,8 +929,8 @@ void OscilGen::getspectrum(int n, float
if(what == 0) {
for(int i = 0; i < n; ++i)
outoscilFFTfreqs[i] = fft_t(spc[i], spc[i]);
- memset(outoscilFFTfreqs + n, 0,
- (synth->oscilsize / 2 - n) * sizeof(fft_t));
+ for(int i = n; i < synth->oscilsize / 2; ++i)
+ outoscilFFTfreqs[i] = fft_t(0.0f, 0.0f);
adaptiveharmonic(outoscilFFTfreqs, 0.0f);
adaptiveharmonicpostprocess(outoscilFFTfreqs, n - 1);
for(int i = 0; i < n; ++i)

601
debian/patches/clang.patch vendored Normal file
View File

@@ -0,0 +1,601 @@
Description: Fix build with Clang
Several issues are present:
- Unused private elements.
- Wrong use of delete.
- Unsupported compiler options.
- Shifting negative values.
- Possible truncations.
- Uninitialized variables.
- Unused code.
- Hiding overloaded virtual functions.
- Declarations outside namespace.
- Mismatched class tag.
.
Be careful editing this patch because allegrosmfwr.cpp has CRLF terminators.
Author: Javier Serrano Polo <javier@jasp.net>
Bug: https://github.com/LMMS/lmms/issues/3073
Index: lmms-1.1.3/include/AutomatableModel.h
===================================================================
--- lmms-1.1.3.orig/include/AutomatableModel.h 2017-01-03 13:01:47.000000000 +0100
+++ lmms-1.1.3/include/AutomatableModel.h 2017-01-03 13:11:25.000000000 +0100
@@ -307,7 +307,6 @@
// most objects will need this temporarily (until sampleExact is
// standard)
- float m_oldValue;
int m_setValueDepth;
AutoModelVector m_linkedModels;
Index: lmms-1.1.3/plugins/LadspaEffect/calf/CMakeLists.txt
===================================================================
--- lmms-1.1.3.orig/plugins/LadspaEffect/calf/CMakeLists.txt 2017-01-03 16:03:14.000000000 +0100
+++ lmms-1.1.3/plugins/LadspaEffect/calf/CMakeLists.txt 2017-01-03 16:14:28.000000000 +0100
@@ -7,11 +7,22 @@
"${CMAKE_CURRENT_SOURCE_DIR}/src")
INSTALL(TARGETS calf LIBRARY DESTINATION "${PLUGIN_DIR}/ladspa")
SET_TARGET_PROPERTIES(calf PROPERTIES PREFIX "")
+
SET(INLINE_FLAGS "")
-IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
-SET(INLINE_FLAGS "-finline-functions-called-once -finline-limit=80")
+
+INCLUDE(CheckCXXCompilerFlag)
+CHECK_CXX_COMPILER_FLAG(-finline-functions CXX_HAVE_INLINE_FUNCTIONS)
+IF(${CXX_HAVE_INLINE_FUNCTIONS})
+ SET(INLINE_FLAGS "${INLINE_FLAGS} -finline-functions")
ENDIF()
-SET_TARGET_PROPERTIES(calf PROPERTIES COMPILE_FLAGS "-O2 -finline-functions ${INLINE_FLAGS}")
+CHECK_CXX_COMPILER_FLAG(-finline-functions-called-once
+ CXX_HAVE_INLINE_FUNCTIONS_CALLED_ONCE)
+IF(${CXX_HAVE_INLINE_FUNCTIONS_CALLED_ONCE})
+ SET(INLINE_FLAGS "${INLINE_FLAGS} -finline-functions-called-once \
+ -finline-limit=80")
+ENDIF()
+
+SET_TARGET_PROPERTIES(calf PROPERTIES COMPILE_FLAGS "-O2 ${INLINE_FLAGS}")
IF(LMMS_BUILD_WIN32)
ADD_CUSTOM_COMMAND(TARGET calf POST_BUILD COMMAND "${STRIP}" "\"${CMAKE_CURRENT_BINARY_DIR}/calf.dll\"")
Index: lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/metadata.h
===================================================================
--- lmms-1.1.3.orig/plugins/LadspaEffect/calf/src/calf/metadata.h 2017-01-03 17:41:17.000000000 +0100
+++ lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/metadata.h 2017-01-03 17:50:40.000000000 +0100
@@ -51,7 +51,7 @@
enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, rt_capable = true, require_midi = false, support_midi = false };
PLUGIN_NAME_ID_LABEL("filter", "filter", "Filter")
/// do not export mode and inertia as CVs, as those are settings and not parameters
- bool is_cv(int param_no) { return param_no != par_mode && param_no != par_inertia; }
+ bool is_cv(int param_no) const { return param_no != par_mode && param_no != par_inertia; }
};
/// Filterclavier - metadata
@@ -61,7 +61,7 @@
enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, rt_capable = true, require_midi = true, support_midi = true };
PLUGIN_NAME_ID_LABEL("filterclavier", "filterclavier", "Filterclavier")
/// do not export mode and inertia as CVs, as those are settings and not parameters
- bool is_cv(int param_no) { return param_no != par_mode && param_no != par_inertia; }
+ bool is_cv(int param_no) const { return param_no != par_mode && param_no != par_inertia; }
};
struct reverb_metadata: public plugin_metadata<reverb_metadata>
@@ -499,7 +499,7 @@
PLUGIN_NAME_ID_LABEL("organ", "organ", "Organ")
public:
- plugin_command_info *get_commands();
+ plugin_command_info *get_commands() const;
const char *const *get_configure_vars() const;
};
Index: lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/modules.h
===================================================================
--- lmms-1.1.3.orig/plugins/LadspaEffect/calf/src/calf/modules.h 2017-01-03 19:02:59.000000000 +0100
+++ lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/modules.h 2017-01-03 19:30:35.000000000 +0100
@@ -89,13 +89,14 @@
using audio_module<Metadata>::ins;
using audio_module<Metadata>::outs;
using audio_module<Metadata>::params;
+ using FilterClass::calculate_filter;
dsp::inertia<dsp::exponential_ramp> inertia_cutoff, inertia_resonance, inertia_gain;
dsp::once_per_n timer;
bool is_active;
mutable volatile int last_generation, last_calculated_generation;
- filter_module_with_inertia(float **ins, float **outs, float **params)
+ filter_module_with_inertia()
: inertia_cutoff(dsp::exponential_ramp(128), 20)
, inertia_resonance(dsp::exponential_ramp(128), 20)
, inertia_gain(dsp::exponential_ramp(128), 1.0)
@@ -193,7 +194,7 @@
mutable float old_cutoff, old_resonance, old_mode;
public:
filter_audio_module()
- : filter_module_with_inertia<dsp::biquad_filter_module, filter_metadata>(ins, outs, params)
+ : filter_module_with_inertia<dsp::biquad_filter_module, filter_metadata>()
{
last_generation = 0;
old_mode = old_resonance = old_cutoff = -1;
Index: lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/modules_comp.h
===================================================================
--- lmms-1.1.3.orig/plugins/LadspaEffect/calf/src/calf/modules_comp.h 2017-01-03 19:35:53.000000000 +0100
+++ lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/modules_comp.h 2017-01-03 19:38:06.000000000 +0100
@@ -39,10 +39,10 @@
class gain_reduction_audio_module
{
private:
- float linSlope, detected, kneeSqrt, kneeStart, linKneeStart, kneeStop;
+ float linSlope, detected, kneeStart, linKneeStart, kneeStop;
float compressedKneeStop, adjKneeStart, thres;
float attack, release, threshold, ratio, knee, makeup, detection, stereo_link, bypass, mute, meter_out, meter_comp;
- mutable float old_threshold, old_ratio, old_knee, old_makeup, old_bypass, old_mute, old_detection, old_stereo_link;
+ mutable float old_threshold, old_ratio, old_knee, old_makeup, old_bypass, old_mute, old_detection;
mutable volatile int last_generation;
uint32_t srate;
bool is_active;
@@ -69,7 +69,7 @@
/// Main gate routine by Damien called by various audio modules
class expander_audio_module {
private:
- float linSlope, peak, detected, kneeSqrt, kneeStart, linKneeStart, kneeStop, linKneeStop;
+ float linSlope, detected, kneeStart, linKneeStart, kneeStop, linKneeStop;
float compressedKneeStop, adjKneeStart, range, thres, attack_coeff, release_coeff;
float attack, release, threshold, ratio, knee, makeup, detection, stereo_link, bypass, mute, meter_out, meter_gate;
mutable float old_threshold, old_ratio, old_knee, old_makeup, old_bypass, old_range, old_trigger, old_mute, old_detection, old_stereo_link;
@@ -142,7 +142,7 @@
mutable float f1_freq_old, f2_freq_old, f1_level_old, f2_level_old;
mutable float f1_freq_old1, f2_freq_old1, f1_level_old1, f2_level_old1;
CalfScModes sc_mode;
- mutable CalfScModes sc_mode_old, sc_mode_old1;
+ mutable CalfScModes sc_mode_old1;
float f1_active, f2_active;
stereo_in_out_metering<sidechaincompressor_metadata> meters;
gain_reduction_audio_module compressor;
Index: lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/modules_limit.h
===================================================================
--- lmms-1.1.3.orig/plugins/LadspaEffect/calf/src/calf/modules_limit.h 2017-01-03 19:39:00.000000000 +0100
+++ lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/modules_limit.h 2017-01-03 19:40:20.000000000 +0100
@@ -37,7 +37,6 @@
private:
typedef limiter_audio_module AM;
uint32_t clip_inL, clip_inR, clip_outL, clip_outR, asc_led;
- int mode, mode_old;
float meter_inL, meter_inR, meter_outL, meter_outR;
dsp::lookahead_limiter limiter;
public:
@@ -73,7 +72,6 @@
unsigned int overall_buffer_size;
float *buffer;
int channels;
- float striprel[strips];
float weight[strips];
float weight_old[strips];
float limit_old;
Index: lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/modules_mod.h
===================================================================
--- lmms-1.1.3.orig/plugins/LadspaEffect/calf/src/calf/modules_mod.h 2017-01-03 19:41:55.000000000 +0100
+++ lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/modules_mod.h 2017-01-03 19:42:19.000000000 +0100
@@ -160,8 +160,6 @@
typedef pulsator_audio_module AM;
uint32_t clip_inL, clip_inR, clip_outL, clip_outR;
float meter_inL, meter_inR, meter_outL, meter_outR;
- float offset_old;
- int mode_old;
bool clear_reset;
dsp::simple_lfo lfoL, lfoR;
public:
Index: lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/organ.h
===================================================================
--- lmms-1.1.3.orig/plugins/LadspaEffect/calf/src/calf/organ.h 2017-01-03 19:43:08.000000000 +0100
+++ lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/organ.h 2017-01-03 19:53:55.000000000 +0100
@@ -318,6 +318,7 @@
using drawbar_organ::note_on;
using drawbar_organ::note_off;
using drawbar_organ::control_change;
+ using drawbar_organ::pitch_bend;
enum { param_count = drawbar_organ::param_count};
dsp::organ_parameters par_values;
uint32_t srate;
@@ -338,9 +339,9 @@
void deactivate();
uint32_t process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask);
/// No CV inputs for now
- bool is_cv(int param_no) { return false; }
+ bool is_cv(int param_no) const { return false; }
/// Practically all the stuff here is noisy
- bool is_noisy(int param_no) { return true; }
+ bool is_noisy(int param_no) const { return true; }
void execute(int cmd_no);
bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const;
char *configure(const char *key, const char *value);
Index: lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/preset.h
===================================================================
--- lmms-1.1.3.orig/plugins/LadspaEffect/calf/src/calf/preset.h 2017-01-03 19:57:02.000000000 +0100
+++ lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/preset.h 2017-01-03 20:00:25.000000000 +0100
@@ -27,7 +27,7 @@
namespace calf_plugins {
-class plugin_ctl_iface;
+struct plugin_ctl_iface;
/// Contents of single preset
struct plugin_preset
Index: lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/primitives.h
===================================================================
--- lmms-1.1.3.orig/plugins/LadspaEffect/calf/src/calf/primitives.h 2017-01-03 17:36:12.000000000 +0100
+++ lmms-1.1.3/plugins/LadspaEffect/calf/src/calf/primitives.h 2017-01-03 16:22:16.000000000 +0100
@@ -370,11 +370,6 @@
next_task = (unsigned)-1;
eob = false;
}
- inline bool is_next_tick() {
- if (time < next_task)
- return true;
- do_tasks();
- }
inline void next_tick() {
time++;
}
@@ -382,14 +377,6 @@
timeline.insert(std::pair<unsigned int, task *>(time+pos, t));
next_task = timeline.begin()->first;
}
- void do_tasks() {
- std::multimap<unsigned int, task *>::iterator i = timeline.begin();
- while(i != timeline.end() && i->first == time) {
- i->second->execute(this);
- i->second->dispose();
- timeline.erase(i);
- }
- }
bool is_eob() {
return eob;
}
Index: lmms-1.1.3/plugins/LadspaEffect/calf/src/metadata.cpp
===================================================================
--- lmms-1.1.3.orig/plugins/LadspaEffect/calf/src/metadata.cpp 2017-01-03 17:52:03.000000000 +0100
+++ lmms-1.1.3/plugins/LadspaEffect/calf/src/metadata.cpp 2017-01-03 18:49:18.000000000 +0100
@@ -29,6 +29,8 @@
const char *calf_plugins::calf_copyright_info = "(C) 2001-2009 Krzysztof Foltman, Thor Harald Johanssen, Markus Schmidt and others; license: LGPL";
+namespace calf_plugins {
+
////////////////////////////////////////////////////////////////////////////
CALF_PORT_NAMES(flanger) = {"In L", "In R", "Out L", "Out R"};
@@ -1105,7 +1107,7 @@
CALF_PLUGIN_INFO(organ) = { 0x8481, "Organ", "Calf Organ", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "SynthesizerPlugin" };
-plugin_command_info *organ_metadata::get_commands()
+plugin_command_info *organ_metadata::get_commands() const
{
static plugin_command_info cmds[] = {
{ "cmd_panic", "Panic!", "Stop all sounds and reset all controllers" },
@@ -1439,6 +1441,8 @@
////////////////////////////////////////////////////////////////////////////
+}; // namespace calf_plugins
+
calf_plugins::plugin_registry::plugin_registry()
{
#define PER_MODULE_ITEM(name, isSynth, jackname) plugins.push_back((new name##_metadata));
Index: lmms-1.1.3/plugins/LadspaEffect/calf/src/modules.cpp
===================================================================
--- lmms-1.1.3.orig/plugins/LadspaEffect/calf/src/modules.cpp 2017-01-03 19:32:38.000000000 +0100
+++ lmms-1.1.3/plugins/LadspaEffect/calf/src/modules.cpp 2017-01-03 19:33:13.000000000 +0100
@@ -339,7 +339,7 @@
///////////////////////////////////////////////////////////////////////////////////////////////
filterclavier_audio_module::filterclavier_audio_module()
-: filter_module_with_inertia<biquad_filter_module, filterclavier_metadata>(ins, outs, params)
+: filter_module_with_inertia<biquad_filter_module, filterclavier_metadata>()
, min_gain(1.0)
, max_gain(32.0)
, last_note(-1)
Index: lmms-1.1.3/plugins/LadspaEffect/swh/flanger_1191.c
===================================================================
--- lmms-1.1.3.orig/plugins/LadspaEffect/swh/flanger_1191.c 2017-01-03 15:44:13.000000000 +0100
+++ lmms-1.1.3/plugins/LadspaEffect/swh/flanger_1191.c 2017-01-03 15:45:17.000000000 +0100
@@ -266,7 +266,7 @@
// Calculate position in delay table
d_base = LIN_INTERP(frac, old_d_base, new_d_base);
- n_ph = (float)(law_p - abs(next_law_pos - count))/(float)law_p;
+ n_ph = (float)(law_p - labs(next_law_pos - count))/(float)law_p;
p_ph = n_ph + 0.5f;
while (p_ph > 1.0f) {
p_ph -= 1.0f;
@@ -392,7 +392,7 @@
// Calculate position in delay table
d_base = LIN_INTERP(frac, old_d_base, new_d_base);
- n_ph = (float)(law_p - abs(next_law_pos - count))/(float)law_p;
+ n_ph = (float)(law_p - labs(next_law_pos - count))/(float)law_p;
p_ph = n_ph + 0.5f;
while (p_ph > 1.0f) {
p_ph -= 1.0f;
Index: lmms-1.1.3/plugins/LadspaEffect/swh/gsm/short_term.c
===================================================================
--- lmms-1.1.3.orig/plugins/LadspaEffect/swh/gsm/short_term.c 2017-01-03 15:35:13.000000000 +0100
+++ lmms-1.1.3/plugins/LadspaEffect/swh/gsm/short_term.c 2017-01-03 15:35:55.000000000 +0100
@@ -53,7 +53,7 @@
#undef STEP
#define STEP( B, MIC, INVA ) \
temp1 = GSM_ADD( *LARc++, MIC ) << 10; \
- temp1 = GSM_SUB( temp1, B << 1 ); \
+ temp1 = GSM_SUB( temp1, B * 2 ); \
temp1 = GSM_MULT_R( INVA, temp1 ); \
*LARpp++ = GSM_ADD( temp1, temp1 );
Index: lmms-1.1.3/plugins/LadspaEffect/swh/multivoice_chorus_1201.c
===================================================================
--- lmms-1.1.3.orig/plugins/LadspaEffect/swh/multivoice_chorus_1201.c 2017-01-03 15:47:51.000000000 +0100
+++ lmms-1.1.3/plugins/LadspaEffect/swh/multivoice_chorus_1201.c 2017-01-03 15:48:18.000000000 +0100
@@ -345,7 +345,7 @@
if (count % 16 < laws) {
unsigned int t = count % 16;
// Calculate sinus phases
- float n_ph = (float)(law_p - abs(next_peak_pos[t] - count))/law_p;
+ float n_ph = (float)(law_p - labs(next_peak_pos[t] - count))/law_p;
float p_ph = n_ph + 0.5f;
if (p_ph > 1.0f) {
p_ph -= 1.0f;
@@ -488,7 +488,7 @@
if (count % 16 < laws) {
unsigned int t = count % 16;
// Calculate sinus phases
- float n_ph = (float)(law_p - abs(next_peak_pos[t] - count))/law_p;
+ float n_ph = (float)(law_p - labs(next_peak_pos[t] - count))/law_p;
float p_ph = n_ph + 0.5f;
if (p_ph > 1.0f) {
p_ph -= 1.0f;
Index: lmms-1.1.3/plugins/LadspaEffect/swh/retro_flange_1208.c
===================================================================
--- lmms-1.1.3.orig/plugins/LadspaEffect/swh/retro_flange_1208.c 2017-01-03 15:46:35.000000000 +0100
+++ lmms-1.1.3/plugins/LadspaEffect/swh/retro_flange_1208.c 2017-01-03 15:47:02.000000000 +0100
@@ -321,7 +321,7 @@
prev_law_pos = count + law_p;
}
- n_ph = (float)(law_p - abs(next_law_pos - count))/(float)law_p;
+ n_ph = (float)(law_p - labs(next_law_pos - count))/(float)law_p;
p_ph = n_ph + 0.5f;
if (p_ph > 1.0f) {
p_ph -= 1.0f;
@@ -446,7 +446,7 @@
prev_law_pos = count + law_p;
}
- n_ph = (float)(law_p - abs(next_law_pos - count))/(float)law_p;
+ n_ph = (float)(law_p - labs(next_law_pos - count))/(float)law_p;
p_ph = n_ph + 0.5f;
if (p_ph > 1.0f) {
p_ph -= 1.0f;
Index: lmms-1.1.3/plugins/LadspaEffect/swh/vynil_1905.c
===================================================================
--- lmms-1.1.3.orig/plugins/LadspaEffect/swh/vynil_1905.c 2017-01-03 15:51:56.000000000 +0100
+++ lmms-1.1.3/plugins/LadspaEffect/swh/vynil_1905.c 2017-01-03 16:01:32.000000000 +0100
@@ -243,6 +243,8 @@
buffer_s = malloc(sizeof(LADSPA_Data) * buffer_size);
buffer_mask = buffer_size - 1;
buffer_pos = 0;
+ click_buffer_omega.all = 0;
+ click_buffer_pos.all = 0;
click_gain = 0;
phi = 0.0f; /* Angular phase */
Index: lmms-1.1.3/plugins/LadspaEffect/tap/CMakeLists.txt
===================================================================
--- lmms-1.1.3.orig/plugins/LadspaEffect/tap/CMakeLists.txt 2017-01-03 13:52:28.000000000 +0100
+++ lmms-1.1.3/plugins/LadspaEffect/tap/CMakeLists.txt 2017-01-03 15:12:14.000000000 +0100
@@ -1,7 +1,15 @@
INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include")
FILE(GLOB PLUGIN_SOURCES *.c)
LIST(SORT PLUGIN_SOURCES)
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -Wno-write-strings -fomit-frame-pointer -fno-strict-aliasing -fstrength-reduce -funroll-loops -ffast-math")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -Wno-write-strings \
+ -fomit-frame-pointer -fno-strict-aliasing -funroll-loops -ffast-math")
+
+INCLUDE(CheckCCompilerFlag)
+CHECK_C_COMPILER_FLAG(-fstrength-reduce C_HAVE_STRENGTH_REDUCE)
+IF(${C_HAVE_STRENGTH_REDUCE})
+ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstrength-reduce")
+ENDIF()
+
FOREACH(_item ${PLUGIN_SOURCES})
GET_FILENAME_COMPONENT(_plugin "${_item}" NAME_WE)
ADD_LIBRARY("${_plugin}" MODULE "${_item}")
Index: lmms-1.1.3/plugins/MidiImport/portsmf/allegro.h
===================================================================
--- lmms-1.1.3.orig/plugins/MidiImport/portsmf/allegro.h 2017-01-03 20:02:37.000000000 +0100
+++ lmms-1.1.3/plugins/MidiImport/portsmf/allegro.h 2017-01-03 20:06:48.000000000 +0100
@@ -842,6 +842,8 @@
Alg_event_ptr write_track_name(std::ostream &file, int n,
Alg_events &events);
public:
+ using Alg_track::paste;
+
int channel_offset_per_track; // used to encode track_num into channel
Alg_tracks track_list; // array of Alg_events
Alg_time_sigs time_sig;
Index: lmms-1.1.3/plugins/MidiImport/portsmf/allegrosmfwr.cpp
===================================================================
--- lmms-1.1.3.orig/plugins/MidiImport/portsmf/allegrosmfwr.cpp 2017-01-03 20:07:50.000000000 +0100
+++ lmms-1.1.3/plugins/MidiImport/portsmf/allegrosmfwr.cpp 2017-01-03 20:08:34.000000000 +0100
@@ -57,13 +57,11 @@
Alg_seq_ptr seq;
- int num_tracks; // number of tracks not counting tempo track
int division; // divisions per quarter note, default = 120
int initial_tempo;
int timesig_num; // numerator of time signature
int timesig_den; // denominator of time signature
- double timesig_when; // time of time signature
int keysig; // number of sharps (+) or flats (-), -99 for undefined
char keysig_mode; // 'M' or 'm' for major/minor
Index: lmms-1.1.3/plugins/delay/stereodelay.cpp
===================================================================
--- lmms-1.1.3.orig/plugins/delay/stereodelay.cpp 2017-01-03 13:40:27.000000000 +0100
+++ lmms-1.1.3/plugins/delay/stereodelay.cpp 2017-01-03 13:42:16.000000000 +0100
@@ -48,7 +48,7 @@
{
if( m_buffer )
{
- delete m_buffer;
+ delete[] m_buffer;
}
}
@@ -84,7 +84,7 @@
{
if( m_buffer )
{
- delete m_buffer;
+ delete[] m_buffer;
}
int bufferSize = ( int )( sampleRate * m_maxTime );
Index: lmms-1.1.3/plugins/opl2/fmopl.c
===================================================================
--- lmms-1.1.3.orig/plugins/opl2/fmopl.c 2017-01-03 20:11:03.000000000 +0100
+++ lmms-1.1.3/plugins/opl2/fmopl.c 2017-01-03 20:22:23.000000000 +0100
@@ -70,7 +70,7 @@
/* final output shift , limit minimum and maximum */
#define OPL_OUTSB (TL_BITS+3-16) /* OPL output final shift 16bit */
#define OPL_MAXOUT (0x7fff<<OPL_OUTSB)
-#define OPL_MINOUT (-0x8000<<OPL_OUTSB)
+#define OPL_MINOUT (~((0x8000<<OPL_OUTSB)-1))
/* -------------------- quality selection --------------------- */
Index: lmms-1.1.3/src/core/track.cpp
===================================================================
--- lmms-1.1.3.orig/src/core/track.cpp 2017-01-03 13:16:46.000000000 +0100
+++ lmms-1.1.3/src/core/track.cpp 2017-01-03 13:18:33.000000000 +0100
@@ -75,11 +75,6 @@
*/
const int RESIZE_GRIP_WIDTH = 4;
-/*! The size of the track buttons in pixels
- */
-const int TRACK_OP_BTN_WIDTH = 20;
-const int TRACK_OP_BTN_HEIGHT = 14;
-
/*! A pointer for that text bubble used when moving segments, etc.
*
Index: lmms-1.1.3/src/gui/LfoControllerDialog.cpp
===================================================================
--- lmms-1.1.3.orig/src/gui/LfoControllerDialog.cpp 2017-01-03 13:24:43.000000000 +0100
+++ lmms-1.1.3/src/gui/LfoControllerDialog.cpp 2017-01-03 13:25:24.000000000 +0100
@@ -50,7 +50,6 @@
const int CD_LFO_SHAPES_X = 6;
const int CD_LFO_SHAPES_Y = 36;
-const int CD_LFO_GRAPH_X = 6;
const int CD_LFO_GRAPH_Y = CD_ENV_KNOBS_LBL_Y+15;
const int CD_LFO_CD_KNOB_Y = CD_LFO_GRAPH_Y-2;
const int CD_LFO_BASE_CD_KNOB_X = CD_LFO_SHAPES_X + 64;
Index: lmms-1.1.3/src/gui/LmmsStyle.cpp
===================================================================
--- lmms-1.1.3.orig/src/gui/LmmsStyle.cpp 2017-01-03 13:27:38.000000000 +0100
+++ lmms-1.1.3/src/gui/LmmsStyle.cpp 2017-01-03 13:29:35.000000000 +0100
@@ -34,78 +34,6 @@
#include "LmmsStyle.h"
#include "LmmsPalette.h"
-const int BUTTON_LENGTH = 24;
-
-static const char * const s_scrollbarArrowUpXpm[] = {
- "7 6 8 1",
- " g None",
- ". g #000000",
- "+ g #101010",
- "@ g #A0A0A0",
- "# g #C0C0C0",
- "$ g #FFFFFF",
- "% g #808080",
- "& g #202020",
- "..+@+..",
- "..#$#..",
- ".%$$$%.",
- "&$$$$$&",
- "@$$$$$@",
- "@#####@"};
-
-static const char * const s_scrollbarArrowRightXpm[] = {
- "6 7 8 1",
- " c None",
- ". c #A0A0A0",
- "+ c #202020",
- "@ c #000000",
- "# c #C0C0C0",
- "$ c #FFFFFF",
- "% c #808080",
- "& c #101010",
- "..+@@@",
- "#$$%@@",
- "#$$$#&",
- "#$$$$.",
- "#$$$#&",
- "#$$%@@",
- "..+@@@"};
-
-static const char * const s_scrollbarArrowDownXpm[] = {
- "7 6 8 1",
- " g None",
- ". g #000000",
- "+ g #101010",
- "@ g #A0A0A0",
- "# g #C0C0C0",
- "$ g #FFFFFF",
- "% g #808080",
- "& g #202020",
- "@#####@",
- "@$$$$$@",
- "&$$$$$&",
- ".%$$$%.",
- "..#$#..",
- "..+@+.."};
-
-static const char * const s_scrollbarArrowLeftXpm[] = {
- "6 7 8 1",
- " g None",
- ". g #000000",
- "+ g #202020",
- "@ g #A0A0A0",
- "# g #808080",
- "$ g #FFFFFF",
- "% g #C0C0C0",
- "& g #101010",
- "...+@@",
- "..#$$%",
- "&%$$$%",
- "@$$$$%",
- "&%$$$%",
- "..#$$%",
- "...+@@"};
-
QPalette * LmmsStyle::s_palette = NULL;
QLinearGradient getGradient( const QColor & _col, const QRectF & _rect )
Index: lmms-1.1.3/src/gui/PianoRoll.cpp
===================================================================
--- lmms-1.1.3.orig/src/gui/PianoRoll.cpp 2017-01-03 13:30:47.000000000 +0100
+++ lmms-1.1.3/src/gui/PianoRoll.cpp 2017-01-03 13:34:14.000000000 +0100
@@ -88,7 +88,6 @@
const int PIANO_X = 0;
const int WHITE_KEY_WIDTH = 64;
-const int BLACK_KEY_WIDTH = 41;
const int WHITE_KEY_SMALL_HEIGHT = 18;
const int WHITE_KEY_BIG_HEIGHT = 24;
const int BLACK_KEY_HEIGHT = 16;

89
debian/patches/contributors.patch vendored Normal file
View File

@@ -0,0 +1,89 @@
Description: Add contributors
The list of contributors is missing from the source tarball. This list is
generated from upstream repository, running:
git shortlog -sne v1.1.3 | cut -c8-
See https://github.com/LMMS/lmms/issues/2914 for more information.
Author: Javier Serrano Polo <javier@jasp.net>
Index: lmms-1.1.3/doc/CONTRIBUTORS
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ lmms-1.1.3/doc/CONTRIBUTORS 2016-07-12 00:41:47.000000000 +0200
@@ -0,0 +1,77 @@
+Tobias Doerffel <tobias.doerffel@gmail.com>
+Vesa <contact.diizy@nbl.fi>
+Javier Serrano Polo <jasp00@terra.es>
+Paul Giblock <drfaygo@gmail.com>
+Tres Finocchiaro <tres.finocchiaro@gmail.com>
+Lukas W <lukaswhl@gmail.com>
+Raine M. Ekman <raine@iki.fi>
+Wong Cho Ching <chwong249664@yahoo.com>
+Hannu Haahti <grejppi@gmail.com>
+Danny McRae <khjklujn@yahoo.com>
+Dave French <dave.french3@googlemail.com>
+Daniel Winzen <d@winzen4.de>
+Andreas Brandmaier <andy@brandmaier.de>
+Andrew Kelley <superjoe30@gmail.com>
+Oskar Wallgren <oskar.wallgren13@gmail.com>
+Mike Choi <rdavidian71@gmail.com>
+Alexandre Almeida <wilsalx@gmail.com>
+NoiseByNorthwest <noisebynorthwest@gmail.com>
+Johannes Lorenz <johannes89@mailueberfall.de>
+Stian Jørgensrud <stianahj@gmail.com>
+falkTX <falktx@gmail.com>
+Csaba Hruska <csaba.hruska@gmail.com>
+StakeoutPunch <ehr@ravemail.com>
+ma2moto <you.are.being.lied.to.kns@gmail.com>
+mikobuntu <chrissy.mc.1@hotmail.co.uk>
+8tab <8tab@wp.pl>
+Matthew Krafczyk <krafczyk.matthew@gmail.com>
+Spekular <spekularr@gmail.com>
+Umcaruje <uros.maravic@gmail.com>
+DeRobyJ <derobyj@gmail.com>
+Jonathan Aquilina <eagles051387@gmail.com>
+ra <symbiants@gmail.com>
+wongcc966422 <wongcc966422@users.noreply.github.com>
+Gurjot Singh <bhattigurjot@gmail.com>
+Janne Sinisalo <janne.m.sinisalo@gmail.com>
+Krzysztof Foltman <wdev@foltman.com>
+Lou Herard <lherard@gmail.com>
+Paul Wayper <paulway@mabula.net>
+Rüdiger Ranft <rudi@qzzq.de>
+Yann Collette <ycollette.nospam@free.fr>
+grindhold <grindhold@gmx.net>
+midi-pascal <midi-pascal@videotron.ca>
+unfa <unfa00@gmail.com>
+Ian Sannar <ian.sannar@gmail.com>
+Jaroslav Petrnoušek <baegus@gmail.com>
+LYF610400210 <lyfjxymf@sina.com>
+Rafael Ruggiero <rafael46w@gmail.com>
+psyomn <lethaljellybean@gmail.com>
+quadro <quadro2@email.cz>
+sarahkeefe <sarahjanekeefe@gmail.com>
+Achim Settelmeier <lmms@m1.sirlab.de>
+André Hentschel <nerv@dawncrow.de>
+Armin Kazmi <armin.kazmi@tu-dortmund.de>
+Attila Herman <attila589@gmail.com>
+Christopher A. Oliver <oliver@onion.private>
+Devin Venable <venable.devin@gmail.com>
+Fastigium <fastigiummusic@gmail.com>
+Frank Mather <tinycat2001@gmail.com>
+Frederik <freggy@gmail.com>
+Hexasoft <yperret@in2p3.fr>
+Jens Lang <jenslang@users.sf.net>
+Jesse Dubay <jesse@thefortytwo.net>
+Joel Muzzerall <joel.muzzerall@gmail.com>
+Kristi <kristi.dev@gmail.com>
+Markus Elfring <elfring@users.sourceforge.net>
+Nikos Chantziaras <realnc@arcor.de>
+Paul Nasca <zynaddsubfx_AT_yahoo com>
+Peter Nelson <peter1138@users.sourceforge.net>
+Ra <symbiants@gmail.com>
+Steffen Baranowsky <BaraMGB@freenet.de>
+Thorsten Müller <thorsten.muller.ger@googlemail.com>
+TonyChyi <tonychee1989@gmail.com>
+devin <devin@devin-studio.(none)>
+dnl-music <baza-nsk@ya.ru>
+fundamental <mark.d.mccurry@gmail.com>
+groboclown <matt@groboclown.net>
+zm1990s <zm1990s@gmail.com>

3
debian/patches/series vendored Normal file
View File

@@ -0,0 +1,3 @@
contributors.patch
clang.patch
build-amd64-20181013.patch

35
debian/rules vendored Executable file
View File

@@ -0,0 +1,35 @@
#!/usr/bin/make -f
#Rodney Dawes Version simplifies things :)
DH_CMAKE_BUILD_DIR=obj -${DEB_BUILD_GNU_TYPE}
DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
DEB_HOST_ARCH_OS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS)
CMAKE_OPTS= -DCONTRIBUTORS=$(CURDIR)/doc/CONTRIBUTORS -DFORCE_VERSION=internal \
-DWANT_QT5=1
ifneq ($(DEB_HOST_ARCH_OS),linux)
CMAKE_OPTS+= -DWANT_ALSA=0
endif
ifeq ($(DEB_HOST_ARCH),i386)
export PATH := $(PATH):/usr/lib/wine
WINE_PATH := /usr/lib/$(DEB_HOST_MULTIARCH)/wine
CMAKE_OPTS+= -DWINE_CXX_FLAGS=-Wl,--enable-new-dtags,-rpath=$(WINE_PATH)
else
CMAKE_OPTS+= -DWANT_VST_NOWINE=1 \
-DREMOTE_VST_PLUGIN_FILEPATH=../../i386-linux-gnu/lmms/RemoteVstPlugin
endif
# Define NDEBUG. This helps with reproducible builds.
# Add -Wno-error=format-truncation because truncation is expected in snprintf.
export CFLAGS ?= $(shell dpkg-buildflags --get CFLAGS) -DNDEBUG
export CXXFLAGS ?= $(shell dpkg-buildflags --get CXXFLAGS) -DNDEBUG \
-Wno-error=format-truncation
%:
dh $@ --buildsystem cmake --parallel
override_dh_auto_configure:
dh_auto_configure -- -DCMAKE_INSTALL_LIBDIR=lib/$(DEB_HOST_MULTIARCH) $(CMAKE_OPTS)

1
debian/source/format vendored Normal file
View File

@@ -0,0 +1 @@
3.0 (native)

3
debian/watch vendored Normal file
View File

@@ -0,0 +1,3 @@
version=3
opts="filenamemangle=s/(?:.*\/)?v?(\d[\d\.]*)\.tar\.gz/lmms_$1.tar.gz/" \
https://github.com/LMMS/lmms/tags (?:.*/)?v?(\d[\d\.]*)\.tar\.gz

View File

@@ -67,7 +67,7 @@ Tobiasz Karoń (unfa)
UI Developer
Johannes Lorenz
<johannes89/at/mailueberfall/dot/de>
<j/dot/git/at/lorenz/minus/ho/dot/me>
Developer
Rubén Ibarra Pastor

185
doc/CONTRIBUTORS Normal file
View File

@@ -0,0 +1,185 @@
Tobias Junghans <tobias.doerffel@gmail.com>
Vesa <contact.diizy@nbl.fi>
Tres Finocchiaro <tres.finocchiaro@gmail.com>
Lukas W <lukaswhl@gmail.com>
Javier Serrano Polo <jasp00@terra.es>
Paul Giblock <drfaygo@gmail.com>
Dave French <dave.french3@googlemail.com>
Colin Wallace <wallacoloo@gmail.com>
Oskar Wallgren <oskar.wallgren13@gmail.com>
Raine M. Ekman <raine@iki.fi>
Umcaruje <uros.maravic@gmail.com>
Michael Gregorius <michael.gregorius.git@arcor.de>
Javier Serrano Polo <javier--IfwAyVwL9S8xJKrdU2QtlAdbjyPl9T@jasp.net>
grejppi <grejppi@gmail.com>
Javier Serrano Polo <javier@jasp.net>
Hyunjin Song <tteu.ingog@gmail.com>
Wong Cho Ching <chwong249664@yahoo.com>
Alexandre Almeida <wilsalx@gmail.com>
Daniel Winzen <d@winzen4.de>
LMMS Service Account <lmms.service@gmail.com>
Steffen Baranowsky <BaraMGB@freenet.de>
Danny McRae <khjklujn@yahoo.com>
Garrett <g@floft.net>
Hyunin Song <tteu.ingog@gmail.com>
liushuyu <liushuyu011@gmail.com>
Andrew Kelley <superjoe30@gmail.com>
Andreas Brandmaier <andy@brandmaier.de>
Fastigium <fastigiummusic@gmail.com>
Spekular <Spekularr@gmail.com>
Amadeus Folego <amadeusfolego@gmail.com>
Jonas Trappenberg <jonas@trappenberg.ch>
M374LX <wilsalx@gmail.com>
DomClark <mrdomclark@gmail.com>
grindhold <grindhold@gmx.net>
Mike Choi <rdavidian71@gmail.com>
Karmo Rosental <karmo.rosental@gmail.com>
Christopher L. Simons <christopherleesimons@gmail.com>
Dominic Clark <mrdomclark@gmail.com>
NoiseByNorthwest <noisebynorthwest@gmail.com>
falkTX <falktx@gmail.com>
Johannes Lorenz <johannes89@mailueberfall.de>
Rebecca DeField <rebeccadefield@gmail.com>
Stian Jørgensrud <stianahj@gmail.com>
Ryan Roden-Corrent <ryan@rcorre.net>
midi-pascal <midi-pascal@videotron.ca>
Augustin Cavalier <waddlesplash@gmail.com>
BaraMGB <BaraMGB@freenet.de>
Csaba Hruska <csaba.hruska@gmail.com>
David Carlier <devnexen@gmail.com>
DeRobyJ <derobyj@gmail.com>
Hussam Eddin Alhomsi <hussameddin.alhomsi@gmail.com>
Rüdiger Ranft <rudi@qzzq.de>
StakeoutPunch <ehr@ravemail.com>
ma2moto <you.are.being.lied.to.kns@gmail.com>
mikobuntu <chrissy.mc.1@hotmail.co.uk>
8tab <8tab@wp.pl>
Andrés <andresbb@gmail.com>
Matthew Krafczyk <krafczyk.matthew@gmail.com>
mohamed <mohamed@amaksoud.com>
Alexandre <wilson@wil-pc>
RebeccaDeField <rebeccadefield@gmail.com>
Yann Collette <ycollette.nospam@free.fr>
Aya Morisawa <AyaMorisawa4869@gmail.com>
Ben Bryan <ben@irq5.net>
Jonathan Aquilina <eagles051387@gmail.com>
Mohammad Amin Sameti <mamins1376@gmail.com>
ra <symbiants@gmail.com>
wongcc966422 <wongcc966422@users.noreply.github.com>
David CARLIER <devnexen@gmail.com>
Gurjot Singh <bhattigurjot@gmail.com>
Janne Sinisalo <janne.m.sinisalo@gmail.com>
Krzysztof Foltman <wdev@foltman.com>
Lou Herard <lherard@gmail.com>
Paul Batchelor <thisispaulbatchelor@gmail.com>
Paul Wayper <paulway@mabula.net>
Petter Reinholdtsen <pere@hungry.com>
TonyChyi <tonychee1989@gmail.com>
dnl-music <baza-nsk@ya.ru>
follower <github@rancidbacon.com>
midi-pascal <midi-pascal@users.noreply.github.com>
unfa <unfa00@gmail.com>
Andres <andresbb@gmail.com>
Arnout Engelen <arnouten@bzzt.net>
Chris Aiken <chris.aiken@outlook.com>
Cyrille Bollu <cyrille.bollu2@gmail.com>
Dan Williams <BumblingCoder@users.noreply.github.com>
Ian Sannar <ian.sannar@gmail.com>
Jaroslav Petrnoušek <baegus@gmail.com>
Johannes Lorenz <1042576+JohannesLorenz@users.noreply.github.com>
Johannes Lorenz <j.git@lorenz-ho.me>
Kenneth Perry (thothonegan) <thothonegan@gmail.com>
LYF610400210 <lyfjxymf@sina.com>
Lukas W <lukas@Lukass-iMac.fritz.box>
Mark-Agent003 <wgreeves01@gmail.com>
NeiroNext <mihail.rozshko@gmail.com>
Orbital Ink <31394502+Anonymouqs@users.noreply.github.com>
P THE AWESOME <DaAwesomeP@users.noreply.github.com>
Ra <oeai@ya.ru>
Rafael Ruggiero <rafael46w@gmail.com>
Rebecca LaVie <rebeccadefield@gmail.com>
Roberto Giaconia <DeRobyJ@users.noreply.github.com>
SecondFlight <qbgeekjtw@gmail.com>
Steffen Baranowsky <baramgb@freenet.de>
TheTravelingSpaceman <smuts.walter@gmail.com>
Thomas Clark <the.thomas.j.clark@gmail.com>
gnudles <gnudles@users.noreply.github.com>
liushuyu <liushuyu_011@163.com>
miketurn <miketurn1234@yahoo.com>
psyomn <lethaljellybean@gmail.com>
quadro <quadro2@email.cz>
sarahkeefe <sarahjanekeefe@gmail.com>
Achim Settelmeier <lmms@m1.sirlab.de>
André Hentschel <nerv@dawncrow.de>
Armin Kazmi <armin.kazmi@tu-dortmund.de>
Attila Herman <attila589@gmail.com>
Bastian Kummer <bastian.kummer@securepoint.de>
Christopher A. Oliver <oliver@onion.private>
Devin Venable <venable.devin@gmail.com>
Diego Ramos Ruggeri <diego@ruggeri.net.br>
Douglas <34612565+DouglasDGI@users.noreply.github.com>
DragonEagle <allensoard@yahoo.com>
Filip Hron <filip.hron@gmail.com>
Frank Mather <tinycat2001@gmail.com>
Frederik <freggy@gmail.com>
Greg Simpson <geedubess@users.noreply.github.com>
Hexasoft <yperret@in2p3.fr>
IvanMaldonado <ivan.gm94@gmail.com>
Ivo Wetzel <ivo.wetzel@googlemail.com>
Jens Lang <jenslang@users.sf.net>
Jesse Dubay <jesse@thefortytwo.net>
Joel Muzzerall <joel.muzzerall@gmail.com>
Joshua Wade <SecondFlight@users.noreply.github.com>
Jousboxx <jousboxx@gmail.com>
Jérôme Duval <jerome.duval@gmail.com>
Karmo Rosental <karmo@coolbet.com>
Kristi <kristi.dev@gmail.com>
Lee Avital <leeavital@gmail.com>
LocoMatt <samozelko123@gmail.com>
Léo Andrès <leo@ndrs.fr>
Markus Elfring <elfring@users.sourceforge.net>
Maurizio Lo Bosco <maurizio.lobosco@gmail.com>
Mehdi <powergame_coder2@yahoo.com>
Mikobuntu <chrissy.mc.1@hotmail.co.uk>
Mingcong Bai <jeffbai@aosc.xyz>
Nikos Chantziaras <realnc@arcor.de>
Noah Brecht <noahb2713@gmail.com>
Ododo <olivierdautricourt@gmail.com>
Olivier Humbert <trebmuh@users.noreply.github.com>
Paul Nasca <zynaddsubfx_AT_yahoo com>
Peter Nelson <peter1138@users.sourceforge.net>
Ra <symbiants@gmail.com>
Ryan Schmidt <github@ryandesign.com>
Shane Ambler <GitHub@ShaneWare.Biz>
Simon Jackson (Netbook) <jackokring@gmail.com>
Simon van der Veldt <simon.vanderveldt@gmail.com>
Stephen Seo <seo.disparate@gmail.com>
Steve Leonard <xsleonard@gmail.com>
The Gitter Badger <badger@gitter.im>
Thorsten Müller <thorsten.muller.ger@googlemail.com>
Tobias Junghans <tobydox@veyon.io>
Tobias Kortkamp <t6@users.noreply.github.com>
Tyler Ganter <tylergan29@gmail.com>
Uroš Šišović <sisovic.uros@gmail.com>
Wiley Yu <wileyyugioh@users.noreply.github.com>
anonymous <support@lmms.io>
devin <devin@devin-studio.(none)>
fholmer <fholmer@gmail.com>
flynn16 <flynn16@users.noreply.github.com>
follower <follower@rancidbacon.com>
fundamental <mark.d.mccurry@gmail.com>
gandalf3 <gandalf3@users.noreply.github.com>
groboclown <matt@groboclown.net>
irrenhaus3 <irrenhaus3@users.noreply.github.com>
jasp00 <javier--IfwAyVwL9S8xJKrdU2QtlAdbjyPl9T@jasp.net>
justnope <dont@email.invalid>
kamnxt <kamnxt@kamnxt.com>
lmmsservice <lmms.service@gmail.com>
m-xbutterfly <m-xbutterfly@tutanota.com>
noahb01 <noahb2713@gmail.com>
projectpitchin <githobbyacct@gmail.com>
rgwan <kmlinuxm@gmail.com>
xhe <xhebox@users.noreply.github.com>
xy124 <qcd@gmx.net>
z-up <potapovsanya@gmail.com>
zm1990s <zm1990s@gmail.com>

View File

@@ -34,6 +34,7 @@ class AudioPortAudioSetupUtil : public QObject
{
Q_OBJECT
public slots:
void updateBackends();
void updateDevices();
void updateChannels();
@@ -87,6 +88,7 @@ public:
virtual ~setupWidget();
virtual void saveSettings();
virtual void show();
private:
ComboBox * m_backend;

View File

@@ -169,6 +169,7 @@ public slots:
void invert();
void shiftPhase( int _deg );
void clear();
void clearInvisible();
signals:
void lengthChanged();

View File

@@ -42,14 +42,7 @@ public:
virtual void play( sampleFrame * _working_buffer )
{
// if the instrument is midi-based, we can safely render right away
if( m_instrument->flags() & Instrument::IsMidiBased )
{
m_instrument->play( _working_buffer );
return;
}
// if not, we need to ensure that all our nph's have been processed first
// ensure that all our nph's have been processed first
ConstNotePlayHandleList nphv = NotePlayHandle::nphsOfInstrumentTrack( m_instrument->instrumentTrack(), true );
bool nphsLeft;

View File

@@ -33,6 +33,10 @@ namespace MixHelpers
bool isSilent( const sampleFrame* src, int frames );
bool useNaNHandler();
void setNaNHandler( bool use );
bool sanitize( sampleFrame * src, int frames );
/*! \brief Add samples from src to dst */

View File

@@ -41,6 +41,10 @@ public:
m_displayName( _display_name ),
m_defaultConstructed( _default_constructed )
{
#if QT_VERSION < 0x050000
connect( this, SIGNAL( dataChanged() ), this,
SLOT( thisDataChanged() ), Qt::DirectConnection );
#endif
}
virtual ~Model()
@@ -85,6 +89,19 @@ signals:
// emitted if properties of the model (e.g. ranges) have changed
void propertiesChanged();
#if QT_VERSION < 0x050000
// emitted along with dataChanged(), but with this model as an argument
// workaround for when QObject::sender() and Qt5 are unavailable
void dataChanged( Model * );
private slots:
void thisDataChanged()
{
emit dataChanged( this );
}
signals:
#endif
} ;

View File

@@ -77,6 +77,7 @@ public:
}
static jo_id_t idToSave( jo_id_t id );
static jo_id_t idFromSave( jo_id_t id );
void clearJournal();
void stopAllJournalling();

View File

@@ -754,9 +754,15 @@ public:
ProcessWatcher( RemotePlugin * );
virtual ~ProcessWatcher() = default;
void quit()
void stop()
{
m_quit = true;
quit();
}
void reset()
{
m_quit = false;
}
private:
@@ -862,6 +868,9 @@ private:
QProcess m_process;
ProcessWatcher m_watcher;
QString m_exec;
QStringList m_args;
QMutex m_commMutex;
bool m_splitChannels;
#ifdef USE_QT_SHMEM

View File

@@ -138,6 +138,7 @@ private:
bool m_MMPZ;
bool m_disableBackup;
bool m_openLastProject;
bool m_NaNHandler;
bool m_hqAudioDev;
QString m_lang;
QStringList m_languages;

View File

@@ -159,6 +159,7 @@ public:
protected:
virtual void resizeEvent( QResizeEvent * event );
virtual void changeEvent( QEvent * );
protected slots:
void play();

View File

@@ -92,7 +92,6 @@ private:
bool m_hasFocus;
static void elideText( QLabel *label, QString text );
bool isMaximized();
void adjustTitleBar();
private slots:

View File

@@ -39,7 +39,7 @@ public:
VstSyncController();
~VstSyncController();
void setAbsolutePosition( int ticks );
void setAbsolutePosition( double ticks );
void setPlaybackState( bool enabled )
{

View File

@@ -42,7 +42,7 @@
struct VstSyncData
{
bool isPlaying;
float ppqPos;
double ppqPos;
int timeSigNumer;
int timeSigDenom;
bool isCycle;

View File

@@ -275,7 +275,8 @@ void MidiExport::writePattern(MidiNoteVector &pat, QDomNode n,
// TODO interpret pan="0" fxch="0" pitchrange="1"
MidiNote mnote;
mnote.pitch = qMax(0, qMin(127, note.attribute("key", "0").toInt() + base_pitch));
mnote.volume = qMin(qRound(base_volume * LocaleHelper::toDouble(note.attribute("vol", "100"))), 127);
// Map from LMMS volume to MIDI velocity
mnote.volume = qMin(qRound(base_volume * LocaleHelper::toDouble(note.attribute("vol", "100")) * (127.0 / 200.0)), 127);
mnote.time = base_time + note.attribute("pos", "0").toInt();
mnote.duration = note.attribute("len", "0").toInt();
pat.push_back(mnote);

View File

@@ -428,7 +428,7 @@ bool MidiImport::readSMF( TrackContainer* tc )
Note n( (ticks < 1 ? 1 : ticks ),
noteEvt->get_start_time() * ticksPerBeat,
noteEvt->get_identifier() - 12,
noteEvt->get_loud());
noteEvt->get_loud() * (200.f / 127.f)); // Map from MIDI velocity to LMMS volume
ch->addNote( n );
}

View File

@@ -54,8 +54,10 @@ void Alg_atoms::expand()
maxlen += (maxlen >> 2); // add 25%
char **new_atoms = new Alg_attribute[maxlen];
// now do copy
memcpy(new_atoms, atoms, len * sizeof(Alg_attribute));
if (atoms) delete[] atoms;
if (atoms) {
memcpy(new_atoms, atoms, len * sizeof(Alg_attribute));
delete[] atoms;
}
atoms = new_atoms;
}

View File

@@ -90,7 +90,13 @@ void VstEffectControls::loadSettings( const QDomElement & _this )
knobFModel[ i ]->setInitValue(LocaleHelper::toFloat(s_dumpValues.at(2)));
}
connect( knobFModel[i], SIGNAL( dataChanged() ), this, SLOT( setParameter() ) );
#if QT_VERSION < 0x050000
connect( knobFModel[i], SIGNAL( dataChanged( Model * ) ),
this, SLOT( setParameter( Model * ) ), Qt::DirectConnection );
#else
connect( knobFModel[i], &FloatModel::dataChanged, this,
[this, i]() { setParameter( knobFModel[i] ); }, Qt::DirectConnection);
#endif
}
}
@@ -100,10 +106,8 @@ void VstEffectControls::loadSettings( const QDomElement & _this )
void VstEffectControls::setParameter( void )
void VstEffectControls::setParameter( Model * action )
{
Model *action = qobject_cast<Model *>(sender());
int knobUNID = action->displayName().toInt();
if ( m_effect->m_plugin != NULL ) {
@@ -377,9 +381,16 @@ manageVSTEffectView::manageVSTEffectView( VstEffect * _eff, VstEffectControls *
m_vi->knobFModel[ i ] = new FloatModel( LocaleHelper::toFloat(s_dumpValues.at(2)),
0.0f, 1.0f, 0.01f, _eff, tr( paramStr ) );
}
connect( m_vi->knobFModel[ i ], SIGNAL( dataChanged() ), this,
SLOT( setParameter() ) );
vstKnobs[ i ] ->setModel( m_vi->knobFModel[ i ] );
FloatModel * model = m_vi->knobFModel[i];
#if QT_VERSION < 0x050000
connect( model, SIGNAL( dataChanged( Model * ) ), this,
SLOT( setParameter( Model * ) ), Qt::DirectConnection );
#else
connect( model, &FloatModel::dataChanged, this,
[this, model]() { setParameter( model ); }, Qt::DirectConnection);
#endif
vstKnobs[ i ] ->setModel( model );
}
int i = 0;
@@ -472,10 +483,8 @@ void manageVSTEffectView::displayAutomatedOnly( void )
void manageVSTEffectView::setParameter( void )
void manageVSTEffectView::setParameter( Model * action )
{
Model *action = qobject_cast<Model *>(sender());
int knobUNID = action->displayName().toInt();
if ( m_effect->m_plugin != NULL ) {

View File

@@ -70,7 +70,7 @@ protected slots:
void rollPreset( void );
void rolrPreset( void );
void selPreset( void );
void setParameter( void );
void setParameter( Model * action );
protected:
virtual void paintEvent( QPaintEvent * _pe );
@@ -110,7 +110,7 @@ public:
protected slots:
void syncPlugin( void );
void displayAutomatedOnly( void );
void setParameter( void );
void setParameter( Model * action );
void closeWindow();
private:

View File

@@ -474,6 +474,7 @@ void bitInvaderView::modelChanged()
void bitInvaderView::sinWaveClicked()
{
m_graph->model()->clearInvisible();
m_graph->model()->setWaveToSine();
Engine::getSong()->setModified();
}
@@ -483,6 +484,7 @@ void bitInvaderView::sinWaveClicked()
void bitInvaderView::triangleWaveClicked()
{
m_graph->model()->clearInvisible();
m_graph->model()->setWaveToTriangle();
Engine::getSong()->setModified();
}
@@ -492,6 +494,7 @@ void bitInvaderView::triangleWaveClicked()
void bitInvaderView::sawWaveClicked()
{
m_graph->model()->clearInvisible();
m_graph->model()->setWaveToSaw();
Engine::getSong()->setModified();
}
@@ -501,6 +504,7 @@ void bitInvaderView::sawWaveClicked()
void bitInvaderView::sqrWaveClicked()
{
m_graph->model()->clearInvisible();
m_graph->model()->setWaveToSquare();
Engine::getSong()->setModified();
}
@@ -510,6 +514,7 @@ void bitInvaderView::sqrWaveClicked()
void bitInvaderView::noiseWaveClicked()
{
m_graph->model()->clearInvisible();
m_graph->model()->setWaveToNoise();
Engine::getSong()->setModified();
}
@@ -520,35 +525,12 @@ void bitInvaderView::noiseWaveClicked()
void bitInvaderView::usrWaveClicked()
{
QString fileName = m_graph->model()->setWaveToUser();
ToolTip::add( m_usrWaveBtn, fileName );
Engine::getSong()->setModified();
/*
m_graph->model()->setWaveToNoise();
Engine::getSong()->setModified();
// zero sample_shape
for (int i = 0; i < sample_length; i++)
if (!fileName.isEmpty())
{
sample_shape[i] = 0;
ToolTip::add(m_usrWaveBtn, fileName);
m_graph->model()->clearInvisible();
Engine::getSong()->setModified();
}
// load user shape
sampleBuffer buffer;
QString af = buffer.openAudioFile();
if ( af != "" )
{
buffer.setAudioFile( af );
// copy buffer data
sample_length = min( sample_length, static_cast<int>(
buffer.frames() ) );
for ( int i = 0; i < sample_length; i++ )
{
sample_shape[i] = (float)*buffer.data()[i];
}
}
sampleChanged();
*/
}

View File

@@ -65,7 +65,7 @@ PeakControllerEffect::PeakControllerEffect(
Effect( &peakcontrollereffect_plugin_descriptor, _parent, _key ),
m_effectId( rand() ),
m_peakControls( this ),
m_lastSample( m_peakControls.m_baseModel.value() ), //sets the value to the Peak Controller's Base value (rather than 0 like in previous versions)
m_lastSample( 0 ),
m_autoController( NULL )
{
m_autoController = new PeakController( Engine::getSong(), this );

View File

@@ -53,6 +53,7 @@ PeakControllerEffectControls( PeakControllerEffect * _eff ) :
void PeakControllerEffectControls::loadSettings( const QDomElement & _this )
{
m_baseModel.loadSettings( _this, "base" );
m_effect->m_lastSample = m_baseModel.value(); //Set initial Peak Controller output to Base
m_amountModel.loadSettings( _this, "amount" );
m_muteModel.loadSettings( _this, "mute" );

View File

@@ -114,6 +114,9 @@ public:
void createUI( QWidget *parent ) override
{
Q_UNUSED(parent);
if ( !hasEditor() ) {
return;
}
if ( embedMethod() != "none" ) {
m_pluginSubWindow.reset(new vstSubWin( gui->mainWindow()->workspace() ));
VstPlugin::createUI( m_pluginSubWindow.get() );
@@ -214,7 +217,13 @@ void vestigeInstrument::loadSettings( const QDomElement & _this )
knobFModel[ i ]->setInitValue(LocaleHelper::toFloat(s_dumpValues.at(2)));
}
connect( knobFModel[i], SIGNAL( dataChanged() ), this, SLOT( setParameter() ) );
#if QT_VERSION < 0x050000
connect( knobFModel[i], SIGNAL( dataChanged( Model * ) ),
this, SLOT( setParameter( Model * ) ), Qt::DirectConnection );
#else
connect( knobFModel[i], &FloatModel::dataChanged, this,
[this, i]() { setParameter( knobFModel[i] ); }, Qt::DirectConnection);
#endif
}
}
m_pluginMutex.unlock();
@@ -223,10 +232,8 @@ void vestigeInstrument::loadSettings( const QDomElement & _this )
void vestigeInstrument::setParameter( void )
void vestigeInstrument::setParameter( Model * action )
{
Model *action = qobject_cast<Model *>(sender());
int knobUNID = action->displayName().toInt();
if ( m_plugin != NULL ) {
@@ -969,8 +976,16 @@ manageVestigeInstrumentView::manageVestigeInstrumentView( Instrument * _instrume
m_vi->knobFModel[ i ] = new FloatModel( LocaleHelper::toFloat(s_dumpValues.at(2)),
0.0f, 1.0f, 0.01f, castModel<vestigeInstrument>(), tr( paramStr ) );
}
connect( m_vi->knobFModel[i], SIGNAL( dataChanged() ), this, SLOT( setParameter() ) );
vstKnobs[i] ->setModel( m_vi->knobFModel[i] );
FloatModel * model = m_vi->knobFModel[i];
#if QT_VERSION < 0x050000
connect( model, SIGNAL( dataChanged( Model * ) ), this,
SLOT( setParameter( Model * ) ), Qt::DirectConnection );
#else
connect( model, &FloatModel::dataChanged, this,
[this, model]() { setParameter( model ); }, Qt::DirectConnection);
#endif
vstKnobs[i] ->setModel( model );
}
int i = 0;
@@ -1101,10 +1116,8 @@ manageVestigeInstrumentView::~manageVestigeInstrumentView()
void manageVestigeInstrumentView::setParameter( void )
void manageVestigeInstrumentView::setParameter( Model * action )
{
Model *action = qobject_cast<Model *>(sender());
int knobUNID = action->displayName().toInt();
if ( m_vi->m_plugin != NULL ) {

View File

@@ -73,7 +73,7 @@ public:
virtual PluginView * instantiateView( QWidget * _parent );
protected slots:
void setParameter( void );
void setParameter( Model * action );
void handleConfigChange( QString cls, QString attr, QString value );
void reloadPlugin();
@@ -109,7 +109,7 @@ public:
protected slots:
void syncPlugin( void );
void displayAutomatedOnly( void );
void setParameter( void );
void setParameter( Model * action );
void closeWindow();

View File

@@ -65,6 +65,7 @@
# include <mutex>
#endif
#include <algorithm>
#include <vector>
#include <queue>
#include <string>
@@ -415,8 +416,8 @@ private:
// host to plugin synchronisation data structure
struct in
{
float lastppqPos;
float m_Timestamp;
double lastppqPos;
double m_Timestamp;
int32_t m_lastFlags;
} ;
@@ -913,6 +914,14 @@ void RemoteVstPlugin::process( const sampleFrame * _in, sampleFrame * _out )
static char eventsBuffer[sizeof( VstEvents ) + sizeof( VstMidiEvent * ) * MIDI_EVENT_BUFFER_COUNT];
static VstMidiEvent vme[MIDI_EVENT_BUFFER_COUNT];
// first sort events chronologically, since some plugins
// (e.g. Sinnah) can hang if they're out of order
std::stable_sort( m_midiEvents.begin(), m_midiEvents.end(),
[]( const VstMidiEvent &a, const VstMidiEvent &b )
{
return a.deltaFrames < b.deltaFrames;
} );
VstEvents* events = (VstEvents *) eventsBuffer;
events->reserved = 0;
events->numEvents = m_midiEvents.size();
@@ -1609,10 +1618,20 @@ intptr_t RemoteVstPlugin::hostCallback( AEffect * _effect, int32_t _opcode,
}
else if( __plugin->m_vstSyncData->isPlaying )
{
__plugin->m_in->lastppqPos += (
__plugin->m_vstSyncData->hasSHM ?
__plugin->m_vstSyncData->m_bpm :
__plugin->m_bpm ) / (float)10340;
if( __plugin->m_vstSyncData->hasSHM )
{
__plugin->m_in->lastppqPos +=
__plugin->m_vstSyncData->m_bpm / 60.0
* __plugin->m_vstSyncData->m_bufferSize
/ __plugin->m_vstSyncData->m_sampleRate;
}
else
{
__plugin->m_in->lastppqPos +=
__plugin->m_bpm / 60.0
* __plugin->bufferSize()
/ __plugin->sampleRate();
}
_timeInfo.ppqPos = __plugin->m_in->lastppqPos;
}
// _timeInfo.ppqPos = __plugin->m_vstSyncData->ppqPos;
@@ -1945,7 +1964,9 @@ DWORD WINAPI RemoteVstPlugin::processingThread( LPVOID _param )
RemotePluginClient::message m;
while( ( m = _this->receiveMessage() ).id != IdQuit )
{
if( m.id == IdStartProcessing || m.id == IdMidiEvent )
if( m.id == IdStartProcessing
|| m.id == IdMidiEvent
|| m.id == IdVstSetParameter )
{
_this->processMessage( m );
}

View File

@@ -163,6 +163,10 @@ SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
ADD_EXECUTABLE(RemoteZynAddSubFx RemoteZynAddSubFx.cpp "${WINRC}")
INSTALL(TARGETS RemoteZynAddSubFx RUNTIME DESTINATION "${PLUGIN_DIR}")
IF(LMMS_BUILD_WIN32)
SET_TARGET_PROPERTIES(RemoteZynAddSubFx PROPERTIES LINK_FLAGS "${LINK_FLAGS} -mwindows")
ENDIF(LMMS_BUILD_WIN32)
# Remove useless dependencies from FLTK. Use fltk-config to avoid static library
# in older environments
SET(FLTK_FILTERED_LDFLAGS ${FLTK_LIBRARIES})

View File

@@ -121,13 +121,20 @@ ZynAddSubFxInstrument::ZynAddSubFxInstrument(
{
initPlugin();
connect( &m_portamentoModel, SIGNAL( dataChanged() ), this, SLOT( updatePortamento() ) );
connect( &m_filterFreqModel, SIGNAL( dataChanged() ), this, SLOT( updateFilterFreq() ) );
connect( &m_filterQModel, SIGNAL( dataChanged() ), this, SLOT( updateFilterQ() ) );
connect( &m_bandwidthModel, SIGNAL( dataChanged() ), this, SLOT( updateBandwidth() ) );
connect( &m_fmGainModel, SIGNAL( dataChanged() ), this, SLOT( updateFmGain() ) );
connect( &m_resCenterFreqModel, SIGNAL( dataChanged() ), this, SLOT( updateResCenterFreq() ) );
connect( &m_resBandwidthModel, SIGNAL( dataChanged() ), this, SLOT( updateResBandwidth() ) );
connect( &m_portamentoModel, SIGNAL( dataChanged() ),
this, SLOT( updatePortamento() ), Qt::DirectConnection );
connect( &m_filterFreqModel, SIGNAL( dataChanged() ),
this, SLOT( updateFilterFreq() ), Qt::DirectConnection );
connect( &m_filterQModel, SIGNAL( dataChanged() ),
this, SLOT( updateFilterQ() ), Qt::DirectConnection );
connect( &m_bandwidthModel, SIGNAL( dataChanged() ),
this, SLOT( updateBandwidth() ), Qt::DirectConnection );
connect( &m_fmGainModel, SIGNAL( dataChanged() ),
this, SLOT( updateFmGain() ), Qt::DirectConnection );
connect( &m_resCenterFreqModel, SIGNAL( dataChanged() ),
this, SLOT( updateResCenterFreq() ), Qt::DirectConnection );
connect( &m_resBandwidthModel, SIGNAL( dataChanged() ),
this, SLOT( updateResBandwidth() ), Qt::DirectConnection );
// now we need a play-handle which cares for calling play()
InstrumentPlayHandle * iph = new InstrumentPlayHandle( this, _instrumentTrack );
@@ -137,7 +144,7 @@ ZynAddSubFxInstrument::ZynAddSubFxInstrument(
this, SLOT( reloadPlugin() ) );
connect( instrumentTrack()->pitchRangeModel(), SIGNAL( dataChanged() ),
this, SLOT( updatePitchRange() ) );
this, SLOT( updatePitchRange() ), Qt::DirectConnection );
}

View File

@@ -466,7 +466,8 @@ void AutomatableModel::linkModel( AutomatableModel* model )
if( !model->hasLinkedModels() )
{
QObject::connect( this, SIGNAL( dataChanged() ), model, SIGNAL( dataChanged() ) );
QObject::connect( this, SIGNAL( dataChanged() ),
model, SIGNAL( dataChanged() ), Qt::DirectConnection );
}
}
}
@@ -522,7 +523,8 @@ void AutomatableModel::setControllerConnection( ControllerConnection* c )
m_controllerConnection = c;
if( c )
{
QObject::connect( m_controllerConnection, SIGNAL( valueChanged() ), this, SIGNAL( dataChanged() ) );
QObject::connect( m_controllerConnection, SIGNAL( valueChanged() ),
this, SIGNAL( dataChanged() ), Qt::DirectConnection );
QObject::connect( m_controllerConnection, SIGNAL( destroyed() ), this, SLOT( unlinkControllerConnection() ) );
m_valueChanged = true;
emit dataChanged();

View File

@@ -772,6 +772,16 @@ void AutomationPattern::resolveAllIDs()
{
a->addObject( dynamic_cast<AutomatableModel *>( o ), false );
}
else
{
// FIXME: Remove this block once the automation system gets fixed
// This is a temporary fix for https://github.com/LMMS/lmms/issues/3781
o = Engine::projectJournal()->journallingObject(ProjectJournal::idFromSave(*k));
if( o && dynamic_cast<AutomatableModel *>( o ) )
{
a->addObject( dynamic_cast<AutomatableModel *>( o ), false );
}
}
}
a->m_idsToResolve.clear();
a->dataChanged();

View File

@@ -117,7 +117,7 @@ void ControllerConnection::setController( Controller * _controller )
{
_controller->addConnection( this );
QObject::connect( _controller, SIGNAL( valueChanged() ),
this, SIGNAL( valueChanged() ) );
this, SIGNAL( valueChanged() ), Qt::DirectConnection );
}
m_ownsController =

View File

@@ -27,6 +27,9 @@
#include "ValueBuffer.h"
static bool s_NaNHandler;
namespace MixHelpers
{
@@ -68,10 +71,24 @@ bool isSilent( const sampleFrame* src, int frames )
return true;
}
bool useNaNHandler()
{
return s_NaNHandler;
}
void setNaNHandler( bool use )
{
s_NaNHandler = use;
}
/*! \brief Function for sanitizing a buffer of infs/nans - returns true if those are found */
bool sanitize( sampleFrame * src, int frames )
{
if( !useNaNHandler() )
{
return false;
}
bool found = false;
for( int f = 0; f < frames; ++f )
{
@@ -79,12 +96,23 @@ bool sanitize( sampleFrame * src, int frames )
{
if( isinf( src[f][c] ) || isnan( src[f][c] ) )
{
src[f][c] = 0.0f;
#ifdef LMMS_DEBUG
printf("Bad data, clearing buffer. frame: ");
printf("%d: value %f\n", f, src[f][c]);
#endif
for( int f = 0; f < frames; ++f )
{
for( int c = 0; c < 2; ++c )
{
src[f][c] = 0.0f;
}
}
found = true;
return found;
}
else
{
src[f][c] = qBound( -4.0f, src[f][c], 4.0f );
src[f][c] = qBound( -1000.0f, src[f][c], 1000.0f );
}
}
}
@@ -168,6 +196,13 @@ void addMultipliedByBuffers( sampleFrame* dst, const sampleFrame* src, ValueBuff
void addSanitizedMultipliedByBuffer( sampleFrame* dst, const sampleFrame* src, float coeffSrc, ValueBuffer * coeffSrcBuf, int frames )
{
if ( !useNaNHandler() )
{
addMultipliedByBuffer( dst, src, coeffSrc, coeffSrcBuf,
frames );
return;
}
for( int f = 0; f < frames; ++f )
{
dst[f][0] += ( isinf( src[f][0] ) || isnan( src[f][0] ) ) ? 0.0f : src[f][0] * coeffSrc * coeffSrcBuf->values()[f];
@@ -177,6 +212,13 @@ void addSanitizedMultipliedByBuffer( sampleFrame* dst, const sampleFrame* src, f
void addSanitizedMultipliedByBuffers( sampleFrame* dst, const sampleFrame* src, ValueBuffer * coeffSrcBuf1, ValueBuffer * coeffSrcBuf2, int frames )
{
if ( !useNaNHandler() )
{
addMultipliedByBuffers( dst, src, coeffSrcBuf1, coeffSrcBuf2,
frames );
return;
}
for( int f = 0; f < frames; ++f )
{
dst[f][0] += ( isinf( src[f][0] ) || isnan( src[f][0] ) )
@@ -205,6 +247,12 @@ struct AddSanitizedMultipliedOp
void addSanitizedMultiplied( sampleFrame* dst, const sampleFrame* src, float coeffSrc, int frames )
{
if ( !useNaNHandler() )
{
addMultiplied( dst, src, coeffSrc, frames );
return;
}
run<>( dst, src, frames, AddSanitizedMultipliedOp(coeffSrc) );
}

View File

@@ -177,11 +177,6 @@ void NotePlayHandle::setVolume( volume_t _volume )
void NotePlayHandle::setPanning( panning_t panning )
{
Note::setPanning( panning );
MidiEvent event( MidiMetaEvent, midiChannel(), midiKey(), panningToMidi( panning ) );
event.setMetaEvent( MidiNotePanning );
m_instrumentTrack->processOutEvent( event );
}

View File

@@ -164,6 +164,11 @@ jo_id_t ProjectJournal::idToSave( jo_id_t id )
return id & ~EO_ID_MSB;
}
jo_id_t ProjectJournal::idFromSave( jo_id_t id )
{
return id | EO_ID_MSB;
}

View File

@@ -55,7 +55,10 @@ ProcessWatcher::ProcessWatcher( RemotePlugin * _p ) :
void ProcessWatcher::run()
{
while( !m_quit && (m_plugin->isRunning() || m_plugin->messagesLeft()) )
m_plugin->m_process.start( m_plugin->m_exec, m_plugin->m_args );
exec();
m_plugin->m_process.moveToThread( m_plugin->thread() );
while( !m_quit && m_plugin->messagesLeft() )
{
msleep( 200 );
}
@@ -123,9 +126,13 @@ RemotePlugin::RemotePlugin() :
#endif
connect( &m_process, SIGNAL( finished( int, QProcess::ExitStatus ) ),
this, SLOT( processFinished( int, QProcess::ExitStatus ) ) );
this, SLOT( processFinished( int, QProcess::ExitStatus ) ),
Qt::DirectConnection );
connect( &m_process, SIGNAL( errorOccurred( QProcess::ProcessError ) ),
this, SLOT( processErrored( QProcess::ProcessError ) ) );
this, SLOT( processErrored( QProcess::ProcessError ) ),
Qt::DirectConnection );
connect( &m_process, SIGNAL( finished( int, QProcess::ExitStatus ) ),
&m_watcher, SLOT( quit() ), Qt::DirectConnection );
}
@@ -133,7 +140,7 @@ RemotePlugin::RemotePlugin() :
RemotePlugin::~RemotePlugin()
{
m_watcher.quit();
m_watcher.stop();
m_watcher.wait();
if( m_failed == false )
@@ -207,6 +214,11 @@ bool RemotePlugin::init(const QString &pluginExecutable,
return failed();
}
// ensure the watcher is ready in case we're running again
// (e.g. 32-bit VST plugins on Windows)
m_watcher.wait();
m_watcher.reset();
QStringList args;
#ifdef SYNC_WITH_SHM_FIFO
// swap in and out for bidirectional communication
@@ -219,7 +231,10 @@ bool RemotePlugin::init(const QString &pluginExecutable,
#ifndef DEBUG_REMOTE_PLUGIN
m_process.setProcessChannelMode( QProcess::ForwardedChannels );
m_process.setWorkingDirectory( QCoreApplication::applicationDirPath() );
m_process.start( exec, args );
m_exec = exec;
m_args = args;
// we start the process on the watcher thread to work around QTBUG-8819
m_process.moveToThread( &m_watcher );
m_watcher.start( QThread::LowestPriority );
#else
qDebug() << exec << args;

View File

@@ -103,7 +103,7 @@ void RenderManager::renderTracks()
Track* tk = (*it);
Track::TrackTypes type = tk->type();
// Don't mute automation tracks
// Don't render automation tracks
if ( tk->isMuted() == false &&
( type == Track::InstrumentTrack || type == Track::SampleTrack ) )
{
@@ -115,7 +115,11 @@ void RenderManager::renderTracks()
for( auto it = t2.begin(); it != t2.end(); ++it )
{
Track* tk = (*it);
if ( tk->isMuted() == false )
Track::TrackTypes type = tk->type();
// Don't render automation tracks
if ( tk->isMuted() == false &&
( type == Track::InstrumentTrack || type == Track::SampleTrack ) )
{
m_unmuted.push_back(tk);
}

View File

@@ -260,8 +260,6 @@ void Song::processNextBuffer()
m_playPos[m_playMode].setTicks(
tl->loopBegin().getTicks() );
m_vstSyncController.setAbsolutePosition(
tl->loopBegin().getTicks() );
m_vstSyncController.setPlaybackJumped( true );
emit updateSampleTracks();
@@ -288,8 +286,6 @@ void Song::processNextBuffer()
int ticks = m_playPos[m_playMode].getTicks() +
( int )( currentFrame / framesPerTick );
m_vstSyncController.setAbsolutePosition( ticks );
// did we play a whole tact?
if( ticks >= MidiTime::ticksPerTact() )
{
@@ -326,7 +322,6 @@ void Song::processNextBuffer()
// wrap milli second counter
setToTimeByTicks(ticks);
m_vstSyncController.setAbsolutePosition( ticks );
m_vstSyncController.setPlaybackJumped( true );
}
}
@@ -348,7 +343,6 @@ void Song::processNextBuffer()
m_playPos[m_playMode].setTicks( ticks );
setToTime(tl->loopBegin());
m_vstSyncController.setAbsolutePosition( ticks );
m_vstSyncController.setPlaybackJumped( true );
emit updateSampleTracks();
@@ -363,7 +357,17 @@ void Song::processNextBuffer()
m_playPos[m_playMode].setCurrentFrame( currentFrame );
}
f_cnt_t framesToPlay =
if( framesPlayed == 0 )
{
// update VST sync position after we've corrected frame/
// tick count but before actually playing any frames
m_vstSyncController.setAbsolutePosition(
m_playPos[m_playMode].getTicks()
+ m_playPos[m_playMode].currentFrame()
/ (double) framesPerTick );
}
f_cnt_t framesToPlay =
Engine::mixer()->framesPerPeriod() - framesPlayed;
f_cnt_t framesLeft = ( f_cnt_t )framesPerTick -
@@ -718,7 +722,10 @@ void Song::stop()
m_playPos[m_playMode].setCurrentFrame( 0 );
m_vstSyncController.setPlaybackState( m_exporting );
m_vstSyncController.setAbsolutePosition( m_playPos[m_playMode].getTicks() );
m_vstSyncController.setAbsolutePosition(
m_playPos[m_playMode].getTicks()
+ m_playPos[m_playMode].currentFrame()
/ (double) Engine::framesPerTick() );
// remove all note-play-handles that are active
Engine::mixer()->clear();

View File

@@ -909,10 +909,18 @@ void TrackContentObjectView::mouseMoveEvent( QMouseEvent * me )
else if( m_action == MoveSelection )
{
const int dx = me->x() - m_initialMousePos.x();
const bool snap = !(me->modifiers() & Qt::ControlModifier) &&
me->button() == Qt::NoButton;
QVector<selectableObject *> so =
m_trackView->trackContainerView()->selectedObjects();
QVector<TrackContentObject *> tcos;
MidiTime smallest_pos, t;
int smallestPos = 0;
MidiTime dtick = MidiTime( static_cast<int>( dx *
MidiTime::ticksPerTact() / ppt ) );
if( snap )
{
dtick = dtick.toNearestTact();
}
// find out smallest position of all selected objects for not
// moving an object before zero
for( QVector<selectableObject *>::iterator it = so.begin();
@@ -926,23 +934,18 @@ void TrackContentObjectView::mouseMoveEvent( QMouseEvent * me )
}
TrackContentObject * tco = tcov->m_tco;
tcos.push_back( tco );
smallest_pos = qMin<int>( smallest_pos,
(int)tco->startPosition() +
static_cast<int>( dx *
MidiTime::ticksPerTact() / ppt ) );
smallestPos = qMin<int>( smallestPos,
(int)tco->startPosition() + dtick );
}
dtick -= smallestPos;
if( snap )
{
dtick = dtick.toAbsoluteTact(); // round toward 0
}
for( QVector<TrackContentObject *>::iterator it = tcos.begin();
it != tcos.end(); ++it )
{
t = ( *it )->startPosition() +
static_cast<int>( dx *MidiTime::ticksPerTact() /
ppt )-smallest_pos;
if( ! ( me->modifiers() & Qt::ControlModifier )
&& me->button() == Qt::NoButton )
{
t = t.toNearestTact();
}
( *it )->movePosition( t );
( *it )->movePosition( ( *it )->startPosition() + dtick );
}
}
else if( m_action == Resize || m_action == ResizeLeft )

View File

@@ -136,12 +136,12 @@ VstSyncController::~VstSyncController()
void VstSyncController::setAbsolutePosition( int ticks )
void VstSyncController::setAbsolutePosition( double ticks )
{
#ifdef VST_SNC_LATENCY
m_syncData->ppqPos = ( ( ticks + 0 ) / (float)48 ) - m_syncData->m_latency;
m_syncData->ppqPos = ( ( ticks + 0 ) / 48.0 ) - m_syncData->m_latency;
#else
m_syncData->ppqPos = ( ( ticks + 0 ) / (float)48 );
m_syncData->ppqPos = ( ( ticks + 0 ) / 48.0 );
#endif
}

View File

@@ -118,7 +118,9 @@ void AudioPort::doProcessing()
{
if( ph->buffer() )
{
if( ph->usesBuffer() )
if( ph->usesBuffer()
&& ( ph->type() == PlayHandle::TypeNotePlayHandle
|| !MixHelpers::isSilent( ph->buffer(), fpp ) ) )
{
m_bufferUsage = true;
MixHelpers::add( m_portBuffer, ph->buffer(), fpp );

View File

@@ -27,6 +27,10 @@
#include "AudioPortAudio.h"
#ifndef LMMS_HAVE_PORTAUDIO
void AudioPortAudioSetupUtil::updateBackends()
{
}
void AudioPortAudioSetupUtil::updateDevices()
{
}
@@ -328,6 +332,28 @@ int AudioPortAudio::_process_callback(
void AudioPortAudioSetupUtil::updateBackends()
{
PaError err = Pa_Initialize();
if( err != paNoError ) {
printf( "Couldn't initialize PortAudio: %s\n", Pa_GetErrorText( err ) );
return;
}
const PaHostApiInfo * hi;
for( int i = 0; i < Pa_GetHostApiCount(); ++i )
{
hi = Pa_GetHostApiInfo( i );
m_backendModel.addItem( hi->name );
}
Pa_Terminate();
}
void AudioPortAudioSetupUtil::updateDevices()
{
PaError err = Pa_Initialize();
@@ -409,37 +435,6 @@ AudioPortAudio::setupWidget::setupWidget( QWidget * _parent ) :
m_channels->setLabel( tr( "CHANNELS" ) );
m_channels->move( 308, 20 );*/
// Setup models
PaError err = Pa_Initialize();
if( err != paNoError ) {
printf( "Couldn't initialize PortAudio: %s\n", Pa_GetErrorText( err ) );
return;
}
// todo: setup backend model
const PaHostApiInfo * hi;
for( int i = 0; i < Pa_GetHostApiCount(); ++i )
{
hi = Pa_GetHostApiInfo( i );
m_setupUtil.m_backendModel.addItem( hi->name );
}
Pa_Terminate();
const QString& backend = ConfigManager::inst()->value( "audioportaudio",
"backend" );
const QString& device = ConfigManager::inst()->value( "audioportaudio",
"device" );
int i = qMax( 0, m_setupUtil.m_backendModel.findText( backend ) );
m_setupUtil.m_backendModel.setValue( i );
m_setupUtil.updateDevices();
i = qMax( 0, m_setupUtil.m_deviceModel.findText( device ) );
m_setupUtil.m_deviceModel.setValue( i );
connect( &m_setupUtil.m_backendModel, SIGNAL( dataChanged() ),
&m_setupUtil, SLOT( updateDevices() ) );
@@ -478,6 +473,33 @@ void AudioPortAudio::setupWidget::saveSettings()
}
void AudioPortAudio::setupWidget::show()
{
if( m_setupUtil.m_backendModel.size() == 0 )
{
// populate the backend model the first time we are shown
m_setupUtil.updateBackends();
const QString& backend = ConfigManager::inst()->value(
"audioportaudio", "backend" );
const QString& device = ConfigManager::inst()->value(
"audioportaudio", "device" );
int i = qMax( 0, m_setupUtil.m_backendModel.findText( backend ) );
m_setupUtil.m_backendModel.setValue( i );
m_setupUtil.updateDevices();
i = qMax( 0, m_setupUtil.m_deviceModel.findText( device ) );
m_setupUtil.m_deviceModel.setValue( i );
}
AudioDeviceSetupWidget::show();
}
#endif

View File

@@ -65,6 +65,7 @@
#include "GuiApplication.h"
#include "ImportFilter.h"
#include "MainWindow.h"
#include "MixHelpers.h"
#include "OutputSettings.h"
#include "ProjectRenderer.h"
#include "RenderManager.h"
@@ -343,7 +344,13 @@ int main( int argc, char * * argv )
return EXIT_FAILURE;
}
#endif
#ifdef LMMS_BUILD_LINUX
// don't let OS steal the menu bar. FIXME: only effective on Qt4
QCoreApplication::setAttribute( Qt::AA_DontUseNativeMenuBar );
#endif
#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
QCoreApplication * app = coreOnly ?
new QCoreApplication( argc, argv ) :
new MainApplication( argc, argv );
@@ -688,6 +695,10 @@ int main( int argc, char * * argv )
ConfigManager::inst()->loadConfigFile(configFile);
// Hidden settings
MixHelpers::setNaNHandler( ConfigManager::inst()->value( "app",
"nanhandler", "1" ).toInt() );
// set language
QString pos = ConfigManager::inst()->value( "app", "language" );
if( pos.isEmpty() )

View File

@@ -73,7 +73,7 @@ FxMixerView::FxMixerView() :
// Set margins
ml->setContentsMargins( 0, 4, 0, 0 );
// Channel area
m_channelAreaWidget = new QWidget;
chLayout = new QHBoxLayout( m_channelAreaWidget );
@@ -138,9 +138,9 @@ FxMixerView::FxMixerView() :
ml->addWidget( newChannelBtn, 0, Qt::AlignTop );
// add the stacked layout for the effect racks of fx channels
// add the stacked layout for the effect racks of fx channels
ml->addWidget( m_racksWidget, 0, Qt::AlignTop | Qt::AlignRight );
setCurrentFxLine( m_fxChannelViews[0]->m_fxLine );
setLayout( ml );
@@ -219,10 +219,10 @@ void FxMixerView::refreshDisplay()
chLayout->addWidget(m_fxChannelViews[i]->m_fxLine);
m_racksLayout->addWidget( m_fxChannelViews[i]->m_rackView );
}
// set selected fx line to 0
setCurrentFxLine( 0 );
// update all fx lines
for( int i = 0; i < m_fxChannelViews.size(); ++i )
{
@@ -308,7 +308,7 @@ FxMixerView::FxChannelView::FxChannelView(QWidget * _parent, FxMixerView * _mv,
connect(&fxChannel->m_soloModel, SIGNAL( dataChanged() ),
_mv, SLOT ( toggledSolo() ) );
ToolTip::add( m_soloBtn, tr( "Solo FX channel" ) );
// Create EffectRack for the channel
m_rackView = new EffectRackView( &fxChannel->m_fxChain, _mv->m_racksWidget );
m_rackView->setFixedSize( 245, FxLine::FxLineHeight );
@@ -354,6 +354,8 @@ void FxMixerView::updateFxLine(int index)
// does current channel send to this channel?
int selIndex = m_currentFxLine->channelIndex();
FxLine * thisLine = m_fxChannelViews[index]->m_fxLine;
thisLine->setToolTip( Engine::fxMixer()->effectChannel( index )->m_name );
FloatModel * sendModel = mix->channelSendModel(selIndex, index);
if( sendModel == NULL )
{

View File

@@ -55,11 +55,6 @@ GuiApplication* GuiApplication::instance()
GuiApplication::GuiApplication()
{
// enable HiDPI scaling before showing anything (Qt 5.6+ only)
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling, true);
#endif
// prompt the user to create the LMMS working directory (e.g. ~/Documents/lmms) if it doesn't exist
if ( !ConfigManager::inst()->hasWorkingDir() &&
QMessageBox::question( NULL,

View File

@@ -100,6 +100,8 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) :
"disablebackup" ).toInt() ),
m_openLastProject( ConfigManager::inst()->value( "app",
"openlastproject" ).toInt() ),
m_NaNHandler( ConfigManager::inst()->value( "app",
"nanhandler", "1" ).toInt() ),
m_hqAudioDev( ConfigManager::inst()->value( "mixer",
"hqaudio" ).toInt() ),
m_lang( ConfigManager::inst()->value( "app",
@@ -128,7 +130,7 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) :
m_compactTrackButtons( ConfigManager::inst()->value( "ui",
"compacttrackbuttons" ).toInt() ),
m_syncVSTPlugins( ConfigManager::inst()->value( "ui",
"syncvstplugins" ).toInt() ),
"syncvstplugins", "1" ).toInt() ),
m_animateAFP(ConfigManager::inst()->value( "ui",
"animateafp", "1" ).toInt() ),
m_printNoteLabels(ConfigManager::inst()->value( "ui",
@@ -136,7 +138,7 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) :
m_displayWaveform(ConfigManager::inst()->value( "ui",
"displaywaveform").toInt() ),
m_disableAutoQuit(ConfigManager::inst()->value( "ui",
"disableautoquit").toInt() ),
"disableautoquit", "1" ).toInt() ),
m_vstEmbedMethod( ConfigManager::inst()->vstEmbedMethod() )
{
setWindowIcon( embed::getIconPixmap( "setup_general" ) );
@@ -247,6 +249,15 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) :
misc_tw->setFixedHeight( YDelta*labelNumber + HeaderSize );
// Advanced setting, hidden for now
if( false )
{
LedCheckBox * useNaNHandler = new LedCheckBox(
tr( "Use built-in NaN handler" ),
misc_tw );
useNaNHandler->setChecked( m_NaNHandler );
}
TabWidget* embed_tw = new TabWidget( tr( "PLUGIN EMBEDDING" ), general);
embed_tw->setFixedHeight( 48 );
m_vstEmbedComboBox = new QComboBox( embed_tw );
@@ -815,6 +826,8 @@ void SetupDialog::accept()
QString::number( !m_disableBackup ) );
ConfigManager::inst()->setValue( "app", "openlastproject",
QString::number( m_openLastProject ) );
ConfigManager::inst()->setValue( "app", "nanhandler",
QString::number( m_NaNHandler ) );
ConfigManager::inst()->setValue( "mixer", "hqaudio",
QString::number( m_hqAudioDev ) );
ConfigManager::inst()->setValue( "ui", "smoothscroll",

View File

@@ -174,32 +174,6 @@ void SubWindow::elideText( QLabel *label, QString text )
/**
* @brief SubWindow::isMaximized
*
* This function checks if the subwindow is maximized.
* QMdiSubWindow::isMaximized() doesn't work on MacOS.
* Therefore we need our own implementation for checking this
* @return true if the subwindow is maximized at the moment.
* false if it's not.
*/
bool SubWindow::isMaximized()
{
#ifdef LMMS_BUILD_APPLE
// check if subwindow size is identical to the MdiArea size, accounting for scrollbars
int hScrollBarHeight = mdiArea()->horizontalScrollBar()->isVisible() ? mdiArea()->horizontalScrollBar()->size().height() : 0;
int vScrollBarWidth = mdiArea()->verticalScrollBar()->isVisible() ? mdiArea()->verticalScrollBar()->size().width() : 0;
QSize areaSize( this->mdiArea()->size().width() - vScrollBarWidth, this->mdiArea()->size().height() - hScrollBarHeight );
return areaSize == this->size();
#else
return QMdiSubWindow::isMaximized();
#endif
}
/**
* @brief SubWindow::getTrueNormalGeometry
*
@@ -388,8 +362,11 @@ void SubWindow::focusChanged( QMdiSubWindow *subWindow )
*/
void SubWindow::resizeEvent( QResizeEvent * event )
{
adjustTitleBar();
// When the parent QMdiArea gets resized, maximized subwindows also gets resized, if any.
// In that case, we should call QMdiSubWindow::resizeEvent first
// to ensure we get the correct window state.
QMdiSubWindow::resizeEvent( event );
adjustTitleBar();
// if the window was resized and ISN'T minimized/maximized/fullscreen,
// then save the current size

View File

@@ -89,7 +89,7 @@ TimeLineWidget::TimeLineWidget( const int xoff, const int yoff, const float ppt,
QTimer * updateTimer = new QTimer( this );
connect( updateTimer, SIGNAL( timeout() ),
this, SLOT( updatePosition() ) );
updateTimer->start( 50 );
updateTimer->start( 1000 / 60 ); // 60 fps
connect( Engine::getSong(), SIGNAL( timeSignatureChanged( int,int ) ),
this, SLOT( update() ) );
}

View File

@@ -1076,6 +1076,7 @@ void PianoRoll::shiftSemiTone( int amount ) // shift notes by amount semitones
{
if (!hasValidPattern()) {return;}
m_pattern->addJournalCheckPoint();
bool useAllNotes = ! isSelection();
for( Note *note : m_pattern->notes() )
{
@@ -1102,6 +1103,7 @@ void PianoRoll::shiftPos( int amount ) //shift notes pos by amount
{
if (!hasValidPattern()) {return;}
m_pattern->addJournalCheckPoint();
bool useAllNotes = ! isSelection();
bool first = true;

View File

@@ -746,6 +746,16 @@ void SongEditorWindow::resizeEvent(QResizeEvent *event)
}
void SongEditorWindow::changeEvent(QEvent *event)
{
QWidget::changeEvent(event);
if (event->type() == QEvent::WindowStateChange)
{
m_editor->realignTracks();
}
}
void SongEditorWindow::play()
{
emit playTriggered();

View File

@@ -70,14 +70,14 @@ EffectView::EffectView( Effect * _model, QWidget * _parent ) :
m_autoQuit = new TempoSyncKnob( knobBright_26, this );
m_autoQuit->setLabel( tr( "DECAY" ) );
m_autoQuit->move( 60, 5 );
m_autoQuit->setEnabled( isEnabled );
m_autoQuit->setEnabled( isEnabled && !effect()->m_autoQuitDisabled );
m_autoQuit->setHintText( tr( "Time:" ), "ms" );
m_gate = new Knob( knobBright_26, this );
m_gate->setLabel( tr( "GATE" ) );
m_gate->move( 93, 5 );
m_gate->setEnabled( isEnabled );
m_gate->setEnabled( isEnabled && !effect()->m_autoQuitDisabled );
m_gate->setHintText( tr( "Gate:" ), "" );

View File

@@ -419,9 +419,9 @@ void EnvelopeAndLfoView::paintEvent( QPaintEvent * )
p.fillRect( x5, y_base - 1, 2, 2, end_points_color );
int LFO_GRAPH_W = s_lfoGraph->width() - 6; // substract border
int LFO_GRAPH_W = s_lfoGraph->width() - 3; // substract border
int LFO_GRAPH_H = s_lfoGraph->height() - 6; // substract border
int graph_x_base = LFO_GRAPH_X + 3;
int graph_x_base = LFO_GRAPH_X + 2;
int graph_y_base = LFO_GRAPH_Y + 3 + LFO_GRAPH_H / 2;
const float frames_for_graph = SECS_PER_LFO_OSCILLATION *

View File

@@ -720,6 +720,15 @@ void graphModel::clear()
}
// Clear any part of the graph that isn't displayed
void graphModel::clearInvisible()
{
const int graph_length = length();
const int full_graph_length = m_samples.size();
for( int i = graph_length; i < full_graph_length; i++ )
m_samples[i] = 0;
emit samplesChanged( graph_length, full_graph_length - 1 );
}
void graphModel::drawSampleAt( int x, float val )
{

View File

@@ -126,10 +126,14 @@ InstrumentTrack::InstrumentTrack( TrackContainer* tc ) :
setName( tr( "Default preset" ) );
connect( &m_baseNoteModel, SIGNAL( dataChanged() ), this, SLOT( updateBaseNote() ) );
connect( &m_pitchModel, SIGNAL( dataChanged() ), this, SLOT( updatePitch() ) );
connect( &m_pitchRangeModel, SIGNAL( dataChanged() ), this, SLOT( updatePitchRange() ) );
connect( &m_effectChannelModel, SIGNAL( dataChanged() ), this, SLOT( updateEffectChannel() ) );
connect( &m_baseNoteModel, SIGNAL( dataChanged() ),
this, SLOT( updateBaseNote() ), Qt::DirectConnection );
connect( &m_pitchModel, SIGNAL( dataChanged() ),
this, SLOT( updatePitch() ), Qt::DirectConnection );
connect( &m_pitchRangeModel, SIGNAL( dataChanged() ),
this, SLOT( updatePitchRange() ), Qt::DirectConnection );
connect( &m_effectChannelModel, SIGNAL( dataChanged() ),
this, SLOT( updateEffectChannel() ), Qt::DirectConnection );
}