Compare commits
79 Commits
v1.2.0-rc8
...
v1.2.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dbf5f47149 | ||
|
|
4f11cf1b23 | ||
|
|
a9262b9613 | ||
|
|
732448c392 | ||
|
|
95c46a805d | ||
|
|
6dee6a4418 | ||
|
|
e321dff733 | ||
|
|
5aa87886c9 | ||
|
|
16390f61a5 | ||
|
|
419321dd01 | ||
|
|
0059c6e71f | ||
|
|
c436e5ca57 | ||
|
|
2e84cd3e0c | ||
|
|
8568ae4eac | ||
|
|
a631c0c47e | ||
|
|
0db83c55a0 | ||
|
|
bdbea87149 | ||
|
|
3ada5b8a12 | ||
|
|
4cb243b0ef | ||
|
|
df79f8c1be | ||
|
|
0fbaca40bd | ||
|
|
bfa8a4bc8c | ||
|
|
ca06b886f5 | ||
|
|
457f2c6712 | ||
|
|
6e5650c50a | ||
|
|
d194c70391 | ||
|
|
47d6388182 | ||
|
|
c37228c7e3 | ||
|
|
359de2083e | ||
|
|
665e50395c | ||
|
|
6d27f90271 | ||
|
|
37f0c3f33d | ||
|
|
fad89d6be7 | ||
|
|
9c6e2278ce | ||
|
|
ec64de0723 | ||
|
|
4b4b470550 | ||
|
|
934ea6d086 | ||
|
|
50796b2088 | ||
|
|
b9503a8c70 | ||
|
|
3dcffbf96f | ||
|
|
9ff882d09d | ||
|
|
8f4757ee3b | ||
|
|
32df2d7fba | ||
|
|
8bcdf06c6c | ||
|
|
ca9a9564cd | ||
|
|
160d306f48 | ||
|
|
461faccaa0 | ||
|
|
a685049627 | ||
|
|
5784dd6dc9 | ||
|
|
5a56969af2 | ||
|
|
91f9f1a890 | ||
|
|
82e3ba75c6 | ||
|
|
032c324dbc | ||
|
|
f79c2929a5 | ||
|
|
ea5cbe6789 | ||
|
|
e1adfc3952 | ||
|
|
dd6c18e62b | ||
|
|
0c3db1045c | ||
|
|
3aeacca7ac | ||
|
|
205b57531d | ||
|
|
6fef905dfe | ||
|
|
17f6235500 | ||
|
|
295b899df2 | ||
|
|
97d5529c18 | ||
|
|
04768ee3e1 | ||
|
|
2a72808095 | ||
|
|
17e87c1d68 | ||
|
|
cdd1ddbb0c | ||
|
|
9e6ce0638d | ||
|
|
991ffcd2e0 | ||
|
|
009a451d0b | ||
|
|
e54969c568 | ||
|
|
05d5e2036d | ||
|
|
a233291c27 | ||
|
|
ad1fa16a95 | ||
|
|
e34f75a8c7 | ||
|
|
31dc8e18ff | ||
|
|
e7720cc8cb | ||
|
|
18d478782c |
1
.mailmap
1
.mailmap
@@ -29,3 +29,4 @@ 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>
|
||||
Olivier Humbert <trebmuh@tuxfamily.org> <trebmuh@users.noreply.github.com>
|
||||
|
||||
10
.travis.yml
10
.travis.yml
@@ -4,7 +4,7 @@ dist: trusty
|
||||
sudo: required
|
||||
cache:
|
||||
directories:
|
||||
- apt_mingw_cache
|
||||
- $HOME/apt_mingw_cache
|
||||
- $HOME/.ccache
|
||||
- $HOME/pbuilder-bases
|
||||
matrix:
|
||||
@@ -21,9 +21,15 @@ matrix:
|
||||
osx_image: xcode8.2
|
||||
env: QT5=True
|
||||
- env: TARGET_OS=debian-sid TARGET_DEPLOY=True
|
||||
git:
|
||||
depth: false
|
||||
- env: TARGET_OS=debian-sid TARGET_ARCH=i386
|
||||
git:
|
||||
depth: false
|
||||
- compiler: clang
|
||||
env: TARGET_OS=debian-sid
|
||||
git:
|
||||
depth: false
|
||||
before_install:
|
||||
- . ${TRAVIS_BUILD_DIR}/.travis/${TRAVIS_OS_NAME}.${TARGET_OS}.before_install.sh
|
||||
install:
|
||||
@@ -35,8 +41,6 @@ script:
|
||||
- . ${TRAVIS_BUILD_DIR}/.travis/${TRAVIS_OS_NAME}.${TARGET_OS}.script.sh
|
||||
after_script:
|
||||
- ccache -s
|
||||
before_deploy:
|
||||
- if [ "$TARGET_OS" != debian-sid ]; then make package; fi
|
||||
deploy:
|
||||
provider: releases
|
||||
api_key:
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
314ef4af137903dfb13e8c3ef1e6ea56cfdb23808d52ec4f5f50e288c73610c5 pbuilder_0.229.1_all.deb
|
||||
fa82aa8ed3055c6f6330104deedf080b26778295e589426d4c4dd0f2c2a5defa debootstrap_1.0.95_all.deb
|
||||
2ef4c09f7841b72f93412803ddd142f72658536dbfabe00e449eb548f432f3f8 debian-archive-keyring_2017.7ubuntu1_all.deb
|
||||
|
||||
@@ -22,4 +22,4 @@ sudo apt-get install -y $PACKAGES
|
||||
sudo add-apt-repository -y ppa:kxstudio-debian/libs
|
||||
sudo add-apt-repository -y ppa:kxstudio-debian/apps
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y carla-git
|
||||
sudo apt-get install -y carla
|
||||
|
||||
@@ -7,8 +7,11 @@ if [ $QT5 ]; then
|
||||
source /opt/qt59/bin/qt59-env.sh
|
||||
fi
|
||||
|
||||
cmake -DUSE_WERROR=ON $CMAKE_FLAGS ..
|
||||
cmake -DCMAKE_INSTALL_PREFIX=../target/ -DUSE_WERROR=ON $CMAKE_FLAGS ..
|
||||
|
||||
make -j4
|
||||
make tests
|
||||
./tests/tests
|
||||
|
||||
make install
|
||||
make appimage
|
||||
|
||||
@@ -2,15 +2,16 @@
|
||||
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
|
||||
# and also missing signing keys in Trusty's debian-archive-keyring
|
||||
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
|
||||
wget http://archive.ubuntu.com/ubuntu/pool/universe/d/debian-archive-keyring/debian-archive-keyring_2017.7ubuntu1_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
|
||||
sudo dpkg -i pbuilder_0.229.1_all.deb debootstrap_1.0.95_all.deb debian-archive-keyring_2017.7ubuntu1_all.deb
|
||||
cd "$OLDPWD"
|
||||
|
||||
@@ -31,6 +31,40 @@ else
|
||||
sudo pbuilder --update --basetgz "$BASETGZ"
|
||||
fi
|
||||
|
||||
sync_version() {
|
||||
local VERSION
|
||||
local MMR
|
||||
local STAGE
|
||||
local EXTRA
|
||||
|
||||
VERSION=$(git describe --tags --match v[0-9].[0-9].[0-9]*)
|
||||
VERSION=${VERSION#v}
|
||||
MMR=${VERSION%%-*}
|
||||
case $VERSION in
|
||||
*-*-*-*)
|
||||
VERSION=${VERSION%-*}
|
||||
STAGE=${VERSION#*-}
|
||||
STAGE=${STAGE%-*}
|
||||
EXTRA=${VERSION##*-}
|
||||
VERSION=$MMR~$STAGE.$EXTRA
|
||||
;;
|
||||
*-*-*)
|
||||
VERSION=${VERSION%-*}
|
||||
EXTRA=${VERSION##*-}
|
||||
VERSION=$MMR.$EXTRA
|
||||
;;
|
||||
*-*)
|
||||
STAGE=${VERSION#*-}
|
||||
VERSION=$MMR~$STAGE
|
||||
;;
|
||||
esac
|
||||
|
||||
sed "1 s/@VERSION@/$VERSION/" -i debian/changelog
|
||||
echo Set Debian version to $VERSION
|
||||
}
|
||||
|
||||
sync_version
|
||||
|
||||
DIR="$PWD"
|
||||
cd ..
|
||||
dpkg-source -b "$DIR"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
CACHE_DIR=$TRAVIS_BUILD_DIR/apt_mingw_cache/$1
|
||||
CACHE_DIR=$HOME/apt_mingw_cache/$1
|
||||
mkdir -p $CACHE_DIR
|
||||
|
||||
pushd $CACHE_DIR
|
||||
|
||||
@@ -6,3 +6,5 @@ export CMAKE_OPTS="$CMAKE_FLAGS -DUSE_WERROR=ON"
|
||||
../cmake/build_mingw32.sh
|
||||
|
||||
make -j4
|
||||
|
||||
make package
|
||||
|
||||
@@ -6,3 +6,5 @@ export CMAKE_OPTS="$CMAKE_FLAGS -DUSE_WERROR=ON"
|
||||
../cmake/build_mingw64.sh
|
||||
|
||||
make -j4
|
||||
|
||||
make package
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
brew update
|
||||
|
||||
# appdmg doesn't work with old versions of Node.js
|
||||
nvm install --lts
|
||||
|
||||
@@ -14,4 +14,4 @@ if [ -z "$QT5" ]; then
|
||||
brew install qt@4
|
||||
fi
|
||||
|
||||
sudo npm install -g appdmg
|
||||
npm install -g appdmg
|
||||
|
||||
@@ -7,8 +7,11 @@ if [ $QT5 ]; then
|
||||
export CMAKE_PREFIX_PATH="$(brew --prefix qt5)"
|
||||
fi
|
||||
|
||||
cmake $CMAKE_FLAGS -DUSE_WERROR=OFF ..
|
||||
cmake -DCMAKE_INSTALL_PREFIX=../target/ $CMAKE_FLAGS -DUSE_WERROR=OFF ..
|
||||
|
||||
make -j4
|
||||
make tests
|
||||
./tests/tests
|
||||
|
||||
make install
|
||||
make dmg
|
||||
|
||||
@@ -29,8 +29,8 @@ SET(PROJECT_DESCRIPTION "${PROJECT_NAME_UCASE} - Free music production software"
|
||||
SET(PROJECT_COPYRIGHT "2008-${PROJECT_YEAR} ${PROJECT_AUTHOR}")
|
||||
SET(VERSION_MAJOR "1")
|
||||
SET(VERSION_MINOR "2")
|
||||
SET(VERSION_RELEASE "0")
|
||||
SET(VERSION_STAGE "rc8")
|
||||
SET(VERSION_RELEASE "1")
|
||||
SET(VERSION_STAGE "")
|
||||
SET(VERSION_BUILD "0")
|
||||
SET(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_RELEASE}")
|
||||
IF(VERSION_STAGE)
|
||||
@@ -73,6 +73,7 @@ OPTION(WANT_QT5 "Build with Qt5" OFF)
|
||||
IF(LMMS_BUILD_APPLE)
|
||||
# Fix linking on 10.14+. See issue #4762 on github
|
||||
LINK_DIRECTORIES(/usr/local/lib)
|
||||
SET(WANT_SOUNDIO OFF)
|
||||
SET(WANT_ALSA OFF)
|
||||
SET(WANT_PULSEAUDIO OFF)
|
||||
SET(WANT_VST OFF)
|
||||
@@ -157,7 +158,7 @@ IF(WANT_QT5)
|
||||
Qt5::Xml
|
||||
)
|
||||
|
||||
IF(LMMS_BUILD_LINUX)
|
||||
IF(LMMS_BUILD_LINUX AND WANT_VST)
|
||||
FIND_PACKAGE(Qt5X11Extras REQUIRED)
|
||||
LIST(APPEND QT_LIBRARIES Qt5::X11Extras)
|
||||
ENDIF()
|
||||
@@ -430,9 +431,9 @@ If(WANT_GIG)
|
||||
ENDIF(WANT_GIG)
|
||||
|
||||
# check for pthreads
|
||||
IF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE OR LMMS_BUILD_OPENBSD)
|
||||
IF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE OR LMMS_BUILD_OPENBSD OR LMMS_BUILD_FREEBSD)
|
||||
FIND_PACKAGE(Threads)
|
||||
ENDIF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE OR LMMS_BUILD_OPENBSD)
|
||||
ENDIF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE OR LMMS_BUILD_OPENBSD OR LMMS_BUILD_FREEBSD)
|
||||
|
||||
IF(WANT_SNDIO)
|
||||
FIND_PACKAGE(Sndio)
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 50 KiB |
BIN
cmake/apple/dmg_branding@2x.png
Normal file
BIN
cmake/apple/dmg_branding@2x.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 113 KiB |
@@ -147,5 +147,7 @@
|
||||
<string>NSApplication</string>
|
||||
<key>NSHighResolutionCapable</key>
|
||||
<string>True</string>
|
||||
<key>NSRequiresAquaSystemAppearance</key>
|
||||
<string>False</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"title": "@MACOSX_BUNDLE_BUNDLE_NAME@ @MACOSX_BUNDLE_LONG_VERSION_STRING@",
|
||||
"background": "@CMAKE_SOURCE_DIR@/cmake/apple/dmg_branding.png",
|
||||
"icon-size": 72,
|
||||
"icon-size": 128,
|
||||
"contents": [
|
||||
{ "x": 460, "y": 260, "type": "link", "path": "/Applications" },
|
||||
{ "x": 220, "y": 260, "type": "file", "path": "@CMAKE_BINARY_DIR@/@MACOSX_BUNDLE_BUNDLE_NAME@.app" }
|
||||
{ "x": 139, "y": 200, "type": "file", "path": "@CMAKE_BINARY_DIR@/@MACOSX_BUNDLE_BUNDLE_NAME@.app" },
|
||||
{ "x": 568, "y": 200, "type": "link", "path": "/Applications" }
|
||||
]
|
||||
}
|
||||
|
||||
@@ -3,10 +3,10 @@ Name=LMMS
|
||||
GenericName=Music production suite
|
||||
GenericName[ca]=Programari de producció musical
|
||||
GenericName[de]=Software zur Musik-Produktion
|
||||
GenericName[fr]=Ensemble pour la production musicale
|
||||
GenericName[fr]=Suite de production musicale
|
||||
Comment=Music sequencer and synthesizer
|
||||
Comment[ca]=Producció fàcil de música per a tothom!
|
||||
Comment[fr]=Production facile de musique pour tout le monde !
|
||||
Comment[fr]=Séquenceur et synthétiseur de musique
|
||||
Icon=lmms
|
||||
Exec=lmms %f
|
||||
Terminal=false
|
||||
|
||||
@@ -70,6 +70,9 @@ elif ! find "$LINUXDEPLOYQT" -mtime -$DAYSOLD 2>/dev/null|grep -q "." > /dev/nul
|
||||
touch "$LINUXDEPLOYQT"
|
||||
success "Downloaded $LINUXDEPLOYQT"
|
||||
"$LINUXDEPLOYQT" --appimage-extract > /dev/null 2>&1
|
||||
# We need to set LD_LIBRARY_PATH, but linuxdepoyqt's AppRun unsets it
|
||||
# See https://github.com/probonopd/linuxdeployqt/pull/370/
|
||||
LINUXDEPLOYQT="squashfs-root/usr/bin/linuxdeployqt"
|
||||
success "Extracted $APPIMAGETOOL"
|
||||
else
|
||||
skipped "$LINUXDEPLOYQT is less than $DAYSOLD days old"
|
||||
@@ -97,6 +100,7 @@ mv "${APPDIR}usr/bin/lmms" "${APPDIR}usr/bin/lmms.real"
|
||||
cat >"${APPDIR}usr/bin/lmms" <<EOL
|
||||
#!/usr/bin/env bash
|
||||
DIR="\$( cd "\$( dirname "\${BASH_SOURCE[0]}" )" && pwd )"
|
||||
export PATH="$PATH:/sbin"
|
||||
if which carla > /dev/null 2>&1; then
|
||||
CARLAPATH="\$(which carla)"
|
||||
CARLAPREFIX="\${CARLAPATH%/bin*}"
|
||||
@@ -181,7 +185,7 @@ if [ -e "${APPDIR}/usr/lib/libjack.so.0" ]; then
|
||||
fi
|
||||
|
||||
# Bundle jack out of LD_LIBRARY_PATH
|
||||
JACK_LIB=$(ldd "${APPDIR}/usr/bin/lmms" | sed -n 's/\tlibjack\.so\.0 => \(.\+\) (0x[0-9a-f]\+)/\1/p')
|
||||
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/"
|
||||
cp "$JACK_LIB" "${APPDIR}usr/lib/lmms/optional/"
|
||||
|
||||
@@ -4,6 +4,8 @@ ELSEIF(APPLE)
|
||||
SET(LMMS_BUILD_APPLE 1)
|
||||
ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD")
|
||||
SET(LMMS_BUILD_OPENBSD 1)
|
||||
ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
|
||||
SET(LMMS_BUILD_FREEBSD 1)
|
||||
ELSEIF(HAIKU)
|
||||
SET(LMMS_BUILD_HAIKU 1)
|
||||
ELSE()
|
||||
|
||||
8341
data/locale/cs.ts
8341
data/locale/cs.ts
File diff suppressed because it is too large
Load Diff
@@ -3885,7 +3885,11 @@ Bitte besuchen Sie http://lmms.sf.net/wiki für Dokumentationen über LMMS.</tra
|
||||
</message>
|
||||
<message>
|
||||
<source>E&xport Tracks...</source>
|
||||
<translation>E&xport Tracks...</translation>
|
||||
<translation>Tracks e&xportieren...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export &MIDI...</source>
|
||||
<translation>&MIDI exportieren...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Online Help</source>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
8732
data/locale/ko.ts
8732
data/locale/ko.ts
File diff suppressed because it is too large
Load Diff
@@ -3002,7 +3002,7 @@ You can remove and move FX channels in the context menu, which is accessed by ri
|
||||
</message>
|
||||
<message>
|
||||
<source>VELOCITY</source>
|
||||
<translation>PRĘDKOŚĆ UDERZENIA</translation>
|
||||
<translation>PRĘDKOŚĆ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ENABLE MIDI OUTPUT</source>
|
||||
|
||||
7348
data/locale/ru.ts
7348
data/locale/ru.ts
File diff suppressed because it is too large
Load Diff
7497
data/locale/sv.ts
7497
data/locale/sv.ts
File diff suppressed because it is too large
Load Diff
6765
data/locale/uk.ts
6765
data/locale/uk.ts
File diff suppressed because it is too large
Load Diff
6856
data/locale/zh_TW.ts
6856
data/locale/zh_TW.ts
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 109 KiB |
@@ -81,6 +81,12 @@ TextFloat {
|
||||
}
|
||||
|
||||
|
||||
/* splash screen text */
|
||||
QSplashScreen QLabel {
|
||||
color: white;
|
||||
}
|
||||
|
||||
|
||||
QMenu {
|
||||
border-top: 2px solid #08993E;
|
||||
background-color: #15191c;
|
||||
|
||||
2
debian/changelog
vendored
2
debian/changelog
vendored
@@ -1,4 +1,4 @@
|
||||
lmms (1.2.0~rc7.1) unstable; urgency=low
|
||||
lmms (@VERSION@) unstable; urgency=low
|
||||
|
||||
* Upstream integration.
|
||||
* Drop Debian menu entry (policy 9.6).
|
||||
|
||||
@@ -47,6 +47,7 @@ protected:
|
||||
DropToolBar * addDropToolBar(Qt::ToolBarArea whereToAdd, QString const & windowTitle);
|
||||
DropToolBar * addDropToolBar(QWidget * parent, Qt::ToolBarArea whereToAdd, QString const & windowTitle);
|
||||
|
||||
virtual void closeEvent( QCloseEvent * _ce );
|
||||
protected slots:
|
||||
virtual void play() {}
|
||||
virtual void record() {}
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
|
||||
|
||||
#include "export.h"
|
||||
#include "lmms_basics.h"
|
||||
|
||||
class BBTrackContainer;
|
||||
class DummyTrackContainer;
|
||||
@@ -100,6 +101,9 @@ public:
|
||||
{
|
||||
return s_framesPerTick;
|
||||
}
|
||||
|
||||
static float framesPerTick(sample_rate_t sample_rate);
|
||||
|
||||
static void updateFramesPerTick();
|
||||
|
||||
static inline LmmsCore * inst()
|
||||
|
||||
@@ -171,7 +171,10 @@ public:
|
||||
return m_audioDevStartFailed;
|
||||
}
|
||||
|
||||
//! Set new audio device. Old device will be deleted,
|
||||
//! unless it's stored using storeAudioDevice
|
||||
void setAudioDevice( AudioDevice * _dev , bool startNow );
|
||||
//! See overloaded function
|
||||
void setAudioDevice( AudioDevice * _dev,
|
||||
const struct qualitySettings & _qs,
|
||||
bool _needs_fifo,
|
||||
@@ -396,6 +399,7 @@ private:
|
||||
bool m_isProcessing;
|
||||
|
||||
// audio device stuff
|
||||
void doSetAudioDevice( AudioDevice *_dev );
|
||||
AudioDevice * m_audioDev;
|
||||
AudioDevice * m_oldAudioDev;
|
||||
QString m_audioDevName;
|
||||
|
||||
@@ -302,6 +302,7 @@ private:
|
||||
NotePlayHandleList m_subNotes; // used for chords and arpeggios
|
||||
volatile bool m_released; // indicates whether note is released
|
||||
bool m_releaseStarted;
|
||||
bool m_hasMidiNote;
|
||||
bool m_hasParent; // indicates whether note has parent
|
||||
NotePlayHandle * m_parent; // parent note
|
||||
bool m_hadChildren;
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
class JournallingObject;
|
||||
|
||||
|
||||
//! @warning many parts of this class may be rewritten soon
|
||||
class ProjectJournal
|
||||
{
|
||||
public:
|
||||
@@ -76,7 +77,9 @@ public:
|
||||
reallocID( _id, NULL );
|
||||
}
|
||||
|
||||
//! hack, not used when saving a file
|
||||
static jo_id_t idToSave( jo_id_t id );
|
||||
//! hack, not used when loading a savefile
|
||||
static jo_id_t idFromSave( jo_id_t id );
|
||||
|
||||
void clearJournal();
|
||||
|
||||
@@ -265,6 +265,8 @@ public slots:
|
||||
void sampleRateChanged();
|
||||
|
||||
private:
|
||||
static sample_rate_t mixerSampleRate();
|
||||
|
||||
void update( bool _keep_settings = false );
|
||||
|
||||
void convertIntToFloat ( int_sample_t * & _ibuf, f_cnt_t _frames, int _channels);
|
||||
|
||||
@@ -126,6 +126,9 @@ private slots:
|
||||
void toggleDisplayWaveform( bool en );
|
||||
void toggleDisableAutoquit( bool en );
|
||||
|
||||
void vstEmbedMethodChanged();
|
||||
void toggleVSTAlwaysOnTop( bool en );
|
||||
|
||||
void setLanguage( int lang );
|
||||
|
||||
|
||||
@@ -207,6 +210,8 @@ private:
|
||||
|
||||
QComboBox* m_vstEmbedComboBox;
|
||||
QString m_vstEmbedMethod;
|
||||
LedCheckBox * m_vstAlwaysOnTopCheckBox;
|
||||
bool m_vstAlwaysOnTop;
|
||||
} ;
|
||||
|
||||
|
||||
|
||||
@@ -75,6 +75,9 @@ public:
|
||||
|
||||
public slots:
|
||||
void scrolled( int new_pos );
|
||||
void selectRegionFromPixels(int xStart, int xEnd);
|
||||
void stopSelectRegion();
|
||||
void updateRubberband();
|
||||
|
||||
void setEditMode( EditMode mode );
|
||||
void setEditModeDraw();
|
||||
@@ -85,6 +88,9 @@ public slots:
|
||||
|
||||
protected:
|
||||
virtual void closeEvent( QCloseEvent * ce );
|
||||
virtual void mousePressEvent(QMouseEvent * me);
|
||||
virtual void mouseMoveEvent(QMouseEvent * me);
|
||||
virtual void mouseReleaseEvent(QMouseEvent * me);
|
||||
|
||||
private slots:
|
||||
void setHighQuality( bool );
|
||||
@@ -109,6 +115,9 @@ private:
|
||||
|
||||
virtual bool allowRubberband() const;
|
||||
|
||||
int trackIndexFromSelectionPoint(int yPos);
|
||||
int indexOfTrackView(const TrackView* tv);
|
||||
|
||||
|
||||
Song * m_song;
|
||||
|
||||
@@ -135,6 +144,14 @@ private:
|
||||
bool m_smoothScroll;
|
||||
|
||||
EditMode m_mode;
|
||||
QPoint m_origin;
|
||||
QPoint m_scrollPos;
|
||||
QPoint m_mousePos;
|
||||
int m_rubberBandStartTrackview;
|
||||
MidiTime m_rubberbandStartMidipos;
|
||||
int m_currentZoomingValue;
|
||||
int m_trackHeadWidth;
|
||||
bool m_selectRegion;
|
||||
|
||||
friend class SongEditorWindow;
|
||||
|
||||
|
||||
@@ -210,6 +210,12 @@ public:
|
||||
{
|
||||
return m_tco;
|
||||
}
|
||||
|
||||
inline TrackView * getTrackView()
|
||||
{
|
||||
return m_trackView;
|
||||
}
|
||||
|
||||
// qproperty access func
|
||||
QColor mutedColor() const;
|
||||
QColor mutedBackgroundColor() const;
|
||||
@@ -229,7 +235,7 @@ public:
|
||||
// access needsUpdate member variable
|
||||
bool needsUpdate();
|
||||
void setNeedsUpdate( bool b );
|
||||
|
||||
|
||||
public slots:
|
||||
virtual bool close();
|
||||
void cut();
|
||||
@@ -256,10 +262,6 @@ protected:
|
||||
|
||||
float pixelsPerTact();
|
||||
|
||||
inline TrackView * getTrackView()
|
||||
{
|
||||
return m_trackView;
|
||||
}
|
||||
|
||||
DataFile createTCODataFiles(const QVector<TrackContentObjectView *> & tcos) const;
|
||||
|
||||
@@ -341,7 +343,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
bool canPasteSelection( MidiTime tcoPos, const QMimeData * mimeData );
|
||||
bool canPasteSelection( MidiTime tcoPos, const QDropEvent *de );
|
||||
bool pasteSelection( MidiTime tcoPos, QDropEvent * de );
|
||||
|
||||
MidiTime endPosition( const MidiTime & posStart );
|
||||
|
||||
@@ -133,27 +133,21 @@ public slots:
|
||||
|
||||
virtual void dropEvent( QDropEvent * _de );
|
||||
virtual void dragEnterEvent( QDragEnterEvent * _dee );
|
||||
///
|
||||
/// \brief selectRegionFromPixels
|
||||
/// \param x
|
||||
/// \param y
|
||||
/// Use the rubber band to select TCO from all tracks using x, y pixels
|
||||
void selectRegionFromPixels(int xStart, int xEnd);
|
||||
|
||||
///
|
||||
/// \brief stopRubberBand
|
||||
/// Removes the rubber band from display when finished with.
|
||||
void stopRubberBand();
|
||||
|
||||
|
||||
protected:
|
||||
static const int DEFAULT_PIXELS_PER_TACT = 16;
|
||||
|
||||
virtual void mousePressEvent( QMouseEvent * _me );
|
||||
virtual void mouseMoveEvent( QMouseEvent * _me );
|
||||
virtual void mouseReleaseEvent( QMouseEvent * _me );
|
||||
|
||||
virtual void resizeEvent( QResizeEvent * );
|
||||
|
||||
MidiTime m_currentPosition;
|
||||
RubberBand *rubberBand() const;
|
||||
|
||||
|
||||
private:
|
||||
@@ -187,7 +181,7 @@ private:
|
||||
float m_ppt;
|
||||
|
||||
RubberBand * m_rubberBand;
|
||||
QPoint m_origin;
|
||||
|
||||
|
||||
|
||||
signals:
|
||||
|
||||
@@ -76,10 +76,10 @@ private slots:
|
||||
private:
|
||||
struct VstSyncData
|
||||
{
|
||||
bool isPlaying;
|
||||
double ppqPos;
|
||||
int timeSigNumer;
|
||||
int timeSigDenom;
|
||||
bool isPlaying;
|
||||
bool isCycle;
|
||||
bool hasSHM;
|
||||
float cycleStart;
|
||||
|
||||
@@ -41,10 +41,10 @@
|
||||
|
||||
struct VstSyncData
|
||||
{
|
||||
bool isPlaying;
|
||||
double ppqPos;
|
||||
int timeSigNumer;
|
||||
int timeSigDenom;
|
||||
bool isPlaying;
|
||||
bool isCycle;
|
||||
bool hasSHM;
|
||||
float cycleStart;
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
#include <cmath>
|
||||
using namespace std;
|
||||
|
||||
#if defined (LMMS_BUILD_WIN32) || defined (LMMS_BUILD_APPLE) || defined(LMMS_BUILD_HAIKU) || defined (__FreeBSD__) || defined(__OpenBSD__)
|
||||
#ifndef __GLIBC__
|
||||
#ifndef isnanf
|
||||
#define isnanf(x) isnan(x)
|
||||
#endif
|
||||
|
||||
@@ -28,6 +28,10 @@
|
||||
#define PLATFORM "OpenBSD"
|
||||
#endif
|
||||
|
||||
#ifdef LMMS_BUILD_FREEBSD
|
||||
#define PLATFORM "FreeBSD"
|
||||
#endif
|
||||
|
||||
#ifdef LMMS_BUILD_WIN32
|
||||
#define PLATFORM "win32"
|
||||
#endif
|
||||
|
||||
@@ -55,10 +55,10 @@ EqControlsDialog::EqControlsDialog( EqControls *controls ) :
|
||||
|
||||
EqSpectrumView * inSpec = new EqSpectrumView( &controls->m_inFftBands, this );
|
||||
inSpec->move( 26, 17 );
|
||||
inSpec->setColor( QColor( 54, 45, 142, 150 ) );
|
||||
inSpec->setColor( QColor( 77, 101, 242, 150 ) );
|
||||
|
||||
EqSpectrumView * outSpec = new EqSpectrumView( &controls->m_outFftBands, this );
|
||||
outSpec->setColor( QColor( 9, 166, 156, 150 ) );
|
||||
outSpec->setColor( QColor( 0, 255, 239, 150 ) );
|
||||
outSpec->move( 26, 17 );
|
||||
|
||||
m_parameterWidget = new EqParameterWidget( this , controls );
|
||||
|
||||
@@ -45,11 +45,11 @@ EqAnalyser::EqAnalyser() :
|
||||
const float a2 = 0.14128;
|
||||
const float a3 = 0.01168;
|
||||
|
||||
for(int i = 0; i < FFT_BUFFER_SIZE; i++)
|
||||
for (int i = 0; i < FFT_BUFFER_SIZE; i++)
|
||||
{
|
||||
m_fftWindow[i] = ( a0 - a1 * cosf( 2 * F_PI * i / (float)FFT_BUFFER_SIZE - 1 )
|
||||
+ a2 * cosf( 4 * F_PI * i / (float)FFT_BUFFER_SIZE-1)
|
||||
- a3 * cos( 6 * F_PI * i / (float)FFT_BUFFER_SIZE - 1.0 ));
|
||||
m_fftWindow[i] = (a0 - a1 * cos(2 * F_PI * i / ((float)FFT_BUFFER_SIZE - 1.0))
|
||||
+ a2 * cos(4 * F_PI * i / ((float)FFT_BUFFER_SIZE - 1.0))
|
||||
- a3 * cos(6 * F_PI * i / ((float)FFT_BUFFER_SIZE - 1.0)));
|
||||
}
|
||||
clear();
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@ LadspaControls::LadspaControls( LadspaEffect * _eff ) :
|
||||
{
|
||||
|
||||
connect( &m_stereoLinkModel, SIGNAL( dataChanged() ),
|
||||
this, SLOT( updateLinkStatesFromGlobal() ) );
|
||||
this, SLOT( updateLinkStatesFromGlobal() ),
|
||||
Qt::DirectConnection );
|
||||
|
||||
multi_proc_t controls = m_effect->getPortControls();
|
||||
m_controlCount = controls.count();
|
||||
@@ -59,7 +60,8 @@ LadspaControls::LadspaControls( LadspaEffect * _eff ) :
|
||||
if( linked_control )
|
||||
{
|
||||
connect( (*it)->control, SIGNAL( linkChanged( int, bool ) ),
|
||||
this, SLOT( linkPort( int, bool ) ) );
|
||||
this, SLOT( linkPort( int, bool ) ),
|
||||
Qt::DirectConnection );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -145,9 +145,6 @@ void VstEffect::openPlugin( const QString & _plugin )
|
||||
return;
|
||||
}
|
||||
|
||||
VstPlugin::connect( Engine::getSong(), SIGNAL( tempoChanged( bpm_t ) ), m_plugin.data(), SLOT( setTempo( bpm_t ) ) );
|
||||
m_plugin->setTempo( Engine::getSong()->getTempo() );
|
||||
|
||||
delete tf;
|
||||
|
||||
m_key.attributes["file"] = _plugin;
|
||||
|
||||
@@ -522,7 +522,7 @@ AudioFileProcessorView::AudioFileProcessorView( Instrument * _instrument,
|
||||
"loop_pingpong_on" ) );
|
||||
m_loopPingPongButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap(
|
||||
"loop_pingpong_off" ) );
|
||||
ToolTip::add( m_loopPingPongButton, tr( "Enable loop" ) );
|
||||
ToolTip::add( m_loopPingPongButton, tr( "Enable ping-pong loop" ) );
|
||||
m_loopPingPongButton->setWhatsThis(
|
||||
tr( "This button enables ping-pong-looping. "
|
||||
"The sample loops backwards and forwards between the end point "
|
||||
@@ -795,6 +795,7 @@ AudioFileProcessorWaveView::AudioFileProcessorWaveView( QWidget * _parent, int _
|
||||
|
||||
m_graph.fill( Qt::transparent );
|
||||
update();
|
||||
updateCursor();
|
||||
}
|
||||
|
||||
|
||||
@@ -811,7 +812,7 @@ void AudioFileProcessorWaveView::isPlaying( f_cnt_t _current_frame )
|
||||
|
||||
void AudioFileProcessorWaveView::enterEvent( QEvent * _e )
|
||||
{
|
||||
QApplication::setOverrideCursor( Qt::OpenHandCursor );
|
||||
updateCursor();
|
||||
}
|
||||
|
||||
|
||||
@@ -819,10 +820,7 @@ void AudioFileProcessorWaveView::enterEvent( QEvent * _e )
|
||||
|
||||
void AudioFileProcessorWaveView::leaveEvent( QEvent * _e )
|
||||
{
|
||||
while( QApplication::overrideCursor() )
|
||||
{
|
||||
QApplication::restoreOverrideCursor();
|
||||
}
|
||||
updateCursor();
|
||||
}
|
||||
|
||||
|
||||
@@ -850,7 +848,7 @@ void AudioFileProcessorWaveView::mousePressEvent( QMouseEvent * _me )
|
||||
else
|
||||
{
|
||||
m_draggingType = wave;
|
||||
QApplication::setOverrideCursor( Qt::ClosedHandCursor );
|
||||
updateCursor(_me);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -862,7 +860,7 @@ void AudioFileProcessorWaveView::mouseReleaseEvent( QMouseEvent * _me )
|
||||
m_isDragging = false;
|
||||
if( m_draggingType == wave )
|
||||
{
|
||||
QApplication::restoreOverrideCursor();
|
||||
updateCursor(_me);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -873,22 +871,7 @@ void AudioFileProcessorWaveView::mouseMoveEvent( QMouseEvent * _me )
|
||||
{
|
||||
if( ! m_isDragging )
|
||||
{
|
||||
const bool is_size_cursor =
|
||||
QApplication::overrideCursor()->shape() == Qt::SizeHorCursor;
|
||||
|
||||
if( isCloseTo( _me->x(), m_startFrameX ) ||
|
||||
isCloseTo( _me->x(), m_endFrameX ) ||
|
||||
isCloseTo( _me->x(), m_loopFrameX ) )
|
||||
{
|
||||
if( ! is_size_cursor )
|
||||
{
|
||||
QApplication::setOverrideCursor( Qt::SizeHorCursor );
|
||||
}
|
||||
}
|
||||
else if( is_size_cursor )
|
||||
{
|
||||
QApplication::restoreOverrideCursor();
|
||||
}
|
||||
updateCursor(_me);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1261,6 +1244,24 @@ void AudioFileProcessorWaveView::reverse()
|
||||
|
||||
|
||||
|
||||
void AudioFileProcessorWaveView::updateCursor( QMouseEvent * _me )
|
||||
{
|
||||
bool const waveIsDragged = m_isDragging && (m_draggingType == wave);
|
||||
bool const pointerCloseToStartEndOrLoop = (_me != nullptr ) &&
|
||||
( isCloseTo( _me->x(), m_startFrameX ) ||
|
||||
isCloseTo( _me->x(), m_endFrameX ) ||
|
||||
isCloseTo( _me->x(), m_loopFrameX ) );
|
||||
|
||||
if( !m_isDragging && pointerCloseToStartEndOrLoop)
|
||||
setCursor(Qt::SizeHorCursor);
|
||||
else if( waveIsDragged )
|
||||
setCursor(Qt::ClosedHandCursor);
|
||||
else
|
||||
setCursor(Qt::OpenHandCursor);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void AudioFileProcessorWaveView::knob::slideTo( double _v, bool _check_bound )
|
||||
{
|
||||
|
||||
@@ -211,7 +211,6 @@ public:
|
||||
|
||||
private:
|
||||
bool checkBound( double _v ) const;
|
||||
|
||||
} ;
|
||||
|
||||
|
||||
@@ -276,6 +275,7 @@ private:
|
||||
|
||||
void updateGraph();
|
||||
void reverse();
|
||||
void updateCursor( QMouseEvent * _me = nullptr );
|
||||
|
||||
static bool isCloseTo( int _a, int _b )
|
||||
{
|
||||
|
||||
@@ -519,7 +519,7 @@ NesInstrument::NesInstrument( InstrumentTrack * instrumentTrack ) :
|
||||
m_ch3Volume( 15.f, 0.f, 15.f, 1.f, this, tr( "Channel 3 Volume" ) ),
|
||||
|
||||
//channel 4
|
||||
m_ch4Enabled( true, this ),
|
||||
m_ch4Enabled( false, this ),
|
||||
m_ch4Volume( 15.f, 0.f, 15.f, 1.f, this, tr( "Channel 4 Volume" ) ),
|
||||
|
||||
m_ch4EnvEnabled( false, this ),
|
||||
|
||||
@@ -307,7 +307,7 @@ void organicInstrument::playNote( NotePlayHandle * _n,
|
||||
// fxKnob is [0;1]
|
||||
float t = m_fx1Model.value();
|
||||
|
||||
for (int i=0 ; i < frames ; i++)
|
||||
for (int i=0 ; i < frames + offset ; i++)
|
||||
{
|
||||
_working_buffer[i][0] = waveshape( _working_buffer[i][0], t ) *
|
||||
m_volModel.value() / 100.0f;
|
||||
|
||||
@@ -104,11 +104,11 @@ papuInstrument::papuInstrument( InstrumentTrack * _instrument_track ) :
|
||||
m_ch1So1Model( true, this, tr( "Channel 1 to SO2 (Left)" ) ),
|
||||
m_ch2So1Model( true, this, tr( "Channel 2 to SO2 (Left)" ) ),
|
||||
m_ch3So1Model( true, this, tr( "Channel 3 to SO2 (Left)" ) ),
|
||||
m_ch4So1Model( true, this, tr( "Channel 4 to SO2 (Left)" ) ),
|
||||
m_ch4So1Model( false, this, tr( "Channel 4 to SO2 (Left)" ) ),
|
||||
m_ch1So2Model( true, this, tr( "Channel 1 to SO1 (Right)" ) ),
|
||||
m_ch2So2Model( true, this, tr( "Channel 2 to SO1 (Right)" ) ),
|
||||
m_ch3So2Model( true, this, tr( "Channel 3 to SO1 (Right)" ) ),
|
||||
m_ch4So2Model( true, this, tr( "Channel 4 to SO1 (Right)" ) ),
|
||||
m_ch4So2Model( false, this, tr( "Channel 4 to SO1 (Right)" ) ),
|
||||
m_trebleModel( -20.0f, -100.0f, 200.0f, 1.0f, this, tr( "Treble" ) ),
|
||||
m_bassModel( 461.0f, -1.0f, 600.0f, 1.0f, this, tr( "Bass" ) ),
|
||||
|
||||
|
||||
@@ -181,7 +181,13 @@ vestigeInstrument::~vestigeInstrument()
|
||||
|
||||
void vestigeInstrument::loadSettings( const QDomElement & _this )
|
||||
{
|
||||
loadFile( _this.attribute( "plugin" ) );
|
||||
QString plugin = _this.attribute( "plugin" );
|
||||
if( plugin.isEmpty() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
loadFile( plugin );
|
||||
m_pluginMutex.lock();
|
||||
if( m_plugin != NULL )
|
||||
{
|
||||
@@ -601,7 +607,7 @@ VestigeInstrumentView::VestigeInstrumentView( Instrument * _instrument,
|
||||
QPushButton * note_off_all_btn = new QPushButton( tr( "Turn off all "
|
||||
"notes" ), this );
|
||||
note_off_all_btn->setGeometry( 20, 160, 200, 24 );
|
||||
note_off_all_btn->setIcon( embed::getIconPixmap( "state_stop" ) );
|
||||
note_off_all_btn->setIcon( embed::getIconPixmap( "stop" ) );
|
||||
note_off_all_btn->setFont( pointSize<8>( note_off_all_btn->font() ) );
|
||||
connect( note_off_all_btn, SIGNAL( clicked() ), this,
|
||||
SLOT( noteOffAll() ) );
|
||||
|
||||
@@ -54,6 +54,8 @@ SET(WINE_CXX_ARGS
|
||||
-I${WINE_INCLUDE_BASE_DIR}
|
||||
-I${WINE_INCLUDE_DIR}/windows
|
||||
-L${WINE_LIBRARY_DIR}
|
||||
# Work around https://bugs.winehq.org/show_bug.cgi?id=47710
|
||||
-D__WIDL_objidl_generated_name_0000000C=""
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/RemoteVstPlugin.cpp
|
||||
-std=c++0x
|
||||
-mwindows -lpthread -lole32 ${EXTRA_FLAGS} -fno-omit-frame-pointer
|
||||
|
||||
@@ -718,6 +718,7 @@ void RemoteVstPlugin::init( const std::string & _plugin_file )
|
||||
|
||||
static void close_check( FILE* fp )
|
||||
{
|
||||
if (!fp) {return;}
|
||||
if( fclose( fp ) )
|
||||
{
|
||||
perror( "close" );
|
||||
@@ -775,10 +776,6 @@ void RemoteVstPlugin::initEditor()
|
||||
SWP_NOMOVE | SWP_NOZORDER );
|
||||
pluginDispatch( effEditTop );
|
||||
|
||||
if (! EMBED) {
|
||||
showEditor();
|
||||
}
|
||||
|
||||
#ifdef LMMS_BUILD_LINUX
|
||||
m_windowID = (intptr_t) GetProp( m_window, "__wine_x11_whole_window" );
|
||||
#else
|
||||
@@ -1119,6 +1116,12 @@ void RemoteVstPlugin::saveChunkToFile( const std::string & _file )
|
||||
if( len > 0 )
|
||||
{
|
||||
FILE* fp = F_OPEN_UTF8( _file, "wb" );
|
||||
if (!fp)
|
||||
{
|
||||
fprintf( stderr,
|
||||
"Error opening file for saving chunk.\n" );
|
||||
return;
|
||||
}
|
||||
if ( fwrite( chunk, 1, len, fp ) != len )
|
||||
{
|
||||
fprintf( stderr,
|
||||
@@ -1284,6 +1287,12 @@ void RemoteVstPlugin::savePreset( const std::string & _file )
|
||||
pBank->numPrograms = endian_swap( uIntToFile );
|
||||
|
||||
FILE * stream = F_OPEN_UTF8( _file, "w" );
|
||||
if (!stream)
|
||||
{
|
||||
fprintf( stderr,
|
||||
"Error opening file for saving preset.\n" );
|
||||
return;
|
||||
}
|
||||
fwrite ( pBank, 1, 28, stream );
|
||||
fwrite ( progName, 1, isPreset ? 28 : 128, stream );
|
||||
if ( chunky ) {
|
||||
@@ -1336,6 +1345,12 @@ void RemoteVstPlugin::loadPresetFile( const std::string & _file )
|
||||
unsigned int len = 0;
|
||||
sBank * pBank = (sBank*) new char[ sizeof( sBank ) ];
|
||||
FILE * stream = F_OPEN_UTF8( _file, "r" );
|
||||
if (!stream)
|
||||
{
|
||||
fprintf( stderr,
|
||||
"Error opening file for loading preset.\n" );
|
||||
return;
|
||||
}
|
||||
if ( fread ( pBank, 1, 56, stream ) != 56 )
|
||||
{
|
||||
fprintf( stderr, "Error loading preset file.\n" );
|
||||
@@ -1437,6 +1452,12 @@ void RemoteVstPlugin::loadChunkFromFile( const std::string & _file, int _len )
|
||||
char * chunk = new char[_len];
|
||||
|
||||
FILE* fp = F_OPEN_UTF8( _file, "rb" );
|
||||
if (!fp)
|
||||
{
|
||||
fprintf( stderr,
|
||||
"Error opening file for loading chunk.\n" );
|
||||
return;
|
||||
}
|
||||
if ( fread( chunk, 1, _len, fp ) != _len )
|
||||
{
|
||||
fprintf( stderr, "Error loading chunk from file.\n" );
|
||||
@@ -1957,7 +1978,8 @@ DWORD WINAPI RemoteVstPlugin::processingThread( LPVOID _param )
|
||||
{
|
||||
if( m.id == IdStartProcessing
|
||||
|| m.id == IdMidiEvent
|
||||
|| m.id == IdVstSetParameter )
|
||||
|| m.id == IdVstSetParameter
|
||||
|| m.id == IdVstSetTempo )
|
||||
{
|
||||
_this->processMessage( m );
|
||||
}
|
||||
|
||||
@@ -92,7 +92,7 @@ VstPlugin::VstPlugin( const QString & _plugin ) :
|
||||
setTempo( Engine::getSong()->getTempo() );
|
||||
|
||||
connect( Engine::getSong(), SIGNAL( tempoChanged( bpm_t ) ),
|
||||
this, SLOT( setTempo( bpm_t ) ) );
|
||||
this, SLOT( setTempo( bpm_t ) ), Qt::DirectConnection );
|
||||
connect( Engine::mixer(), SIGNAL( sampleRateChanged() ),
|
||||
this, SLOT( updateSampleRate() ) );
|
||||
|
||||
@@ -329,7 +329,9 @@ bool VstPlugin::processMessage( const message & _m )
|
||||
|
||||
case IdVstPluginWindowID:
|
||||
m_pluginWindowID = _m.getInt();
|
||||
if( m_embedMethod == "none" )
|
||||
if( m_embedMethod == "none"
|
||||
&& ConfigManager::inst()->value(
|
||||
"ui", "vstalwaysontop" ).toInt() )
|
||||
{
|
||||
#ifdef LMMS_BUILD_WIN32
|
||||
// We're changing the owner, not the parent,
|
||||
|
||||
@@ -2,7 +2,7 @@ INCLUDE(BuildPlugin)
|
||||
|
||||
|
||||
# definitions for ZynAddSubFX
|
||||
IF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE OR LMMS_BUILD_OPENBSD)
|
||||
IF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE OR LMMS_BUILD_OPENBSD OR LMMS_BUILD_FREEBSD)
|
||||
FIND_PACKAGE(X11)
|
||||
INCLUDE_DIRECTORIES(${X11_INCLUDE_DIR})
|
||||
ADD_DEFINITIONS(-DOS_LINUX)
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <QDir>
|
||||
#include <QDomDocument>
|
||||
#include <QTemporaryFile>
|
||||
#include <QtGlobal>
|
||||
#include <QDropEvent>
|
||||
#include <QGridLayout>
|
||||
#include <QPushButton>
|
||||
@@ -291,6 +292,10 @@ void ZynAddSubFxInstrument::loadSettings( const QDomElement & _this )
|
||||
|
||||
emit settingsChanged();
|
||||
}
|
||||
// FIXME: Remove this check in future versions. Slots are public in Qt5+
|
||||
#if QT_VERSION >= 0x050000
|
||||
emit instrumentTrack()->pitchModel()->dataChanged();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -188,6 +188,7 @@ void Bank::loadfromslot(unsigned int ninstrument, Part *part)
|
||||
*/
|
||||
int Bank::loadbank(string bankdirname)
|
||||
{
|
||||
normalizedirsuffix(bankdirname);
|
||||
DIR *dir = opendir(bankdirname.c_str());
|
||||
clearbank();
|
||||
|
||||
@@ -255,9 +256,15 @@ int Bank::newbank(string newbankdirname)
|
||||
string bankdir;
|
||||
bankdir = config.cfg.bankRootDirList[0];
|
||||
|
||||
if(((bankdir[bankdir.size() - 1]) != '/')
|
||||
&& ((bankdir[bankdir.size() - 1]) != '\\'))
|
||||
bankdir += "/";
|
||||
expanddirname(bankdir);
|
||||
normalizedirsuffix(bankdir);
|
||||
|
||||
// FIXME: Zyn should automatically handle creation of parent directory
|
||||
#ifdef WIN32
|
||||
if(mkdir(bankdir.c_str()) < 0) return -1;
|
||||
#else
|
||||
if(mkdir(bankdir.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH)) return -1;
|
||||
#endif
|
||||
|
||||
bankdir += newbankdirname;
|
||||
#ifdef WIN32
|
||||
@@ -355,6 +362,8 @@ void Bank::rescanforbanks()
|
||||
|
||||
void Bank::scanrootdir(string rootdir)
|
||||
{
|
||||
expanddirname(rootdir);
|
||||
|
||||
DIR *dir = opendir(rootdir.c_str());
|
||||
if(dir == NULL)
|
||||
return;
|
||||
@@ -472,3 +481,23 @@ Bank::ins_t::ins_t()
|
||||
{
|
||||
info.PADsynth_used = false;
|
||||
}
|
||||
|
||||
void Bank::expanddirname(std::string &dirname) {
|
||||
if (dirname.empty())
|
||||
return;
|
||||
|
||||
// if the directory name starts with a ~ and the $HOME variable is
|
||||
// defined in the environment, replace ~ by the content of $HOME
|
||||
if (dirname.at(0) == '~') {
|
||||
char *home_dirname = getenv("HOME");
|
||||
if (home_dirname != NULL) {
|
||||
dirname = std::string(home_dirname) + dirname.substr(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Bank::normalizedirsuffix(string &dirname) const {
|
||||
if(((dirname[dirname.size() - 1]) != '/')
|
||||
&& ((dirname[dirname.size() - 1]) != '\\'))
|
||||
dirname += "/";
|
||||
}
|
||||
|
||||
@@ -99,6 +99,13 @@ class Bank
|
||||
std::string dirname;
|
||||
|
||||
void scanrootdir(std::string rootdir); //scans a root dir for banks
|
||||
|
||||
/** Expends ~ prefix in dirname, if any */
|
||||
void expanddirname(std::string &dirname);
|
||||
|
||||
/** Ensure that the directory name is suffixed by a
|
||||
* directory separator */
|
||||
void normalizedirsuffix(std::string &dirname) const;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
2
src/3rdparty/CMakeLists.txt
vendored
2
src/3rdparty/CMakeLists.txt
vendored
@@ -1,7 +1,7 @@
|
||||
set(CMAKE_C_FLAGS "")
|
||||
set(CMAKE_CXX_FLAGS "")
|
||||
|
||||
IF(QT5 AND LMMS_BUILD_LINUX)
|
||||
IF(QT5 AND LMMS_BUILD_LINUX AND WANT_VST)
|
||||
set(BUILD_SHARED_LIBS OFF)
|
||||
add_subdirectory(qt5-x11embed)
|
||||
ENDIF()
|
||||
|
||||
@@ -796,6 +796,16 @@ void AutomationPattern::resolveAllIDs()
|
||||
{
|
||||
a->addObject( dynamic_cast<AutomatableModel *>( o ), false );
|
||||
}
|
||||
else
|
||||
{
|
||||
// FIXME: Remove this block once the automation system gets fixed
|
||||
// This is a temporary fix for https://github.com/LMMS/lmms/issues/4781
|
||||
o = Engine::projectJournal()->journallingObject(ProjectJournal::idToSave(*k));
|
||||
if( o && dynamic_cast<AutomatableModel *>( o ) )
|
||||
{
|
||||
a->addObject( dynamic_cast<AutomatableModel *>( o ), false );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
a->m_idsToResolve.clear();
|
||||
|
||||
@@ -524,8 +524,9 @@ void ConfigManager::loadConfigFile( const QString & configFile )
|
||||
cfg_file.close();
|
||||
}
|
||||
|
||||
|
||||
// Plugins are searched recursively, blacklist problematic locations
|
||||
if( m_vstDir.isEmpty() || m_vstDir == QDir::separator() || m_vstDir == "/" ||
|
||||
m_vstDir == ensureTrailingSlash( QDir::homePath() ) ||
|
||||
!QDir( m_vstDir ).exists() )
|
||||
{
|
||||
#ifdef LMMS_BUILD_WIN32
|
||||
|
||||
@@ -211,7 +211,9 @@ void ControllerConnection::loadSettings( const QDomElement & _this )
|
||||
m_controllerId = -1;
|
||||
}
|
||||
|
||||
if (!Engine::getSong()->isLoadingProject() && m_controllerId != -1)
|
||||
if (!Engine::getSong()->isLoadingProject()
|
||||
&& m_controllerId != -1
|
||||
&& m_controllerId < Engine::getSong()->controllers().size())
|
||||
{
|
||||
setController( Engine::getSong()->
|
||||
controllers().at( m_controllerId ) );
|
||||
|
||||
@@ -119,7 +119,10 @@ void DrumSynth::GetEnv(int env, const char *sec, const char *key, QString ini)
|
||||
char en[256], s[8];
|
||||
int i=0, o=0, ep=0;
|
||||
GetPrivateProfileString(sec, key, "0,0 100,0", en, sizeof(en), ini);
|
||||
en[255]=0; //be safe!
|
||||
|
||||
//be safe!
|
||||
en[255]=0;
|
||||
s[0]=0;
|
||||
|
||||
while(en[i]!=0)
|
||||
{
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user