Merge branch 'master' into instr-sub-plugins

This commit is contained in:
Johannes Lorenz
2019-03-22 10:51:23 +01:00
144 changed files with 8061 additions and 3989 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -8,13 +8,11 @@ if [ "$TYPE" = 'style' ]; then
# once it's fixed, it should be enabled again
# shellcheck disable=SC2185
# shellcheck disable=SC2046
shellcheck $(find -O3 "$TRAVIS_BUILD_DIR/.travis/" "$TRAVIS_BUILD_DIR/cmake/" -type f -name '*.sh' -o -name "*.sh.in")
shellcheck $(find -O3 . -maxdepth 3 -type f -name '*.sh' -o -name "*.sh.in")
shellcheck doc/bash-completion/lmms
else
mkdir -p build
cd build
export CMAKE_FLAGS="-DCMAKE_BUILD_TYPE=RelWithDebInfo"
if [ -z "$TRAVIS_TAG" ]; then
@@ -23,25 +21,21 @@ else
"$TRAVIS_BUILD_DIR/.travis/$TRAVIS_OS_NAME.$TARGET_OS.script.sh"
make -j4
make tests
if [[ $TARGET_OS != win* ]]; then
tests/tests
fi
# Package and upload non-tagged builds
if [ ! -z "$TRAVIS_TAG" ]; then
# Skip, handled by travis deploy instead
exit 0
elif [[ $TARGET_OS == win* ]]; then
cd build
make -j4 package
PACKAGE="$(ls lmms-*win*.exe)"
elif [[ $TRAVIS_OS_NAME == osx ]]; then
cd build
make -j4 install > /dev/null
make dmg
PACKAGE="$(ls lmms-*.dmg)"
else
elif [[ $TARGET_OS != debian-sid ]]; then
cd build
make -j4 install > /dev/null
make appimage
PACKAGE="$(ls lmms-*.AppImage)"

View File

@@ -23,7 +23,7 @@ INCLUDE(GenerateExportHeader)
STRING(TOUPPER "${CMAKE_PROJECT_NAME}" PROJECT_NAME_UCASE)
SET(PROJECT_YEAR 2018)
SET(PROJECT_YEAR 2019)
SET(PROJECT_AUTHOR "LMMS Developers")
SET(PROJECT_URL "https://lmms.io")
@@ -33,7 +33,7 @@ SET(PROJECT_COPYRIGHT "2008-${PROJECT_YEAR} ${PROJECT_AUTHOR}")
SET(VERSION_MAJOR "1")
SET(VERSION_MINOR "2")
SET(VERSION_RELEASE "0")
SET(VERSION_STAGE "rc7")
SET(VERSION_STAGE "rc8")
SET(VERSION_BUILD "0")
SET(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_RELEASE}")
IF(VERSION_STAGE)
@@ -67,12 +67,15 @@ OPTION(WANT_STK "Include Stk (Synthesis Toolkit) support" ON)
OPTION(WANT_SWH "Include Steve Harris's LADSPA plugins" ON)
OPTION(WANT_TAP "Include Tom's Audio Processing LADSPA plugins" ON)
OPTION(WANT_VST "Include VST support" ON)
OPTION(WANT_VST_NOWINE "Include partial VST support (without wine)" OFF)
OPTION(WANT_VST_32 "Include 32-bit VST support" ON)
OPTION(WANT_VST_64 "Include 64-bit VST support" ON)
OPTION(WANT_WINMM "Include WinMM MIDI support" OFF)
OPTION(WANT_DEBUG_FPE "Debug floating point exceptions" OFF)
IF(LMMS_BUILD_APPLE)
# Fix linking on 10.14+. See issue #4762 on github
LINK_DIRECTORIES(/usr/local/lib)
SET(WANT_ALSA OFF)
SET(WANT_PULSEAUDIO OFF)
SET(WANT_VST OFF)
@@ -88,7 +91,6 @@ IF(LMMS_BUILD_WIN32)
SET(WANT_ALSA OFF)
SET(WANT_JACK OFF)
SET(WANT_PULSEAUDIO OFF)
SET(WANT_PORTAUDIO OFF)
SET(WANT_SNDIO OFF)
SET(WANT_SOUNDIO OFF)
SET(WANT_WINMM ON)
@@ -96,7 +98,6 @@ IF(LMMS_BUILD_WIN32)
SET(STATUS_ALSA "<not supported on this platform>")
SET(STATUS_JACK "<not supported on this platform>")
SET(STATUS_PULSEAUDIO "<not supported on this platform>")
SET(STATUS_PORTAUDIO "<disabled on this platform>")
SET(STATUS_SOUNDIO "<disabled in this release>")
SET(STATUS_WINMM "OK")
SET(STATUS_APPLEMIDI "<not supported on this platform>")

View File

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

View File

@@ -134,15 +134,15 @@ export LD_LIBRARY_PATH="${APPDIR}usr/lib/lmms/":$LD_LIBRARY_PATH
# Handle wine linking
if [ -d "@WINE_32_LIBRARY_DIR@" ]; then
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LD_LIBRARY_PATH/wine/:@WINE_32_LIBRARY_DIR@:@WINE_32_LIBRARY_DIR@wine/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:@WINE_32_LIBRARY_DIRS@
fi
if [ -d "@WINE_64_LIBRARY_DIR@" ]; then
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LD_LIBRARY_PATH/wine/:@WINE_64_LIBRARY_DIR@:@WINE_64_LIBRARY_DIR@wine/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:@WINE_64_LIBRARY_DIRS@
fi
# Move executables so linuxdeployqt can find them
ZYNLIB="${APPDIR}usr/lib/lmms/RemoteZynAddSubFx"
VSTLIB32="${APPDIR}usr/lib/lmms/RemoteVstPlugin32.exe.so"
VSTLIB32="${APPDIR}usr/lib/lmms/32/RemoteVstPlugin32.exe.so"
VSTLIB64="${APPDIR}usr/lib/lmms/RemoteVstPlugin64.exe.so"
ZYNBIN="${APPDIR}usr/bin/RemoteZynAddSubFx"
@@ -172,8 +172,10 @@ executables="${executables} -executable=${APPDIR}usr/lib/lmms/ladspa/pitch_scale
# Bundle both qt and non-qt dependencies into appimage format
echo -e "\nBundling and relinking system dependencies..."
echo -e ">>>>> linuxdeployqt" > "$LOGFILE"
# FIXME: -unsupported-allow-new-glibc may result in an AppImage which is unusable on old systems.
# shellcheck disable=SC2086
"$LINUXDEPLOYQT" "$DESKTOPFILE" $executables -bundle-non-qt-libs -verbose=$VERBOSITY $STRIP >> "$LOGFILE" 2>&1
"$LINUXDEPLOYQT" "$DESKTOPFILE" $executables -unsupported-allow-new-glibc -bundle-non-qt-libs -verbose=$VERBOSITY $STRIP >> "$LOGFILE" 2>&1
success "Bundled and relinked dependencies"
# Link to original location so lmms can find them
@@ -187,10 +189,16 @@ rm -f "${APPDIR}/usr/lib/libwine.so.1"
# Use system-provided carla
rm -f "${APPDIR}usr/lib/"libcarla*.so
# Move jack out of LD_LIBRARY_PATH
# Remove bundled jack in LD_LIBRARY_PATH if exists
if [ -e "${APPDIR}/usr/lib/libjack.so.0" ]; then
rm "${APPDIR}/usr/lib/libjack.so.0"
fi
# Bundle jack out of LD_LIBRARY_PATH
JACK_LIB=$(ldd "${APPDIR}/usr/bin/lmms.real" | sed -n 's/\tlibjack\.so\.0 => \(.\+\) (0x[0-9a-f]\+)/\1/p')
if [ -e "$JACK_LIB" ]; then
mkdir -p "${APPDIR}usr/lib/lmms/optional/"
mv "${APPDIR}/usr/lib/libjack.so.0" "${APPDIR}usr/lib/lmms/optional/"
cp "$JACK_LIB" "${APPDIR}usr/lib/lmms/optional/"
fi
# Point the AppRun to the shim launcher

