Compare commits

...

58 Commits

Author SHA1 Message Date
Hyunjin Song
55eb831507 Bump version to 1.2.0-rc8 2019-02-19 10:53:42 +09:00
Hyunjin Song
97e738aa42 AppImage: bundle JACK fallback library correctly 2019-02-19 10:51:43 +09:00
liushuyu
71dbfb5297 i18n: pull from Transifex 2019-02-18 16:42:03 -07:00
Dominic Clark
505c642fbc Bring back PortAudio support on Windows (#4770)
Population of the PortAudio setup widget has been delayed until it is shown, as it was causing crashes on some systems.
2019-02-17 20:07:40 +01:00
Douglas
8d707df171 Fix Bitinvader waveform cutoff behavior 2019-02-15 11:31:01 +09:00
Hyunjin Song
fcacf44375 Ensure the restore button of a subwindow shows up correctly (#4819)
* SubWindow: ensure the restore button shows up correctly
* Remove old workaround for the maximize behavior on Mac
2019-02-12 05:27:08 +00:00
Javier Serrano Polo
e94d1c91e9 Move QT_X11_NO_NATIVE_MENUBAR to code (#4818)
Set Qt::AA_DontUseNativeMenuBar
Remove QT_X11_NO_NATIVE_MENUBAR from desktop launcher
2019-02-11 19:03:50 +00:00
Hubert Figuière
bbedfa9ec5 Fix Linux HiDPI handling
Fix HiDPI order of operations, remove shortcut technique
2019-02-09 04:41:24 +00:00
Javier Serrano Polo
3c88541345 Follow instructions from cartr/homebrew-qt4 (#4815) 2019-02-07 13:02:34 -05:00
Dominic Clark
c907fcdca5 Don't let silent instruments wake up sleeping effects (#4792) 2019-02-06 19:25:11 +01:00
Johannes Lorenz
d9b5ee03fe Fix CI by reverting rpmalloc 2019-02-02 11:09:16 +01:00
Javier Serrano Polo
b28d405240 Disable built-in NaN handler through hidden setting (#4787)
* Disable built-in NaN handler through hidden setting

* Reuse code
2019-01-31 23:12:45 +01:00
Johannes Lorenz
0a47b0c8cd Fixes #4752: Update rpmalloc 2019-01-30 22:39:23 +01:00
Johannes Lorenz
42df251c66 Fix address in doc/AUTHORS
[ci skip]
2019-01-30 22:18:15 +01:00
Johannes Lorenz
fdccb38989 Fixes #4778: Update mailmap
[ci skip]
2019-01-30 21:56:32 +01:00
Oskar Wallgren
8618ab5d8f Increase forced clipping level 2019-01-28 19:12:06 +01:00
Hyunjin Song
c1ae1ed5f4 MIDI import/export: map note volume and MIDI velocity with their full range (#4785)
* MIDI export: map volume to MIDI velocity correctly

* MIDI import: map MIDI velocity to note volume with full range
2019-01-21 18:49:25 +01:00
Oskar Wallgren
6df6f12a3d Pianoroll - Add checkpoint before moving notes 2019-01-20 14:33:16 +01:00
Oskar Wallgren
dd99f3a7c4 Improve handling of nan/inf (#4743)
* If we find NaN/inf, we declare the whole buffer bad and set it to 0.0f. This
 is because the noise leading up to, or coming from, an infinite or NaN value
 is often very large and will create problems later in the sound chain. Especially
 if it hits a delay based fx with feedback.

 * We bump the clipping level to +/-10.0f.
2019-01-20 11:47:22 +01:00
Dominic Clark
1faaf008c8 Don't memcpy null pointer 2019-01-19 16:29:15 +00:00
Dominic Clark
227e88a347 Fix file extension list in translations 2019-01-19 16:29:15 +00:00
Dominic Clark
79374b3a0f Link RemoteZynAddSubFx with -mwindows 2019-01-19 16:29:15 +00:00
Dominic Clark
69a51eb28b Enable VST sync by default 2019-01-19 16:29:15 +00:00
Douglas
1404b723b5 Initialize peak controller last sample with base value fix (Stable 1.2) (#4699) 2019-01-16 19:59:40 +00:00
Javier Serrano Polo
8dea34e1b8 Do not depend on Git history, use data from 2019-01-07 (#4763) 2019-01-16 03:08:14 +01:00
Javier Serrano Polo
e074841d44 Fix before_deploy (#4764) 2019-01-14 09:47:34 +01:00
Tres Finocchiaro
d9f5e8a6df Fix left 1px lfo graph
Closes #4597, supersedes #4613
2019-01-12 23:17:24 -05:00
Tres Finocchiaro
f382e5e36f Fix builds on macOS Mojave 10.14 (#4767) 2019-01-10 23:43:00 -05:00
T0NIT0 RMX
e2de0ece8c Fix infinite MIDI note with VST made in Cabbage (LMMS#4380) (#4766) 2019-01-10 20:00:40 +01:00
Hyunjin Song
2ee02d97cb Keep off-grid position of TCOs on group moving (#4262) 2019-01-06 19:21:35 +09:00
Javier Serrano Polo
7f0593c601 Add source build artifact (#4744) 2019-01-03 21:44:49 +01:00
Oskar Wallgren
4c7ca3972c Don't render Automation tracks in the Beat/Bassline (#4747) 2018-12-31 15:50:57 +01:00
Oskar Wallgren
a3ede058cd FX autoquit disabled by default (#4378)
Really short notes doesn't work well with delay based effects with the default
decay settings of the FX autoquit system where the effect can cut out. Set
autoquit as disabled by default.
Decay and Gate knobs are now also disabled when autoquit is disabled.
2018-12-31 15:50:11 +01:00
Javier Serrano Polo
4d2e89bee2 Add Debian sid Clang build pass (#4735) 2018-12-27 20:15:42 +01:00
xy124
dd6d4a552b Fix broken FxLine tool tips (#3321) 2018-12-24 13:42:34 +01:00
Hyunjin Song
e1d9d899fd Fix lost control links in copied automation patterns (#4723)
This hack should be removed once the automation system gets fixed.
2018-12-22 11:37:34 +09:00
Javier Serrano Polo
642b5e7d04 Add Debian sid i386 build pass (#4727) 2018-12-19 12:45:33 +01:00
Javier Serrano Polo
698c39d385 Add Debian sid build pass (#4707)
* Add Debian sid build pass

* Update file locations and copyright

* Use ccache

* Redirect within sudo

* Work around a pbuilder bug which breaks ccache

* Debian: enable parallel builds

* Travis: Debian: fix caching

* Fix shellcheck warnings
2018-12-09 11:19:15 +01:00
Dominic Clark
9c9290eeeb Support more than 62 simultaneous VST plugins for Qt<5.10 2018-12-08 00:30:45 +01:00
Dominic Clark
614bca7f04 Make ppqPos in VST sync sample accurate 2018-12-08 00:30:45 +01:00
Dominic Clark
3a94ed3f3f Fix occasional Sinnah hang 2018-12-08 00:30:45 +01:00
Dominic Clark
277e8b6444 Don't create MDI subwindow for VSTi without GUI 2018-12-08 00:30:45 +01:00
Javier Serrano Polo
c3b07a5092 New pixmap as per #4519 (#4708) 2018-11-16 21:45:19 +01:00
Javier Serrano Polo
ff060982ac Add initial Debian packaging for stable-1.2 (#4697)
* Add initial Debian packaging for stable-1.2

* Drop Debian menu entry
2018-11-14 14:01:00 +01:00
Dominic Clark
2070ef21f5 Handle automation on processing thread (#4692) 2018-11-13 07:24:08 +09:00
Karmo Rosental
a8828d332c Update TimeLineWidget 60 times per second (#4703)
In addition to #4570.
2018-11-09 16:20:38 +09:00
Hyunjin Song
86f9a75d98 Fix song editor visualization after maximizing (#4698) 2018-11-07 13:41:03 +09:00
Hyunjin Song
d8fb07ff52 Fix minor glitches with sample tracks (#4666)
Switches some signal-slot connections to Qt::DirectConnection.
Now LMMS can handle loop points correctly and export samples without glitches.
Also tweaks some Mixer-related code to avoid related deadlocks on export.
2018-10-29 16:17:41 +09:00
Hyunjin Song
1f7cd3ed5a Allow building SF2 player with FluidSynth 2.x (#4678)
Resolves the incompatibility between FluidSynth 1.x and 2.x
due to some API changes by shimming some functions.

Note that 1.x and 2.x are not binary compatible.
2018-10-28 10:31:33 +09:00
Johannes Lorenz
5c362e51ac Fix not saving some automations (#4632) (#4667)
Save automation of
* Track::muted
* Track::solo
* EffectChain::enabled
2018-10-24 22:23:21 +02:00
Hyunjin Song
1ab1280843 Don't quit CLI rendering when failed to load sample files
Per https://github.com/LMMS/lmms/pull/3293#discussion_r225765957
2018-10-23 12:43:25 +09:00
Tobias Junghans
811188bb7a Update name in mailmap
[ci skip]
2018-10-21 18:19:42 +02:00
Johannes Lorenz
fbdd09dbf5 Fix german locale ('<Strg> + Mittelklick') 2018-10-11 19:28:41 +02:00
Hyunin Song
7aeddc648a Fix unit tests for automation
Cherry-picked from 'master'.
Orignal commit: 0a6a6d1a77
2018-10-08 16:20:03 +09:00
Hyunjin Song
43b700d23c Ensure correct TCOs after cloning tracks into the BB editor
Previously BBTrackContainerView::dropEvent always deleted
the TCOs of dropped tracks. It made dropped tracks unusable.
As of this commit, the function checks for correct TCOs.
If incorrect TCOs exist, the function remove them and add empty ones.
2018-10-08 12:33:00 +09:00
Hyunjin Song
5a92105735 Don't always treat empty long patterns as BB patterns
Due to the wrong condition for GUI handling, empty patterns longer than 1 bar
was treated as BB patterns though they don't really look like.
This commit drops the erroneous check and fixes related GUI issues.
2018-10-08 12:33:00 +09:00
Hyunjin Song
fb5c8f510a Fix VST track cloning in Beat/Bassline editor 2018-10-08 12:33:00 +09:00
Hyunjin Song
9799f3ca1c Fix Carla detection in AppImage launcher script
Fixes a typo which hardcodes Carla path at the packaging time.
2018-10-04 14:24:52 +09:00
109 changed files with 17111 additions and 899 deletions

View File

@@ -1,5 +1,5 @@
Alexandre Almeida <wilsalx@gmail.com> <meta.lx@hotmail.com>
Tobias Doerffel <tobias.doerffel@gmail.com>
Tobias Junghans <tobias.doerffel@gmail.com>
Dave French <dave.french3@googlemail.com>
Paul Giblock <drfaygo@gmail.com> <pgib@users.sf.net>
Paul Giblock <drfaygo@gmail.com> <p@pgiblock.net>
@@ -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,6 +6,7 @@ cache:
directories:
- apt_mingw_cache
- $HOME/.ccache
- $HOME/pbuilder-bases
matrix:
include:
- env: TARGET_OS=win32
@@ -14,36 +15,41 @@ matrix:
osx_image: xcode8.2
- env: QT5=
- env: QT5=True
- env: QT5=True TARGET_OS=win32
- env: QT5=True TARGET_OS=win64
- env: QT5=True TARGET_OS=win32 TARGET_DEPLOY=True
- env: QT5=True TARGET_OS=win64 TARGET_DEPLOY=True
- os: osx
osx_image: xcode8.2
env: QT5=True
- env: TARGET_OS=debian-sid TARGET_DEPLOY=True
- env: TARGET_OS=debian-sid TARGET_ARCH=i386
- compiler: clang
env: TARGET_OS=debian-sid
before_install:
- . ${TRAVIS_BUILD_DIR}/.travis/${TRAVIS_OS_NAME}.${TARGET_OS}.before_install.sh
install:
- . ${TRAVIS_BUILD_DIR}/.travis/${TRAVIS_OS_NAME}.${TARGET_OS}.install.sh
before_script:
- mkdir build && cd build
- export CMAKE_FLAGS="-DWANT_QT5=$QT5 -DUSE_WERROR=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo"
- if [ -z "$TRAVIS_TAG" ]; then export CMAKE_FLAGS="$CMAKE_FLAGS -DUSE_CCACHE=ON"; fi
script:
- . ${TRAVIS_BUILD_DIR}/.travis/${TRAVIS_OS_NAME}.${TARGET_OS}.script.sh
- make -j4
- if [[ $TARGET_OS != win* ]]; then make tests && ./tests/tests; fi;
after_script:
- ccache -s
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??) && "$QT5"'
condition: '"$TARGET_DEPLOY" = True'
repo: LMMS/lmms
notifications:
webhooks:

View File

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

View File

@@ -1,7 +1,14 @@
#!/usr/bin/env bash
mkdir build
cd build
if [ $QT5 ]; then
unset QTDIR QT_PLUGIN_PATH LD_LIBRARY_PATH
source /opt/qt59/bin/qt59-env.sh
fi
cmake -DUSE_WERROR=ON $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,38 @@
#!/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"
sudo pbuilder --create --basetgz "$BASETGZ" --mirror $MIRROR \
--distribution sid --architecture $TARGET_ARCH \
--debootstrapopts --variant=buildd \
--debootstrapopts --keyring=$KEYRING \
--debootstrapopts --include=perl
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,4 +1,8 @@
#!/usr/bin/env bash
mkdir build
cd build
export CMAKE_OPTS="$CMAKE_FLAGS -DUSE_WERROR=ON"
../cmake/build_mingw32.sh
make -j4

View File

@@ -1,4 +1,8 @@
#!/usr/bin/env bash
mkdir build
cd build
export CMAKE_OPTS="$CMAKE_FLAGS -DUSE_WERROR=ON"
../cmake/build_mingw64.sh
make -j4

View File

@@ -4,10 +4,14 @@ PACKAGES="cmake pkgconfig fftw libogg libvorbis lame libsndfile libsamplerate ja
if [ $QT5 ]; then
PACKAGES="$PACKAGES qt5"
else
PACKAGES="$PACKAGES cartr/qt4/qt"
fi
brew install $PACKAGES ccache
if [ -z "$QT5" ]; then
brew tap cartr/qt4
brew tap-pin cartr/qt4
brew install qt@4
fi
sudo npm install -g appdmg

View File

@@ -1,4 +1,6 @@
#!/usr/bin/env bash
mkdir build
cd build
if [ $QT5 ]; then
# Workaround; No FindQt5.cmake module exists
@@ -6,3 +8,7 @@ if [ $QT5 ]; then
fi
cmake $CMAKE_FLAGS -DUSE_WERROR=OFF ..
make -j4
make tests
./tests/tests

View File

@@ -20,7 +20,7 @@ INCLUDE(FindPkgConfig)
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")
@@ -30,7 +30,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)
@@ -71,6 +71,8 @@ OPTION(WANT_QT5 "Build with Qt5" 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)
@@ -86,7 +88,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)
@@ -94,7 +95,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

@@ -8,7 +8,7 @@ Comment=Music sequencer and synthesizer
Comment[ca]=Producció fàcil de música per a tothom!
Comment[fr]=Production facile de musique pour tout le monde !
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

@@ -98,7 +98,7 @@ cat >"${APPDIR}usr/bin/lmms" <<EOL
#!/usr/bin/env bash
DIR="\$( cd "\$( dirname "\${BASH_SOURCE[0]}" )" && pwd )"
if which carla > /dev/null 2>&1; then
CARLAPATH="$(which carla)"
CARLAPATH="\$(which carla)"
CARLAPREFIX="\${CARLAPATH%/bin*}"
echo "Carla appears to be installed on this system at \$CARLAPREFIX/lib[64]/carla so we'll use it."
export LD_LIBRARY_PATH=\$CARLAPREFIX/lib/carla:\$CARLAPREFIX/lib64/carla:\$LD_LIBRARY_PATH
@@ -175,10 +175,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" | 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

@@ -507,7 +507,7 @@ Wenn Sie daran interessiert sind LMMS in eine andere Sprache zu übersetzen oder
<name>AutomationPattern</name>
<message>
<source>Drag a control while pressing &lt;%1&gt;</source>
<translation>Ein Steuerelement mit &lt;Strg&gt; hier her ziehen</translation>
<translation>Ein Steuerelement mit &lt;%1&gt; hier her ziehen</translation>
</message>
</context>
<context>
@@ -5977,7 +5977,7 @@ Grund: »%2«</translation>
</message>
<message>
<source>Mute/unmute (&lt;%1&gt; + middle click)</source>
<translation>Stumm/Laut schalten (&lt;Strg&gt; + Mittelklick)</translation>
<translation>Stumm/Laut schalten (&lt;%1&gt; + Mittelklick)</translation>
</message>
</context>
<context>
@@ -6808,7 +6808,7 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich
</message>
<message>
<source>Mute/unmute (&lt;%1&gt; + middle click)</source>
<translation>Stumm/Laut schalten (&lt;Strg&gt; + Mittelklick)</translation>
<translation>Stumm/Laut schalten (&lt;%1&gt; + Mittelklick)</translation>
</message>
</context>
<context>
@@ -10017,4 +10017,4 @@ Die LED rechts unterhalb der Wellenform gibt an, ob die Saite aktiviert ist.</tr
<translation>Ausgabeverstärkung</translation>
</message>
</context>
</TS>
</TS>

File diff suppressed because it is too large Load Diff

12760
data/locale/id.ts Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -7203,7 +7203,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>

View File

@@ -7199,7 +7199,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

@@ -165,6 +165,7 @@ public slots:
void normalize();
void invert();
void shiftPhase( int _deg );
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

@@ -171,10 +171,11 @@ public:
return m_audioDevStartFailed;
}
void setAudioDevice( AudioDevice * _dev );
void setAudioDevice( AudioDevice * _dev , bool startNow );
void setAudioDevice( AudioDevice * _dev,
const struct qualitySettings & _qs,
bool _needs_fifo );
bool _needs_fifo,
bool startNow );
void storeAudioDevice();
void restoreAudioDevice();
inline AudioDevice * audioDev()

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

@@ -755,9 +755,15 @@ public:
}
void quit()
void stop()
{
m_quit = true;
quit();
}
void reset()
{
m_quit = false;
}
private:
@@ -864,6 +870,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

@@ -142,6 +142,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

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

View File

@@ -81,7 +81,6 @@ private:
QGraphicsDropShadowEffect * m_shadow;
static void elideText( QLabel *label, QString text );
bool isMaximized();
void adjustTitleBar();
};

View File

@@ -39,7 +39,7 @@ public:
VstSyncController();
~VstSyncController();
void setAbsolutePosition( int ticks );
void setAbsolutePosition( double ticks );
void setPlaybackState( bool enabled )
{
@@ -77,7 +77,7 @@ private:
struct VstSyncData
{
bool isPlaying;
float ppqPos;
double ppqPos;
int timeSigNumer;
int timeSigDenom;
bool isCycle;

View File

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

View File

@@ -274,7 +274,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

@@ -426,7 +426,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 ) {
@@ -385,9 +389,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;
@@ -480,10 +491,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

@@ -472,6 +472,7 @@ void bitInvaderView::modelChanged()
void bitInvaderView::sinWaveClicked()
{
m_graph->model()->clearInvisible();
m_graph->model()->setWaveToSine();
Engine::getSong()->setModified();
}
@@ -481,6 +482,7 @@ void bitInvaderView::sinWaveClicked()
void bitInvaderView::triangleWaveClicked()
{
m_graph->model()->clearInvisible();
m_graph->model()->setWaveToTriangle();
Engine::getSong()->setModified();
}
@@ -490,6 +492,7 @@ void bitInvaderView::triangleWaveClicked()
void bitInvaderView::sawWaveClicked()
{
m_graph->model()->clearInvisible();
m_graph->model()->setWaveToSaw();
Engine::getSong()->setModified();
}
@@ -499,6 +502,7 @@ void bitInvaderView::sawWaveClicked()
void bitInvaderView::sqrWaveClicked()
{
m_graph->model()->clearInvisible();
m_graph->model()->setWaveToSquare();
Engine::getSong()->setModified();
}
@@ -508,6 +512,7 @@ void bitInvaderView::sqrWaveClicked()
void bitInvaderView::noiseWaveClicked()
{
m_graph->model()->clearInvisible();
m_graph->model()->setWaveToNoise();
Engine::getSong()->setModified();
}
@@ -518,35 +523,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

@@ -64,7 +64,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

@@ -0,0 +1,88 @@
/*
* fluidsynthshims.h - a shim header for FluidSynth 2.0 API changes
*
* Copyright (c) 2018 Hyunjin Song <tteu.ingog@gmail.com>
*
* This file is part of LMMS - https://lmms.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program (see COPYING); if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
*/
#ifndef FLUIDSYNTHSHIMS_H
#define FLUIDSYNTHSHIMS_H
#include <fluidsynth.h>
#if FLUIDSYNTH_VERSION_MAJOR < 2
inline const char* fluid_preset_get_name(fluid_preset_t* preset)
{
return preset->get_name(preset);
}
inline int fluid_preset_get_banknum(fluid_preset_t* preset)
{
return preset->get_banknum(preset);
}
inline int fluid_preset_get_num(fluid_preset_t* preset)
{
return preset->get_num(preset);
}
inline fluid_sfont_t* fluid_preset_get_sfont(fluid_preset_t* preset)
{
return preset->sfont;
}
inline char* fluid_sfont_get_name(fluid_sfont_t* sfont)
{
return sfont->get_name(sfont);
}
inline void fluid_sfont_iteration_start(fluid_sfont_t* sfont)
{
sfont->iteration_start(sfont);
}
// Due to the API change, we can't simply shim the 'fluid_sfont_iteration_next' function
inline fluid_preset_t* fluid_sfont_iteration_next_wrapper(fluid_sfont_t* sfont, fluid_preset_t* preset)
{
return sfont->iteration_next(sfont, preset) ? preset : nullptr;
}
#else // FLUIDSYNTH_VERSION_MAJOR < 2
#define FLUID_REVERB_DEFAULT_ROOMSIZE 0.2f
#define FLUID_REVERB_DEFAULT_DAMP 0.0f
#define FLUID_REVERB_DEFAULT_WIDTH 0.5f
#define FLUID_REVERB_DEFAULT_LEVEL 0.9f
#define FLUID_CHORUS_DEFAULT_N 3
#define FLUID_CHORUS_DEFAULT_LEVEL 2.0f
#define FLUID_CHORUS_DEFAULT_SPEED 0.3f
#define FLUID_CHORUS_DEFAULT_DEPTH 8.0f
inline fluid_preset_t* fluid_sfont_iteration_next_wrapper(fluid_sfont_t* sfont, fluid_preset_t*)
{
return fluid_sfont_iteration_next(sfont);
}
#endif // FLUIDSYNTH_VERSION_MAJOR < 2
#endif // FLUIDSYNTHSHIMS_H

View File

@@ -143,7 +143,6 @@ void patchesDialog::setup ( fluid_synth_t * pSynth, int iChan,
m_iChan = iChan;
fluid_preset_t preset;
QTreeWidgetItem *pBankItem = NULL;
// For all soundfonts (in reversed stack order) fill the available banks...
int cSoundFonts = ::fluid_synth_sfcount(m_pSynth);
@@ -151,11 +150,17 @@ void patchesDialog::setup ( fluid_synth_t * pSynth, int iChan,
fluid_sfont_t *pSoundFont = ::fluid_synth_get_sfont(m_pSynth, i);
if (pSoundFont) {
#ifdef CONFIG_FLUID_BANK_OFFSET
int iBankOffset = ::fluid_synth_get_bank_offset(m_pSynth, pSoundFont->id);
int iBankOffset = ::fluid_synth_get_bank_offset(m_pSynth, fluid_sfont_get_id(pSoundFont));
#endif
pSoundFont->iteration_start(pSoundFont);
while (pSoundFont->iteration_next(pSoundFont, &preset)) {
int iBank = preset.get_banknum(&preset);
fluid_sfont_iteration_start(pSoundFont);
#if FLUIDSYNTH_VERSION_MAJOR < 2
fluid_preset_t preset;
fluid_preset_t *pCurPreset = &preset;
#else
fluid_preset_t *pCurPreset;
#endif
while ((pCurPreset = fluid_sfont_iteration_next_wrapper(pSoundFont, pCurPreset))) {
int iBank = fluid_preset_get_banknum(pCurPreset);
#ifdef CONFIG_FLUID_BANK_OFFSET
iBank += iBankOffset;
#endif
@@ -173,9 +178,9 @@ void patchesDialog::setup ( fluid_synth_t * pSynth, int iChan,
m_iBank = 0;
fluid_preset_t *pPreset = ::fluid_synth_get_channel_preset(m_pSynth, m_iChan);
if (pPreset) {
m_iBank = pPreset->get_banknum(pPreset);
m_iBank = fluid_preset_get_banknum(pPreset);
#ifdef CONFIG_FLUID_BANK_OFFSET
m_iBank += ::fluid_synth_get_bank_offset(m_pSynth, (pPreset->sfont)->id);
m_iBank += ::fluid_synth_get_bank_offset(m_pSynth, fluid_sfont_get_id(fluid_preset_get_sfont(sfont)));
#endif
}
@@ -186,7 +191,7 @@ void patchesDialog::setup ( fluid_synth_t * pSynth, int iChan,
// Set the selected program.
if (pPreset)
m_iProg = pPreset->get_num(pPreset);
m_iProg = fluid_preset_get_num(pPreset);
QTreeWidgetItem *pProgItem = findProgItem(m_iProg);
m_progListView->setCurrentItem(pProgItem);
m_progListView->scrollToItem(pProgItem);
@@ -312,7 +317,6 @@ void patchesDialog::bankChanged (void)
// Clear up the program listview.
m_progListView->setSortingEnabled(false);
m_progListView->clear();
fluid_preset_t preset;
QTreeWidgetItem *pProgItem = NULL;
// For all soundfonts (in reversed stack order) fill the available programs...
int cSoundFonts = ::fluid_synth_sfcount(m_pSynth);
@@ -320,23 +324,29 @@ void patchesDialog::bankChanged (void)
fluid_sfont_t *pSoundFont = ::fluid_synth_get_sfont(m_pSynth, i);
if (pSoundFont) {
#ifdef CONFIG_FLUID_BANK_OFFSET
int iBankOffset = ::fluid_synth_get_bank_offset(m_pSynth, pSoundFont->id);
int iBankOffset = ::fluid_synth_get_bank_offset(m_pSynth, fluid_sfont_get_id(pSoundFont));
#endif
pSoundFont->iteration_start(pSoundFont);
while (pSoundFont->iteration_next(pSoundFont, &preset)) {
int iBank = preset.get_banknum(&preset);
fluid_sfont_iteration_start(pSoundFont);
#if FLUIDSYNTH_VERSION_MAJOR < 2
fluid_preset_t preset;
fluid_preset_t *pCurPreset = &preset;
#else
fluid_preset_t *pCurPreset;
#endif
while ((pCurPreset = fluid_sfont_iteration_next_wrapper(pSoundFont, pCurPreset))) {
int iBank = fluid_preset_get_banknum(pCurPreset);
#ifdef CONFIG_FLUID_BANK_OFFSET
iBank += iBankOffset;
#endif
int iProg = preset.get_num(&preset);
int iProg = fluid_preset_get_num(pCurPreset);
if (iBank == iBankSelected && !findProgItem(iProg)) {
pProgItem = new patchItem(m_progListView, pProgItem);
if (pProgItem) {
pProgItem->setText(0, QString::number(iProg));
pProgItem->setText(1, preset.get_name(&preset));
//pProgItem->setText(2, QString::number(pSoundFont->id));
pProgItem->setText(1, fluid_preset_get_name(pCurPreset));
//pProgItem->setText(2, QString::number(fluid_sfont_get_id(pSoundFont)));
//pProgItem->setText(3, QFileInfo(
// pSoundFont->get_name(pSoundFont)).baseName());
// fluid_sfont_get_name(pSoundFont).baseName());
}
}
}

View File

@@ -29,7 +29,7 @@
#include "ui_patches_dialog.h"
#include "LcdSpinBox.h"
#include <fluidsynth.h>
#include "fluidsynthshims.h"
#include <QWidget>
#include <QLabel>

View File

@@ -127,6 +127,29 @@ sf2Instrument::sf2Instrument( InstrumentTrack * _instrument_track ) :
// everytime we load a new soundfont.
m_synth = new_fluid_synth( m_settings );
#if FLUIDSYNTH_VERSION_MAJOR >= 2
// Get the default values from the setting
double settingVal;
fluid_settings_getnum_default(m_settings, "synth.reverb.room-size", &settingVal);
m_reverbRoomSize.setInitValue(settingVal);
fluid_settings_getnum_default(m_settings, "synth.reverb.damping", &settingVal);
m_reverbDamping.setInitValue(settingVal);
fluid_settings_getnum_default(m_settings, "synth.reverb.width", &settingVal);
m_reverbWidth.setInitValue(settingVal);
fluid_settings_getnum_default(m_settings, "synth.reverb.level", &settingVal);
m_reverbLevel.setInitValue(settingVal);
fluid_settings_getnum_default(m_settings, "synth.chorus.nr", &settingVal);
m_chorusNum.setInitValue(settingVal);
fluid_settings_getnum_default(m_settings, "synth.chorus.level", &settingVal);
m_chorusLevel.setInitValue(settingVal);
fluid_settings_getnum_default(m_settings, "synth.chorus.speed", &settingVal);
m_chorusSpeed.setInitValue(settingVal);
fluid_settings_getnum_default(m_settings, "synth.chorus.depth", &settingVal);
m_chorusDepth.setInitValue(settingVal);
#endif
loadFile( ConfigManager::inst()->defaultSoundfont() );
updateSampleRate();
@@ -392,7 +415,6 @@ QString sf2Instrument::getCurrentPatchName()
int iBankSelected = m_bankNum.value();
int iProgSelected = m_patchNum.value();
fluid_preset_t preset;
// For all soundfonts (in reversed stack order) fill the available programs...
int cSoundFonts = ::fluid_synth_sfcount( m_synth );
for( int i = 0; i < cSoundFonts; i++ )
@@ -403,21 +425,26 @@ QString sf2Instrument::getCurrentPatchName()
#ifdef CONFIG_FLUID_BANK_OFFSET
int iBankOffset =
fluid_synth_get_bank_offset(
m_synth, pSoundFont->id );
m_synth, fluid_sfont_get_id(pSoundFont) );
#endif
pSoundFont->iteration_start( pSoundFont );
while( pSoundFont->iteration_next( pSoundFont,
&preset ) )
fluid_sfont_iteration_start( pSoundFont );
#if FLUIDSYNTH_VERSION_MAJOR < 2
fluid_preset_t preset;
fluid_preset_t *pCurPreset = &preset;
#else
fluid_preset_t *pCurPreset;
#endif
while ((pCurPreset = fluid_sfont_iteration_next_wrapper(pSoundFont, pCurPreset)))
{
int iBank = preset.get_banknum( &preset );
int iBank = fluid_preset_get_banknum( pCurPreset );
#ifdef CONFIG_FLUID_BANK_OFFSET
iBank += iBankOffset;
#endif
int iProg = preset.get_num( &preset );
int iProg = fluid_preset_get_num( pCurPreset );
if( iBank == iBankSelected && iProg ==
iProgSelected )
{
return preset.get_name( &preset );
return fluid_preset_get_name( pCurPreset );
}
}
}

View File

@@ -36,7 +36,7 @@
#include "Knob.h"
#include "LcdSpinBox.h"
#include "LedCheckbox.h"
#include "fluidsynth.h"
#include "fluidsynthshims.h"
#include "MemoryManager.h"
class sf2InstrumentView;

View File

@@ -109,6 +109,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() );
@@ -209,7 +212,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();
@@ -218,10 +227,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 ) {
@@ -996,8 +1003,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;
@@ -1128,10 +1143,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

@@ -63,6 +63,7 @@
#define USE_WS_PREFIX
#include <windows.h>
#include <algorithm>
#include <vector>
#include <queue>
#include <string>
@@ -394,8 +395,8 @@ private:
// host to plugin synchronisation data structure
struct in
{
float lastppqPos;
float m_Timestamp;
double lastppqPos;
double m_Timestamp;
int32_t m_lastFlags;
} ;
@@ -900,6 +901,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();
@@ -1596,10 +1605,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;
@@ -1936,7 +1955,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

@@ -166,6 +166,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

@@ -122,13 +122,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 );
@@ -138,7 +145,7 @@ ZynAddSubFxInstrument::ZynAddSubFxInstrument(
this, SLOT( reloadPlugin() ) );
connect( instrumentTrack()->pitchRangeModel(), SIGNAL( dataChanged() ),
this, SLOT( updatePitchRange() ) );
this, SLOT( updatePitchRange() ), Qt::DirectConnection );
}

View File

@@ -417,7 +417,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 );
}
}
}
@@ -476,7 +477,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

@@ -787,6 +787,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

@@ -95,10 +95,13 @@ tact_t BBTrackContainer::lengthOfBB( int _bb ) const
MidiTime max_length = MidiTime::ticksPerTact();
const TrackList & tl = tracks();
for( TrackList::const_iterator it = tl.begin(); it != tl.end(); ++it )
for (Track* t : tl)
{
max_length = qMax( max_length,
( *it )->getTCO( _bb )->length() );
// Don't create TCOs here if not exist
if (_bb < t->numOfTCOs())
{
max_length = qMax(max_length, t->getTCO( _bb )->length());
}
}
return max_length.nextFullTact();

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

@@ -53,7 +53,7 @@ EffectChain::~EffectChain()
void EffectChain::saveSettings( QDomDocument & _doc, QDomElement & _this )
{
_this.setAttribute( "enabled", m_enabledModel.value() );
m_enabledModel.saveSettings( _doc, _this, "enabled" );
_this.setAttribute( "numofeffects", m_effects.count() );
for( Effect* effect : m_effects)
@@ -80,7 +80,7 @@ void EffectChain::loadSettings( const QDomElement & _this )
// TODO This method should probably also lock the mixer
m_enabledModel.setValue( _this.attribute( "enabled" ).toInt() );
m_enabledModel.loadSettings( _this, "enabled" );
const int plugin_cnt = _this.attribute( "numofeffects" ).toInt();

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( isinff( src[f][c] ) || isnanf( 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] += ( isinff( src[f][0] ) || isnanf( 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] += ( isinff( src[f][0] ) || isnanf( 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

@@ -575,7 +575,8 @@ void Mixer::changeQuality( const struct qualitySettings & _qs )
void Mixer::setAudioDevice( AudioDevice * _dev )
void Mixer::setAudioDevice( AudioDevice * _dev,
bool startNow )
{
stopProcessing();
@@ -592,7 +593,7 @@ void Mixer::setAudioDevice( AudioDevice * _dev )
emit sampleRateChanged();
startProcessing();
if (startNow) {startProcessing();}
}
@@ -600,7 +601,8 @@ void Mixer::setAudioDevice( AudioDevice * _dev )
void Mixer::setAudioDevice( AudioDevice * _dev,
const struct qualitySettings & _qs,
bool _needs_fifo )
bool _needs_fifo,
bool startNow )
{
// don't delete the audio-device
stopProcessing();
@@ -621,7 +623,7 @@ void Mixer::setAudioDevice( AudioDevice * _dev,
emit qualitySettingsChanged();
emit sampleRateChanged();
startProcessing( _needs_fifo );
if (startNow) {startProcessing( _needs_fifo );}
}

View File

@@ -180,11 +180,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

@@ -146,7 +146,7 @@ void ProjectRenderer::startProcessing()
// make slots connected to sampleRateChanged()-signals being
// called immediately
Engine::mixer()->setAudioDevice( m_fileDev,
m_qualitySettings, false );
m_qualitySettings, false, false );
start(
#ifndef LMMS_BUILD_WIN32
@@ -185,6 +185,9 @@ void ProjectRenderer::run()
tick_t endTick = exportEndpoints.second.getTicks();
tick_t lengthTicks = endTick - startTick;
// Now start processing
Engine::mixer()->startProcessing(false);
// Continually track and emit progress percentage to listeners
while( exportPos.getTicks() < endTick &&
Engine::getSong()->isExporting() == true

View File

@@ -54,7 +54,10 @@ ProcessWatcher::ProcessWatcher( RemotePlugin * _p ) :
void ProcessWatcher::run()
{
while( !m_quit && m_plugin->isRunning() )
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 );
}
@@ -120,6 +123,11 @@ RemotePlugin::RemotePlugin() :
qWarning( "Unable to start the server." );
}
#endif
connect( &m_process, SIGNAL( finished( int, QProcess::ExitStatus ) ),
this, SLOT( processFinished( int, QProcess::ExitStatus ) ),
Qt::DirectConnection );
connect( &m_process, SIGNAL( finished( int, QProcess::ExitStatus ) ),
&m_watcher, SLOT( quit() ), Qt::DirectConnection );
}
@@ -127,7 +135,7 @@ RemotePlugin::RemotePlugin() :
RemotePlugin::~RemotePlugin()
{
m_watcher.quit();
m_watcher.stop();
m_watcher.wait();
if( m_failed == false )
@@ -200,6 +208,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
@@ -212,15 +225,15 @@ 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;
#endif
connect( &m_process, SIGNAL( finished( int, QProcess::ExitStatus ) ),
this, SLOT( processFinished( int, QProcess::ExitStatus ) ) );
#ifndef SYNC_WITH_SHM_FIFO
struct pollfd pollin;
pollin.fd = m_server;

View File

@@ -130,7 +130,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 ) )
{
@@ -142,7 +142,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

@@ -297,7 +297,6 @@ void SampleBuffer::update( bool _keep_settings )
else
{
fprintf( stderr, "%s\n", message.toUtf8().constData() );
exit( EXIT_FAILURE );
}
}
}

View File

@@ -265,8 +265,6 @@ void Song::processNextBuffer()
m_playPos[m_playMode].setTicks(
tl->loopBegin().getTicks() );
m_vstSyncController.setAbsolutePosition(
tl->loopBegin().getTicks() );
m_vstSyncController.setPlaybackJumped( true );
emit updateSampleTracks();
@@ -293,8 +291,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() )
{
@@ -332,7 +328,6 @@ void Song::processNextBuffer()
m_elapsedMilliSeconds =
( ticks * 60 * 1000 / 48 ) / getTempo();
m_vstSyncController.setAbsolutePosition( ticks );
m_vstSyncController.setPlaybackJumped( true );
}
}
@@ -354,11 +349,8 @@ void Song::processNextBuffer()
m_elapsedMilliSeconds =
( ticks * 60 * 1000 / 48 ) / getTempo();
m_vstSyncController.setAbsolutePosition( ticks );
m_vstSyncController.setPlaybackJumped( true );
}
else if( m_playPos[m_playMode] == tl->loopEnd() - 1 )
{
emit updateSampleTracks();
}
}
@@ -371,6 +363,16 @@ void Song::processNextBuffer()
m_playPos[m_playMode].setCurrentFrame( currentFrame );
}
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;
@@ -718,7 +720,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

@@ -865,10 +865,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::AltModifier) &&
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();
@@ -882,23 +890,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::AltModifier )
&& me->button() == Qt::NoButton )
{
t = t.toNearestTact();
}
( *it )->movePosition( t );
( *it )->movePosition( ( *it )->startPosition() + dtick );
}
}
else if( m_action == Resize )
@@ -2063,8 +2066,9 @@ void Track::saveSettings( QDomDocument & doc, QDomElement & element )
}
element.setAttribute( "type", type() );
element.setAttribute( "name", name() );
element.setAttribute( "muted", isMuted() );
element.setAttribute( "solo", isSolo() );
m_mutedModel.saveSettings( doc, element, "muted" );
m_soloModel.saveSettings( doc, element, "solo" );
if( m_height >= MINIMAL_TRACK_HEIGHT )
{
element.setAttribute( "height", m_height );
@@ -2116,8 +2120,8 @@ void Track::loadSettings( const QDomElement & element )
setName( element.hasAttribute( "name" ) ? element.attribute( "name" ) :
element.firstChild().toElement().attribute( "name" ) );
setMuted( element.attribute( "muted" ).toInt() );
setSolo( element.attribute( "solo" ).toInt() );
m_mutedModel.loadSettings( element, "muted" );
m_soloModel.loadSettings( element, "solo" );
if( m_simpleSerializingMode )
{
@@ -2150,8 +2154,9 @@ void Track::loadSettings( const QDomElement & element )
{
loadTrackSpecificSettings( node.toElement() );
}
else if(
!node.toElement().attribute( "metadata" ).toInt() )
else if( node.nodeName() != "muted"
&& node.nodeName() != "solo"
&& !node.toElement().attribute( "metadata" ).toInt() )
{
TrackContentObject * tco = createTCO(
MidiTime( 0 ) );

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

@@ -119,7 +119,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

@@ -64,6 +64,7 @@
#include "GuiApplication.h"
#include "ImportFilter.h"
#include "MainWindow.h"
#include "MixHelpers.h"
#include "OutputSettings.h"
#include "ProjectRenderer.h"
#include "RenderManager.h"
@@ -251,7 +252,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 );
@@ -633,6 +640,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

@@ -54,11 +54,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

@@ -99,6 +99,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",
@@ -127,7 +129,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",
@@ -135,7 +137,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" ) );
@@ -334,6 +336,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 );
@@ -1055,6 +1066,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

@@ -148,23 +148,6 @@ void SubWindow::elideText( QLabel *label, QString text )
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
}
QRect SubWindow::getTrueNormalGeometry() const
{
return m_trackedNormalGeom;
@@ -302,8 +285,11 @@ void SubWindow::adjustTitleBar()
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

@@ -93,7 +93,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

@@ -258,7 +258,25 @@ void BBTrackContainerView::dropEvent(QDropEvent* de)
DataFile dataFile( value.toUtf8() );
Track * t = Track::create( dataFile.content().firstChild().toElement(), model() );
t->deleteTCOs();
// Ensure BB TCOs exist
bool hasValidBBTCOs = false;
if (t->getTCOs().size() == m_bbtc->numOfBBs())
{
hasValidBBTCOs = true;
for (int i = 0; i < t->getTCOs().size(); ++i)
{
if (t->getTCOs()[i]->startPosition() != MidiTime(i, 0))
{
hasValidBBTCOs = false;
break;
}
}
}
if (!hasValidBBTCOs)
{
t->deleteTCOs();
t->createTCOsForBB(m_bbtc->numOfBBs() - 1);
}
m_bbtc->updateAfterTrackAdd();
de->accept();

Some files were not shown because too many files have changed in this diff Show More