Skip to content
Merged

a #17

Show file tree
Hide file tree
Changes from 34 commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
5e4e536
Replace initializer list macros with delegating constructors (#5279)
knittl Oct 27, 2019
6c865c0
Piano Roll - Fix retrigger with vol/pan sliders (#5271)
zonkmachine Oct 29, 2019
fd203c3
Fix crash due to calling QWidget::move from a non-GUI thread while ex…
Cyp Oct 30, 2019
55b6552
appimage: move launcher code into launch_lmms.sh.
Reflexe Nov 1, 2019
02980e6
appimage: Use command -v instead of which (sc2230)
Reflexe Nov 1, 2019
08c7e8e
appimage: Escape $DIR to avoid word-splitting
Reflexe Nov 1, 2019
a8d91b1
Fix vertical piano mouse click unresponsiveness
Veratil Nov 1, 2019
cf4bb7b
Fix remote plugin crash reading parameters from Grooove plugin (#5300)
DomClark Nov 17, 2019
a2e328e
Fix crash on deleting instrument with controller connections on knobs…
PhysSong Nov 22, 2019
578a947
Fix invalid read in RemotePlugin::RemotePlugin() on opening the ZynAd…
Cyp Nov 22, 2019
4bfcc30
MIDI import: fix putting notes before the beginning of a pattern (#5343)
PhysSong Dec 23, 2019
d849cc1
Only filter out <>:"/\|?* while exporting tracks.
Cyp Oct 23, 2019
42f7e26
Fix scrolling direction in SongEditor due to stuck Ctrl/Shift.
Cyp Oct 29, 2019
11e5de3
Debian: add libx11-xcb-dev as an explicit build dependency
PhysSong Dec 24, 2019
a9640c8
Comment-out deprecated attribute
JohannesLorenz Dec 26, 2019
c52682d
Fix stuck notes with Helm VSTi
DomClark Jan 5, 2020
fd77c79
Switch to Xenial build environment (#4813)
jasp00 Jan 17, 2020
427d779
FileBrowser: Add helpful comments
JohannesLorenz Jan 19, 2020
d280b86
Fixes #3183: Fix file factory delimeter position
JohannesLorenz Jan 19, 2020
aeac24c
Fix a muted demo project "Greippi - Krem Kaakkuja (Second Flight Remix)"
PhysSong Jan 26, 2020
a77e592
Fix handling of plugin_export.h
tresf Feb 8, 2020
bbb3624
Bias dropped clip position backwards
Spekular Feb 23, 2020
534d7ca
Fix doxygen comment
JohannesLorenz Dec 7, 2019
a0f4e50
Fix knobs not updating vals on link (#4904)
JohannesLorenz Dec 7, 2019
97a6379
Update UI after linking models (#4904)
JohannesLorenz Dec 7, 2019
4778686
Document strange bug
JohannesLorenz Jan 2, 2020
94431ea
RemoteVstPlugin: fix issues with FXP/FXB files on Windows (#5411)
PhysSong Mar 1, 2020
ab8be73
Cherry-pick from master commit 4dc26d1 (#5413)
JohannesLorenz Mar 8, 2020
d382d4e
Fix previous commit
JohannesLorenz Mar 8, 2020
2367a62
Fix crashes and hangs on importing some Hydrogen drum kit songs (#5420)
PhysSong Mar 23, 2020
b51079e
Use proper synchronization methods on some instrument track operations
PhysSong Mar 24, 2020
a8df120
STK Mallets: don't silence active notes when switching instruments
PhysSong Mar 24, 2020
656eede
Fix bug made in #5336
JohannesLorenz Apr 1, 2020
8afa2d5
Fix the linking method for the dummy Carla library
PhysSong Apr 4, 2020
044c88c
Merge branch 'stable-1.2'
PhysSong Apr 4, 2020
9c2ccdf
Fix some issues in shell scripts spotted by shellcheck
PhysSong Mar 25, 2020
d173f42
Fix wine detection
PhysSong Jan 2, 2020
7628b25
Fix linking issues with the dummy Carla library(especially with MSVC)
PhysSong Mar 25, 2020
ebfa883
Carla: fix MSVC compatibility
PhysSong Mar 26, 2020
924743d
Fix submodule fetching from non-default branches with old Git
PhysSong Mar 25, 2020
8d908c6
Ensure plugin dependencies are deployed correctly
PhysSong Mar 26, 2020
1746300
Use shimmed std::as_const instead of qAsConst
PhysSong Mar 3, 2020
2419433
Merge pull request #5401 from Spekular/dropPosition
Spekular Apr 12, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,6 @@
[submodule "src/3rdparty/ringbuffer"]
path = src/3rdparty/ringbuffer
url = https://github.com/JohannesLorenz/ringbuffer.git
[submodule "plugins/carlabase/carla"]
path = plugins/carlabase/carla
url = https://github.com/falktx/carla
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
language: cpp
compiler: gcc
dist: trusty
dist: xenial
sudo: required
cache:
directories:
Expand Down
5 changes: 1 addition & 4 deletions .travis/linux..before_install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,7 @@

set -e

sudo add-apt-repository ppa:beineri/opt-qt592-trusty -y
sudo add-apt-repository ppa:andrewrk/libgroove -y
sudo sed -e "s/trusty/precise/" -i \
/etc/apt/sources.list.d/andrewrk-libgroove-trusty.list
sudo add-apt-repository ppa:beineri/opt-qt592-xenial -y

sudo dpkg --add-architecture i386
sudo apt-get update -qq || true
8 changes: 1 addition & 7 deletions .travis/linux..install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ set -e

PACKAGES="cmake libsndfile-dev fftw3-dev libvorbis-dev libogg-dev libmp3lame-dev
libasound2-dev libjack-jackd2-dev libsdl-dev libsamplerate0-dev libstk0-dev stk
libfluidsynth-dev portaudio19-dev g++-multilib libfltk1.3-dev
libfluidsynth-dev portaudio19-dev g++-multilib libfltk1.3-dev fluid
libgig-dev libsoundio-dev qt59base qt59translations qt59tools"

# swh build dependencies
Expand All @@ -18,9 +18,3 @@ PACKAGES="$PACKAGES $SWH_PACKAGES $VST_PACKAGES libjack-jackd2-0"

# shellcheck disable=SC2086
sudo apt-get install -y $PACKAGES

# kxstudio repo offers Carla; avoid package conflicts (wine, etc) by running last
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
5 changes: 3 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,8 @@ IF(WANT_CARLA)
SET(LMMS_HAVE_CARLA TRUE)
SET(STATUS_CARLA "OK")
ELSE(CARLA_FOUND)
SET(STATUS_CARLA "not found, please install the latest carla")
SET(LMMS_HAVE_WEAKCARLA TRUE)
SET(STATUS_CARLA "OK (weak linking enabled)")
ENDIF(CARLA_FOUND)
ENDIF(WANT_CARLA)

Expand Down Expand Up @@ -499,7 +500,7 @@ IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")

# Due to a regression in gcc-4.8.X, we need to disable array-bounds check
IF (CMAKE_COMPILER_IS_GNUCXX AND ((CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL "4.8.0") OR (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "4.8.0") OR LMMS_BUILD_WIN32))
SET(WERROR_FLAGS "${WERROR_FLAGS} -Wno-array-bounds")
SET(WERROR_FLAGS "${WERROR_FLAGS} -Wno-array-bounds -Wno-attributes")
ENDIF()
ELSEIF(MSVC)
# Remove any existing /W flags
Expand Down
24 changes: 24 additions & 0 deletions cmake/linux/launch_lmms.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/usr/bin/env bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
export PATH="$PATH:/sbin"
if command -v carla > /dev/null 2>&1; then
CARLAPATH="$(command -v carla)"
CARLAPREFIX="${CARLAPATH%/bin*}"
echo "Carla appears to be installed on this system at $CARLAPREFIX/lib[64]/carla so we'll use it."
export LD_LIBRARY_PATH=$CARLAPREFIX/lib/carla:$CARLAPREFIX/lib64/carla:$LD_LIBRARY_PATH
else
echo "Carla does not appear to be installed. That's OK, please ignore any related library errors."
fi
export LD_LIBRARY_PATH=$DIR/usr/lib/:$DIR/usr/lib/lmms:$LD_LIBRARY_PATH
# Prevent segfault on VirualBox
if lsmod |grep vboxguest > /dev/null 2>&1; then
echo "VirtualBox detected. Forcing libgl software rendering."
export LIBGL_ALWAYS_SOFTWARE=1;
fi
if ldconfig -p | grep libjack.so.0 > /dev/null 2>&1; then
echo "Jack appears to be installed on this system, so we'll use it."
else
echo "Jack does not appear to be installed. That's OK, we'll use a dummy version instead."
export LD_LIBRARY_PATH=$DIR/usr/lib/lmms/optional:$LD_LIBRARY_PATH
fi
QT_X11_NO_NATIVE_MENUBAR=1 "$DIR"/usr/bin/lmms.real "$@"
40 changes: 8 additions & 32 deletions cmake/linux/package_linux.sh.in
Original file line number Diff line number Diff line change
Expand Up @@ -99,41 +99,16 @@ cp -R /usr/share/stk/rawwaves/ "${APPDIR}usr/share/stk/"

# Create a wrapper script which calls the lmms executable
mv "${APPDIR}usr/bin/lmms" "${APPDIR}usr/bin/lmms.real"
# shellcheck disable=SC1083
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*}"
echo "Carla appears to be installed on this system at \$CARLAPREFIX/lib[64]/carla so we'll use it."
export LD_LIBRARY_PATH=\$CARLAPREFIX/lib/carla:\$CARLAPREFIX/lib64/carla:\$LD_LIBRARY_PATH
else
echo "Carla does not appear to be installed. That's OK, please ignore any related library errors."
fi
export LD_LIBRARY_PATH=\$DIR/usr/lib/:\$DIR/usr/lib/lmms:\$LD_LIBRARY_PATH
# Prevent segfault on VirualBox
if lsmod |grep vboxguest > /dev/null 2>&1; then
echo "VirtualBox detected. Forcing libgl software rendering."
export LIBGL_ALWAYS_SOFTWARE=1;
fi
if ldconfig -p | grep libjack.so.0 > /dev/null 2>&1; then
echo "Jack appears to be installed on this system, so we'll use it."
else
echo "Jack does not appear to be installed. That's OK, we'll use a dummy version instead."
export LD_LIBRARY_PATH=\$DIR/usr/lib/lmms/optional:\$LD_LIBRARY_PATH
fi
QT_X11_NO_NATIVE_MENUBAR=1 \$DIR/usr/bin/lmms.real "\$@"
EOL

cp "@CMAKE_CURRENT_SOURCE_DIR@/launch_lmms.sh" "${APPDIR}usr/bin/lmms"

chmod +x "${APPDIR}usr/bin/lmms"

# Per https://github.com/probonopd/linuxdeployqt/issues/129
unset LD_LIBRARY_PATH

# Ensure linuxdeployqt can find shared objects
export LD_LIBRARY_PATH="${APPDIR}usr/lib/lmms/":$LD_LIBRARY_PATH
export LD_LIBRARY_PATH="${APPDIR}usr/lib/lmms/":"${APPDIR}usr/lib/lmms/optional":$LD_LIBRARY_PATH

# Handle wine linking
if [ -d "@WINE_32_LIBRARY_DIR@" ]; then
Expand All @@ -153,8 +128,8 @@ VSTBIN32="${APPDIR}usr/bin/RemoteVstPlugin32.exe.so"
VSTBIN64="${APPDIR}usr/bin/RemoteVstPlugin64.exe.so"

mv "$ZYNLIB" "$ZYNBIN"
mv "$VSTLIB32" "$VSTBIN32"
mv "$VSTLIB64" "$VSTBIN64"
mv "$VSTLIB32" "$VSTBIN32" || true
mv "$VSTLIB64" "$VSTBIN64" || true

# Patch the desktop file
sed -i 's/.*Exec=.*/Exec=lmms.real/' "$DESKTOPFILE"
Expand Down Expand Up @@ -182,14 +157,15 @@ success "Bundled and relinked dependencies"

# Link to original location so lmms can find them
ln -sr "$ZYNBIN" "$ZYNLIB"
ln -sr "$VSTBIN32" "$VSTLIB32"
ln -sr "$VSTBIN64" "$VSTLIB64"
ln -sr "$VSTBIN32" "$VSTLIB32" || true
ln -sr "$VSTBIN64" "$VSTLIB64" || true

# Remove wine library conflict
rm -f "${APPDIR}/usr/lib/libwine.so.1"

# Use system-provided carla
rm -f "${APPDIR}usr/lib/"libcarla*.so
rm -f "${APPDIR}usr/lib/lmms/optional/"libcarla*.so

# Remove bundled jack in LD_LIBRARY_PATH if exists
if [ -e "${APPDIR}/usr/lib/libjack.so.0" ]; then
Expand Down
Binary file not shown.
1 change: 1 addition & 0 deletions debian/control
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ Build-Depends:
libsoundio-dev,
libstk0-dev,
libvorbis-dev,
libx11-xcb-dev,
libxcb-keysyms1-dev,
libxcb-util0-dev,
libxml-perl,
Expand Down
3 changes: 2 additions & 1 deletion include/AutomatableModel.h
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,7 @@ class LMMS_EXPORT AutomatableModel : public Model, public JournallingObject
m_centerValue = centerVal;
}

//! link @p m1 and @p m2, let @p m1 take the values of @p m2
static void linkModels( AutomatableModel* m1, AutomatableModel* m2 );
static void unlinkModels( AutomatableModel* m1, AutomatableModel* m2 );

Expand Down Expand Up @@ -359,7 +360,7 @@ public slots:
template<class T> void roundAt( T &value, const T &where ) const;


ScaleType m_scaleType; //! scale type, linear by default
ScaleType m_scaleType; //!< scale type, linear by default
float m_value;
float m_initValue;
float m_minValue;
Expand Down
19 changes: 17 additions & 2 deletions include/FileBrowser.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,14 @@ class FileBrowser : public SideBarWidget
{
Q_OBJECT
public:
/**
Create a file browser side bar widget
@param directories '*'-separated list of directories to search for.
If a directory of factory files should be in the list it
must be the last one (for the factory files delimiter to work)
@param filter Filter as used in QDir::match
@param recurse *to be documented*
*/
FileBrowser( const QString & directories, const QString & filter,
const QString & title, const QPixmap & pm,
QWidget * parent, bool dirs_as_items = false, bool recurse = false );
Expand All @@ -69,8 +77,8 @@ private slots:

QLineEdit * m_filterEdit;

QString m_directories;
QString m_filter;
QString m_directories; //!< Directories to search, split with '*'
QString m_filter; //!< Filter as used in QDir::match()

bool m_dirsAsItems;
bool m_recurse;
Expand Down Expand Up @@ -163,7 +171,14 @@ class Directory : public QTreeWidgetItem
static QPixmap * s_folderOpenedPixmap;
static QPixmap * s_folderLockedPixmap;

//! Directories that lead here
//! Initially, this is just set to the current path of a directory
//! If, however, you have e.g. 'TripleOscillator/xyz' in two of the
//! file browser's search directories 'a' and 'b', this will have two
//! entries 'a/TripleOscillator' and 'b/TripleOscillator'
//! and 'xyz' in the tree widget
QStringList m_directories;
//! Filter as used in QDir::match()
QString m_filter;

int m_dirCount;
Expand Down
2 changes: 1 addition & 1 deletion include/LcdWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ public slots:
int m_numDigits;
int m_marginWidth;

void initUi( const QString& name, const QString &style = QString("19green") ); //!< to be called by ctors
void initUi( const QString& name, const QString &style ); //!< to be called by ctors

} ;

Expand Down
12 changes: 2 additions & 10 deletions include/MainWindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -125,21 +125,13 @@ class MainWindow : public QMainWindow

void clearKeyModifiers();

bool isCtrlPressed()
{
return m_keyMods.m_ctrl;
}

// TODO Remove this function, since m_shift can get stuck down.
// [[deprecated]]
bool isShiftPressed()
{
return m_keyMods.m_shift;
}

bool isAltPressed()
{
return m_keyMods.m_alt;
}

static void saveWidgetState( QWidget * _w, QDomElement & _de );
static void restoreWidgetState( QWidget * _w, const QDomElement & _de );

Expand Down
2 changes: 2 additions & 0 deletions include/Track.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ const int DEFAULT_TRACK_HEIGHT = 32;

const int TCO_BORDER_WIDTH = 2;

char const *const FILENAME_FILTER = "[\\0000-\x1f\"*/:<>?\\\\|\x7f]";


class LMMS_EXPORT TrackContentObject : public Model, public JournallingObject
{
Expand Down
12 changes: 9 additions & 3 deletions plugins/HydrogenImport/HydrogenImport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -202,13 +202,19 @@ bool HydrogenImport::readSong()
else
{
unsigned nLayer = 0;
QDomNode layerNode = instrumentNode.firstChildElement( "layer" );
QDomNode instrumentComponentNode = instrumentNode.firstChildElement("instrumentComponent");
if (instrumentComponentNode.isNull())
{
instrumentComponentNode = instrumentNode;
}

QDomNode layerNode = instrumentComponentNode.firstChildElement( "layer" );
while ( ! layerNode.isNull() )
{
if ( nLayer >= MAX_LAYERS )
{
printf( "nLayer >= MAX_LAYERS" );
continue;
printf("nLayer >= MAX_LAYERS\n");
break;
}
QString sFilename = LocalFileMng::readXmlString( layerNode, "filename", "" );
QString sMode = LocalFileMng::readXmlString( layerNode, "smode", "forward" );
Expand Down
49 changes: 37 additions & 12 deletions plugins/MidiImport/MidiImport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -217,16 +217,14 @@ class smfMidiChannel
p( NULL ),
it_inst( NULL ),
isSF2( false ),
hasNotes( false ),
lastEnd( 0 )
hasNotes( false )
{ }

InstrumentTrack * it;
Pattern* p;
Instrument * it_inst;
bool isSF2;
bool hasNotes;
MidiTime lastEnd;
QString trackName;

smfMidiChannel * create( TrackContainer* tc, QString tn )
Expand Down Expand Up @@ -257,26 +255,49 @@ class smfMidiChannel
if( trackName != "") {
it->setName( tn );
}
lastEnd = 0;
// General MIDI default
it->pitchRangeModel()->setInitValue( 2 );

// Create a default pattern
p = dynamic_cast<Pattern*>(it->createTCO(0));
}
return this;
}


void addNote( Note & n )
{
if( !p || n.pos() > lastEnd + DefaultTicksPerBar )
if (!p)
{
MidiTime pPos = MidiTime( n.pos().getBar(), 0 );
p = dynamic_cast<Pattern*>( it->createTCO( 0 ) );
p->movePosition( pPos );
p = dynamic_cast<Pattern*>(it->createTCO(0));
}
p->addNote(n, false);
hasNotes = true;
lastEnd = n.pos() + n.length();
n.setPos( n.pos( p->startPosition() ) );
p->addNote( n, false );
}

void splitPatterns()
{
Pattern * newPattern = nullptr;
MidiTime lastEnd(0);

p->rearrangeAllNotes();
for (auto n : p->notes())
{
if (!newPattern || n->pos() > lastEnd + DefaultTicksPerBar)
{
MidiTime pPos = MidiTime(n->pos().getBar(), 0);
newPattern = dynamic_cast<Pattern*>(it->createTCO(0));
newPattern->movePosition(pPos);
}
lastEnd = n->pos() + n->length();

Note newNote(*n);
newNote.setPos(n->pos(newPattern->startPosition()));
newPattern->addNote(newNote, false);
}

delete p;
p = nullptr;
}

};
Expand Down Expand Up @@ -539,7 +560,11 @@ bool MidiImport::readSMF( TrackContainer* tc )

for( int c=0; c < 256; ++c )
{
if( !chs[c].hasNotes && chs[c].it )
if (chs[c].hasNotes)
{
chs[c].splitPatterns();
}
else if (chs[c].it)
{
printf(" Should remove empty track\n");
// must delete trackView first - but where is it?
Expand Down
Loading