View File

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

View File

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

View File

@@ -0,0 +1,27 @@
INCLUDE(CheckCXXSourceCompiles)
FUNCTION(CheckWineGcc BITNESS WINEGCC_EXECUTABLE RESULT)
FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/winegcc_test.cxx" "
#include <iostream>
#define USE_WS_PREFIX
#include <windows.h>
int main(int argc, const char* argv[]) {
return 0;
}
")
EXECUTE_PROCESS(COMMAND ${WINEGCC_EXECUTABLE} "-m${BITNESS}"
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/winegcc_test.cxx"
"-o" "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/winegcc_test"
OUTPUT_QUIET ERROR_QUIET
RESULT_VARIABLE WINEGCC_RESULT
)
FILE(REMOVE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/winegcc_test.cxx"
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/winegcc_test"
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/winegcc_test.exe.so"
)
IF(WINEGCC_RESULT EQUAL 0)
SET(${RESULT} True PARENT_SCOPE)
ELSE()
SET(${RESULT} False PARENT_SCOPE)
ENDIF()
ENDFUNCTION()

View File

@@ -7,46 +7,89 @@
# WINE_DEFINITIONS - Compiler switches required for using wine
#
MACRO(_findwine_find_flags output expression result)
STRING(REPLACE " " ";" WINEBUILD_FLAGS "${output}")
FOREACH(FLAG ${WINEBUILD_FLAGS})
IF("${FLAG}" MATCHES "${expression}")
SET(${result} "${FLAG}")
ENDIF()
ENDFOREACH()
ENDMACRO()
LIST(APPEND CMAKE_PREFIX_PATH /opt/wine-stable /opt/wine-devel /opt/wine-staging /usr/lib/wine/)
FIND_PATH(WINE_INCLUDE_DIR wine/exception.h PATH_SUFFIXES wine)
FIND_PROGRAM(WINE_CXX
NAMES wineg++ winegcc winegcc64 winegcc32 winegcc-stable
PATHS /usr/lib/wine)
PATHS /usr/lib/wine
)
FIND_PROGRAM(WINE_BUILD NAMES winebuild)
# Detect wine paths and handle linking problems
IF(WINE_CXX)
EXEC_PROGRAM(${WINE_CXX} ARGS "-m32 -v /dev/zero" OUTPUT_VARIABLE WINEBUILD_OUTPUT_32)
EXEC_PROGRAM(${WINE_CXX} ARGS "-m64 -v /dev/zero" OUTPUT_VARIABLE WINEBUILD_OUTPUT_64)
_findwine_find_flags("${WINEBUILD_OUTPUT_32}" "^-isystem/usr/include$" BUGGED_WINEGCC)
_findwine_find_flags("${WINEBUILD_OUTPUT_32}" "^-isystem" WINEGCC_INCLUDE_DIR)
_findwine_find_flags("${WINEBUILD_OUTPUT_32}" "libwinecrt0\\.a.*" WINECRT_32)
_findwine_find_flags("${WINEBUILD_OUTPUT_64}" "libwinecrt0\\.a.*" WINECRT_64)
STRING(REGEX REPLACE "^-isystem" "" WINE_INCLUDE_HINT "${WINEGCC_INCLUDE_DIR}")
STRING(REGEX REPLACE "/wine/windows$" "" WINE_INCLUDE_HINT "${WINE_INCLUDE_HINT}")
STRING(REGEX REPLACE "libwinecrt0\\.a.*" "" WINE_32_LIBRARY_DIR "${WINECRT_32}")
STRING(REGEX REPLACE "libwinecrt0\\.a.*" "" WINE_64_LIBRARY_DIR "${WINECRT_64}")
IF(BUGGED_WINEGCC)
MESSAGE(WARNING "Your winegcc is unusable due to https://bugs.winehq.org/show_bug.cgi?id=46293,\n
Consider either upgrading or downgrading wine.")
RETURN()
ENDIF()
IF(WINE_32_LIBRARY_DIR STREQUAL WINE_64_LIBRARY_DIR)
MESSAGE(STATUS "Old winegcc detected, trying to use workaround linking")
# Fix library search directory according to the target bitness
IF(WINE_32_LIBRARY_DIR MATCHES "/lib/(x86_64|i386)-")
# Debian systems
STRING(REPLACE "/lib/x86_64-" "/lib/i386-" WINE_32_LIBRARY_DIR "${WINE_32_LIBRARY_DIR}")
STRING(REPLACE "/lib/i386-" "/lib/x86_64-" WINE_64_LIBRARY_DIR "${WINE_64_LIBRARY_DIR}")
ELSEIF(WINE_32_LIBRARY_DIR MATCHES "/(lib|lib64)/wine/$")
# WineHQ (/opt/wine-stable, /opt/wine-devel, /opt/wine-staging)
STRING(REGEX REPLACE "/lib64/wine/$" "/lib/wine/" WINE_32_LIBRARY_DIR "${WINE_32_LIBRARY_DIR}")
STRING(REGEX REPLACE "/lib/wine/$" "/lib64/wine/" WINE_64_LIBRARY_DIR "${WINE_64_LIBRARY_DIR}")
ELSEIF(WINE_32_LIBRARY_DIR MATCHES "/lib32/.*/wine/")
# Systems with old multilib layout
STRING(REPLACE "/lib32/" "/lib/" WINE_64_LIBRARY_DIR "${WINE_32_LIBRARY_DIR}")
ELSEIF(WINE_32_LIBRARY_DIR MATCHES "/lib64/.*/wine/")
# We need to test if the corresponding 64bit library directory is lib or lib32
STRING(REPLACE "/lib64/" "/lib32/" WINE_32_LIBRARY_DIR "${WINE_64_LIBRARY_DIR}")
IF(NOT EXISTS "${WINE_32_LIBRARY_DIR}")
STRING(REPLACE "/lib64/" "/lib/" WINE_32_LIBRARY_DIR "${WINE_64_LIBRARY_DIR}")
ENDIF()
ELSEIF(WINE_32_LIBRARY_DIR MATCHES "/lib/.*/wine/")
# Test if this directory is for 32bit or 64bit
STRING(REPLACE "/lib/" "/lib32/" WINE_32_LIBRARY_DIR "${WINE_64_LIBRARY_DIR}")
IF(NOT EXISTS "${WINE_32_LIBRARY_DIR}")
SET(WINE_32_LIBRARY_DIR "${WINE_64_LIBRARY_DIR}")
STRING(REPLACE "/lib/" "/lib64/" WINE_64_LIBRARY_DIR "${WINE_64_LIBRARY_DIR}")
ENDIF()
ELSE()
MESSAGE(WARNING "Can't detect wine installation layout. You may get some build errors.")
ENDIF()
SET(WINE_LIBRARY_FIX "${WINE_32_LIBRARY_DIR} and ${WINE_64_LIBRARY_DIR}")
ENDIF()
ENDIF()
FIND_PATH(WINE_INCLUDE_DIR wine/exception.h
HINTS "${WINE_INCLUDE_HINT}"
)
SET(_ARCHITECTURE ${CMAKE_LIBRARY_ARCHITECTURE})
FIND_LIBRARY(WINE_LIBRARY NAMES wine PATH_SUFFIXES wine i386-linux-gnu/wine)
FIND_LIBRARY(WINE_LIBRARY NAMES wine
PATH_SUFFIXES wine i386-linux-gnu/wine
HINTS "${WINE_32_LIBRARY_DIR}" "${WINE_64_LIBRARY_DIR}"
)
SET(CMAKE_LIBRARY_ARCHITECTURE ${_ARCHITECTURE})
SET(WINE_INCLUDE_DIRS ${WINE_INCLUDE_DIR} )
SET(WINE_LIBRARIES ${WINE_LIBRARY} )
# Handle wine linking problems
EXEC_PROGRAM(${WINE_CXX} ARGS "-v -m32 /dev/zero" OUTPUT_VARIABLE WINEBUILD_OUTPUT)
STRING(REPLACE " " ";" WINEBUILD_FLAGS "${WINEBUILD_OUTPUT}")
FOREACH(FLAG ${WINEBUILD_FLAGS})
IF("${FLAG}" MATCHES "libwinecrt0.a.*")
STRING(REGEX REPLACE "/wine/libwinecrt0.a.*" "" FLAG "${FLAG}")
SET(WINE_64_LIBRARY_DIR "${FLAG}/")
# Debian systems
STRING(REPLACE "/lib/x86_64-" "/lib/i386-" FLAG "${FLAG}")
# Fedora systems
STRING(REPLACE "/lib/lib64" "/lib/i386" FLAG "${FLAG}")
# Gentoo systems
STRING(REPLACE "/lib/wine-" "/lib32/wine-" FLAG "${FLAG}")
# WineHQ (/opt/wine-stable, /opt/wine-devel, /opt/wine-staging)
STRING(REGEX REPLACE "/lib64$" "/lib" FLAG "${FLAG}")
SET(WINE_32_LIBRARY_DIR "${FLAG}/")
ENDIF()
ENDFOREACH()
SET(WINE_LIBRARIES ${WINE_LIBRARY})
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Wine DEFAULT_MSG WINE_CXX WINE_LIBRARIES WINE_INCLUDE_DIRS)
@@ -54,7 +97,23 @@ find_package_handle_standard_args(Wine DEFAULT_MSG WINE_CXX WINE_LIBRARIES WINE_
mark_as_advanced(WINE_INCLUDE_DIR WINE_LIBRARY WINE_CXX WINE_BUILD)
IF(WINE_32_LIBRARY_DIR)
SET(WINE_32_FLAGS "-L${WINE_32_LIBRARY_DIR}wine/ -L${WINE_32_LIBRARY_DIR}")
IF(WINE_32_LIBRARY_DIR MATCHES "wine*/lib")
SET(WINE_32_FLAGS "-L${WINE_32_LIBRARY_DIR} -L${WINE_32_LIBRARY_DIR}../")
SET(WINE_32_LIBRARY_DIRS "${WINE_32_LIBRARY_DIR}:${WINE_32_LIBRARY_DIR}/..")
ELSE()
SET(WINE_32_FLAGS "-L${WINE_32_LIBRARY_DIR}")
SET(WINE_32_LIBRARY_DIRS "${WINE_32_LIBRARY_DIR}")
ENDIF()
ENDIF()
IF(WINE_64_LIBRARY_DIR)
IF(WINE_64_LIBRARY_DIR MATCHES "wine*/lib")
SET(WINE_64_FLAGS "-L${WINE_64_LIBRARY_DIR} -L${WINE_64_LIBRARY_DIR}../")
SET(WINE_64_LIBRARY_DIRS "${WINE_64_LIBRARY_DIR}:${WINE_64_LIBRARY_DIR}/..")
ELSE()
SET(WINE_64_FLAGS "-L${WINE_64_LIBRARY_DIR}")
SET(WINE_64_LIBRARY_DIRS "${WINE_64_LIBRARY_DIR}")
ENDIF()
ENDIF()
# Create winegcc wrapper

View File

@@ -22,6 +22,9 @@ while [ $# -gt 0 ]; do
-m32)
win32=true
;;
-m64)
win64=true
;;
*)
;;
@@ -42,11 +45,19 @@ fi
# by FindWine.cmake
extra_args="-I@WINE_INCLUDE_DIR@ -I@WINE_INCLUDE_DIR@/wine/windows"
# Apply manually specified flags
extra_args="$extra_args @WINE_CXX_FLAGS@"
# Apply -m32 library fix if necessary
if [ "$win32" = true ] && [ "$no_link" != true ]; then
extra_args="$extra_args @WINE_32_FLAGS@"
fi
# Apply -m64 library fix if necessary
if [ "$win64" = true ] && [ "$no_link" != true ]; then
extra_args="$extra_args @WINE_64_FLAGS@"
fi
# Run winegcc
export WINEBUILD=@WINE_BUILD@
@WINE_CXX@ $extra_args $args

