Compare commits

...

79 Commits

Author SHA1 Message Date
Hyunjin Song
dbf5f47149 Bump version to 1.2.1 2019-10-21 09:27:12 +09:00
Raine M. Ekman
4f11cf1b23 Make SampleBuffer adjust its members when resampling
Fixes #5218.
2019-10-19 22:41:51 +03:00
Oskar Wallgren
a9262b9613 Fix Organic offset glitch (#5252) 2019-10-19 11:40:06 +02:00
David Carlier
732448c392 FreeBSD build version 2019-10-18 16:52:38 +02:00
Hyunjin Song
95c46a805d RemoteVstPlugin: fix crashes when failed to open a file (#5235) 2019-10-15 11:18:46 +09:00
Oskar Wallgren
6dee6a4418 Show icon on 'Turn off all notes' button (#5237)
Backporting fix from 2815da2805
by @karmux
2019-10-12 17:41:30 +02:00
Oskar Wallgren
e321dff733 Translation Fixes (Continuation of #4482) (#5185)
Fix some formatting issues with some translations. 

* Russian
* Polish
* Swedish
* Ukrainian
2019-10-10 19:01:17 +02:00
Steffen Baranowsky
5aa87886c9 Rubberband fix for selecting large area in Songeditor (#5003) 2019-10-07 18:13:44 +02:00
Hyunjin Song
16390f61a5 Work around a winegcc bug of Wine >= 4.14 (#5210)
See https://bugs.winehq.org/show_bug.cgi?id=47710 for details
2019-10-07 08:01:48 +09:00
Oskar Wallgren
419321dd01 Only MacOS and Windows are case insensitive (#4768) 2019-09-16 07:09:42 +02:00
Shmuel H
0059c6e71f Fix #4188 - Check for failed qFind (#5184) 2019-09-14 20:35:54 +03:00
Hyunjin Song
c436e5ca57 Remove MIDI connections from factory .mmpz files (#5163) 2019-09-13 07:54:48 +09:00
Dominic Clark
2e84cd3e0c Fix stuck keys when dragging on piano view (#5127)
* Fix stuck keys when dragging on piano view
* Add comment

Co-Authored-By: Shmuel H. <shmuelhazan0@gmail.com>
2019-09-08 14:43:15 +02:00
Spekular
8568ae4eac Make splash screen text white (#5149)
Make splash screen text white
Closes #5023
2019-08-27 09:24:13 -04:00
Artur Twardowski
a631c0c47e Fix invalid MIDI Program Change decoding (#5154) 2019-08-26 09:05:59 +08:00
Olivier Humbert
0db83c55a0 Better French translations in the menu item file (#4711)
in order to stick with the original English meaning
2019-07-31 01:17:55 +02:00
Steffen Baranowsky
bdbea87149 show BBEditor on clicking the TrackLabelButton (#5060) 2019-07-26 10:04:16 +02:00
Olivier Humbert
3ada5b8a12 Update .mailmap (#5037) 2019-06-14 21:07:14 +02:00
Hyunjin Song
4cb243b0ef Travis: drop unneeded prefix setting for npm 2019-06-12 17:38:53 +09:00
tresf
df79f8c1be Enable dark title bar on macOS
Closes #5031
2019-06-11 22:57:01 -04:00
Hyunjin Song
0fbaca40bd Bump version to 1.2.0 2019-06-09 20:28:34 +09:00
Rebecca DeField
bfa8a4bc8c fix color profile error (#5019) 2019-06-08 11:57:56 +02:00
Tres Finocchiaro
ca06b886f5 DMG rebranding (#5013)
Rebrand macOS DMG background
- Design and artwork courtesy @RebeccaDeField
- Closes #4289
2019-06-08 01:17:15 -04:00
Johannes Lorenz
457f2c6712 Fix German translation
* Fix "Export Tracks"
* Add "Export MIDI"

[ci skip]
2019-06-07 18:33:48 +02:00
Johannes Lorenz
6e5650c50a Fixes #4996: Fix metadata when exporting multiple tracks (#5005)
Co-Authored-By: Hyunjin Song <tteu.ingog@gmail.com>
2019-06-07 18:28:11 +02:00
Rebecca DeField
d194c70391 updated splash (#5002) 2019-06-06 18:18:49 -07:00
Hyunjin Song
47d6388182 MP3 export: initialize ID3 tag with id3tag_init
Fixes wrongly set 'Blues' genre(ID 0) in exported mp3 files.
2019-06-06 20:24:06 +09:00
Hyunjin Song
c37228c7e3 Travis: fix macOS build due to the old default version of Node.js
appdmg recently dropped support for Node.js < 8.5
2019-06-06 19:33:10 +09:00
liushuyu
359de2083e i18n: update template strings 2019-06-05 19:29:07 -06:00
Shmuel H
665e50395c Bugfix - SampleTrack -> Play: Fix sample track not being played in the
right place when it not played from the begining.

That has created a difference between the ticks and the metronome and
the sample track.

The cause of the problem was that the calculation of the frame to play
was wrong: we had calculated `framesPerTick` according to the current
engine's sample rate instead of the SampleBuffer's sample rate.
2019-06-02 20:48:58 +03:00
Shmuel H
6d27f90271 Bugfix - SampleTrack -> Load & Save: Fix recorded sample track not being
played correctly after saving and loading a project due to sample rate
not getting saved in the project file.
2019-06-02 20:48:58 +03:00
Shmuel H
37f0c3f33d SampleBuffer -> Use processingSampleRate.
SampleBuffer was using baseSampleRate as the default samplerate instead of the actual processingSampleRate.
2019-06-02 20:48:58 +03:00
liushuyu
fad89d6be7 i18n: update translations from Transifex 2019-05-28 15:13:51 -06:00
Shmuel H
9c6e2278ce SampleTrack: call requestChangesInModel before unref SampleBuffer (#4982)
To avoid a race condition between the gui thread which destroys the
samplebuffer and the mixer thread which increases the buffer's ref-
count, we'll make sure to touch the ref-count only when wh're synced
with the mixer.
2019-05-27 21:26:30 +03:00
T0NIT0 RMX
ec64de0723 Fixes #4781: Don't disconnect LADSPA automation on export 2019-05-14 21:19:30 +02:00
Johannes Lorenz
4b4b470550 Extend ProjectJournal docs, thx to @DomClark 2019-05-13 20:23:01 +02:00
Hyunjin Song
934ea6d086 Fix controller loading error on loading projects
Fixes a regression in 91f9f1a890,
which added the range check into the wrong if statement.
2019-05-10 07:32:40 +09:00
Oskar Wallgren
50796b2088 Nescaline and Freeboy - Better default sound (#4968) 2019-05-09 19:51:10 +02:00
Hyunjin Song
b9503a8c70 Fix race conditions in NotePlayHandleManager (#4966)
NotePlayHandleManager::acquire uses a read lock unless the pool is empty.
If two threads try to acquire NotePlayHandle simultaneously
when the value of s_availableIndex is 1, one thread will try to read s_available[-1].
If the acquire action and the release action are done at the same time,
NotePlayHandleManager::acquire may try to read data
before NotePlayHandleManager::release actually writes.

This commit prevents them by always using the write lock when acquiring a NotePlayHandle.
2019-05-08 15:12:17 +09:00
Ron U
3dcffbf96f fix hanging mouse in piano roll (#4822) (#4960)
* fix hanging mouse in piano roll (#4822)

* fix hanging mouse in automation & pianoroll (#4822);

* fix hanging mouse in automation & pianoroll (#4822)

removed TODO comment that I forgot in the code
2019-05-06 11:00:37 +02:00
Hyunjin Song
9ff882d09d Fix invisible note editing handles when a note has detuning info
Fixes a regression in 32df2d7fba,
the clipping area was restored in a wrong place.
Also, a wrong value was used while restoring.
2019-05-06 15:43:12 +09:00
Hyunjin Song
8f4757ee3b Use extracted linuxdeployqt directly
As of https://github.com/probonopd/linuxdeployqt/pull/370/,
the AppRun of linuxdeployqt unsets LD_LIBRARY_PATH.
This behavior isn't suitable for our cases, so we use
the extracted binary directly as a workaround.
2019-05-06 12:13:22 +09:00
Hyunjin Song
32df2d7fba Don't draw note detuning info over the volume/panning area (#4965) 2019-05-05 12:39:36 +09:00
Hyunjin Song
8bcdf06c6c Travis: fix a debootstrap error from missing keyrings
Uses 18.04's debian-archive-keyring to fix the missing keyrings.
2019-04-29 16:34:35 +09:00
Dominic Clark
ca9a9564cd Make more connections direct for automation (#4942) 2019-04-26 12:59:53 +01:00
Alexandra Dutton
160d306f48 Record chords (#4938)
* Added check for chord to notes recorded from keyboard
2019-04-24 19:18:53 +02:00
Dominic Clark
461faccaa0 Fix notes getting stuck under high CPU conditions (#4908) 2019-04-24 12:50:07 +01:00
makepost
a685049627 Allow build for Wayland w/o X11Extras, if VST off
@lukas-w reminds in 134dae8 comments that X11Extras help Linux users of
VST effects #3786. Now LMMS builds and runs on Weston without X11
dependencies, though only if WANT_VST is off.
2019-04-22 09:26:33 +02:00
https://gitlab.com/users/CYBERDEViLNL
5784dd6dc9 Use local cursor for TrackContentObjectView (#4918)
Fixes crash on cloning patterns on Qt >= 5.12.
2019-04-16 06:37:20 +09:00
Spekular
5a56969af2 Allow sample track TCOs to resize smaller than one bar (#4933)
Other changes:
* Update TCO position more exact when a drag leaves a TCO and enters `TrackContentWidget` (required to detect that the cursor has really moved when leaving a TCO with length < 1 to the right)
* Use exact length when samples are loaded, don't round it up
* Reset size when reloading same file
2019-04-15 17:54:18 +02:00
Noah Brecht
91f9f1a890 Don't try to connect to nonexistent controllers (#4939)
Fixes crash on loading presets with controllers.
2019-04-14 19:26:49 +09:00
Gingka Akiyama
82e3ba75c6 [Equalizer] Bright analyzer colors, opacity increased (#4772)
* [Equalizer] Bright analyzer colors, opacity incr

Brightened spectrum analyzer colors and increased opacity a tad to make more visible

* Fixed RGB Value

* Update EqControlsDialog.cpp

* Fixed color change

* Changed colors again

* Fixed colors, now brighter and bluer

* Ok, its actually bright now lol
2019-04-06 09:19:32 -07:00
Hyunjin Song
032c324dbc Travis: use carla instead of carla-git
Due to some breaking changes in the development branch of Carla,
we can't use the package right now.
Fortunately, the carla package now points to 2.0 series. So we will use it.

See also: https://kx.studio/News/?action=view&url=changes-in-kxstudio-repos-regarding-carla-and-jack2
2019-03-26 09:39:54 +09:00
necrashter
f79c2929a5 Fix empty editors after closing them and creating a new project (#4891) 2019-03-19 18:06:02 +09:00
Tres Finocchiaro
ea5cbe6789 Allow new Zyn bank creation on Linux (#4905)
Allow new Zyn bank creation on Linux
Closes #4642
2019-03-18 12:41:01 -04:00
Lukas W
e1adfc3952 TCO drag: Fix Ctrl+Drag crash
Fix some assumptions that source and target of a drag actions are the same
track container. Instead of looking up necessary information (track name,
type and container id) by track index, add it to the metadata.
Refactor canPasteSelection to take QDropEvent instead of the drop event's
QMimeData. Coincidentally, this fixes the method to be consistent with its
documentation.

Fixes #4844
2019-03-18 12:38:54 +01:00
Lukas W
dd6c18e62b Automation Editor: Don't accept drag events when there's no pattern
Fixes #4857
2019-03-18 12:38:37 +01:00
Martin Pavelek
0c3db1045c Fix Blackman-Harris window formula (#4895)
Adds missing parentheses
2019-03-17 23:00:47 +09:00
Dominic Clark
3aeacca7ac Fix layout of VstSyncData struct
Ensure member of type double is 8-byte aligned for consistent layout between 32- and 64-bit Linux builds.
2019-03-14 09:44:48 +09:00
Dominic Clark
205b57531d Don't show error when loading empty VeSTige instance 2019-03-14 09:44:48 +09:00
Dominic Clark
6fef905dfe Ensure VST windows show properly in taskbar 2019-03-14 09:44:48 +09:00
Dominic Clark
17f6235500 Add VST always-on-top config option 2019-03-14 09:44:48 +09:00
Javier Serrano Polo
295b899df2 Avoid shallow clones in all Debian sid builds (#4888)
hallow clone may break version detection. This is fatal in Debian builds, so use full clone.

Note: This is safe for stable-1.2 but needs review after merging to master due to submodules.  See #4888 for more information.
2019-03-13 18:27:54 -04:00
tresf
97d5529c18 Fix compilation on Qt4 2019-03-12 00:25:17 -04:00
tresf
04768ee3e1 Fix zyn pitch on project load/export
Closes #3451
2019-03-11 14:24:12 -04:00
Michael Gregorius
2a72808095 Fix #3926: QCursor in AFP
Fix a crash that occurred on the following steps:
1. Add an AFP track.
2. Open it, and move the waveform display to overlap the track label
button.
3. Close the AFP window and open it again by clicking the track label.
4. Move the mouse pointer.

The problem occurs because the code makes the implicit assumption that
AudioFileProcessorWaveView::enterEvent (and hence
QApplication::setOverrideCursor) is called before
AudioFileProcessorWaveView::mouseMoveEvent. This is not the case when
the waveform display is on top of the track label. In this case the AFP
windows is opened with the mouse being immediately positioned over the
wave form display. There is no enter event and move events are issues
directly. This then leads to a crash in
AudioFileProcessorWaveView::mouseMoveEvent when trying to determine the
value for is_size_cursor because the override cursor is still null but
is dereferenced directly without checking.

Only adding a check would not solve the problem because in that case the
cursor would not change to the hand cursor when being moved inside the
waveform display.

The solution is to remove all calls to the global methods
setOverrideCursor and restoreOverrideCursor and to only set the cursor
locally.

This fix is based on a patch by gi0e5b06 which is committed under 8a10c52
in his repository but for which he never created a pull request.
2019-03-10 10:33:48 +01:00
Lukas W
17e87c1d68 Fix MidiJack crash on exit
* Fix uninitialized m_jackClient being used in MidiJack destructor
* Fix destruction order in Mixer.cpp so that MidiJack doesn't access the
  deleted AudioJack instance

Fixes #4688
2019-03-10 10:27:51 +01:00
Javier Serrano Polo
cdd1ddbb0c Sync Debian version (#4840)
* Sync Debian version

* Drop temporary logging
2019-03-07 06:32:23 +01:00
tresf
9e6ce0638d Blacklist $HOME as VST directory
Closes #4854
2019-03-06 23:42:28 -05:00
Tres Finocchiaro
991ffcd2e0 Disable soundio on macOS
Temporarily disable soundio on macOS to address stability issues with PortAudio
Closes #4864
2019-03-05 16:42:36 -05:00
Alexandre Almeida
009a451d0b Fix AudioFileProcessor tooltip (#4868) 2019-03-05 16:36:01 -05:00
tresf
e54969c568 Add /sbin to AppImage search path
Closes #4846
2019-03-05 15:55:41 -05:00
Alexandre Almeida
05d5e2036d Fix DrumSynth sscanf (#4869) 2019-03-03 09:44:20 +01:00
Lukas W
a233291c27 Add missing include
Compilation fails with debug build. Fixes regression from
dd99f3a7c4
2019-02-27 09:50:48 +01:00
Javier Serrano Polo
ad1fa16a95 Move apt_mingw_cache out of build directory (#4842) 2019-02-25 13:06:01 -05:00
Tres Finocchiaro
e34f75a8c7 Add needed macOS shortcuts (#4851)
Fix insert bars, delete bars, delete notes on Apple keyboard
2019-02-24 21:57:53 -05:00
Javier Serrano Polo
31dc8e18ff Test deployment preparation in regular builds (#4847)
Tests whether contributions break packaging inadvertently
2019-02-24 21:53:05 -05:00
makepost
e7720cc8cb lmms_math: Fix build with musl
When deciding to polyfill glibc features, check if the standard library claims to be glibc, instead of enumerating platforms in the condition. Unlike master branch which in de3b344 changes math function calls to standard, stable-1.2 keeps their glibc names and fails to build on Linux with another libc such as musl.
2019-02-22 17:51:51 +01:00
Hyunjin Song
18d478782c Fix path to the LMMS binary in AppImage build script 2019-02-19 21:02:02 +09:00
135 changed files with 32294 additions and 15020 deletions

View File

@@ -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>

View File

@@ -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:

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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"

View File

@@ -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"

View File

@@ -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

View File

@@ -6,3 +6,5 @@ export CMAKE_OPTS="$CMAKE_FLAGS -DUSE_WERROR=ON"
../cmake/build_mingw32.sh
make -j4
make package

View File

@@ -6,3 +6,5 @@ export CMAKE_OPTS="$CMAKE_FLAGS -DUSE_WERROR=ON"
../cmake/build_mingw64.sh
make -j4
make package

View File

@@ -1,3 +1,6 @@
#!/usr/bin/env bash
brew update
# appdmg doesn't work with old versions of Node.js
nvm install --lts

View File

@@ -14,4 +14,4 @@ if [ -z "$QT5" ]; then
brew install qt@4
fi
sudo npm install -g appdmg
npm install -g appdmg

View File

@@ -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

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

View File

@@ -147,5 +147,7 @@
<string>NSApplication</string>
<key>NSHighResolutionCapable</key>
<string>True</string>
<key>NSRequiresAquaSystemAppearance</key>
<string>False</string>
</dict>
</plist>

View File

@@ -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" }
]
}

View File

@@ -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

View File

@@ -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/"

View File

@@ -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()

File diff suppressed because it is too large Load Diff

View File

@@ -3885,7 +3885,11 @@ Bitte besuchen Sie http://lmms.sf.net/wiki für Dokumentationen über LMMS.</tra
</message>
<message>
<source>E&amp;xport Tracks...</source>
<translation>E&amp;xport Tracks...</translation>
<translation>Tracks e&amp;xportieren...</translation>
</message>
<message>
<source>Export &amp;MIDI...</source>
<translation>&amp;MIDI exportieren...</translation>
</message>
<message>
<source>Online Help</source>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -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>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

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.

Before

Width:  |  Height:  |  Size: 111 KiB

After

Width:  |  Height:  |  Size: 109 KiB

View File

@@ -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
View File

@@ -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).

View File

@@ -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() {}

View File

@@ -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()

View File

@@ -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;

View File

@@ -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;

View File

@@ -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();

View File

@@ -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);

View File

@@ -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;
} ;

View File

@@ -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;

View File

@@ -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 );

View File

@@ -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:

View File

@@ -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;

View File

@@ -41,10 +41,10 @@
struct VstSyncData
{
bool isPlaying;
double ppqPos;
int timeSigNumer;
int timeSigDenom;
bool isPlaying;
bool isCycle;
bool hasSHM;
float cycleStart;

View File

@@ -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

View File

@@ -28,6 +28,10 @@
#define PLATFORM "OpenBSD"
#endif
#ifdef LMMS_BUILD_FREEBSD
#define PLATFORM "FreeBSD"
#endif
#ifdef LMMS_BUILD_WIN32
#define PLATFORM "win32"
#endif

View File

@@ -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 );

View File

@@ -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();
}

View File

@@ -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 );
}
}
}

View File

@@ -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;

View File

@@ -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 )
{

View File

@@ -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 )
{

View File

@@ -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 ),

View File

@@ -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;

View File

@@ -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" ) ),

View File

@@ -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() ) );

View File

@@ -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

View File

@@ -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 );
}

View File

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

View File

@@ -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)

View File

@@ -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
}

View File

@@ -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 += "/";
}

View File

@@ -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

View File

@@ -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()

View File

@@ -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();

View File

@@ -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

View File

@@ -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 ) );

View File

@@ -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