File diff suppressed because it is too large Load Diff

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 452 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 596 B

View File

@@ -127,6 +127,10 @@ PianoRoll {
qproperty-noteOpacity: 128;
qproperty-noteBorders: true; /* boolean property, set false to have borderless notes */
qproperty-selectedNoteColor: rgb( 0, 125, 255 );
qproperty-ghostNoteColor: #000000;
qproperty-ghostNoteTextColor: #ffffff;
qproperty-ghostNoteOpacity: 50;
qproperty-ghostNoteBorders: true;
qproperty-barColor: #4afd85;
qproperty-markedSemitoneColor: rgba( 0, 255, 200, 60 );
/* Grid colors */

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 596 B

View File

@@ -146,6 +146,10 @@ PianoRoll {
qproperty-noteOpacity: 165;
qproperty-noteBorders: false; /* boolean property, set false to have borderless notes */
qproperty-selectedNoteColor: #064d79;
qproperty-ghostNoteColor: #000000;
qproperty-ghostNoteTextColor: #ffffff;
qproperty-ghostNoteOpacity: 50;
qproperty-ghostNoteBorders: false;
qproperty-barColor: #078f3a;
qproperty-markedSemitoneColor: rgba(255, 255, 255, 30);
/* Grid colors */

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

107
debian/control vendored Normal file
View File

@@ -0,0 +1,107 @@
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,
liblist-moreutils-perl,
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,
libxml-perl,
libxml2-utils,
portaudio19-dev,
qtbase5-private-dev,
qttools5-dev,
wine64-tools [amd64] | 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: tap-plugins, caps,
lmms-vst-server:i386 (>= ${source:Version}),
lmms-vst-server:amd64 (>= ${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: 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: amd64 i386
Depends: wine64 [amd64] | wine64-development [amd64] | wine32 [i386] | wine32-development [i386], ${shlibs:Depends}, ${misc:Depends}
Recommends: lmms-bin:any
Description: Linux Multimedia Studio - VST server
This package contains a helper application that loads VST plugins.

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

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

@@ -0,0 +1,4 @@
usr/bin/lmms
usr/lib/*/lmms/ladspa/*
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/{32/,}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

41
debian/rules vendored Executable file
View File

@@ -0,0 +1,41 @@
#!/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)
DEB_HOST_ARCH_BIT ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_BITS)
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),amd64)
export PATH := $(PATH):/usr/lib/wine
WINE_PATH := /usr/lib/$(DEB_HOST_MULTIARCH)/wine
CMAKE_OPTS+= -DWANT_VST_32=OFF -DREMOTE_VST_PLUGIN_FILEPATH_32=../../i386-linux-gnu/lmms/32/RemoteVstPlugin32 \
-DWINE_CXX_FLAGS=-Wl,--enable-new-dtags,-rpath=$(WINE_PATH)
else ifeq ($(DEB_HOST_ARCH),i386)
export PATH := $(PATH):/usr/lib/wine
WINE_PATH := /usr/lib/$(DEB_HOST_MULTIARCH)/wine
CMAKE_OPTS+= -DWANT_VST_64=OFF -DREMOTE_VST_PLUGIN_FILEPATH_64=../../x86_64-linux-gnu/lmms/RemoteVstPlugin64 \
-DWINE_CXX_FLAGS=-Wl,--enable-new-dtags,-rpath=$(WINE_PATH)
else
CMAKE_OPTS+= -DWANT_VST=OFF
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

@@ -1,3 +1,4 @@
#!/usr/bin/env bash
# lmms(1) completion -*- shell-script -*-
# use shellcheck: "shellcheck -e bash <filename>"

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

@@ -283,6 +283,8 @@ protected:
private:
static bool mustQuoteName(const QString &name);
virtual void saveSettings( QDomDocument& doc, QDomElement& element )
{
saveSettings( doc, element, "value" );

View File

@@ -51,6 +51,7 @@ protected slots:
virtual void play() {}
virtual void record() {}
virtual void recordAccompany() {}
virtual void toggleStepRecording() {}
virtual void stop() {}
private slots:
@@ -64,7 +65,7 @@ protected:
///
/// \param record If set true, the editor's toolbar will contain record
/// buttons in addition to the play and stop buttons.
Editor(bool record = false);
Editor(bool record = false, bool record_step = false);
virtual ~Editor();
@@ -73,6 +74,7 @@ protected:
QAction* m_playAction;
QAction* m_recordAction;
QAction* m_recordAccompanyAction;
QAction* m_toggleStepRecordingAction;
QAction* m_stopAction;
};

View File

@@ -0,0 +1,53 @@
/*
* FxLineLcdSpinBox.h - a specialization of LcdSpnBox for setting FX channels
*
* Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
* 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 FX_LINE_LCD_SPIN_BOX_H
#define FX_LINE_LCD_SPIN_BOX_H
#include "LcdSpinBox.h"
class TrackView;
class FxLineLcdSpinBox : public LcdSpinBox
{
Q_OBJECT
public:
FxLineLcdSpinBox(int numDigits, QWidget * parent, const QString& name, TrackView * tv = NULL) :
LcdSpinBox(numDigits, parent, name), m_tv(tv)
{}
virtual ~FxLineLcdSpinBox() {}
void setTrackView(TrackView * tv);
protected:
virtual void mouseDoubleClickEvent(QMouseEvent* event);
virtual void contextMenuEvent(QContextMenuEvent* event);
private:
TrackView * m_tv;
};
#endif

View File

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

View File

@@ -64,6 +64,8 @@ public:
// functions that can/should be re-implemented:
// --------------------------------------------------------------------
virtual bool hasNoteInput() const { return true; }
// if the plugin doesn't play each note, it can create an instrument-
// play-handle and re-implement this method, so that it mixes its
// output buffer only once per mixer-period

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

@@ -53,6 +53,7 @@ class InstrumentTrackWindow;
class InstrumentMidiIOView;
class InstrumentMiscView;
class Knob;
class FxLineLcdSpinBox;
class LcdSpinBox;
class LeftRightNav;
class midiPortMenu;
@@ -443,7 +444,7 @@ private:
QLabel * m_pitchLabel;
LcdSpinBox* m_pitchRangeSpinBox;
QLabel * m_pitchRangeLabel;
LcdSpinBox * m_effectChannelNumber;
FxLineLcdSpinBox * m_effectChannelNumber;

View File

@@ -74,6 +74,7 @@ class LMMS_EXPORT Knob : public QWidget, public FloatModelView
public:
Knob( knobTypes _knob_num, QWidget * _parent = NULL, const QString & _name = QString() );
Knob( QWidget * _parent = NULL, const QString & _name = QString() ); //!< default ctor
Knob( const Knob& other ) = delete;
virtual ~Knob();
// TODO: remove

View File

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

View File

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

View File

@@ -187,6 +187,7 @@ public slots:
protected slots:
void openInPianoRoll();
void setGhostInPianoRoll();
void resetName();
void changeName();

View File

@@ -38,6 +38,8 @@
#include "lmms_basics.h"
#include "Song.h"
#include "ToolTip.h"
#include "StepRecorder.h"
#include "StepRecorderWidget.h"
class QPainter;
class QPixmap;
@@ -59,7 +61,9 @@ class PianoRoll : public QWidget
Q_PROPERTY( QColor lineColor READ lineColor WRITE setLineColor )
Q_PROPERTY( QColor noteModeColor READ noteModeColor WRITE setNoteModeColor )
Q_PROPERTY( QColor noteColor READ noteColor WRITE setNoteColor )
Q_PROPERTY( QColor ghostNoteColor READ ghostNoteColor WRITE setGhostNoteColor )
Q_PROPERTY( QColor noteTextColor READ noteTextColor WRITE setNoteTextColor )
Q_PROPERTY( QColor ghostNoteTextColor READ ghostNoteTextColor WRITE setGhostNoteTextColor )
Q_PROPERTY( QColor barColor READ barColor WRITE setBarColor )
Q_PROPERTY( QColor selectedNoteColor READ selectedNoteColor WRITE setSelectedNoteColor )
Q_PROPERTY( QColor textColor READ textColor WRITE setTextColor )
@@ -68,6 +72,8 @@ class PianoRoll : public QWidget
Q_PROPERTY( QColor markedSemitoneColor READ markedSemitoneColor WRITE setMarkedSemitoneColor )
Q_PROPERTY( int noteOpacity READ noteOpacity WRITE setNoteOpacity )
Q_PROPERTY( bool noteBorders READ noteBorders WRITE setNoteBorders )
Q_PROPERTY( int ghostNoteOpacity READ ghostNoteOpacity WRITE setGhostNoteOpacity )
Q_PROPERTY( bool ghostNoteBorders READ ghostNoteBorders WRITE setGhostNoteBorders )
Q_PROPERTY( QColor backgroundShade READ backgroundShade WRITE setBackgroundShade )
public:
enum EditModes
@@ -87,6 +93,8 @@ public:
void showPanTextFloat(panning_t pan, const QPoint &pos, int timeout=-1);
void setCurrentPattern( Pattern* newPattern );
void setGhostPattern( Pattern* newPattern );
void loadGhostNotes( const QDomElement & de );
inline void stopRecording()
{
@@ -98,6 +106,11 @@ public:
return m_recording;
}
inline bool isStepRecording() const
{
return m_stepRecorder.isRecording();
}
const Pattern* currentPattern() const
{
return m_pattern;
@@ -141,6 +154,14 @@ public:
void setNoteOpacity( const int i );
bool noteBorders() const;
void setNoteBorders( const bool b );
QColor ghostNoteColor() const;
void setGhostNoteColor( const QColor & c );
QColor ghostNoteTextColor() const;
void setGhostNoteTextColor( const QColor & c );
int ghostNoteOpacity() const;
void setGhostNoteOpacity( const int i );
bool ghostNoteBorders() const;
void setGhostNoteBorders( const bool b );
QColor backgroundShade() const;
void setBackgroundShade( const QColor & c );
@@ -175,6 +196,7 @@ protected slots:
void play();
void record();
void recordAccompany();
bool toggleStepRecording();
void stop();
void startRecordNote( const Note & n );
@@ -192,9 +214,11 @@ protected slots:
void updatePosition(const MidiTime & t );
void updatePositionAccompany(const MidiTime & t );
void updatePositionStepRecording(const MidiTime & t );
void zoomingChanged();
void quantizeChanged();
void noteLengthChanged();
void quantizeNotes();
void updateSemiToneMarkerMenu();
@@ -206,9 +230,12 @@ protected slots:
void selectRegionFromPixels( int xStart, int xEnd );
void clearGhostPattern();
signals:
void currentPatternChanged();
void ghostPatternSet(bool);
void semiToneMarkerMenuScaleSetEnabled(bool);
void semiToneMarkerMenuChordSetEnabled(bool);
@@ -309,6 +336,13 @@ private:
static const QVector<double> m_zoomLevels;
Pattern* m_pattern;
NoteVector m_ghostNotes;
inline const NoteVector & ghostNotes() const
{
return m_ghostNotes;
}
QScrollBar * m_leftRightScroll;
QScrollBar * m_topBottomScroll;
@@ -381,6 +415,9 @@ private:
friend class PianoRollWindow;
StepRecorderWidget m_stepRecorderWidget;
StepRecorder m_stepRecorder;
// qproperty fields
QColor m_barLineColor;
QColor m_beatLineColor;
@@ -388,6 +425,8 @@ private:
QColor m_noteModeColor;
QColor m_noteColor;
QColor m_noteTextColor;
QColor m_ghostNoteColor;
QColor m_ghostNoteTextColor;
QColor m_barColor;
QColor m_selectedNoteColor;
QColor m_textColor;
@@ -395,7 +434,9 @@ private:
QColor m_textShadow;
QColor m_markedSemitoneColor;
int m_noteOpacity;
int m_ghostNoteOpacity;
bool m_noteBorders;
bool m_ghostNoteBorders;
QColor m_backgroundShade;
signals:
@@ -412,7 +453,8 @@ public:
PianoRollWindow();
const Pattern* currentPattern() const;
void setCurrentPattern(Pattern* pattern);
void setCurrentPattern( Pattern* pattern );
void setGhostPattern( Pattern* pattern );
int quantization() const;
@@ -420,6 +462,7 @@ public:
void stop();
void record();
void recordAccompany();
void toggleStepRecording();
void stopRecording();
bool isRecording() const;
@@ -444,10 +487,14 @@ signals:
private slots:
void patternRenamed();
void updateAfterPatternChange();
void ghostPatternSet( bool state );
private:
void patternRenamed();
void focusInEvent(QFocusEvent * event);
void stopStepRecording();
void updateStepRecordingIcon();
PianoRoll* m_editor;
@@ -456,6 +503,7 @@ private:
ComboBox * m_noteLenComboBox;
ComboBox * m_scaleComboBox;
ComboBox * m_chordComboBox;
QPushButton * m_clearGhostButton;
};

View File

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

View File

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

View File

@@ -26,13 +26,19 @@
#define SAMPLE_TRACK_H
#include <QDialog>
#include <QLayout>
#include "AudioPort.h"
#include "FxMixer.h"
#include "FxLineLcdSpinBox.h"
#include "Track.h"
class EffectRackView;
class Knob;
class SampleBuffer;
class SampleTrackWindow;
class TrackLabelButton;
class QLineEdit;
class SampleTCO : public TrackContentObject
@@ -140,6 +146,11 @@ public:
QDomElement & _parent );
virtual void loadTrackSpecificSettings( const QDomElement & _this );
inline IntModel * effectChannelModel()
{
return &m_effectChannelModel;
}
inline AudioPort * audioPort()
{
return &m_audioPort;
@@ -153,15 +164,18 @@ public:
public slots:
void updateTcos();
void setPlayingTcos( bool isPlaying );
void updateEffectChannel();
private:
FloatModel m_volumeModel;
FloatModel m_panningModel;
IntModel m_effectChannelModel;
AudioPort m_audioPort;
friend class SampleTrackView;
friend class SampleTrackWindow;
} ;
@@ -174,6 +188,24 @@ public:
SampleTrackView( SampleTrack* Track, TrackContainerView* tcv );
virtual ~SampleTrackView();
SampleTrackWindow * getSampleTrackWindow()
{
return m_window;
}
SampleTrack * model()
{
return castModel<SampleTrack>();
}
const SampleTrack * model() const
{
return castModel<SampleTrack>();
}
virtual QMenu * createFxMenu( QString title, QString newFxLabel );
public slots:
void showEffects();
@@ -187,12 +219,77 @@ protected:
}
private slots:
void assignFxLine( int channelIndex );
void createFxLine();
private:
EffectRackView * m_effectRack;
QWidget * m_effWindow;
SampleTrackWindow * m_window;
Knob * m_volumeKnob;
Knob * m_panningKnob;
TrackLabelButton * m_tlb;
friend class SampleTrackWindow;
} ;
class SampleTrackWindow : public QWidget, public ModelView, public SerializingObjectHook
{
Q_OBJECT
public:
SampleTrackWindow(SampleTrackView * tv);
virtual ~SampleTrackWindow();
SampleTrack * model()
{
return castModel<SampleTrack>();
}
const SampleTrack * model() const
{
return castModel<SampleTrack>();
}
void setSampleTrackView(SampleTrackView * tv);
SampleTrackView *sampleTrackView()
{
return m_stv;
}
public slots:
void textChanged(const QString & new_name);
void toggleVisibility(bool on);
void updateName();
protected:
// capture close-events for toggling sample-track-button
virtual void closeEvent(QCloseEvent * ce);
virtual void saveSettings(QDomDocument & doc, QDomElement & element);
virtual void loadSettings(const QDomElement & element);
private:
virtual void modelChanged();
SampleTrack * m_track;
SampleTrackView * m_stv;
// widgets on the top of an sample-track-window
QLineEdit * m_nameLineEdit;
Knob * m_volumeKnob;
Knob * m_panningKnob;
FxLineLcdSpinBox * m_effectChannelNumber;
EffectRackView * m_effectRack;
} ;

View File

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

View File

@@ -103,8 +103,6 @@ public:
} ;
void processNextBuffer();
inline int getLoadingTrackCount() const
@@ -203,9 +201,23 @@ public:
{
return m_recording;
}
inline void setLoopRenderCount(int count)
{
if (count < 1)
m_loopRenderCount = 1;
else
m_loopRenderCount = count;
m_loopRenderRemaining = m_loopRenderCount;
}
inline int getLoopRenderCount() const
{
return m_loopRenderCount;
}
bool isExportDone() const;
std::pair<MidiTime, MidiTime> getExportEndpoints() const;
int getExportProgress() const;
inline void setRenderBetweenMarkers( bool renderBetweenMarkers )
{
@@ -424,7 +436,14 @@ private:
tact_t m_elapsedTacts;
VstSyncController m_vstSyncController;
int m_loopRenderCount;
int m_loopRenderRemaining;
MidiTime m_exportSongBegin;
MidiTime m_exportLoopBegin;
MidiTime m_exportLoopEnd;
MidiTime m_exportSongEnd;
MidiTime m_exportEffectiveLength;
friend class LmmsCore;
friend class SongEditor;

View File

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

143
include/StepRecorder.h Normal file
View File

@@ -0,0 +1,143 @@
/*
* 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 STEP_RECORDER_H
#define STEP_RECORDER_H
#include <QTime>
#include <QTimer>
#include <QObject>
#include <QKeyEvent>
#include "Note.h"
#include "lmms_basics.h"
#include "Pattern.h"
class PianoRoll;
class StepRecorderWidget;
class StepRecorder : public QObject
{
Q_OBJECT
public:
StepRecorder(PianoRoll& pianoRoll, StepRecorderWidget& stepRecorderWidget);
void initialize();
void start(const MidiTime& currentPosition,const MidiTime& stepLength);
void stop();
void notePressed(const Note & n);
void noteReleased(const Note & n);
bool keyPressEvent(QKeyEvent* ke);
bool mousePressEvent(QMouseEvent* ke);
void setCurrentPattern(Pattern* newPattern);
void setStepsLength(const MidiTime& newLength);
QVector<Note*> getCurStepNotes();
bool isRecording() const
{
return m_isRecording;
}
QColor curStepNoteColor() const
{
return QColor(245,3,139); // radiant pink
}
private slots:
void removeNotesReleasedForTooLong();
private:
void stepForwards();
void stepBackwards();
void applyStep();
void dismissStep();
void prepareNewStep();
MidiTime getCurStepEndPos();
void updateCurStepNotes();
void updateWidget();
bool allCurStepNotesReleased();
PianoRoll& m_pianoRoll;
StepRecorderWidget& m_stepRecorderWidget;
bool m_isRecording = false;
MidiTime m_curStepStartPos = 0;
MidiTime m_curStepEndPos = 0;
MidiTime m_stepsLength;
MidiTime m_curStepLength; // current step length refers to the step currently recorded. it may defer from m_stepsLength
// since the user can make current step larger
QTimer m_updateReleasedTimer;
Pattern* m_pattern;
class StepNote
{
public:
StepNote(const Note & note) : m_note(note), m_pressed(true) {};
void setPressed()
{
m_pressed = true;
}
void setReleased()
{
m_pressed = false;
releasedTimer.start();
}
int timeSinceReleased()
{
return releasedTimer.elapsed();
}
bool isPressed() const
{
return m_pressed;
}
bool isReleased() const
{
return !m_pressed;
}
Note m_note;
private:
bool m_pressed;
QTime releasedTimer;
} ;
QVector<StepNote*> m_curStepNotes; // contains the current recorded step notes (i.e. while user still press the notes; before they are applied to the pattern)
StepNote* findCurStepNote(const int key);
bool m_isStepInProgress = false;
};
#endif //STEP_RECORDER_H

View File

@@ -0,0 +1,92 @@
/*
* StepRecorderWidget.h - widget that provide gui markers for step recording
*
* 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 STEP_RECOREDER_WIDGET_H
#define STEP_RECOREDER_WIDGET_H
#include "lmms_basics.h"
#include "Note.h"
#include <QWidget>
#include <QColor>
#include <QPainter>
class StepRecorderWidget : public QWidget
{
Q_OBJECT
public:
StepRecorderWidget(
QWidget * parent,
const int ppt,
const int marginTop,
const int marginBottom,
const int marginLeft,
const int marginRight);
//API used by PianoRoll
void setPixelsPerTact(int ppt);
void setCurrentPosition(MidiTime currentPosition);
void setBottomMargin(const int marginBottom);
//API used by StepRecorder
void setStepsLength(MidiTime stepsLength);
void setStartPosition(MidiTime pos);
void setEndPosition(MidiTime pos);
void showHint();
private:
virtual void paintEvent(QPaintEvent * pe);
int xCoordOfTick(int tick);
void drawVerLine(QPainter* painter, int x, const QColor& color, int top, int bottom);
void drawVerLine(QPainter* painter, const MidiTime& pos, const QColor& color, int top, int bottom);
void updateBoundaries();
MidiTime m_stepsLength;
MidiTime m_curStepStartPos;
MidiTime m_curStepEndPos;
int m_ppt; // pixels per tact
MidiTime m_currentPosition; // current position showed by on PianoRoll
QColor m_colorLineStart;
QColor m_colorLineEnd;
// boundaries within piano roll window
int m_top;
int m_bottom;
int m_left;
int m_right;
const int m_marginTop;
int m_marginBottom; // not const since can change on resize of edit-note area
const int m_marginLeft;
const int m_marginRight;
signals:
void positionChanged(const MidiTime & t);
} ;
#endif //STEP_RECOREDER_WIDGET_H

View File

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

View File

@@ -675,6 +675,10 @@ public:
virtual void update();
// Create a menu for assigning/creating channels for this track
// Currently instrument track and sample track supports it
virtual QMenu * createFxMenu(QString title, QString newFxLabel);
public slots:
virtual bool close();

View File

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

View File

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

View File

@@ -91,8 +91,6 @@ ENDIF("${PLUGIN_LIST}" STREQUAL "")
IF(MSVC)
SET(MSVC_INCOMPATIBLE_PLUGINS
LadspaEffect
sid
#VstEffect
zynaddsubfx
)
message(WARNING "Compiling with MSVC. The following plugins are not available: ${MSVC_INCOMPATIBLE_PLUGINS}")

View File

@@ -153,6 +153,9 @@ void LadspaControls::linkPort( int _port, bool _state )
{
first->unlinkControls( m_controls[proc][_port] );
}
// m_stereoLinkModel.setValue() will call updateLinkStatesFromGlobal()
// m_noLink will make sure that this will not unlink any other ports
m_noLink = true;
m_stereoLinkModel.setValue( false );
}

View File

@@ -16,8 +16,9 @@ LIST(SORT SOURCES)
# Skip files matching pattern
SET(FILE_PATTERNS "ctl;gui;gtk;session;connector;jack;rdf;draw;fluid;preset;lv2;benchmark;win;plugin.cpp")
FOREACH(_item ${SOURCES})
GET_FILENAME_COMPONENT(m_basename ${_item} NAME)
FOREACH(_pattern ${FILE_PATTERNS})
IF(${_item} MATCHES ${_pattern})
IF(${m_basename} MATCHES ${_pattern})
LIST(REMOVE_ITEM SOURCES ${_item})
ENDIF()
ENDFOREACH()

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -324,7 +324,8 @@ void sidInstrument::playNote( NotePlayHandle * _n,
cSID *sid = static_cast<cSID *>( _n->m_pluginData );
int delta_t = clockrate * frames / samplerate + 4;
short buf[frames];
// avoid variable length array for msvc compat
short* buf = reinterpret_cast<short*>(_working_buffer + offset);
unsigned char sidreg[NUMSIDREGS];
for (int c = 0; c < NUMSIDREGS; c++)
@@ -429,7 +430,8 @@ void sidInstrument::playNote( NotePlayHandle * _n,
if(num!=frames)
printf("!!!Not enough samples\n");
for( fpp_t frame = 0; frame < frames; ++frame )
// loop backwards to avoid overwriting data in the short-to-float conversion
for( fpp_t frame = frames - 1; frame >= 0; frame-- )
{
sample_t s = float(buf[frame])/32768.0;
for( ch_cnt_t ch = 0; ch < DEFAULT_CHANNELS; ++ch )

View File

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

View File

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

View File

@@ -5,11 +5,11 @@ ENDIF()
INCLUDE(BuildPlugin)
INCLUDE(ExternalProject)
ADD_SUBDIRECTORY(vstbase)
# These variables are not meant to be used normally, except packaging
SET(REMOTE_VST_PLUGIN_FILEPATH_32 "32/RemoteVstPlugin32" CACHE STRING "Relative file path to RemoteVstPlugin32")
SET(REMOTE_VST_PLUGIN_FILEPATH_64 "RemoteVstPlugin64" CACHE STRING "Relative file path to RemoteVstPlugin64")
IF(LMMS_BUILD_LINUX AND WANT_VST_NOWINE)
RETURN()
ENDIF()
ADD_SUBDIRECTORY(vstbase)
SET(LMMS_BINARY_DIR ${CMAKE_BINARY_DIR})
SET(LMMS_SOURCE_DIR ${CMAKE_SOURCE_DIR})
@@ -29,6 +29,10 @@ SET(EXTERNALPROJECT_CMAKE_ARGS
)
# build 32 bit version of RemoteVstPlugin
INCLUDE("${CMAKE_CURRENT_LIST_DIR}/RemoteVstPlugin32.cmake")
IF(WANT_VST_32)
INCLUDE("${CMAKE_CURRENT_LIST_DIR}/RemoteVstPlugin32.cmake")
ENDIF()
# build 64 bit version of RemoteVstPlugin
INCLUDE("${CMAKE_CURRENT_LIST_DIR}/RemoteVstPlugin64.cmake")
IF(WANT_VST_64)
INCLUDE("${CMAKE_CURRENT_LIST_DIR}/RemoteVstPlugin64.cmake")
ENDIF()

View File

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

View File

@@ -18,6 +18,7 @@ if(IS_WIN64 OR CMAKE_SIZEOF_VOID_P EQUAL 8)
set(BITNESS 64)
else()
set(BITNESS 32)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/32")
endif()
FOREACH( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )

View File

@@ -1,32 +1,39 @@
IF(LMMS_BUILD_WIN32 AND NOT LMMS_BUILD_WIN64)
ADD_SUBDIRECTORY(RemoteVstPlugin)
IF(MSVC)
SET(VCPKG_ROOT "${CMAKE_FIND_ROOT_PATH}")
INSTALL(FILES "${VCPKG_ROOT}/bin/Qt5Core.dll" DESTINATION "${PLUGIN_DIR}/32")
INSTALL(FILES "${VCPKG_ROOT}/bin/zlib1.dll" DESTINATION "${PLUGIN_DIR}/32")
ELSE(MSVC)
INSTALL(FILES "${MINGW_PREFIX}/bin/Qt5Core.dll" DESTINATION "${PLUGIN_DIR}/32")
INSTALL(FILES "${MINGW_PREFIX}/bin/zlib1.dll" DESTINATION "${PLUGIN_DIR}/32")
ENDIF(MSVC)
INSTALL(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../32/RemoteVstPlugin32.exe" DESTINATION "${PLUGIN_DIR}/32")
ELSEIF(LMMS_BUILD_WIN64 AND MSVC)
SET(MSVC_VER ${CMAKE_CXX_COMPILER_VERSION})
IF(NOT CMAKE_GENERATOR_32)
IF(MSVC_VER VERSION_GREATER 19.0 OR MSVC_VER VERSION_EQUAL 19.0)
SET(CMAKE_GENERATOR_32 "Visual Studio 14 2015")
SET(MSVC_YEAR 2015)
ELSEIF(MSVC_VER VERSION_EQUAL 19.10 OR MSVC_VER VERSION_EQUAL 19.10)
IF(NOT CMAKE_GENERATOR_32)
IF(MSVC_VER VERSION_GREATER 19.10 OR MSVC_VER VERSION_EQUAL 19.10)
SET(CMAKE_GENERATOR_32 "Visual Studio 15 2017")
SET(MSVC_YEAR 2017)
ELSEIF(MSVC_VER VERSION_GREATER 19.0 OR MSVC_VER VERSION_EQUAL 19.0)
SET(CMAKE_GENERATOR_32 "Visual Studio 14 2015")
SET(MSVC_YEAR 2015)
ELSE()
MESSAGE(SEND_WARNING "Can't build RemoteVstPlugin32, unknown MSVC version ${MSVC_VER} and no CMAKE_GENERATOR_32 set")
RETURN()
ENDIF()
ENDIF()
IF(NOT QT_32_PREFIX AND NOT USING_VCPKG)
IF(NOT QT_32_PREFIX)
GET_FILENAME_COMPONENT(QT_BIN_DIR ${QT_QMAKE_EXECUTABLE} DIRECTORY)
SET(QT_32_PREFIX "${QT_BIN_DIR}/../../msvc${MSVC_YEAR}")
ENDIF()
IF(NOT QT_32_PREFIX)
MESSAGE(WARNING "Can't build RemoteVstPlugin32, QT_32_PREFIX not set")
RETURN()
ELSEIF(NOT (IS_DIRECTORY ${QT_32_PREFIX} AND EXISTS ${QT_32_PREFIX}/bin/qmake.exe))
MESSAGE(WARNING "Can't build RemoteVstPlugin32, no Qt 32 bit installation found at ${QT_32_PREFIX}")
RETURN()
#TODO: qt5 installed using vcpkg: I don't know how to detect if the user built the x86 version of qt5 from here. At least not cleanly.
#So for the moment, we'll allow the built.
IF(NOT (IS_DIRECTORY ${QT_32_PREFIX} AND EXISTS ${QT_32_PREFIX}/bin/qmake.exe))
MESSAGE(WARNING "No Qt 32 bit installation found at ${QT_32_PREFIX}. If you're using VCPKG you can ignore this message if you've built x86-windows version of qt5")
ENDIF()
ExternalProject_Add(RemoteVstPlugin32
@@ -38,8 +45,25 @@ ELSEIF(LMMS_BUILD_WIN64 AND MSVC)
"-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}"
"-DCMAKE_PREFIX_PATH=${QT_32_PREFIX}"
)
INSTALL(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../32/RemoteVstPlugin32.exe" DESTINATION "${PLUGIN_DIR}/32")
#TODO: find a solution when not using vcpkg for qt
SET(VCPKG_ROOT_32 "${CMAKE_FIND_ROOT_PATH}/../x86-windows")
INSTALL(FILES "${VCPKG_ROOT_32}/bin/zlib1.dll" DESTINATION "${PLUGIN_DIR}/32")
INSTALL(FILES "${VCPKG_ROOT_32}/bin/pcre2-16.dll" DESTINATION "${PLUGIN_DIR}/32")
INSTALL(FILES "${VCPKG_ROOT_32}/bin/double-conversion.dll" DESTINATION "${PLUGIN_DIR}/32")
INSTALL(FILES "${VCPKG_ROOT_32}/bin/qt5core.dll" DESTINATION "${PLUGIN_DIR}/32")
ELSEIF(LMMS_BUILD_LINUX)
# Use winegcc
INCLUDE(CheckWineGcc)
CheckWineGcc(32 "${WINEGCC}" WINEGCC_WORKING)
IF(NOT WINEGCC_WORKING)
MESSAGE(WARNING "winegcc fails to complie 32-bit binaries, please make sure you have 32-bit GCC libraries")
RETURN()
ENDIF()
ExternalProject_Add(RemoteVstPlugin32
"${EXTERNALPROJECT_ARGS}"
CMAKE_ARGS
@@ -47,6 +71,9 @@ ELSEIF(LMMS_BUILD_LINUX)
"-DCMAKE_CXX_COMPILER=${WINEGCC}"
"-DCMAKE_CXX_FLAGS=-m32"
)
INSTALL(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../32/RemoteVstPlugin32" "${CMAKE_CURRENT_BINARY_DIR}/../32/RemoteVstPlugin32.exe.so" DESTINATION "${PLUGIN_DIR}/32")
ELSEIF(CMAKE_TOOLCHAIN_FILE_32)
ExternalProject_Add(RemoteVstPlugin32
"${EXTERNALPROJECT_ARGS}"
@@ -55,13 +82,11 @@ ELSEIF(CMAKE_TOOLCHAIN_FILE_32)
"-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_32}"
"-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE_32}"
)
INSTALL(FILES "${CMAKE_PREFIX_PATH_32}/bin/Qt5Core.dll" DESTINATION "${PLUGIN_DIR}/32")
INSTALL(FILES "${CMAKE_PREFIX_PATH_32}/bin/zlib1.dll" DESTINATION "${PLUGIN_DIR}/32")
INSTALL(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../32/RemoteVstPlugin32.exe" DESTINATION "${PLUGIN_DIR}/32")
ELSE()
message(WARNING "Can't build RemoteVstPlugin32, unknown environment. Please supply CMAKE_TOOLCHAIN_FILE_32 and optionally CMAKE_PREFIX_PATH_32")
MESSAGE(WARNING "Can't build RemoteVstPlugin32, unknown environment. Please supply CMAKE_TOOLCHAIN_FILE_32 and optionally CMAKE_PREFIX_PATH_32")
RETURN()
ENDIF()
IF(LMMS_BUILD_LINUX)
INSTALL(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../RemoteVstPlugin32" "${CMAKE_CURRENT_BINARY_DIR}/../RemoteVstPlugin32.exe.so" DESTINATION "${PLUGIN_DIR}")
ELSEIF(LMMS_BUILD_WIN32)
INSTALL(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../RemoteVstPlugin32.exe" DESTINATION "${PLUGIN_DIR}")
ENDIF()

View File

@@ -2,6 +2,12 @@ IF(LMMS_BUILD_WIN64)
ADD_SUBDIRECTORY(RemoteVstPlugin)
INSTALL(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../RemoteVstPlugin64.exe" DESTINATION "${PLUGIN_DIR}")
ELSEIF(LMMS_BUILD_LINUX)
INCLUDE(CheckWineGcc)
CheckWineGcc(64 "${WINEGCC}" WINEGCC_WORKING)
IF(NOT WINEGCC_WORKING)
MESSAGE(WARNING "winegcc fails to compile 64-bit binaries, please make sure you have 64-bit GCC libraries")
RETURN()
ENDIF()
ExternalProject_Add(RemoteVstPlugin64
"${EXTERNALPROJECT_ARGS}"
CMAKE_ARGS

View File

@@ -149,10 +149,10 @@ VstPlugin::VstPlugin( const QString & _plugin ) :
switch(machineType)
{
case PE::MachineType::amd64:
tryLoad( "RemoteVstPlugin64" );
tryLoad( REMOTE_VST_PLUGIN_FILEPATH_64 ); // Default: RemoteVstPlugin64
break;
case PE::MachineType::i386:
tryLoad( "RemoteVstPlugin32" );
tryLoad( REMOTE_VST_PLUGIN_FILEPATH_32 ); // Default: 32/RemoteVstPlugin32
break;
default:
m_failed = true;

View File

@@ -1,3 +1,6 @@
ADD_DEFINITIONS(-DREMOTE_VST_PLUGIN_FILEPATH_32="${REMOTE_VST_PLUGIN_FILEPATH_32}")
ADD_DEFINITIONS(-DREMOTE_VST_PLUGIN_FILEPATH_64="${REMOTE_VST_PLUGIN_FILEPATH_64}")
BUILD_PLUGIN(vstbase
../vst_base.cpp ../VstPlugin.cpp ../VstPlugin.h ../communication.h
MOCFILES ../VstPlugin.h

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