Compare commits

...

812 Commits

Author SHA1 Message Date
Spekular
437172a542 Stop sample previews on mouse release or browser focus loss (#5764)
Stop previews on mouse up and focus loss.
2020-11-08 14:09:58 +01:00
DigArtRoks
a6e3958c93 Fix EffectRackView appearance (GUI). (#5766)
* Fix EffectRackView appearance (GUI).

* Elide the name of the effect when it tends to be too big. (#5752)
* Evenly space the controls (W/D, Decay Gate). (#5750)
* Show the scrollbar in the default theme to close the gap. (#5752)
* Reduce the gap between the effect and the scrollbar. (#5757)
* Use always the same width for the EffectRackview (InstrumentTrack and SampleTrack) to avoid gaps or cutoffs of the background.
* Widen the background in the default theme.
* Widen the embossed space in the background in the classic theme to fit the controls.

* Changes for improving the EffectRackView after reviews.

* Reduce the background for the default theme by 1 pixel.
* Reduce the background for the classic theme by 2 pixels and remove the darker line at the bottom right.
* Reduce the width of long names of the plugin also by 2 pixels.
* Put the controls 2 pixels closer to each other.
2020-11-07 15:52:32 +01:00
IanCaio
e2bb606341 Fixes createTCO method on some classes (#5699)
* Fixes createTCO method on some classes

	Classes that inherit from "Track", also inherit the createTCO method. That method takes a MidiTime position as an argument, but except on the class SampleTrack that argument was ignored. That lead to unnecessary calls to TCO->movePosition after creating a TCO in many parts of the codebase (making the argument completely redundant) and even to a bug on the BBEditor, caused by a call to createTCO that expected the position to be set on the constructor (see issue #5673).

	That PR adds code to move the TCO to the appropriate position inside the constructor of the classes that didn't have it, fixes the code style on the SampleTrack createTCO method and removes the now unneeded calls to movePosition from source files on src/ and plugins/. On Track::loadSettings there was a call to saveJournallingState(false) followed immediately by restoreJournallingState() which was deleted because it's redundant (probably a left over from copying the code from pasteSelection?).

* Fix code style issues

	Fixes code style issues on some files (except for ones where the current statements already had a different code style. In those the used code style was kept for consistency).

* Fixes more code style issues

* Fixes code style issues on the parameter name

	Fixes code style issue on the parameter name of createTCO, where _pos was supposed to be just pos. The existing code had the old style and I ended up replicating it on the other methods.

* Code style fixes

	Fixes code style in the changed lines.

* Fixes bug with dragging to negative positions

	There was a bug (already present before this PR) where dragging
a selection before MidiTime 0 would result in some TCOs being placed on
negative positions. This PR fixes this bug by applying the following
changes:

	1) TrackContentObject::movePosition now moves the TCO to
positions equal or above 0 only.
	2) Because of the previous change, I removed the line that
calculated the max value between 0 and the new position on
TrackContentObjectView::mouseMoveEvent when dragging a single TCO (and
added a line updating the value to the real new position of the TCO so
the label displays the position correctly).
	3) Unrelated to this bug, but removed an unnecessary call to
TrackContentWidget::changePosition on the left resize of sample TCOs
because it will already be called when movePosition triggers the
positionChanged signal.
	4) Added some logic to the TrackContentWidget::pasteSelection
method to find the left most TCO being pasted and make sure that the
offset is corrected so it doesn't end up on a negative position (similar
to the logic for the MoveSelection action).
	5) Removed another line that calculated the max between 0 and
the new position on Track::removeBar since it's now safe to call
movePosition with negative values.

* Uses std::max instead of a conditional statement

	As suggested by Spekular, we use std::max instead of a
conditional statement to correct the value of offset if it positions a
TCO on a negative position.
2020-11-07 13:54:04 +01:00
Spekular
2a025c5428 Bump version to 1.3.0-alpha 2020-11-03 13:13:59 -05:00
Oskar Wallgren
c39690d8e0 Arpeggiator - Cut off trailing short notes (#5523)
Prevent triggering of extra notes at the end by not counting trailing
notes shorter than one fifth of the notes arp_frames. This value
being arbitrarily found by trial and error.
2020-11-02 18:36:49 +01:00
IanCaio
f56cf60578 Adds missing initializer to DataFile.cpp (#5739)
The third constructor from DataFile was missing an initializer for the file version variable.
2020-11-01 18:56:36 -03:00
Tres Finocchiaro
afd037eaec Add CMT Submodule (#5755)
Switch ladspa CMT plugins to submodule
2020-11-01 00:37:38 -04:00
Dominic Clark
615d36b08b Support LV2 with MSVC (#5730) 2020-10-31 13:28:18 +00:00
firewall1110
6a78d8d535 An extra set of parenthese to fix warnings/errors (#5754) 2020-10-31 09:41:13 +09:00
Tres Finocchiaro
dc78b15a03 Add Windows JACK support (#5716)
Add Windows JACK support
Also adds JACK as a submodule
2020-10-30 16:57:20 -04:00
thmueller64
2d51eaef3d Theming of disabled knobs (#5549)
Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>
Co-authored-by: Dominic Clark <mrdomclark@gmail.com>
2020-10-30 21:52:32 +01:00
DigArtRoks
69a35b58d3 Fix more background colors of selected text (#5687) 2020-10-30 14:51:04 -04:00
Tres Finocchiaro
9d104b2205 Switch Sid to submodule (#5724)
Also refactors to TitleCase, uses newer SID namespace
2020-10-30 13:34:15 -04:00
firewall1110
435dbc5e00 Fix crash/freezing after rendering when using soundio/JACK (#5681) 2020-10-30 13:16:27 +09:00
Frank Lyder
ec2e854a47 Fix AppleMIDI crash when deviceName or endPointName is null (#5729) 2020-10-30 10:57:15 +09:00
Tres Finocchiaro
c23c1b79d5 Add Carla support for Windows (#5713) 2020-10-29 01:06:34 -04:00
Tres Finocchiaro
090b5a7752 Fix DMG titles > 27 chars (#5741)
Workaround upstream bug https://github.com/LinusU/node-appdmg/issues/48
2020-10-28 17:20:12 -04:00
Johannes Lorenz
7808e0b92f Lv2 Fix invalid memory access if plugin did not load 2020-10-24 17:28:44 +02:00
Johannes Lorenz
5d0340f6ae Fix undefined Lv2Ports::Audio::m_optional after 3fa4b98 2020-10-24 17:28:37 +02:00
Kumar
f5d0524b16 Enable track-wide color coding (#5573)
* Enable track-wide color coding

* Add support for automation tracks

* Allow saving & loading track colors

* Allow track color to be reset to default

* Partially migrate common settings to Track.cpp, fix bug

* Completely migrate local TCO color functions to TCO class, fix bug

* Set QColorDialog colors to better colors

* Color the side of the track according to TCO colors

* Disable color gradient when muted

* Change selection color to depend on TCO color

* Fix breaking builds

* Bug fix

* Fix another bug where BB track colors wouldn't load

* Restore changed demo to original state

* Fix BB Editor bug

* Fix breaking builds

* Allow random color picking

* Fix copy-paste bug

* Change how color is painted on a track

* Cleanup, and implement per-pattern colors

* Cleanup comments

* Migrate some functions

* Remove redundant function

* Rename some functions

* Migrate duplicates to superclass

* Use ColorChooser and reorder some includes

* Change how colors are saved

* Fix some formatting

* Fix some code

* Change how clip colors work

* Fix some unexpected behaviors

* Fix note border coloring being green on colored tracks

* Change name of an option

* Remove redundant code

* Fix ghost changes

* Remove colorRgb

* Rename backgroundColor, remove some variables we don't use

* Remove a redundant variable

* Migrate some duplicates to superclass

* Check for nullpointer

* Remove redundant variable

* Update some logic

* Change how muted colors are displayed

* Change how dark muted tracks become

* Place setModified() in appropriate places

* Make getColorForDisplay() function

* Change how colors are organised and saved

* Remove m_useStyleColor

* Remove a comment

* Quick changes

* Change how colors are saved

* Remove redundant stuff

* Remove redundant stuff pt. 2

* Change how colors are copied

* Fixes pt. 3

* Fixes pt. 4

* Change spaces to tabs

* Fix pseudochanges

* Remove s_lastTCOColor

* Fix pseudochanges pt. 2

* Fix breaking builds

* Add files via upload

* Add comments (again)
2020-10-20 19:26:22 +02:00
Johannes Lorenz
8b2902c27a Enable Lv2 Atom ports
All Atom ports are now being created and connected. Currently only MIDI
input ports are supplied with data.

Major contribution to #562 ("lv2 support").
2020-10-20 10:36:22 +02:00
Oskar Wallgren
acd0e4d430 Feature: Glue notes (#5721)
Tool to glue selected notes together. Selected notes that are
adjacent to each other or overlapping are transformed into one note
stretching over the combined notes on/off times.

Key command: <Shift> + G

Partially fixes: #746 which is part of #4877

Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>
Co-authored-by: IanCaio <iancaio_dev@hotmail.com>
Co-authored-by: Spekular <Spekularr@gmail.com>
Co-authored-by: Kevin Zander <veratil@gmail.com>
Co-authored-by: Oskar Wallgren <oskar.wallgren13@gmail.com>
2020-10-19 22:18:21 +02:00
dj-pixus
4c559b91f8 Modifying factory presets to sound more friendly. (#5529)
Modified some factory presets to sound more friendly.
2020-10-19 13:42:39 -04:00
Johannes Lorenz
0d89d64f49 Implement unused Lv2UridCache 2020-10-18 15:09:18 +02:00
Johannes Lorenz
9db671c7ae Refactor writing MIDI events to buffers
This moves out the code from the carla plugin into the core, because
this code will be re-used for Lv2 MIDI handling soon.
2020-10-17 20:56:05 +02:00
IanCaio
b64fe8e7c0 Refactor Clipboard methods (#5627)
* Moves mimeType from StringPairDrag to Clipboard

* Simplifies decodeKey and decodeValue methods

* Adds method to copy a string to clipboard

* Adds method to copy a string pair to the Clipboard

* Adds convenience methods to Clipboard.h to retrieve the QMimeData from the clipboard and checking whether a particular mime type format is present on it

* Uses only the TCOV copy/paste methods on the song editor
To keep consistency on the behavior of the TCOV copy and paste operations, we now only use the TCOV::copy() and TCOV::paste() methods for copying both individual and multiple TCOs.

* Removes obsolete TrackContentObject::cut() and merge copy() and paste() methods to single function TrackContentObject::copyStateTo()

* Adds Clipboard::getString method to get data for particular mime type

* Makes AutomatableModelView.cpp use the Clipboard class instead of calling Qt clipboard directly
2020-10-10 15:17:25 +09:00
Firepal
892aec318d Specify DirectConnection for a few plugins (#5695) 2020-10-08 14:42:34 +01:00
Dominic Clark
8c63582ee3 Don't reload sample from disk when reversing (#5701) 2020-10-07 13:37:08 +01:00
Johannes Lorenz
c58c781f93 Update remote and version of submodule rpmalloc (#5696)
This PR updates the remote URL and content of rpmalloc.

Fixes #4752
Fixes #4806 (assumably)
Helps #5694

You must now run
```
git submodule sync --recursive
```
once to reflect this change.
2020-10-06 01:00:58 +02:00
Johannes Lorenz
3fa4b98a9e Remove redundant LV2Ports::Audio::m_optional
The same info is already stored in the `Lv2Ports::Meta` base class.
2020-10-04 21:59:27 +02:00
Johannes Lorenz
b558865ca4 PluginIssue: Add too MIDI in/out channels 2020-10-04 21:59:15 +02:00
allejok96
8939b149e3 Add insert/remove bar buttons in Song editor (fix #5602) 2020-10-04 16:01:35 +02:00
Johannes Lorenz
783db3e457 Remove unused make_shared from stdshims.h 2020-10-04 15:25:41 +02:00
Johannes Lorenz
16db33f2bf Use STL version of std::make_shared now
As all is compiled with C++14 now, no need to use `std::make_shared`
from stdshims.h now.
2020-10-04 15:25:41 +02:00
Johannes Lorenz
7e986a8323 Compile LMMS using C++14
This replaces `set(CMAKE_CXX_STANDARD 14)` by `set(CMAKE_CXX_STANDARD 11)`
wherever it is required. Wherever it is superseded by parental
`CMakeLists.txt`, this command is now removed.
2020-10-04 15:25:41 +02:00
David Carlier
4efe0c842e Haiku build fix.
related to ringbuffer, matching cmake settings to disable mlock for this platform.
Haiku does not support tls model as well.
2020-10-04 14:49:34 +02:00
Spekular
109a7c4735 Keyboard shortcuts to preview/add sounds from sidebar (#5427)
- Extract file item preview start and end into new methods `previewFileItem` and `stopPreview`.
- Add event handlers:
  - `keyPressEvent` to allow auto preview (on up/down arrow navigation), manual preview (space), and send to editors (enter)
  - `keyReleaseEvent` to end previews when preview key is released
  - `hideEvent` to end previews when switching sidebar tab or hiding sidebar
- Functions that operate on a `FileItem` now take it as an argument instead of using a member variable
- `getContextActions` provides menu items for sending clips to the song editor and BB editor with minimal duplicate code
- Some formatting changes in affected code
- Replace many instances of `NULL` with `nullptr`
2020-10-03 21:31:13 +02:00
Shmuel H
e5f1007ebb SampleTrack: Fix TCO not being played on the first tick (if it starts on
tick 0)
2020-10-03 14:13:33 +09:00
thmueller64
89b13280de LB302: Use consistent cutoff frequency on mulitple sample rates (#5618) 2020-10-03 14:05:55 +09:00
Spekular
cc87dfbb52 Fix relativeOrAbsolute bug with baseQDir in PathUtils.cpp (#5689)
* Fix relativeOrAbsolute bug with baseQDir in PathUtils.cpp

If `base` is `Absolute`, `baseQDir(base)` will point to the working directory. It will result in undefined behaviors.

To fix this, update relativeOrAbsolute to explicitly return an absolute path when the target base is Absolute. Also make baseQDir return QDir::root() for Absolute base instead of QDir(""), because the latter represents the working directory.

Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>
2020-09-30 11:26:58 +02:00
Veratil
31f79a2263 Add auto-highlight scale and key selection 2020-09-29 21:55:07 -05:00
Johannes Lorenz
173b1fadf8 Improve control flow in Lv2 classes
No functional change
2020-09-28 19:22:42 +02:00
Johannes Lorenz
e7adcbd847 Update ringbuffer submodule 2020-09-27 18:54:47 +02:00
Johannes Lorenz
6546857d21 Move or remove unused slots 2020-09-24 17:59:07 +02:00
Johannes Lorenz
c3c80159fd Add missing include 2020-09-24 17:59:07 +02:00
Johannes Lorenz
454e047291 Add lv2 packages to macOS CI 2020-09-24 17:59:07 +02:00
Spekular
9e401828aa Don't give clips a hidden default name (Fix #5528) (#5621)
* Automatic formatting changes

* Give clips an empty name by default, display all names

- Stop giving clips the same name as their parent track on creation
- Stop hiding clip names that match the parent track name
- Never rename clips on track rename
- Never clear clip name when a clip is copied to another track
- Create an upgrade routine to clear default names from old projects (< 1.3.0-alpha-1)
- Bump version to 1.3.0-alpha-1

* Revert now-unnecessary version bump

* Merge with master and fix conflicts

* Formatting changes from review

* Change weird for loop conditions

* Properly revert AutomationPatter.h changes

* Only clear names that match our parent track, be more generous with use of legacyFileVersion

Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>
2020-09-21 16:50:55 +02:00
Johannes Lorenz
6d160fd773 basics: Change sampleFrame to use std::array (#5536)
... in order to make standard containers be able to store it. Required for
#5532 (#4899) and the recording PR.

This includes:

* removing the `LocklessRingBuffer<sampleFrame>` specialization
* passing samplerame in `StereoDelay::tick` as a reference

Additional cleanups:

* removing already unused typedef `sampleFrameA`
* add some `const_cast` to make code more readable
2020-09-21 09:04:44 +02:00
DigArtRoks
2f37281d02 Fix for Mixer volume percentage labels are off by a factor of 100 (#5661)
Add m_conversionFactor to the AutomatableModelView. This factor will be applied to the model->value when displaying
it in the contextmenu of the control for the reset and copy actions. The factor will be applied when copying the value to
the clipboard. When pasting from the clipboard, the value will be divided by the factor.

Remove the model->displayValue() calls when updating the reset/copy/paste action text labels as this gives e.g. in the
Equalizer the wrong action text for the Frequency knobs.

In the Fader class, remove the m_displayConversion variable but rather use the new m_conversionFactor variable.
Rewire the setDisplayConversion() function to set the m_conversionFactor to 1.0 or 100.0.

Faders in FxMixer show now the correct context menu. Copying and pasting values between faders or even volume knobs
in tracks shows consistent behavior. Other faders (like in Eq) show the old behavior.
2020-09-21 09:55:46 +09:00
Spekular
a6d0b460fc Don't define NOMINMAX if it's already defined (#5678)
Co-authored-by: Dominic Clark <mrdomclark@gmail.com>
2020-09-18 18:48:39 +02:00
Spekular
f6eeaba076 Suppress windows.h's min and max macros, allowing use of numeric_limits's max
Co-authored-by: Dominic Clark <mrdomclark@gmail.com>
2020-09-18 16:38:42 +02:00
Hyunjin Song
27a9f7711e LadspaManager: Skip empty entries when looking for plugins (#5677)
This fixes crashes when starting LMMS
from specific working directories.
2020-09-18 15:55:44 +09:00
IanCaio
1dab416c6c Improvements to the upgrade routines (#5660)
* First commit

This commit starts the improvements on the upgrade methods. We are going to change both the DataFile and ConfigManager to use separate version values from LMMS release versions, so we can easily bump those versions for new upgrade routines. This first commit starts implementing a new version value for the ConfigManager.

* Change code as per requested on review

	As requested, the "configVersion" method was replaced by "legacyConfigVersion" instead, which is only used to return a configuration version if none is present in the configuration file.
	The configuration version of the current build is stored in a local variable called CONFIG_VERSION, making version bumping easier.
	Uses a switch statement instead of if-else to be able to make use of case-cascading.

TODO:
	- Change the CONFIG_VERSION variable to a unsigned int?
	- Start working on the DataFile.cpp.

* Changes the upgrade logic on DataFile.cpp

	Starts refactoring the upgrade logic on DataFile.cpp. Now the "version" attribute is used to indicate which fileVersion we are loading. If the value of version is "1.0", we have a legacy file and use the legacyFileVersion method to retrieve the integer version using the LMMS version. If the value of version is an integer, we just read it. The integer indicates the position in a list of upgrade methods where we should start from and run the upgrade methods. The file version of the build is held in the FILE_VERSION const on DataFile.h. It HAS TO match the number of upgrade methods that we have on our list.
	One of the versions had 2 upgrade routines (upgrade_1_2_0_rc3 and upgrade_1_2_0_rc2_42). They were merged into a single one (upgrade_1_2_0_rc3) because they were both called from a single version check, meaning that they are both part of a single fileVersion.
	Two fatal errors were added (which can later be improved to show an error messagebox): One if the version attribute doesn't exist, and another one if we are using a FILE_VERSION that doesn't match the number of upgrade methods (to avoid mistakes while coding new upgrades later).

	The configVersion variables and methods were changed to use unsigned int instead of int.

TODO:
	- Make the list of upgrade methods static.
	- Add debug messages for each upgrade routine for testing purposes.

* Make method vector a static const variable

	On DataFile.cpp, we now use the vector list of upgrade methods as a static const variable, so it only has to be constructed once.

* Reorganize vector lists

	Reorganize vector lists so they are more easily readable.

	Revert changes on upgrade method names from ConfigManager.cpp.

* Makes the file version bumping automatic

	The file version bumping on DataFile.cpp is now automatic (using the size of the m_upgradeMethods vector as a reference). FILE_VERSION constant was removed, and with it the qFatal error when it doesn't match the size of the methods vector.

* Improve formatting of version and upgrades lists

	Improves the formatting of the vector lists of upgrade routines and LMMS versions (2 upgrade routines per line and 3 LMMS versions per line).
	Adds a qWarning for every upgrade routine for testing purposes, plus a qWarning that tells the current fileVersion/configVersion when upgrade is called.
	Removes extra space characters after the opening bracket of ConfigManager::upgrade_1_1_91.

* Changes ConfigManager to use a vector of methods

	Changes ConfigManager to use a vector of upgrade methods, just like DataFile. The new Config Version can be calculated automatically now, so the CONFIG_VERSION constant was removed.
	Corrects a small comment on Datafile.h.

* Addresses Dom's review requests

	- Changes legacyConfigVersion and legacyFileVersion from const unsigned int to just unsigned int, since the const is irrelevant in this context.
	- Changes the type alias for upgrade methods to start with an uppercase as per the code style guidelines. Moves the aliasing of the type to the class declaration so it can be used on both the method and on the vector list declaration.
	- Changes the vector list names from m_upgradeMethods to UPGRADE_METHODS, so it's more visible they are a static constant.
	- Move the upgradeVersions list from the legacyFileVersion method to the DataFile class, as an static const called UPGRADE_VERSIONS.
	- Uses std::upper_bound instead of std::find_if for the legacyFileVersion method.

* Uses type alias on vector assignment

	Uses the UpgradeMethod type alias when defining the upgrade methods vector from both ConfigManager and DataFile.

* Removes debugging warnings

	Removes the qWarning() calls that were placed for debugging purposes.
2020-09-18 00:45:46 +02:00
Spekular
9e3f602194 Fix 'Version difference' dialogue showing for differences in patch and lower after semantic versioning PR 2020-09-17 18:44:41 +02:00
Spekular
2bdd835a8a Switch out mailing list for Discord
Because as far as I can tell that's where most of the active devs are available.
2020-09-17 18:24:54 +02:00
Spekular
af328003a0 Use valid Semver versions for pre-releases (#5636)
* Fix ProjectVersion handling of pre-releases

* Add workaround for old, non-standard version

* Attempt to fix versioning

* More consistent comments

* Apply suggestions from code review

- Set CompareType's underlying type to int and revert change to ProjectVersion::compare's parameters
- Add "None" and "All" as names elements of CompareType enum
- Preserve hyphens in prerelease identifiers
- Pad invalid (too short) versions to prevent crashes or nasty behavior
- Compare numeric identifiers to non-numeric ones correctly
- Don't interpret identifiers of form "-#" as numeric (where '#' is any number of digits)
- Add tests to ensure fixes in this commit work and won't regress in the future

* CMAKE fixes from code review

Co-authored-by: Tres Finocchiaro <tres.finocchiaro@gmail.com>

* Remove unnecessary changes to CMake logic

* More const, more reference

* Apply suggestions from code review

Co-authored-by: Tres Finocchiaro <tres.finocchiaro@gmail.com>
2020-09-17 17:23:35 +02:00
Hyunjin Song
f211c192e8 CircleCI: uninstall python@2 to prevent "brew install" errors 2020-09-16 15:22:03 +09:00
Adam Hartley
37f0d10e0b CircleCI: Bump Xcode version to 9.4.1 (#5675) 2020-09-14 09:51:37 +09:00
Veratil
9eb787c9e8 Update MIDI loading and parsing
portsmf fixes:
* Fix allegro warnings as errors
* Fix msvc missing max. Use MAX macro instead
2020-09-12 23:39:07 -05:00
Veratil
76a182bb95 Update portsmf to latest r234 commit 2020-09-12 23:39:07 -05:00
Dat Ng
3d8b31039f Qt deprecation fix (#5619)
Qt6 TODO: Orientation check by comparing angleDelta().x() and y() won't make sense
because the direction is arbitrary in Qt 6.
2020-09-13 11:09:46 +09:00
Johannes Lorenz
d29066fa83 Add helpful comment 2020-09-12 09:36:38 +02:00
Johannes Lorenz
8a19c2d25e Fix spelling in Lv2 classes 2020-09-12 09:36:38 +02:00
DigArtRoks
5f4d0cab9b Fix for issue #3816 - FM or heavy PM in TripleOscillator makes outputs odd for some target waveforms. (#5651)
The internal waveforms of the class Oscillator produces the wrong amplitude when the input is a
negative phase. When doing PM or FM, negative phases may occur. When a negative phase is e.g. passed
to the the saw sample, it produces values less than -1.0, hence going out of range.

Converted all fraction calls to absFraction calls.

Removed the +2 in the function Oscillator::recalcPhase. The comment here was that it was needed to avoid
negative phases in case of PM. But by converting fraction to absFraction in the waveforms, negative phases
are not an issue anymore. On top of that the m_phase variable gains about 2 extra bits in precision.
As side effect of that, it improves the behaviour of the issue #2047 - TripleOscillator: Oscillators are getting out of sync.
Though I did not investigate it thoroughly over different notes and samplerates.

Add documentation to the fraction and absFraction functions in lmms_math.h as it was not immediately clear by the name what the
functions do. Correct the implementation of the functions in case the flag __INTEL_COMPILER is set. (floorf rounds always down).
2020-09-10 22:47:06 +02:00
Dominic Clark
5efb3a19cb Fix use of translation functions (#5629) 2020-08-30 19:27:17 +01:00
DigArtRoks
9ed41c4927 Fix for Icons and comboboxes mismatch in arpeggiator in Instrument Editor #5494 (#5623)
* Fix for Icons and comboboxes mismatch in arpeggiator in Instrument Editor #5494
(https://github.com/LMMS/lmms/issues/5494)

Introduce a static const int variable for the default height of a ComboBox.
Set this height already in the constructor of the ComboBox object.
Update all modules setting the height of a ComboBox object to make use of the new constant.

* Replace 'const int' by 'constexpr int' after review.
2020-08-17 10:12:49 -04:00
DigArtRoks
1c1575cc86 Change the background color of the selected text in a text box. (#5628)
* Change the background color of the selected text in a text box.
The new background color matches the green background of selected items in a tree view.

* Add selection-background-color for QLineEdit widgets in the classic theme, but keep the color as it was.
2020-08-13 10:18:21 -05:00
Kevin Zander
966f18423f Center vertical scroll position when opening the Automation Editor (#5123)
* Center vertical scroll position when opening the Automation Editor
2020-08-11 10:18:34 -05:00
Spekular
139e492b17 Revert "Replace iterator where possible"
This reverts commit 2fe06c8f3c.
2020-08-11 14:58:54 +02:00
Spekular
2fe06c8f3c Replace iterator where possible 2020-08-11 14:57:27 +02:00
Kumar
1bb8d12e99 Enable mixer color-coding (#5589)
* Enable mixer color-coding

* Cleanup

* Fix warnings

* Improvements

* Improvements

* Use ColorChooser instead of QColorDialog

* Fix default palette being out of range

* Remove a redundant function

* Rename and make stuff efficient

* Comment on the code

* Make things more efficient

* Fix breaking builds

* Improvements

* Improvements pt. 2

* Improvements pt. 3

* Improvements pt. 4

* Improvements pt. 5

* Apply suggestions from code review

Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>

Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>
2020-08-11 11:01:58 +02:00
IanCaio
f2887bda68 Improve the context menu actions when multiple TCOs are selected (#5601)
* Starts implementing the feature

The idea of this branch is to allow actions triggered through the context menu of a TCO on the song editor to affect all the selected TCOs. With this commit, only the "Mute/unmute" action affects all selected TCOs, while the others retain their old behavior (only affect the TCO that owns the context menu).

For that, a method was created that processes all actions (the triggered action is parsed as a parameter to the method). In the case of the "Mute" action, it checks if the song editor has selected TCOs, and if it does it mutes/unmutes all of them.

* Allows selected TCOs to be removed too

Now the "Remove" action from the context menu will remove all selected TCOs if there are any.

* Starts implementing selected TCO cut and copy

Now, when multiple TCOs are selected, the context menu actions Cut and Copy will write a DataFile to the clipboard containing the TCO information, so it can later be used to paste it.

The Paste action now checks if there's data in the QApplication clipboard. If there is, it will later paste the TCOs (for now it just prints the data with qWarning). If there's not, it uses the regular TCO paste method that uses the internal LMMS clipboard. Because it now have to decide between the QApplication clipboard and the LMMS internal clipboard, the Clipboard::copy() method now clears anything in the QApplication clipboard, making it empty so LMMS can know it should use the internal clipboard instead in that situation.

Adds safety checks for the selected TCO views.

* Overloads TCW paste selection methods

This commit is a step towards implementing the paste feature of the TCO context menu. It overloads the TrackContentWidget::canPasteSelection and TrackContentWidget::pasteSelection methods so they can be called without having a QDropEvent (only the QMimeData with the copied TCOs information). The overloaded canPasteSelection(MidiTime, QMimeData, bool) method required a third argument which says whether pasting over the same bar should be allowed or not, because it shouldn't when the QDropEvent comes from the same application but should when it doesn't. That is defined in the canPasteSelection(MidiTime, QDropEvent) method.

Also, the pasteSelection(MidiTime, QDropEvent) isn't optimal, since it calls canPasteSelection twice (more details in the comments, but it's basically because the two canPasteSelection methods can return different values depending on the origin of QDropEvent). This could later be fixed by calling canPasteSelection before pasteSelection and removing it from inside the method altogether.

Next step is to add the "tco_" key to the mimeData on the Copy/Cut operations and implementing the paste operation using those methods.

* Adds the TCO type to the clipboard

Adds the key with the TCO type ("tco_" + type number + ":" + TCO Data XML) to the clipboard, so it can be later used by the canPasteSelection and pasteSelection methods.

* Apply changes to "src/tracks/SampleTrack.cpp"

Change the SampleTCOView::contextMenuEvent() method so it behaves the same way as the TrackContentObjectView::contextMenuEvent() method. For that, I had to change the ContextMenuAction enum and the contextMenuAction methods to be protected instead of private, so SampleTCOView can access it.

* Implement the paste action

Now that the canPasteSelection and pasteSelection methods were overloaded, it was possible to implement the paste action using the same logic as the Drag&Drop copy/paste.

Other small changes:
	- Removes the TCO views AFTER creating the TCO data file, instead of before (which probably resulted in an empty data file).
	- Uses the StringPairDrag::mimeType() instead of Clipboard::mimeType() since that's the one the methods from StringPairDrag.cpp recognizes.

* Removes QDebug header

Forgot to remove the QDebug header on the last commit.

* Creates a Context Menu on the TCW for "paste"

Now it's possible to paste a selection of copied TCOs anywhere in the TCW, as long as the rules to paste are met (same rules as Drag&Drop copy/paste). If the rules are not met the "Paste" menu action shows but is disabled.

* Small code refactoring

Saving a few lines of code.

* Avoids double call to canPasteSelection

This commit adds a third parameter to the pasteSelection overloaded method, which will define whether we whould skip the canPasteSelection check. The only situation where we will want to skip it is if we are calling pasteSelection from inside the other pasteSelection method, which will already have checked it. Because of that the default value is false.

Organizes comments as well.

* Separates methods for the actions on selections

Now the remove, copy, cut, paste and toggle mute actions have a separate method for applying them to selections, which are then called from the contextMenuAction method. That made the code more organized and the contextMenuAction method smaller.

Also, the mouse shortcuts for muting and removing (CTRL+middle button, middle button, CTRL+right button) now apply the action on selections as well.

* Fixes small bug and reorganize code

Fixes a small bug where using a mouse shortcut or choosing an action on a TCO that is not selected while other TCOs were selected would result in the selection being affected.

Also reorganizes the code so the conditional for choosing between the selection action and the individual action stays inside the method.

* Move logic to the action methods

Since the methods that called the action+Selection() methods didn't need the list of selectableObjects, I moved it to the inside of the action+Selection() methods and removed the parameter from them.

* Changes logic structure and labels

As suggested by Spekular, the logic structure was changed. Now, the mousePressEvent and contextMenuAction methods determine whether the action should happen to a selection of TCOs or an individual TCO. The list of TCOs to be affected populate a QVector list called "active", which is parsed to the action method that will apply the action to each object in the list.

I changed the method names to removeActive, cutActive, copyActive and toggleMuteActive, since I believe that better describe the behavior. The paste method is still called pasteSelection for now, because the paste behavior isn't related to the active TCOs but to the content of the clipboard.

The contextMenuEvent method on both src/core/Track.cpp and src/tracks/SampleTrack.cpp were changed so they also check if the right-clicked TCO is part of a selection or an individual TCO, and the labels for the actions are changed to better describe the behavior (i.e.: "Delete" for individual TCO and "Delete selection" for multiple TCOs).

* Make removeActive and toggleMuteActive static

removeActive and toggleMuteActive methods are now static so they can be called from anywhere in the code since they don't require a TCO view instance to work. That makes it possible for them to be used in the future if any feature requires this type of action to be called from out of a TCO view instance.

The same couldn't be done for the copyActive and cutActive methods because those require an instance of the TCO view to call them, since when copying to the clipboard some metadata is written using information from the object instance.

* Renamed TCO View paste method

I renamed the TCO View paste method from pasteSelection to just paste, since the TCO view doesn't currently have a paste method (only the TCO class). It's also a name that accurately describes the action: it will paste either a group of TCOVs or a single TCOV on the current TCOV.

I also moved the logic for deciding between the multiple TCOV paste and single TCOV paste inside the paste method.

* Moves repeated code to a new method

This commit adds another method to TrackContentObjectView called getClickedTCOs, which will return a QVector with the TCO views that are supposed to be affected by a context menu action (either the individual right-clicked TCO or the selection of TCOs). Code was updated on the other methods to make use of this new method.

Method names for actions that affect multiple TCOs were changed. Instead of calling them copyActive, cutActive, toggleMuteActive and removeActive, they are just called copy, cut, toggleMute and remove, hence they are overloaded methods for those actions that affect multiple TCOs (their differenciation is the arguments list, which is a QVector list for those).

* Avoid unnecessary calls to getClickedTCOs()

We use a ternary operator inside TrackContentObjectView::mousePressEvent to avoid unnecessary calls to getClickedTCOs when the list is not going to be used.

The contextMenuEvent method on both Track.cpp and SampleTrack.cpp was reformated to use a more appropriate indentation and spacing between method calls.

* Fix indenting in a ternary operator assignment
2020-08-10 17:16:00 +02:00
Kevin Zander
ef961e53de Refactor PianoRoll (#5253)
* Rework PianoRoll paintEvent + some extras
* Split out PositionLine class to own file
* Refactor PianoRoll Q_PROPERTYs
* Reduce code by using Q_PROPERTY's MEMBER function and removing getter/setter functions
  After looking at the getters and setters, they did nothing different than what direct
  access would allow. Nothing outside of PianoRoll used the public functions as well.
  Considering these factors we can reduce the number of functions by 2x the number of
  Q_PROPERTIES, and go with direct access instead.
* Remove need for keyboard pixmaps
  With the recent change to allow zooming vertically, aligning pixmaps is a PITA. Since
  we have themes which can take brushes and colors, it would be simpler to take a solid
  color or a gradient with some extra style properties to resize the keys and text colors.
  While it will slightly be a downgrade from pixmaps since they can be anything really,
  this will allow us to customize the piano roll further moving forward.
* Added the ability to update margins for TimeLineWidget and StepRecorderWidget
  These take a X coordinate, which was hardcoded to WHITE_KEY_WIDTH, and never looked
  back. Now we can adjust on the fly if we need to. Currently this just allows us to
  shift the left margin to the style-defined white key width.
* Fix phantom pixmaps when PianoRoll not focused
* Update PositionLine class changes related to #5543
2020-08-09 18:01:35 -05:00
Johannes Lorenz
7a9b33627d Implement Lv2 Urid feature (#5517)
This includes implementing general feature handling, since this is the first supported feature.
2020-08-09 22:59:37 +02:00
thmueller64
df296b7931 Fix metronome playing when song is paused. (#5612) 2020-08-06 18:36:54 +02:00
pmerry96
b0333b6281 RemoteVstPlugin32: Fix Qt version check with MSVC 2019 + Qt 5.15 (#5607) 2020-08-05 16:49:23 +09:00
IanCaio
639f3a49a3 Changes the behavior of "solo" so it doesn't mute Automation Tracks (#5547)
* Changes the toggleSolo method

- Changes the toggleSolo method so it doesn't mute automation tracks (keeps their original state)

* Stop restoring Automation Track's mute values

- Since Automation Tracks are not affected by enabling solo on other tracks, there's no need (and it's even counter intuitive) to restore their previous mute value.
- Reduces a line by using "else if".

* Saves two lines merging 2 conditionals in 1

* Adds the new solo behavior as a new LED button

To allow the user choosing between the old solo behavior and the new one, a new LED button was added which will be used to enable the solo keeping the automation tracks states, while the red LED will enable the solo with the current behavior.

Changes to the code:
	- Added a purple LED image that will be used on the new button.
	- Increased the default width of the widget that holds the mute and solo buttons so the third one fits.
	- Changed the positioning of the LEDs on both the standard and compact track modes to accomodate them.
	- Added a new model called m_soloAutomationsModel, which is connected to the new LED button (m_soloAutomationsBtn). This will dictate the behavior of the toggleSolo method.
	- The red LED calls the toggleSolo method as before. The purple LED will change the m_soloAutomationsModel value and toggle the red LED, which will then call toggleSolo. But since the value of m_soloAutomationsModel will be different, the new behavior will be used on the method.

* Revert "Adds the new solo behavior as a new LED button"

This reverts commit fdbc8b2712.

After consulting fellow users and devs about this change to the PR, it was decided that adding a third button for the new solo behavior was not the best approach. This reverts the commit so we go back to just changing the solo behavior. Later an option can be added on LMMS settings to choose between the old and new behaviors.

* Adds an option to use the legacy solo behavior

This commit adds an option on LMMS settings (saved to the config file) to go back to the legacy behavior of the track solo button. The option can be found on Settings>General>"Use solo legacy behavior"

Changes to the code:
	- Since there's a change to the configuration file, an upgrade method was created (upgrade_1_3_0) to add the value to the config XML if it isn't already present (safety check).
	- An attribute is added to the DOM structure of the app configuration under the "app" tag, called "sololegacybehavior", which can be either 0 or 1.
	- Changes were made to include/SetupDialog.h, include/ConfigManager.h and src/core/ConfigManager.cpp to implement this new configuration option.
	- The toggleSolo method was changed to behave according to the value of the "sololegacybehavior" configuration.

* Changes the description of the solo setting

Changes the description of the solo setting on the Setup Dialog from "Use solo legacy behavior" to "Mute automation tracks during solo" since the latter is more descriptive and new users wouldn't be confused about what the legacy behavior was.

* Merges "if"s and "if-else"s where possible

A conditional could be merged by using the "||" logical operator and there was a "if" nested inside an "else" that could be merged into a single "if-else".

Very small code format change (keeping code block curly braces in separate lines).

* Uses default value instead of upgrading ConfigFile

Instead of using an upgrade method on the ConfigManager class to set a value to the sololegacybehavior parameter, we now use a default value on every call to ConfigManager::value that requests it.

* Removes repetitive method call

To make the loop more efficient, a local variable was created to hold the behavior of the solo selected in the setup dialog, instead of calling the ConfigManager::value method repeated times.

Observation:

Since no code was added/removed from ConfigManager.cpp, it was restored to its original state. There's however a TAB character in a blank line on line 145, which was there at the beginning of this PR but removed during it. It was written again in this commit to remove ConfigManager.cpp from the "Files changed" list.

* Saves one line of code and adds a comment
2020-08-01 20:03:23 +02:00
Kevin Zander
e37f3793f3 Fix validPattern to check if hasAutomation as well (#5124) 2020-07-29 20:26:20 +02:00
IanCaio
cbb1ec9a56 Removes unused variable on SongEditor.cpp (#5600)
There was a variable declared but unused on the SongEditor.cpp file (method SongEditor::keyPressEvent), called QVector<TrackContentObjectView *> tcoViews. The variable was removed.
2020-07-29 18:58:07 +02:00
Spekular
17565caf53 Improved relative paths (#5117)
* Create PathUtils

* Replace old SampleBuffer calls

* Fix automatic track names

* Fix things

* Remove accidental duplicate file

* Add includes

* More incldues

* PhysSong's code review + style

* Fix vestige loading?

Seems more reasonable to convert from relative on load and to relative on save than vice versa.

* Typo fix

* More Bases

* Enable more bases

* Add missing semicolons in prefixes

* Nicer sample track tooltip

* Use correct directories

"userXDir" gives the default dir for ladspa, sf2, and gig. "xDir" gives the user dir.

* Make relative to both default and custom locations

Part 1

* Make relative to both default and custom locations

Part 2

* Typofix

* Typofix

* Fix upgrade function after base renaming

* Fix Tests

* Update tests/src/core/RelativePathsTest.cpp

Co-Authored-By: Hyunjin Song <tteu.ingog@gmail.com>

* Choose UserXBase over DefaultXBase if identical

toShortestRelative sticks with the first base found if two bases give the same path length. By placing UserXBase Bases before DefaultXBase Bases in the relativeBases vector, toShortestRelative will prioritize them.

* Ensure baseLocation always has trailing slash

Otherwise, a user configuring a path without one will break things.

* Move loc declaration out of switch

* Semicolon

* Apply suggestions from code review...

* Include PathUtil and sort includes

* More granular includes

* Apply suggestions from code review

Co-Authored-By: Hyunjin Song <tteu.ingog@gmail.com>

* Update include/PathUtil.h

* Leave empty paths alone

* Fix stupid merge

* Really fix merge. Hopefully

* Switch Base from enum to class enum

* Don't pass Base by reference

* Use QStringLiteral for static QString allocation in basePrefix method

* Make VST loading more similar to previous implementation

* Fix tests after enum change

* Attempt to fix VST loading, nicer name for sample clips

* Fix last review comment

Don't append a "/" that will be removed by cleanPath later

* Apply suggestions from code review

Co-authored-by: Dominic Clark <mrdomclark@gmail.com>

Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>
Co-authored-by: Dominic Clark <mrdomclark@gmail.com>
2020-07-28 17:07:35 +02:00
Rebecca DeField
67f0324ff5 Minor icon updates (#5588)
* Delete clear_ghost_note.png

* Delete ghost_note.png

* Delete loop_points_off.png

* Delete loop_points_on.png

* Updated and recreated icons

* Delete trackop.png

* New track gear icon
2020-07-26 11:14:18 -07:00
Kumar
86306042f5 Set default behaviour of playhead to << instead of |<< (#5591)
* Set default behaviour, correct spelling

* Set default behaviour, correct spelling

* Store stop behaviour in project

* Change how state is saved & loaded

* Change to use enum
2020-07-24 09:03:25 +02:00
Stefano Bonicatti
dc3e8cab45 Avoid leaking the track grip QPixmap at each paintEvent (#5590) 2020-07-24 10:33:46 +09:00
Cyp
04d8c0db06 Add missing ¹⁄₉₆ quantization (#5304) 2020-07-24 10:33:15 +09:00
Claudius Ellsel
23242b9529 Fix the outer border for the instrument track (#5594) 2020-07-21 18:35:36 +02:00
Kumar
a11fa71b94 Remove Xpressive help maximise button (#5570) (#5586)
* Remove Xpressive maximise button

* Fix grammar errors
2020-07-20 18:38:45 +02:00
LAMCILAK Theo
37d85ef24a Implement portable mode (#5561)
Adds portable mode by creating a file named portable_mode.txt next to lmms
and fixed a typo in the name of the function
2020-07-20 11:39:53 +09:00
Hyunjin Song
5a7ec92cf0 Fix crash on CLI rendering (#5579)
This is a temporary workaround. To make all export options available in CLI,
some properties of TimeLineWidget should be moved to a core class.
2020-07-20 11:38:46 +09:00
Spekular
619b1d67cd Merge pull request #5580 from IanCaio/hotfix/outputChannelBug
Fixes small conflict on a new commit
2020-07-14 09:09:59 +02:00
IanCaio
920ff35745 Fix bug from issue 5562 (#5565)
Fixes a small bug where projects that are saved with a soloed track can't restore the muted state of other tracks, because it doesn't store the m_mutedBeforeSolo variable on the project file.

With this fix, a new attribute is added to the Track DOM element, containing the muted state of tracks before the solo. When loading older projects that don't contain this attribute m_mutedBeforeSolo will be set to false.
2020-07-14 11:16:04 +09:00
IanCaio
159861a9a0 Fixes small conflict on a new commit
On the PR #5470 (Allows intruments to keep the midi channel information when forwarding), merged on Jun 1st 2020 commit 97680e0, there's a line removed on the src/gui/widgets/InstrumentMidiIOView.cpp file ( m_outputChannelSpinBox->setEnabled( false ); ), because since the output channel is now relevant even when MIDI forwarding is disabled, we need that spinbox always enabled. It was also disconnected from the LedButton to keep it from disabling/enabling it.

On the PR #5171 (Removed the excessive margin in instruments' GUI (#5129)), merged on Jul 9th 2020 commit 9895472, the line was reintroduced, possibly because it was an older PR that wasn't rebased to the latest changes. This broke the output channel spinbox because now it was disabled on the constructor, but it was still disconnected from the LedButton, as a result always disabled.

This hotfix removes the line again to fix the issue.
2020-07-13 22:20:34 -03:00
Spekular
574839f59c Small refactor in FxMixerView and FxMixer (#5577)
FxMixerView.cpp and FxMixer.cpp were inconsistent in their use of TrackContainer::TrackList vs QVector<Track *>. The former is a typedef of the latter, so this PR replaces all instances of QVector<Track *> with TrackContainer::TrackList.

Also, we were not including "TrackContainer.h" directly (the typedef was likely being included indirectly through one of the other include files), so we also include this header on both source codes.
2020-07-12 16:32:12 +02:00
IanCaio
3795fdff64 Small refactor on FxMixerView.cpp and FxMixer.cpp
The code on FxMixerView.cpp and FxMixer.cpp were using the types TrackContainer::TrackList and QVector<Track *> unconsistently. TrackContainer::TrackList is just a typedef for QVector<Track *> so it makes sense that we use it, specially in terms of readability.

Places where QVector<Track *> were used are now replaced with TrackContainer::TrackList.

Also, we were not including "TrackContainer.h" directly (the typedef was likely being included indirectly through one of the other include files), so we also include this header on both source codes.
2020-07-12 10:45:39 -03:00
Hussam al-Homsi
d0ef87543d Remove warning color from oscilloscope (#5492) 2020-07-11 18:40:12 -04:00
Kumar
2da0aaa460 Enable LMMS fullscreen and... (long title, read first line of description) (#5563)
* Enable fullscreen with hotkey & hotkey to toggle maximise in internal window

* Fix an obvious blunder

* Add fullscreen menu entry

* Change Alt+F11 to Shift+F11 (fix Windows bug)

* Move F5-F10 to Ctrl+F*, fullscreen by F11 and fix Linux bug

* Remove wrongly placed "fullscreen" attribute

* Remove temporary fixes for redundant bug

* Rename maximise to maximize

* Rename maximise to maximize

* Use fullscreen icon instead of maximise icon

* Actually include the icon in the commit

* Replace .svg icon with .png 16x16 icon

* Migrate editor hotkeys to Ctrl+1-7
2020-07-11 11:30:27 +02:00
thmueller64
4b4f117add Fix garbage in exported audio caused by resampling (#5552)
This makes AudioDevice::resample return the actual number of generated samples.
2020-07-10 10:58:52 +09:00
Artur Twardowski
9895472efd Removed the excessive margin in instruments' GUI (#5129) (#5171)
* Removed the excessive margin in instruments' GUI (#5129)

* Reduced the font size for "master pitch" label.
* Reduced the layout spacing for MIDI Input and MIDI Output groups
* Shortened labels, so that the LcdSpinBoxes are spaced evenly

* Added translator's comments

* Whitespace fix
2020-07-09 22:08:05 +02:00
Spekular
e07c78d2fc Better minimum length when resizing notes (#5512)
* Limit note length to quantization value

Draging a note to it's minimum value of 1 will add this new length to
the note if you later choose to stretch it which will not be clearly
visible in the Piano Roll unless you zoom in a bit. Limit the note
length to the quantization value and use <Alt> key to override and set
a smaller value.

* Update src/gui/editors/PianoRoll.cpp

Co-authored-by: Spekular <Spekular@users.noreply.github.com>

* Remember min note length if shorter than quantization()

* Find note length modulo quantization, pick smallest from selected notes

* Comment on and improve m_minResizeLen calculation

Co-authored-by: Oskar Wallgren <oskar.wallgren13@gmail.com>
2020-07-09 17:18:57 +02:00
Spekular
afbf80bfcb Refactor deleteUnusedChannels in FxMixerView (#5564)
* Refactor deleteUnusedChannels in FxMixerView

* Comments + style fix

Co-authored-by: Veratil <veratil@gmail.com>, formatting, suggestions on which lines to comment.

Co-authored-by: Kevin Zander <veratil@gmail.com>

* Update weird deleteChannel loop

* Use vector instead of array

Co-authored-by: Dominic Clark <mrdomclark@gmail.com>

Co-authored-by: Kevin Zander <veratil@gmail.com>
Co-authored-by: Dominic Clark <mrdomclark@gmail.com>
2020-07-09 16:33:54 +02:00
IanCaio
5aba3d2a73 Fix a bug on the "Remove unused channels" command (#5559)
On the FX mixer, the "Remove unused channels" action only checked for InstrumentTracks on every channel but ignored SampleTracks that could be linked to the particular FX channel. Because of that, if there was a channel where only SampleTracks are forwarded to and we clicked on "Remove unused channels", it was going to be removed. This commit fixes it.
2020-07-07 09:59:34 +02:00
Kumar
fd04efd394 Make Pause hotkey Shift+Space (#5554) 2020-07-06 17:37:27 +02:00
Hyunjin Song
c83c9bf54f Merge branch 'stable-1.2'
# Conflicts:
#	.travis.yml
#	CMakeLists.txt
#	src/core/Track.cpp
2020-07-05 11:27:33 +09:00
Lost Robot
84998a26fd Update LcdSpinBox.cpp (#5555) 2020-07-04 10:48:16 -06:00
Hyunjin Song
94363be152 Bump version to 1.2.2 2020-07-04 20:58:46 +09:00
Hyunjin Song
fde11df89b Update PROJECT_YEAR 2020-07-04 20:39:07 +09:00
Hyunjin Song
24eb2304fd Add a CMake option for deploying Qt translations 2020-07-04 20:39:04 +09:00
Kumar
984fd3a935 Adding a trail (gradient) behind the position bar (#5543)
* src/gui/editors/SongEditor.cpp

* Gradient can be toggled and color can be changed.

* Made playback line (and tail) transparent to mouse clicks

* Gradient disappears when paused/stopped; tail length depends on zoom

* Fixes bug where gradient appears when a pattern is played; style corrections

* Cleaned up code

* Rename m_zoomLevels to s_zoomLevels

* Finalising code

* Make positionLine class independent of parent zooming model

* Edit a bug fix to make it more efficient

* Rename m_x and finalise positionLine code

* Rename m_x and finalise positionLine changes

* Rename X to playHeadPos
2020-07-02 10:26:41 -04:00
Hyunjin Song
c28dbd1835 Update CONTRIBUTORS 2020-06-23 10:45:39 +09:00
Hyunjin Song
c6f8f7b8e7 Travis: stop auto-uploading binary releases 2020-06-23 10:41:24 +09:00
Luna Nooteboom
5d7e6720e1 Automatically assign a midi input device to the selected track (#5499) 2020-06-21 11:17:05 +09:00
Dominic Clark
f56b4963c1 Fix some TCOs not saving properly (#5537) 2020-06-17 23:05:40 +01:00
Spekular
82f413568d Make better use of getSelectedNotes() in PianoRoll.cpp (#5526)
* Make better use of getSelectedNotes() in PianoRoll.cpp

* Save and reuse selected note vector more often

* Apply review suggestions

Thanks to @Veratil

* Comment, style, consistency
2020-06-15 09:33:51 +02:00
Spekular
733a4115de Merge pull request #5531 from IanCaio/feature/cloneBBTrackPattern
Adds a button to clone the current BB track pattern inside the BB Editor
2020-06-15 09:32:37 +02:00
IanCaio
b1c1d14601 Changes the clone pattern method name
- Changes method name from cloneBBTrackPattern to clonePattern
- Small fix on the comments
- Adds a TODO comment regarding reusing the code from TrackOperationsWidget as a reference, so we can later figure out a way to not repeat the code
2020-06-13 12:14:47 -03:00
IanCaio
503006057c Adds a button to clone the BB track pattern
Adds a button on the BBEditor that clones the current BB track pattern, but without also cloning the song editor TCOs. That can be useful when an user is editing drumlines and wants to make a section with a slight variation for example.
2020-06-11 01:12:42 -03:00
Hussam al-Homsi
8c7e63b35b Remove macros likely() and unlikely() (#5530)
* Remove macros likely() and unlikely(): https://github.com/LMMS/lmms/pull/5530/#issue-431515330

* Remove only use of macro Q_UNLIKELY(): https://github.com/LMMS/lmms/pull/5530/#issuecomment-641634577
2020-06-09 20:45:45 -04:00
Raine M. Ekman
a05306131b Consolidate error messages while loading project (#5269) 2020-06-04 14:21:30 +09:00
IanCaio
97680e081e Allows instruments to keep the MIDI channel information when forwarding (#5470)
Now it's possible to forward received MIDI events with their original channel, either to another track or to the instrument plugin itself. To do that, the user must select the channel "--" on the MIDI output widget. In that case, all MIDI events will be forwarded with their original channel, and the MIDI events produced by the track itself will be sent with the default channel.
2020-06-02 10:48:34 +09:00
Lukas W
b8a3765cb1 Merge branch 'stable-1.2' into master 2020-06-01 15:19:20 +02:00
Oskar Wallgren
82f9239cd1 24 bit FLAC export. Clip negative side of wave (#5501)
24 bit FLAC export. Clip negative side of wave to counteract a bug in libsndfile < 1.0.29

Co-authored-by: Spekular <Spekular@users.noreply.github.com>
Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>
2020-05-27 18:33:54 +02:00
Spekular
f3032575af Remove stopPlaying connection
Missed this in #5477
2020-05-24 21:02:24 +02:00
Oskar Wallgren
0528a00cca Compensate beat note length when stretching (#5515)
* Compensate beat note length when stretching

We allow stretching beat notes to normal notes but the length starts
from -192 so there is a lag for one whole note before any change is
seen. Compensate by setting the oldNote value to 1 when stretching
if the note is 0 or below in length.

Co-authored-by: Spekular <Spekular@users.noreply.github.com>
2020-05-24 20:59:38 +02:00
Johannes Lorenz
c6a1abe150 Fix #5194: Fix knobs moving too fast (#5360)
This PR fixes issues on systems where `QCursor::setPos()` has no effect
or is not reliable. These issues included knobs moving to fast on some
operating systems. Affected widgets are `Knob` and `LcdSpinBox`.

With this PR, on all operating systems, the `setPos` calls are removed and
the cursor is not hidden anymore, so the mouse keeps moving normally
when changing values of one of the widgets.

As now the previous pointer position keeps moving (instead of being reset
to the original position using `QCursor::setPos`), the mathematics that
translate pointer pixel distance to `Knob`/`LcdSpinBox` value increase
have to be changed:

* The `Knob` transition function is now linear and uses a new factor.
* `LcdSpinBox` now uses float values and saves the current float remainder
  (this is actually a separate issue revealed by this fix), leading to a fluent,
  non hanging movement.
2020-05-24 13:35:16 +02:00
Johannes Lorenz
3a985ff1fc Fix #4201: BB editor: adjust cursor position (#5489)
This fixes an offset for cursors whose pointer position varies between
different themes.
2020-05-24 13:20:05 +02:00
Johannes Lorenz
2a66e83f53 Lv2 core implementation
Implementation of the Lv2 core, except for CV ports. No features or
extensions are supported yet.

You can now generate sound using Lv2 instruments (restricted to non-piano)
or effects.

For an explenation about the new classes, see Lv2Manager.h
2020-05-24 12:50:50 +02:00
thmueller64
d5a2366fc8 Fix #5504: invalid warning 2020-05-23 18:07:35 +02:00
Johannes Lorenz
7aef23d209 LinkedModelGroupView: Un-focus filter edit...
... whenever the user clicks other widgets
2020-05-23 09:00:11 +02:00
Johannes Lorenz
109cdf6cf3 Fix #5483: sf2_player: No crash when file is no soundfont (#5487) 2020-05-21 22:45:01 +02:00
bahaokten
c3e056a21d Implement compress action for commandline use (#5341) 2020-05-19 19:02:01 +02:00
Lost Robot
b6b75a5f21 Divide knob step size by 1000 for LADSPA effects (#4574) 2020-05-19 18:15:03 +02:00
Cyp
8a190e4e13 Fix wrong lengths of exported tracks, when tracks have different lengths. (#5348)
* Fix wrong lengths of exported tracks, when tracks have different lengths.

Song::updateLength() was called in ProjectRenderer::run() after Song::startExport(),
updating m_length too late, resulting in it being used as the length of the wrong track.

* Fix "Export as loop" resetting after rendering the first track

Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>
2020-05-19 12:28:03 +09:00
necrashter
7f9b4c2401 Implement fade in to prevent Triple Osc from clicking (#5199) 2020-05-19 11:34:54 +09:00
Johannes Lorenz
29a5abc30b Fix Qt 5.15 build issues (#5498)
Add missing QPainterPath includes
2020-05-18 12:58:48 -04:00
Johannes Lorenz
b818234c15 ControlLayout: Allow removing search bar's focus 2020-05-17 09:22:36 +02:00
Ibuki
1e8fcbdf2d Show VST parameter string (#5321) 2020-05-17 11:15:39 +09:00
Oskar Wallgren
953a0b17c1 Song Editor - Delete selected objects with backspace key (#5497) 2020-05-15 19:16:06 +02:00
Johannes Lorenz
737fcd3e55 JackMidi: Remove confusing warning at shutdown
Warning is:

```
jack_port_unregister called with an incorrect port 0
Failed to unregister jack midi output
```
2020-05-15 18:49:55 +02:00
Johannes Lorenz
e3cae80580 Audio/MidiJack: Fix invalid read: (3) of #5408
This atomically unsets the MidiJack reference in AudioJack right before
MidiJack is destroyed. This avoids AudioJack using a destroyed MidiJack
object.
2020-05-15 18:49:55 +02:00
Johannes Lorenz
9e9c5acc17 Audio/MidiJack: Fix invalid read: (2) of #5408
This patch
* makes `m_stopped` atomic
* initializes `m_stopped` correctly to `true`
* moves the initialization of `m_stopped` to the point where jack ports
  are already connected
2020-05-15 18:49:55 +02:00
Johannes Lorenz
c6d60e982e Audio/MidiJack: Fix invalid read: (1) of #5408
This fixes reading from jack MIDI events in case where
there are no jack MIDI events.
2020-05-15 18:49:55 +02:00
Lukas W
f5ecddbb1f Fix Windows rpmalloc compile flags 2020-05-12 11:43:23 +02:00
Lukas W
dc95f07287 Fix Windows compilation with no gzip available 2020-05-12 11:31:05 +02:00
Lukas W
187f7f58c7 Merge stable-1.2 into master 2020-05-12 11:18:14 +02:00
Hussam al-Homsi
04239bafc3 addStretch() before adding the oscilloscope 2020-05-10 13:29:14 +02:00
Hyunjin Song
23fd4bd05c Forward search paths correctly in INSTALL_TARGET_DEPENDENCIES
Also fixes a typo in cmake/install/CMakeLists.txt.
2020-05-10 10:33:03 +09:00
Hussam al-Homsi
ec37f347de Refactor the oscilloscope (#5488)
* Rename files

* Update code

* Remove unused code

* Make background a member variable
2020-05-09 18:19:17 -04:00
Lost Robot
79511d6004 Decrease Bitcrusher bit depth reduction step size (#5407) 2020-05-09 14:03:34 -06:00
akimaze
ab107f01f9 VST preset preview (#5441)
* Enable vestige presets preview.

* Don't destroy vestige instrument on every preset change.

* Don't reload VST dll plugin when it's not necessary. Always hide plugin UI in preview mode.

* Don't remove other instruments in preview mode, don't send instrument change signal.

* Minor changes

* Add a change I missed

Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>
2020-05-09 13:23:40 +09:00
Kevin Zander
317be01012 Fix #4098 (#5449)
Fixes piano roll crashing when window is scaled too large.
2020-05-07 14:18:15 +02:00
thmueller64
56fbefc700 Fix #5461 and ensure consistent use of check gate (#5475)
* Multiple effects: Calculation of `outSum` should be after D/W mixing
* CrossoverEQ.cpp: `outSum` must be divided by frames in the end 
* CrossoverEQ.cpp: don't overwrite `outSum` in for loop, but increment it
2020-05-06 11:23:40 +02:00
Kevin Zander
1a6f4c1104 Add option to move SideBar to right side of window (#5114) 2020-05-05 11:46:25 +09:00
Spekular
6095bbc762 Merge pull request #5477 from Spekular/SampleIndicator
Sample track activity indicator
2020-05-04 17:11:38 +02:00
tresf
71b6107d9b Remove unwarranted CXX flag
Per https://github.com/LMMS/lmms/pull/4080#issuecomment-623058847
2020-05-03 02:26:57 -04:00
Hyunjin Song
c18edd4cef Use local cursor instead of global one in PianoRoll (#5200)
Fixes stuck vertical cursor as well.
2020-05-03 12:44:30 +09:00
Andreas Müller
f4f10c11fc 3rdparty/cmake: Do not reset CMAKE_C(XX)_FLAGS (#4080)
CMake 3rdparty: Do not overwrite CMAKE_C(XX)_FLAGS

Co-authored-by: tresf <tres.finocchiaro@gmail.com>
2020-05-02 16:55:06 -04:00
Oskar Wallgren
ca09b29087 Select the correct piano key for marking semitones (#5478)
When selecting a Piano Key to mark semitones in the Piano Roll we
select key from the y position of the pop-up menu and not the mouse.
Incidentally these two are most often the same as the menu builds
from the mouse y positon and down. If there is room for it. If there
is no room downward it will create the menu so the lower part of the
frame aligns with the mouse y position.
Fixed by creating a variable to hold the pressed key before creating
the menu.
2020-05-02 16:41:44 +09:00
Spekular
e643f83bc0 Merge branch 'SampleIndicator' of https://github.com/Spekular/lmms into SampleIndicator 2020-05-01 20:04:24 +02:00
Spekular
9ed5f80fe0 Refactor palette update on un/mute 2020-05-01 20:03:27 +02:00
Spekular
0c180b8dc5 Nicer spacing in activity indicator's setGeometry call
Co-authored-by: Kevin Zander <veratil@gmail.com>
2020-05-01 12:27:41 +02:00
Spekular
aaf94ef69d Formatting chananges 2020-04-30 22:07:00 +02:00
Spekular
ae2af96c9a Use nullptr instead of NULL
Requested by Veratil <veratil@gmail.com>
2020-04-30 18:06:06 +02:00
akimaze
c755b56a52 Piano roll vertical zoom (#5442) 2020-04-30 11:22:28 +09:00
Spekular
5821466f18 Fix indicator in BB editor 2020-04-29 21:17:16 +02:00
Spekular
b46ea0e9af refactor 2020-04-29 20:44:09 +02:00
Spekular
7c2c77cc89 Mergefix 2020-04-29 17:49:28 +02:00
Hyunjin Song
687870d302 AFP: fix loading start and loop points if the loop point is automated (#5472) 2020-04-28 14:41:11 +09:00
Hyunjin Song
e199f72686 Fix crash on drawing line on the end of a graph (#5471)
This bug was introduced in dff76b2e83.
The function changes [sample_end, sample_begin), but emits the signal
as if [sample_end, sample_begin] has been changed. That bug made
Multitap Echo crash when tweaking the cutoff of the 32nd stage.

This commit fixes the issue by emitting sampleChanged with sample_end - 1.
2020-04-28 14:39:39 +09:00
Spekular
9efb6f9a8e Merge pull request #5469 from Veratil/issue-5254
Set AutomationPattern length to 1 bar if the length is 0
2020-04-26 22:21:04 +02:00
Veratil
a4f677362d Add comments and reduce unnecessary code 2020-04-26 14:44:05 -05:00
Veratil
aec0dd3b3e If AutomationPattern has a single tick at 0, set it's length to 1 bar. 2020-04-26 12:52:17 -05:00
Hyunjin Song
1c5a3f8a36 DrumSynth: ensure correct envelope length in any sample rate (#5467) 2020-04-26 10:59:43 +02:00
Michael Gregorius
31996fee7a Merge pull request #5454 from michaelgregorius/5453-OpenContainingFolder
Implements "Open containing folder" (#5453)
2020-04-23 19:48:37 +02:00
Oskar Wallgren
149eca1ec9 Note selection: Editing values works in dialog (#5438) 2020-04-22 22:25:14 +02:00
tecknixia
abcfee1334 disable drag after drawing line (#5315) 2020-04-22 20:47:59 +02:00
Johannes Lorenz
27b1ce914b Remove plugins/LadspaEffect/swh/ladspa-util.c (#5451)
This file contains no used code and it caused build problems, so we
remove it. Thanks to @plater for the issue report.
2020-04-22 10:35:00 +02:00
Michael Gregorius
c37fdd0055 Code review changes (comment added)
Add a comment which describes that only the folder is opened without
selecting any file. Also explain why it is only done like this for now.
2020-04-21 20:12:50 +02:00
Michael Gregorius
b85aef2f33 Code review changes
Move openContainingFolder to the end of the method block.

Adjust FileBrowserTreeWidget::contextMenuEvent to the coding conventions
and also make the code more readable by splitting up some conditions.

Add comments to clarify as to why the member m_contextMenuItem is set to
nullptr at the end of the execution of contextMenuEvent. Please note
that this implementation is not exception safe and should be changed in
the future, e.g. by passing the FileItem as a parameter of the slot.
2020-04-19 22:08:09 +02:00
Michael Gregorius
2aea19fff1 Add "Open containing folder" (#5453)
Add functionality to open the containing folder of a file that's selected
in LMMS' file browser.

Technical details
------------------
Add a new private method openContainingFolder to FileBrowser. Add a new
action to the context menu of a selected file. This action in turn calls
the added method.

The current implementation of openContainingFolder delegates to
QDesktopServices::openUrl with the directory of the selected file. Please
note that this will only open the directory but not select the file as
this is much more complicated due to different implementations that are
needed for the different platforms (Linux/Windows/MacOS).

Using QDesktopServices::openUrl seems to be the most simple cross
platform way which uses functionality that's already available in Qt.
2020-04-14 14:45:08 +02:00
Spekular
24194334e6 Merge pull request #5401 from Spekular/dropPosition
Bias dropped clip position backwards
2020-04-12 11:10:42 +02:00
Hyunjin Song
174630087e Use shimmed std::as_const instead of qAsConst 2020-04-04 12:13:01 +09:00
Hyunjin Song
8d908c681e Ensure plugin dependencies are deployed correctly 2020-04-04 12:13:01 +09:00
Hyunjin Song
924743dd17 Fix submodule fetching from non-default branches with old Git 2020-04-04 12:13:01 +09:00
Hyunjin Song
ebfa883e4d Carla: fix MSVC compatibility 2020-04-04 12:13:01 +09:00
Hyunjin Song
7628b253b0 Fix linking issues with the dummy Carla library(especially with MSVC) 2020-04-04 12:13:01 +09:00
Hyunjin Song
d173f42fec Fix wine detection 2020-04-04 12:13:01 +09:00
Hyunjin Song
9c2ccdf3a8 Fix some issues in shell scripts spotted by shellcheck 2020-04-04 12:13:01 +09:00
Hyunjin Song
044c88c271 Merge branch 'stable-1.2'
# Conflicts:
#	.gitmodules
#	.travis.yml
#	.travis/linux..before_install.sh
#	.travis/linux..install.sh
#	CMakeLists.txt
#	cmake/linux/package_linux.sh.in
#	cmake/modules/BuildPlugin.cmake
#	include/AutomatableModel.h
#	plugins/MidiImport/MidiImport.cpp
#	plugins/carlapatchbay/CMakeLists.txt
#	plugins/carlarack/CMakeLists.txt
#	src/core/Song.cpp
#	src/core/Track.cpp
#	src/gui/editors/SongEditor.cpp
#	tests/src/core/AutomatableModelTest.cpp
2020-04-04 12:08:55 +09:00
Hyunjin Song
8afa2d5412 Fix the linking method for the dummy Carla library 2020-04-04 12:06:35 +09:00
Johannes Lorenz
656eede6ba Fix bug made in #5336
This removes a duplicate dataChanged() emit. Thanks to @PhysSong for the
hint.
2020-04-01 21:24:22 +02:00
Hyunjin Song
a8df120a58 STK Mallets: don't silence active notes when switching instruments
This also fixes the underlying noise on instrument switches.
2020-03-25 11:09:55 +09:00
Hyunjin Song
b51079e921 Use proper synchronization methods on some instrument track operations 2020-03-25 11:09:55 +09:00
Hyunjin Song
2367a62a51 Fix crashes and hangs on importing some Hydrogen drum kit songs (#5420) 2020-03-23 15:11:13 +09:00
Hussam al-Homsi
85e0574138 Refactor FFT helpers (#5309)
* Do not check if unsigned int is negative

* Reduce scope of some local variables

* Use right types for iterators

* Check conditional returns first

* Remove unused functions

* Utilize a range-based for loop opportunity
2020-03-11 15:07:02 -04:00
Tres Finocchiaro
0196f31509 Fix SDL2 detection
Per #5389 (Comment)
Recommended by @PhysSong 
Adopted from upstream SDL1 patch c5c217c6b5
2020-03-11 11:55:33 -04:00
Johannes Lorenz
d382d4e08b Fix previous commit 2020-03-08 08:47:40 +01:00
Johannes Lorenz
ab8be73047 Cherry-pick from master commit 4dc26d1 (#5413) 2020-03-08 08:24:46 +01:00
Muhammed Furkan USLU
4dc26d1aab Fix issue #5409. (#5413)
Fix multiple uninitialized reads.
2020-03-08 07:31:36 +01:00
Hyunjin Song
94431ea9de RemoteVstPlugin: fix issues with FXP/FXB files on Windows (#5411) 2020-03-01 12:03:49 +09:00
Spekular
b2c4f2939d Elaborate on desired version information
Closes #5368
2020-02-28 20:40:12 +01:00
Johannes Lorenz
47786865ef Document strange bug 2020-02-25 20:40:49 +01:00
Johannes Lorenz
97a6379c6d Update UI after linking models (#4904) 2020-02-25 20:40:49 +01:00
Johannes Lorenz
a0f4e50805 Fix knobs not updating vals on link (#4904) 2020-02-25 20:40:49 +01:00
Johannes Lorenz
534d7ca9c5 Fix doxygen comment 2020-02-25 20:40:49 +01:00
Spekular
bbb3624399 Bias dropped clip position backwards 2020-02-23 14:01:56 +01:00
Johannes Lorenz
eebdc0f4be Linked model groups (#4964)
Add labeled controls for different types with a common base class

Implement a container for multiple equal groups of linked models and
suiting views. Such groups are suited for representing mono effects where each
Model occurs twice. A group provides Models for one mono processor and is
visually represented with a group box.

This concept is common for LADSPA and Lv2, and useful for any mono effect.
2020-02-21 19:26:29 +01:00
tresf
a77e592c19 Fix handling of plugin_export.h
Fixes error: definition is marked ‘dllimport’
Per #4813
2020-02-08 01:57:30 -05:00
Hyunjin Song
3410db4d99 Travis/macOS: rename qt5 to qt in the installation script
Travis-CI started installs Qt 5 to their macOS images.
To exclude qt properly, it should not be written as its alias 'qt5'.
2020-02-07 15:03:43 +09:00
Hyunjin Song
ea670287f3 macOS CI: fix package conflicts due to Homebrew's Python 2 2020-02-07 15:03:43 +09:00
Martin Pavelek
89d8363218 Add the vectorscope plugin (#5328)
The credit for the `ColorChooser` class goes to CYBERDEViLNL.
2020-02-07 15:00:42 +09:00
Hye Sung Jung
8679f79e2b fix spelling errors (#5385) 2020-02-01 13:38:59 +01:00
Hyunjin Song
aeac24c06d Fix a muted demo project "Greippi - Krem Kaakkuja (Second Flight Remix)" 2020-01-26 16:05:47 +09:00
Johannes Lorenz
d280b8628d Fixes #3183: Fix file factory delimeter position 2020-01-22 05:57:28 +01:00
Johannes Lorenz
427d779668 FileBrowser: Add helpful comments 2020-01-22 05:57:28 +01:00
Javier Serrano Polo
fd77c79cda Switch to Xenial build environment (#4813)
* Switch to Xenial build environment
* Add Carla submodule/weak linking support, related #3963 
* Fix Carla detection in AppImage, closes #5369
2020-01-17 10:55:07 -05:00
Hussam al-Homsi
63d11f763c Simplify FadeButton update (#5311) 2020-01-12 20:42:54 -05:00
Dominic Clark
c52682dfb1 Fix stuck notes with Helm VSTi 2020-01-08 07:53:13 +01:00
Martin Pavelek
ef99c53357 fix locking of the useless_lock in LocklessRingBuffer.h 2020-01-05 17:54:29 +01:00
Johannes Lorenz
a9640c8898 Comment-out deprecated attribute
It may be valid, but fails our CI
2019-12-26 18:23:52 +01:00
Hyunjin Song
11e5de3a4e Debian: add libx11-xcb-dev as an explicit build dependency 2019-12-24 12:03:17 +09:00
Cyp
42f7e262e9 Fix scrolling direction in SongEditor due to stuck Ctrl/Shift. 2019-12-23 21:17:18 +01:00
Cyp
d849cc179c Only filter out <>:"/\|?* while exporting tracks. 2019-12-23 20:05:26 +01:00
Hyunjin Song
4bfcc30a71 MIDI import: fix putting notes before the beginning of a pattern (#5343) 2019-12-23 17:33:46 +09:00
Hussam al-Homsi
abf3530d33 Return EXIT_SUCCESS instead of 0 in main 2019-12-15 00:50:43 -05:00
liushuyu
a9e3e70ae3 filebrowser: making the string more flexible for i18n 2019-11-24 00:50:15 -07:00
liushuyu
b11e8eb33b SpectrumAnalyzer: Fix typo 2019-11-24 00:50:15 -07:00
Cyp
578a9475ec Fix invalid read in RemotePlugin::RemotePlugin() on opening the ZynAddSubFx GUI. (#5299)
Calling .toUtf8().constData() returns a pointer which is invalid at the end of the statement.
2019-11-22 22:26:00 +09:00
Hyunjin Song
a2e328e3dd Fix crash on deleting instrument with controller connections on knobs (#5306)
Knob::friendlyUpdate() can be called after the model is deleted
due to signal-slot connections.
Adding a check for the model fixes a crash due to null pointer dereference.
2019-11-22 21:26:47 +09:00
Martin Pavelek
da73ddd242 Spectrum analyzer update (#5160)
* advanced config: expose hidden constants to user screen
* advanced config: add support for FFT window overlapping
* waterfall: display at native resolution on high-DPI screens
* waterfall: add cursor and improve label density
* FFT: fix normalization so that 0 dBFS matches full-scale sinewave
* FFT: decouple data acquisition from processing and display
* FFT: separate lock for reallocation (to avoid some needless waiting)
* moved ranges and other constants to a separate file
* debug: better performance measurements
* minor fixes
* build the ringbuffer library as part of LMMS core
2019-11-21 14:44:18 +01:00
Andres
df3e388393 Fix triggering of stop animation when playing no samples after stopping song playing samples 2019-11-19 19:07:10 -03:00
Kapandaria
2f0010270e Xpressive plugin updates (#5217)
* Updated plugin artwork.

* Update the formula in the presets to use integrate(f) instead of
  t*f, as integrate operation is more robust to frequency changes.

* rename X-Pressive to Xpressive in help window title.

* Xpressive.cpp, spaces to tabs and remove commented code.
2019-11-18 21:29:08 +01:00
Andres
229de18bc0 Fixed triggering of stop animation when not playing 2019-11-17 23:05:16 -03:00
Dominic Clark
cf4bb7b851 Fix remote plugin crash reading parameters from Grooove plugin (#5300) 2019-11-17 16:09:48 +00:00
Kevin Zander
256ae6dad6 Fix incorrect m_lastSoloed after moving/deleting an FX channel
Original code by @gi0e5b06.
2019-11-16 10:46:09 +09:00
Hussam al-Homsi
33b36ffc5e Add some missing includes 2019-11-15 17:09:57 -05:00
Olivier Humbert
ffce1d947a Debian packaging improvements (#5264)
* d/control: http -> https
* d/control: rearrange lists (one item per line + alphabetically ordered)
* d/copyright: http -> https
* Delete contributors.patch (integrated now)
* d/series: removes contributors.patch
2019-11-14 23:30:49 -05:00
Andres
e056ecb27b Added to sampletrackview the code needed for the activity indicator mute behaviour 2019-11-07 21:02:55 -03:00
Andres
caaeb62a95 Moved the activity indicator mute code to parent class 2019-11-07 20:53:05 -03:00
nia
b4459bed9e Support NetBSD's OSS audio/midi implementation (#5277) 2019-11-07 13:47:20 +09:00
Hussam al-Homsi
a24f1d779d Do not include unused headers 2019-11-06 22:06:15 -05:00
Andres
4d9e5e36a6 Sampletrack activity indicator 2019-11-05 08:17:25 -03:00
Lukas W
fb25575339 Merge issue templates (PR #4884)
Add issue templates
2019-11-05 09:46:30 +01:00
Lukas W
8a52ddb642 CricleCI: Test merged pull request 2019-11-01 14:01:12 +01:00
Kevin Zander
a8d91b10e8 Fix vertical piano mouse click unresponsiveness
`PianoRoll::mouseDoubleClickEvent` wasn't forwarding the event to the base class when not acting on the event. The base class calls `mousePressEvent`.

Fixes #3005
2019-11-01 08:37:43 +01:00
Kevin Zander
ebf71003c7 Fix vertical piano mouse click unresponsiveness
`PianoRoll::mouseDoubleClickEvent` wasn't forwarding the event to the base class when not acting on the event. The base class calls `mousePressEvent`.

Fixes #3005
2019-11-01 08:36:54 +01:00
Shmuel H
08c7e8e8dd appimage: Escape $DIR to avoid word-splitting 2019-11-01 09:10:01 +02:00
Shmuel H
02980e610c appimage: Use command -v instead of which (sc2230) 2019-11-01 09:10:01 +02:00
Shmuel H
55b65527c3 appimage: move launcher code into launch_lmms.sh. 2019-11-01 09:10:01 +02:00
David CARLIER
dac59a5fa0 C++11 inheritance updates
Add `override` and remove `virtual` where applicable
2019-10-31 20:05:33 +01:00
Cyp
fd203c3f7b Fix crash due to calling QWidget::move from a non-GUI thread while exporting tracks.
Calling via QMetaObject::invokeMethod should be thread safe.

Crash callstack:

QWidget::move
SongEditor::updatePosition
Song::stop
Song::stopExport
ProjectRenderer::run
QThreadPrivate::start
2019-10-31 17:24:13 +01:00
Alexandre Almeida
46f5433732 New BARS_PER_GROUP constant 2019-10-31 15:14:04 +01:00
Alexandre Almeida
53e6b645c8 Use "bar" instead of "tact"
Closes #4865
2019-10-31 15:13:25 +01:00
Lukas W
b8e499d6d8 Merge "Don't use deprecated Qt5 functions" (#5156) 2019-10-31 09:41:43 +01:00
Hyunjin Song
488c4ea603 CircleCI: support Qt from a PPA on /opt 2019-10-31 15:14:52 +09:00
Hyunjin Song
9cb1f8e784 Change the docker tag for CircleCI Linux builds
In response to https://github.com/LMMS/lmms-ci-docker/pull/7
2019-10-31 14:37:40 +09:00
Lukas W
400c8d8105 Remove Travis MinGW builds
We already run them on CircleCI with a newer Qt version.
2019-10-30 12:13:27 +01:00
Lukas W
b5b3b2e6a6 CMake: Require Qt 5.6+ 2019-10-30 12:13:27 +01:00
Lukas W
d9f1383ca9 Remove remaining usages of QSignalMapper 2019-10-30 12:13:27 +01:00
Noah Brecht
2c5bf2b9dd lambdas instead of QSignalMapper 2019-10-30 12:13:27 +01:00
Noah Brecht
38f599b6e7 setPath rather than operator= for qDir 2019-10-30 12:13:27 +01:00
Noah Brecht
200d1c209c more depricated qt functions 2019-10-30 12:13:27 +01:00
Lukas W
35daff9a84 GitHub: Add Discord contact link to template chooser 2019-10-29 22:42:52 +01:00
Lukas W
4a9e9da78c Issue templates improvements
* Ask users to search the tracker first
* Ask for the LMMS version in bug reports
2019-10-29 22:42:20 +01:00
Oskar Wallgren
6c865c072d Piano Roll - Fix retrigger with vol/pan sliders (#5271) 2019-10-29 14:01:05 +01:00
Shmuel H
1b45ce5a98 CircleCI: Add macOS support. 2019-10-28 22:34:18 +02:00
nia
eeaaf6d1da Support CMAKE_INSTALL_MANDIR (#5276) 2019-10-28 09:56:34 +09:00
knittl
5e4e536bf0 Replace initializer list macros with delegating constructors (#5279)
Closes #5278
2019-10-27 21:17:04 +01:00
Mark-Agent003
3745bfbd7f Increase File Browser Spacing (#4252)
Increase File Browser Spacing
2019-10-25 09:20:02 +02:00
Hyunjin Song
13c4f4a995 Let Travis Mac builds use the Xcode 9.4 image 2019-10-22 11:30:36 +09:00
Hyunjin Song
7ebaa0e211 Merge branch 'stable-1.2'
# Conflicts:
#	data/locale/pl.ts
#	include/SongEditor.h
#	plugins/vst_base/CMakeLists.txt
#	src/core/Song.cpp
#	src/gui/editors/SongEditor.cpp
2019-10-21 11:18:39 +09:00
Shmuel H
82c38193de Add windows NSIS artifact extensions (#5244)
* MSVC: Move MSVC year detection to DetectMachine.cmake.
* NSIS: Add compiler to installer name
2019-10-20 23:28:42 +03:00
Lost Robot
2d17bf07f3 Allow mid-note automation of BitInvader sample length (#4705) 2019-10-17 16:44:55 +09:00
Shmuel H
a22b6d7575 NSIS: Add compiler to installer name 2019-10-17 03:04:18 +03:00
Shmuel H
d005eec1aa MSVC: Move MSVC year detection to DetectMachine.cmake. 2019-10-17 03:03:26 +03:00
Hyunjin Song
f1831ffdc6 Export TrackContentObject class
Fix a build error introduced in #5223.
2019-10-17 08:54:51 +09:00
Kevin Zander
170d28ffbd Remove global automation from MIDI import (#5223) 2019-10-15 11:22:41 +09:00
Hyunjin Song
d7a78fe121 Specify timeout for transfer.sh uploads
Prevents "No output has been received in the last 10m0s" errors on Travis CI.
2019-10-10 14:22:42 +09:00
Hyunjin Song
91a38a922d Add back '-Wl,-E' (#5233) 2019-10-10 10:06:14 +09:00
Kevin Zander
e1d311730b Fix regression introduced in #5170 (#5224) 2019-10-07 21:33:11 +02:00
Shmuel H
45cb7f21c5 linuxdeployqt: drop -unsupported-allow-new-glibc 2019-10-07 15:40:09 +03:00
Shmuel H
770e8cc777 CircleCI: Use xenial for linux.gcc builds
AppImage will fail otherwise.
2019-10-07 15:40:09 +03:00
Hyunjin Song
2df4fff1c0 Work around a winegcc bug of Wine >= 4.14 (#5211)
See https://bugs.winehq.org/show_bug.cgi?id=47710 for details
2019-10-07 08:02:03 +09:00
Tres Finocchiaro
da09b2a941 CheckSubmodules: Workaround submodules failing (#5222)
Workaround git's inability to recover from a shallow clone
2019-10-06 01:05:53 -04:00
Tres Finocchiaro
15fe551b1d Submodules: Only fetch required (#5182, closes #5105) + Non-shallow fallback (hotfix)
* Retry updating submodules non-shallow if shallow clone fails (master hotfix)
* Add `PLUGIN_LIST` support to CheckSubmodules (#5105)
* Remove `SKIP_SUBMODULES` switch (it's redundant to specifying `PLUGIN_LIST`)
* Add `NO_SHALLOW_CLONE` switch
2019-10-03 17:47:49 +02:00
Hussam al-Homsi
9f0baab93a Fix regression of some default settings
The regression was introduced in #3820.
2019-10-01 21:14:55 -04:00
https://gitlab.com/users/CYBERDEViLNL
ca8871455e Make undo for PianoRoll cut action possible (#5214) 2019-10-02 08:00:59 +09:00
https://gitlab.com/users/CYBERDEViLNL
5132d91bfc Give focus to AutomationEditor when the window gets the foucs (#5170)
This will make shortcuts work on opening the editor.
2019-10-02 08:00:11 +09:00
Kevin Zander
867639929a Add close button to SideBarWidget (#5133) 2019-10-01 11:36:45 +09:00
Shmuel H
57a486c75d Merge pull request #5142 from Reflexe/cmake/install-refactor
Support automatic dll collection and refactor cmake installation process.
2019-09-24 11:36:24 +03:00
Hyunjin Song
94354e3053 Support deploying dependencies in MSVC builds with CMake < 3.14 2019-09-24 10:47:24 +03:00
Hyunjin Song
2f64c461e8 Fix missing system libraries in MSVC installations
* Install UCRT libraries
* Install debug libraries in debug builds
2019-09-24 10:47:24 +03:00
Shmuel H
ae9d619abd BuildPlugin: Always remove 'lib' suffix from the DLL name 2019-09-24 10:47:24 +03:00
Shmuel H
1324cf48c1 Enable automatic dll installation for RemoteVstPlugin32
Co-Authored-By: Hyunjin Song <tteu.ingog@gmail.com>
2019-09-24 10:47:24 +03:00
Hussam al-Homsi
90dec52db0 Add missing icons of File menu actions (#5183) 2019-09-19 12:02:11 -04:00
Tres Finocchiaro
ffa03df72b Fix $PATH value in AppImage
Closes #5187
2019-09-15 10:18:47 -04:00
Hyunjin Song
6782b6d6c4 Merge branch 'stable-1.2'
# Conflicts:
#	.mailmap
#	cmake/linux/lmms.desktop
#	src/gui/editors/PianoRoll.cpp
#	src/tracks/BBTrack.cpp
2019-09-15 21:08:33 +09:00
Kevin Zander
8fdf6c4d12 Fix #4188 - Check for failed std::find (#5137) 2019-09-14 20:36:06 +03:00
Kevin Zander
b07c007a27 Add save/load of PianoRoll marked semitones (#5146) 2019-09-14 19:57:44 +03:00
Hussam al-Homsi
9eb6e3fa33 Update .mailmap 2019-09-13 14:03:26 -04:00
Dominic Clark
91cf5bd88d Support compilation with MSVC 2019 (#5180) 2019-09-10 15:17:55 +01:00
Hussam al-Homsi
a0e7a88e67 Remove "What's This?" leftovers (#5173) 2019-09-09 00:22:43 -04:00
malcops
e1236f53e2 Remove maximize from Meter(Metro) menu (#5071)
Fixes #4984.
2019-09-08 11:18:45 +09:00
Hussam al-Homsi
84d1091100 Rewrite the setup dialog (#3820) 2019-09-05 20:32:17 -04:00
Shmuel H
13da2b9576 CMake: extract dll installation code into a portable function 2019-09-04 10:15:31 +03:00
Shmuel H
72bdb23531 CMake: Provide API for install-time variables with generator expression 2019-08-31 09:15:29 +09:00
Hyunjin Song
7a23ee8ad1 AppVeyor: create Windows installers 2019-08-31 09:09:49 +09:00
Hyunjin Song
8d169fa529 CircleCI: create Windows installers 2019-08-31 09:09:49 +09:00
Lukas W
4fd8e08f3b Rewrite CMake dependency installation
Replaces the hard-coded library paths by a method based on CMake's
GetPrerequisites module which recursively finds a binary file's linked
libraries. Advantage: Potentially works on any system without adaption as
long as CMake supports it, so it could be used to create portable Linux
packages as well. Disadvantage: "Potentially".

Co-Authored-By: Hyunjin Song <tteu.ingog@gmail.com>
2019-08-31 09:09:49 +09:00
Lost Robot
c2eefe73d0 Prevent LMMS VisualizationWidget from showing clipping color at exactly 0 db (#5162) 2019-08-30 16:36:04 -06:00
Winnie
e803a31a90 Simplify TemplatesMenu class (#5155) 2019-08-28 22:51:54 +02:00
Winnie
605aef7afc Fix loading state for recent projects menu (#5152) 2019-08-26 09:33:25 +08:00
RossGammon
4c2d8941dc Fix some spelling errors in lmms (#5151) 2019-08-26 09:09:05 +08:00
Winnie
2cdb9f2f38 Extract RecentProjectsMenu class from MainWindow (#5148)
* Extract RecentProjectsMenu class from MainWindow
* Clean up updateRecentlyOpenedProjectsMenu
* Remove m_recentlyOpenedProjectsMenu from MainWindow
2019-08-24 18:55:30 +02:00
Winnie
a863830795 Extract TemplatesMenu class from MainWindow (#5125) 2019-08-24 09:33:52 +02:00
Dominic Clark
93f9134c45 Fix crash opening VST automation window (#5144)
The VST automation window initially adds a subwindow with a null widget, so we have to check that w isn't nullptr before getting its size hint.

Fixes #5132.
2019-08-23 20:38:46 +03:00
Kevin Zander
c80519e65e Allow playing muted pattern in the piano roll (#5134) 2019-08-21 12:41:33 +08:00
Shmuel H
ce5c74432e Update appveyor image to Visual Studio 2017 (#5130) 2019-08-20 12:37:42 +03:00
Steffen Baranowsky
e1ef5fad0d shows the vertical scrollbar of songeditor and bb-editor only if needed (#5102) 2019-08-18 10:49:02 +02:00
Kun Deng
00d2cd304a Fix for the SF2 with no "default" patch (#5084)
Fixes #323
2019-08-13 21:23:57 +03:00
Olivier Humbert
db200fb90c Create FUNDING.yml (#5057) 2019-07-30 08:40:07 +08:00
Hussam al-Homsi
e206798c1e Use mean based logic for controlling loop points. (#4034)
* Use median based logic for controlling loop points.

* Limit controlling loop points to right mouse button.
2019-07-29 12:08:07 -04:00
Spekular
1c715bc335 Enhanced snapping in song editor (#4973)
* New default behavior: Preserves offsets when moving clips, resizes in fixed increments.

* Adds shift + drag: Snaps move start position (like current behavior) or end position (new),
based on which is closest to the real position. When moving a selection,
the grabbed clip snaps into position and the rest move relative to it.

* Adds alt + drag: Allows fine adjustment of a clip's position or size,
as an alternative to ctrl + drag.

* Adds a Q dropdown in the song editor to allow finer or coarser snapping (8 bars to 1/16th bar)

* Adds a proportional snap toggle. When enabled, snapping size/Q adjusts based on zoom,
and a label appears showing the current snap size. This is disabled by default.
2019-07-27 17:14:49 +08:00
Hyunjin Song
7492e53b02 Fix broken translations in 12ea80d4fb 2019-07-22 09:01:58 +09:00
Johannes Lorenz
a966d25ad2 Merge branch 'variable-tab-widget' 2019-07-22 01:22:10 +02:00
Johannes Lorenz
6e7c4a47c2 Fixes #5061: Fix Effect Rack View in Instrument
The EffectRackView in an InstrumentTrackWindow had some parts hidden when
loading files with >= 4 effects. This was now fixed by force-resizing the
EffectRackView to its desired size.

It's a dirty fix, but good enough, plus many Instrument UIs might get
rewritten to be resizable in the future.
2019-07-22 01:20:13 +02:00
Johannes Lorenz
ba6a86d331 TabWidget: Improve size hints 2019-07-22 01:20:00 +02:00
Lost Robot
d949770144 Merge pull request #5083 from freshstudio/fix/context-menu-channel-rename
Fixed renaming mixer channel from the context menu
2019-07-20 07:29:38 -06:00
Freshek
0ed7581355 Fixed renaming mixer channel from the context menu 2019-07-20 15:19:10 +02:00
Martin Pavelek
c3b4d5188a New Spectrum Analyzer (#4950)
Replace old spectrum analyzer by new one with higher resolution and
many new features.

Resolves #2847.
2019-07-17 22:45:26 +02:00
Johannes Lorenz
73c2c70d96 Merge branch 'variable-tab-widget' 2019-07-17 22:21:47 +02:00
Johannes Lorenz
aa8f9361c6 Rename InstrumentView250 to InstrumentViewFixedSize 2019-07-17 22:20:25 +02:00
Johannes Lorenz
a4df7a9765 Split InstrumentView into itself and InstrumentView250 2019-07-14 10:20:54 +02:00
Johannes Lorenz
4f3ed9f9e1 EffectControlDialog: Use 'Preferred' size policy
This does not have any effect, as the surrounding MDI sub window always
uses the minimumSizHint. It's just preparation.
2019-07-13 22:49:26 +02:00
Johannes Lorenz
a4b801fe1b TabWidget: Add missing size hints
This is mostly for completeness, it does not fix any known issues.
2019-07-13 22:49:10 +02:00
Johannes Lorenz
3585b14b98 Instrument view: Add missing size hints
Those are needed for the case when an instrument is being resized
manually.
2019-07-13 22:48:48 +02:00
Johannes Lorenz
f5db880867 SubWindow.cpp: Fix comment 2019-07-13 22:48:15 +02:00
Johannes Lorenz
59e186d208 Closes #5050: Add Mixer threading comments (#5069)
[ci skip]
2019-07-11 18:22:41 +02:00
Steffen Baranowsky
d766b87688 Drop sample on sampletracks (#5043)
* implements drag and drop samples to sampletracks

* clean up / take care of timeLineWidget heigth in songeditor

* unused memeber removed

* clean up

* Update include/TrackContainerView.h

Co-Authored-By: Spekular <Spekular@users.noreply.github.com>

* Update src/gui/TrackContainerView.cpp

Co-Authored-By: Spekular <Spekular@users.noreply.github.com>

* Update src/gui/TrackContainerView.cpp

Co-Authored-By: Spekular <Spekular@users.noreply.github.com>

* Update src/gui/editors/SongEditor.cpp

Co-Authored-By: Spekular <Spekular@users.noreply.github.com>

* load AFP if we don't drop on a sample track

* take care of timeLineWidget size changes

* clean up

* consolidate some code

* requested changes by code review

* move logic to SampleTrackView

* clean up

* clean up

* clean up
2019-06-28 02:26:27 +02:00
Steffen Baranowsky
68cb91726a MDI Subwindow Decoration for VeSTige instruments closes #2824 (#2826)
* MDI Subwindow Decoration for VeSTige instruments closes #2824

* revert changes

* change QMdiSubWindow to our SubWindow in Vestige
2019-06-26 13:34:13 +02:00
Noah Brecht
7834e10bc7 FadeButtons now remain partially lit as a note plays out (#4969) 2019-06-25 20:26:57 +09:00
Johannes Lorenz
a0c2a62c27 Add .editorconfig
This file tells the github online editor to use tabs of width 4 instead
of 8. Open
[this](https://github.com/JohannesLorenz/github_test/blob/master/test.cpp)
test file in your browser to see how it works (the width is 5 in the
example).

Actually, it also tells many other editors...
2019-06-25 03:37:14 +02:00
Lost Robot
2547098dca Merge pull request #5038 from DouglasDGI/better-fx-mixer
Increase Mixer fader falloff speed
2019-06-22 07:16:47 -06:00
Hussam al-Homsi
5431cc7942 Replace tLimit() with qBound() and remove templates.h (#5040)
* Replace tLimit() with qBound()

* Remove templates.h
2019-06-15 23:33:29 +03:00
Lost Robot
499d425b4b Increase Mixer fader falloff speed
This also fixes a display bug that is present with large fader falloff speeds.
2019-06-14 18:38:56 -06:00
Hyunjin Song
f141ae68e0 Fix macOS builds 2019-06-12 17:42:24 +09:00
Hyunjin Song
12ea80d4fb Merge branch 'stable-1.2'
# Conflicts:
#	data/locale/cs.ts
#	data/locale/en.ts
#	data/locale/ko.ts
#	data/locale/ru.ts
#	data/locale/uk.ts
#	data/locale/zh_TW.ts
#	include/Engine.h
#	plugins/nes/Nes.cpp
#	src/core/NotePlayHandle.cpp
#	src/core/SampleBuffer.cpp
#	src/tracks/SampleTrack.cpp
2019-06-12 17:41:12 +09:00
Shmuel H
723a451ebc Add a save option to discard MIDI connections (#5021)
* Song: add isSavingProject.
* VersionedSaveDialog: Add support for a custom option dialog.
* AutomatableModel: Support the discardMIDIConnections save option.
* InstrumentTrack: Support the discardMIDIConnections save option.
* SaveOptions: Show the save option dialog on "save as".
2019-06-09 15:44:32 +03:00
Lost Robot
d683a51350 Merge pull request #7 from LMMS/master
Master
2019-05-30 18:55:33 -06:00
David CARLIER
46c74d0a81 Making clearer the hierarchy. (#4967)
Add `override` keyword
2019-05-28 00:02:17 +02:00
Johannes Lorenz
fb1b18e6b8 Merge pull request #4990 from sharpblade4/fix#4963_nextver
playing/recording pianoRoll's chord notes (#4963)
2019-05-25 03:53:00 +02:00
sharpblade4
28143e61ed playing/recording pianoRoll's chord notes (#4963) 2019-05-24 19:37:14 +03:00
Hyunjin Song
d54c79d33b Fix the wrong merge 2019-05-06 16:43:01 +09:00
Hyunjin Song
6d7ce58dec Merge branch 'stable-1.2'
# Conflicts:
#	CMakeLists.txt
#	cmake/linux/package_linux.sh.in
#	src/3rdparty/CMakeLists.txt
#	src/core/Track.cpp
#	src/gui/editors/PianoRoll.cpp
#	src/tracks/SampleTrack.cpp
2019-05-06 15:46:17 +09:00
https://gitlab.com/users/CYBERDEViLNL
cb6b4ec44b Show/Focus BBEditor on TrackLabelButton click #4946 (#4959)
It will be shown even if the parent is hidden.
2019-05-05 15:57:16 +02:00
Johannes Lorenz
c9ed6fc806 Merge pull request #4902 from JohannesLorenz/model-visitor
Make Model class visitable
2019-04-27 20:09:14 +02:00
Johannes Lorenz
2c134d65fe Code style + Extend for TempoSyncKnob 2019-04-27 15:26:17 +02:00
Johannes Lorenz
777da5e391 Fix CI on windows 2019-04-27 11:11:48 +02:00
Johannes Lorenz
8d005e7565 AutomatableModelTest: Improve tests
Check whether returned pointers from the cast are equal to the original
pointers, rather than just checking wether they are not `nullptr`.
2019-04-27 10:48:37 +02:00
Johannes Lorenz
0fd5693e12 Improve dcast
* document `dcast`
* make `dcast` not only cast exact, but also upwards
* add `dcast` test
* rename `dcast` -> `dynamicCast`
2019-04-27 00:29:49 +02:00
Hyunjin Song
c80f0bf5e7 Fix wiki submodule 2019-04-24 13:58:37 +09:00
Johannes Lorenz
b5e408d25a Update wiki submodule 2019-04-22 20:03:57 +02:00
Johannes Lorenz
7ae4e85ffe Document graph widget 2019-04-22 11:05:59 +02:00
Johannes Lorenz
d537561ffc Document Effect::checkGate 2019-04-22 09:27:01 +02:00
Johannes Lorenz
22fb650a4f Merge branch 'variable-tab-widget' 2019-04-22 08:59:59 +02:00
CYBERDEViLNL
407444ea1d FileBrowser: Backup expanded directories and restore that state when the tree is reloaded. 2019-04-21 00:14:33 +02:00
Johannes Lorenz
e1df16c45b Coding conventions 2019-04-20 22:12:32 +02:00
Johannes Lorenz
53942a146a Fix bad identation in old code 2019-04-20 18:32:17 +02:00
Johannes Lorenz
91099e28d5 Fix -1 offset in plugin tab
In the instrument plugin tab, there was an orange stripe for
TripleOscillator. This was because internally, TabWidget moves up the
widget by 1 (TabWidget.cpp, line 89).

The size of the whole window is:

```
widget->height() + m_tabbarHeight - 1
```

So this code adds an offset of "-1" to the necessary computations.
2019-04-20 13:23:42 +02:00
Johannes Lorenz
d06f5088a1 Move macro definition out of class 2019-04-20 13:09:49 +02:00
Johannes Lorenz
96cc5e0e5e Add PluginIssue class (#4901) 2019-04-17 19:08:59 +02:00
Lost Robot
271e20dc6d Merge pull request #4 from LMMS/master
Master
2019-04-13 18:59:52 -06:00
Lost Robot
b3461e2aa3 Merge pull request #4943 from RoxasKH/new-monstro-icons
New monstro icons
2019-04-13 15:00:14 -06:00
Lost Robot
be31a5598e Shrink ComboBox arrow section slightly
This is being done for two reasons:

1. The new Monstro icons (and the icons for Microwave when it's finished) are too large.
2. All ComboBoxes (subjectively) look much nicer this way.
2019-04-13 14:30:46 -06:00
Lost Robot
07dcea1294 Replace Monstro icons 2019-04-13 14:26:41 -06:00
Johannes Lorenz
ac257f08f9 PluginBrowser: Tree layout and search bar (#4759) 2019-04-03 22:10:49 +02:00
CYBERDEViLNL
3ef33dbbe9 PluginBrowser: Tree layout and search bar 2019-04-03 00:35:33 +02:00
Johannes Lorenz
d52c220a5c Fix instrument window tab sizes
- Fix the instrument window tabs minimum width and height formulae
- Also set minimum height and width for instrument tab
2019-03-29 18:43:39 +01:00
Hyunjin Song
93ec816d4c SetupDialog: fix file dialog not opening for theme directory
It was caused by a typo affecting a signal-slot connection.
2019-03-28 10:48:01 +09:00
Hyunjin Song
4dce466873 Remove some Qt4 compatibility code 2019-03-27 07:05:38 +09:00
Hyunjin Song
f18efb470f Travis: fix shellcheck warnings for the Debian sid script 2019-03-26 10:43:14 +09:00
Hyunjin Song
7984bb9db6 Merge branch 'stable-1.2'
# Conflicts:
#	.travis.yml
#	.travis/linux..script.sh
#	.travis/linux.win.download.sh
#	.travis/linux.win32.script.sh
#	.travis/linux.win64.script.sh
#	.travis/osx..script.sh
#	include/VstSyncController.h
#	plugins/audio_file_processor/audio_file_processor.cpp
#	plugins/zynaddsubfx/zynaddsubfx
#	plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.cpp
#	plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.h
#	src/gui/SetupDialog.cpp
#	src/gui/editors/SongEditor.cpp
2019-03-26 09:53:33 +09:00
Johannes Lorenz
82cf45351a Allow sub plugins for instruments aswell
This allows sub plugins for instruments. They had been working for effects only, previously. This is a requirement for many plugin APIs, like Lv2.
2019-03-22 20:54:33 +01:00
Johannes Lorenz
34835811e1 Fix invalid display names 2019-03-22 20:35:21 +01:00
Johannes Lorenz
52d1f5588a Remove useless include 2019-03-22 18:32:59 +01:00
Johannes Lorenz
2061d6c35f Merge branch 'master' into instr-sub-plugins 2019-03-22 10:51:23 +01:00
Johannes Lorenz
1adf16037f Make instrument window's piano optional 2019-03-21 20:05:36 +01:00
tresf
79524168b3 Bump zyn submodule
Per #4642
2019-03-18 12:37:07 -04:00
Johannes Lorenz
ef6bac68c2 Merge branch 'misc-lv2-preparation' 2019-03-17 11:23:59 +01:00
Johannes Lorenz
4129be873e Add explenation for LadspaControls::m_noLink 2019-03-17 11:22:05 +01:00
Johannes Lorenz
7e7141f388 Fix too small instrument tabs
Previously, they had been resized by the fixed size parent tab widget. We need
to do this manually now.
2019-03-17 11:02:41 +01:00
Johannes Lorenz
7e75a82f7e Always instantiate at least a dummy plugin 2019-03-16 22:05:46 +01:00
Johannes Lorenz
aac516e27f Forbid copying the Knob class 2019-03-16 20:59:45 +01:00
Johannes Lorenz
5101aa0214 Make Model class visitable 2019-03-16 20:19:27 +01:00
Johannes Lorenz
f8ba88d55a Make instrument window's piano optional 2019-03-16 20:10:19 +01:00
Johannes Lorenz
dd43127514 Allow instrument views to grow with contents
Make InstrumentTrackWindow as large as the InstrumentView requires
2019-03-16 19:46:21 +01:00
Johannes Lorenz
9aa997e574 Allow TabWidget to be variable sized 2019-03-16 16:38:16 +01:00
Johannes Lorenz
2d71d6163b Rework after code reading
* Fix possible segfault in `SubPluginFeatures::displayName`
* Minor fixes
2019-03-15 18:42:34 +01:00
Johannes Lorenz
37290ace1d Add info about LadspaControls::m_noLink 2019-03-11 23:03:43 +01:00
Hyunjin Song
61c3f87ee6 Support FX Mixer for sample tracks and add controls to sample track window (#3866)
This work is based on https://github.com/LMMS/lmms/pull/3632 by @grejppi.
2019-03-11 17:06:39 +09:00
Hyunjin Song
5eb6b138aa Allow creating AppImages on systems newer than linuxdeployqt officially supports
Note that the additional -unsupported-allow-new-glibc switch
may result in an AppImage which is unusable on old systems.
2019-03-11 16:20:42 +09:00
Hyunjin Song
ae4e40de97 Modify VST build systems to make debian integration work correctly 2019-03-11 16:20:42 +09:00
Hyunjin Song
8c4514ff20 Check if winegcc works before building RemoteVstPlugin 2019-03-11 16:20:42 +09:00
Hyunjin Song
af40c764ef Better Wine detection and support
* Support more Wine packagings

* Allow building 64-bit RemoteVstPlugin using 32-bit Wine tools if possible

* Provide suitable library paths for creating AppImages
2019-03-11 16:20:42 +09:00
Hyunjin Song
97502a14ac Debian: don't bundle CALF LADSPA library separately anymore
It's LMMS specific now
2019-03-11 16:20:42 +09:00
Hyunjin Song
92805685b1 Debian integration: update build dependencies
It was wrongly done in 231a8407e8.
2019-03-11 16:20:42 +09:00
Hyunjin Song
9a91848b36 Fix CONTRIBUTORS override 2019-03-11 16:20:42 +09:00
Lukas W
7e1df5cec9 Add issue templates
Add Github issue templates for bug reports and feature requests
2019-03-10 14:47:05 +01:00
Hyunjin Song
9148ce1b6f Fix loading 32bit VSTs when loading LMMS in the build directory
Fix another regression in #4797
2019-03-10 17:27:57 +09:00
Douglas
6b23e64c3b Merge pull request #3 from LMMS/master
Master
2019-03-09 10:01:59 -07:00
Hyunjin Song
9ea2611fa7 Fix loading 32bit VSTs on Linux
Fix a regression in #4797
2019-03-09 20:47:30 +09:00
justnope
6b19455875 Install 32-bit RemoteVstPlugin to a separate directory (#4797) 2019-03-07 19:55:12 +09:00
Michael Gregorius
0e77947793 Fix failing build due to missing include
Fix the build of MixHelpers.cpp which fails due to a missing include of
cstdio (printf is not defined).
2019-03-03 14:44:19 +01:00
Hyunjin Song
231a8407e8 Merge branch 'stable-1.2'
# Conflicts:
#	.travis.yml
#	.travis/linux..script.sh
#	.travis/linux.win32.script.sh
#	.travis/linux.win64.script.sh
#	.travis/osx..install.sh
#	.travis/osx..script.sh
#	data/locale/en.ts
#	data/locale/id.ts
#	include/Graph.h
#	include/VstSyncController.h
#	include/lmms_math.h
#	plugins/vst_base/RemoteVstPlugin.cpp
#	src/core/RemotePlugin.cpp
#	src/core/Song.cpp
#	src/core/Track.cpp
#	src/gui/SubWindow.cpp
#	src/gui/widgets/Graph.cpp
2019-02-24 20:45:52 +09:00
Mister-Lemon
29c210128a Step Recording feature (#4544)
(Addresses #1421)

**Behaviour description:**

* Toggle step-recording mode using the dedicated icon.
* This mode is mutually exclusive with other recoding modes (record/record
  accompany).
* Step-Recording while song is playing is allowed (and fun! :) ).
* When start recording, the start recording-position will be set where the
  timeline curser points (quantized backwards using PianoRoll's current
  quantization). If step-recording is started while the pattern is playing the
  start recording-position is set to the beginning of the pattern.
* Step length is determined by the Piano Roll's current note-length (can be
  changed dynamically during step-recording).
* The record-position can be moved forward/backward using the right/left keys.
* When notes are pressed on keyboard/midi-device, they will be added
  temporarily ("recorded") with a length of a step. while still pressed, user
  can adjust the length by steps resolution using the arrow keys (e.g. moving
  right once will make the note's length 2-steps, another right press will make
  the length 3-steps etc.).
* When all pressed-keys are released, the actual recording happen and the
  notes are added.
* If the user press multiple notes, and release some of them for some time
  which indicates it is intentional i.e. he didn't want to do a full release
  to record the step but rather just change what will be recorded (I set the
  "intentional release threshold" to 70 milliseconds) - these note will be
  removed from current step-recording. e.g.
* Added notes are not quantized, making the addition simpler and WYSIWYG
* Similiarly to adding notes using mouse clicks, an undo-checkpoint is added
  per added step and not for the whole recording as in other record modes.
2019-02-09 22:45:27 +01:00
CYBERDEViLNL
3d17200925 Better ghost notes context menu handling. 2019-02-08 17:36:00 +01:00
CYBERDEViLNL
9981b760e4 Ghost notes improvements.
* Make a copy of a pattern it’s notes instead of pointing to a pattern.
* Save/load the ghost notes in/from the DOM document.
2019-02-08 17:36:00 +01:00
Léo Andrès
7a0b874d17 shellcheck maxdepth 3
shellcheck against all project files, maxdepth of 3 directories
2019-02-07 14:52:12 -05:00
justnope
e6bcf13cd3 replaced alternative token "not" with "!" 2019-02-04 10:36:27 +01:00
Steven Christy
b68c5ee5b5 Rendering looped sections multiple times on export (#4624) (#4639) 2019-01-27 10:22:47 +01:00
Johannes Lorenz
d5dcebed83 Use QString for SubPluginFeatures' virtuals
The former virtuals returned `const char*`, which lead to invalid reads when
`LadspaSubPluginFeatures` returned pointers to temporary `QByteArray::data`.
2019-01-18 23:22:52 +01:00
https://gitlab.com/users/CYBERDEViLNL
5126070bb1 Add basic ghost notes feature. (#4575)
Lets you set a melody pattern as visible in the background of the Piano Roll
as support when building a new pattern. The pattern is visible throughout
the session or until cleared via the provided button.
2019-01-17 19:07:52 +01:00
bth
68cefc15c4 Set 32 for buffersize min value in gui (#4336)
This is a bit too low resolution as some values cannot be reached by dragging the slider so we also reduce the maximum buffer size to 4096.
2019-01-13 10:31:39 +01:00
Hyunjin Song
e116cc0701 Allow console output on Windows if available (#4719) 2019-01-10 15:13:30 +09:00
Pavel Shlyak
c467f5b08a Corrected assignment (#4757)
There is no need in conversion from float to integer
2019-01-06 21:30:27 -05:00
Lukas W
a0ace860f4 MSVC: Fix SID (#4505)
Use the provided working buffer instead of a local one to avoid use of VLA
2019-01-06 19:27:58 -05:00
Douglas
a2b123e5bc Merge pull request #2 from LMMS/master
Master
2019-01-02 17:33:59 -07:00
Johannes Lorenz
5ebe0e002d Merge pull request #4750 from JohannesLorenz/master
Extend quoting for AutomatableModels
2019-01-02 12:27:25 +01:00
Johannes Lorenz
ee05523319 Extend quoting for AutomatableModels
This now also quotes, if required:

- non automated models
- models controlled by controller
2019-01-01 20:58:16 +01:00
Johannes Lorenz
aa0ce7fc54 Improve CALF's CMakelists
Let CALF's CMakelists apply the name filter only on the basenames of the
files, but not on their directories. This prevents errors if the LMMS folder
is under a directory which contains, e.g., "lv2".
2018-12-28 16:02:40 +01:00
Johannes Lorenz
f3b23830fb Fix missing IntrumentTrack header 2018-12-27 22:37:34 +01:00
Johannes Lorenz
fcd1a7ee86 Fix or remove wrong or useless debug printfs 2018-12-27 22:15:56 +01:00
Johannes Lorenz
4d64c422b2 Fix Engine.cpp not compiling on some compilers 2018-12-27 21:59:50 +01:00
Johannes Lorenz
a1b355828e Allow sub plugins for instruments aswell
* Move m_key member of Effect into Plugin
* Pass key to Instrument ctors and instantiaters
* Add pluginKeys to all plugin selector widgets, and let them pass the keys
  when instantiating the instruments; or, if the keys must be passed over
  threads, pass the keys to the Engine using `Engine::setDndPluginKey()`
* As instrument plugin libraries now also need to get their key passed, their
  second argument, which was always the same as the first, is now used to pass
  the sub plugin keys. This affects *all* instrument plugins.
* Plugin.h: Add more virtuals to `SubPluginFeatures` in order to draw logos
  and images into instrument selector widgets
* LadspaSubPluginFeatures: Implement the `displayName` virtual because the
  new behaviour to resolve displayNames is to first look at the
  SubPluginFeatures, which, without override, returns the superior plugin's
  name (Plugin.cpp)

Additional:

* PluginFactory.h: Allow setting up search paths without discovering plugins
  yet
* Plugin.h: Add full documentation (should be checked)
2018-12-27 21:24:19 +01:00
Johannes Lorenz
05128b9a33 Fix error in SetupDialog
This adds constants into a lambda capture list. Unnecessary, says the
C++14 standard, but this fixes the MSVC C++11 error.
2018-12-12 17:10:54 +01:00
Johannes Lorenz
cf3d7950b1 Refactor SetupDialog 2018-12-01 11:01:39 +01:00
Hyunjin Song
3922d25b50 Fix CircleCI builds
I don't know why, but it fails to fetch submodules...
2018-11-29 12:06:02 +09:00
Hyunjin Song
187fbf4191 AppVeyor: don't specify any patch version of Qt
Fixes broken build due to the upgraded Qt version in the AppVeyor image.
2018-11-29 12:06:02 +09:00
Hyunjin Song
244b70b4c8 Fix building unit tests targetting windows
Fixes MSVC's LNK4217 warnings and MinGW errors.
2018-11-29 12:05:59 +09:00
Hyunjin Song
d9b91338ea Fix finding pkg-config on cross compile
Switch back to `ENV{PKG_CONFIG}` to ensure that
FindPkgConfig doesn't overwrite `PKG_CONFIG_EXECUTABLE`.
Since CMake 3.3 supports the environment variable,
it's safe to use that.
2018-11-22 14:01:23 +09:00
Hyunjin Song
4252f755c2 Merge branch 'stable-1.2'
# Conflicts:
#	cmake/nsis/CMakeLists.txt
#	src/core/ProjectRenderer.cpp
#	src/tracks/Pattern.cpp
2018-10-29 16:20:58 +09:00
Johannes Lorenz
4babbe25c5 Enable compiled-in XPM pixmaps (#4578) 2018-10-11 19:32:11 +02:00
Johannes Lorenz
a0737a4efc Add AutomatableModel nodename attribute (#4578)
* Save `AutomatableModel` nodename in attribute if it must be quoted
* Loading an `AutomatableModel` with name <name> now means it
  - either <name> must be `QDomElement::nodeName()` (as before)
    *and* must not have a `nodename` attribute (new)
  - or must have a `nodename` attribute with value <name>
2018-10-07 11:46:10 +02:00
Tres Finocchiaro
0dc1bdbb68 Minor cmake fixes (#4636)
Minor cmake fixes
2018-09-30 21:30:56 -04:00
Hyunjin Song
bd3f40933c Fix compilation on non-x86 platforms 2018-09-27 23:23:41 +09:00
Tres Finocchiaro
27fd8d0460 Add wiki as clonable submodule (#4588)
* Add wiki as clonable submodule per #4578
2018-09-24 11:04:51 -04:00
Hyunjin Song
222b28a71e Add '-Wno-misleading-indentation' only for GCC >= 6 2018-09-21 10:33:33 +09:00
Z3R0C
00cc6dc22b Fix sample track playback crash (#4586)
Fixes double-freeing `AudioPort` which is a regression in #4310.

Co-authored-by: Shmuel H <shmuelhazan0@gmail.com>
Co-authored-by: Hyunjin Song <tteu.ingog@gmail.com>
2018-09-18 11:21:45 +09:00
Hyunjin Song
78142cee3d Update ZynAddSubFX submodule 2018-09-18 09:56:09 +09:00
Hyunjin Song
4069aaada2 Merge branch 'stable-1.2'
# Conflicts:
#	.travis/osx..install.sh
#	CMakeLists.txt
#	cmake/apple/install_apple.sh.in
#	doc/lmms.1
#	include/VstSyncController.h
#	plugins/carlabase/carla.h
#	plugins/vestige/vestige.cpp
#	plugins/vst_base/CMakeLists.txt
#	plugins/vst_base/RemoteVstPlugin.cpp
#	plugins/vst_base/Win64/CMakeLists.txt
#	plugins/zynaddsubfx/zynaddsubfx
#	plugins/zynaddsubfx/zynaddsubfx/src/Misc/QtXmlWrapper.cpp
#	src/core/Song.cpp
#	src/core/main.cpp
2018-09-18 09:54:38 +09:00
Johannes Lorenz
20e4668d85 Replace deprecated QDrag::start by QDrag::exec 2018-09-15 20:17:35 +02:00
Johannes Lorenz
767607e0c8 Spelling fixes in German locale 2018-09-15 20:17:35 +02:00
Hyunjin Song
a1415a374b Fix AppVeyor CI failure due to Vcpkg
Adds --recurse option to allow rebuilding dependencies
2018-09-01 14:04:48 +09:00
Hyunjin Song
763c08b8b6 Fix typo in previous merge 2018-08-25 08:51:29 +09:00
Hyunjin Song
3d5e74d638 Merge branch 'stable-1.2'
# Conflicts:
#	cmake/modules/MinGWCrossCompile.cmake
#	plugins/FreeBoy/FreeBoy.cpp
2018-08-24 09:54:39 +09:00
Hyunjin Song
12d251cc3e Merge branch 'stable-1.2'
# Conflicts:
#	cmake/linux/package_linux.sh.in
#	data/locale/cs.ts
2018-08-24 09:50:36 +09:00
Michael Gregorius
8d00e90322 Remove peak value references from Mixer::getPeakValues
Adjust Mixer::getPeakValues so client do not have to allocate the
variables that will store the peak values.

Adjust both existing clients: FxMixer and VisualizationWidget.
2018-08-16 19:49:30 +02:00
Lukas W
c44bc4eb7f CMake: Fix missing space in linker flags
Fixes #4518, a regression from a7b0c99242
2018-08-02 21:20:25 +02:00
Oskar Wallgren
b67cfffe5f InstrumentFunctions - Arpeggiator code refactoring (#4487) 2018-07-29 15:34:46 +02:00
Lukas W
792cf7a262 CMake: Fix FindFFTW pkg-config bug
Remove the REQUIRED flag from pkg_check_modules for when pkg-config is
available but cannot locate FFTW.
2018-07-29 14:03:36 +02:00
Lukas W
1c5e374192 MSVC: Fix Xpressive instrument 2018-07-28 14:44:51 +02:00
Lukas W
d4f4500359 Fix compiler warning 2018-07-28 14:38:51 +02:00
Lukas W
b7c09974ac MSVC: Fix Monstro instrument 2018-07-28 14:20:36 +02:00
Lukas W
57c85f49b7 MSVC: Fix ReverbSC 2018-07-28 14:09:00 +02:00
Lukas W
ac65fb9924 MSVC: Fix Organic instrument 2018-07-28 14:00:06 +02:00
Lukas W
adcc009d2b MSVC: Fix vibed plugin 2018-07-28 13:44:16 +02:00
Lukas W
f245d7454b MSVC: Enable VstEffect 2018-07-27 18:03:51 +02:00
Lukas W
515fefa6ce Winewrapper fixes (#4501)
* Fix library fix regression from 38f6371de6
* Fix missing windows include directory
2018-07-26 18:37:35 +02:00
Lukas W
7ddca851d1 VstPlugin: Fix detecting machine type with relative paths 2018-07-26 14:16:15 +02:00
Lukas W
ce4c01246b Merge branch 'PJ-Finlay-stable-1.2'
# Conflicts:
#	CMakeLists.txt
2018-07-22 11:55:22 +02:00
Lukas W
e65ccea7ba Merge branch 'stable-1.2' 2018-07-22 11:49:20 +02:00
Lukas W
63fd427c5e CMake: Minor uninstall changes
* Fix missing CMAKE_UNINSTALL_PREFIX variable
* Use CMAKE_MINIMUM_REQUIRED instead of CMAKE_POLICY for IN_LIST support
* Use FILE(REMOVE …) instead of EXECUTE_PROCESS(…) for better performance
* Control flow changes
2018-07-22 11:41:54 +02:00
P.J. Finlay
020ce8e4db Added an uninstall target for make 2018-07-21 21:42:54 -04:00
Lukas W
a35d23f3b8 Merge remote-tracking branch 'lukas/cleanup/qt4' 2018-07-17 08:57:57 +02:00
Lukas W
ff1c30e35d Merge remote-tracking branch 'lukas/cleanup/qt4'
# Conflicts:
#	cmake/toolchains/common/MSYS.cmake
2018-07-17 08:52:49 +02:00
Lukas W
8cca464c27 CMake: Add support for clcache 2018-07-17 08:49:13 +02:00
Lukas W
820d006c4e Add Appveyor script, fix 32bit Windows compilation 2018-07-17 08:49:13 +02:00
Lukas W
3a7b5207b4 CMake: Fix mismatching if condition error
Regression from c45a21aac3
2018-07-11 21:56:50 +02:00
Lukas W
c670d4827a Minor QString usage improvements 2018-07-11 20:13:47 +02:00
Lukas W
cce730ebff Add CMake find modules for FFTW, LibSampleratae and LibSndFile.
Removes reliance on pkg-config for finding these libraries.
2018-07-11 19:57:09 +02:00
Michael Gregorius
8dab817e13 Implement changes from a code review
Use tabs in the style sheets. Make the calculation of the Y offset more
concise.
2018-07-10 22:43:16 +02:00
Michael Gregorius
0dc28436fa Add option to show note values on notes in Piano Roll (#4466)
Add the option to show note values on notes in the Piano Roll. This
functionality is currently coupled with the option "Enable note labels
in piano roll" which can be found in the main menu.

The notes are rendered at about 80% of the notes height. They are only
rendered if they fit on the whole note and if the font does not become
too tiny.

Enable the configuration of the note value text's color via the
stylesheets and set the value to white for both shipped themes.

Other changes:
* Clean up some warnings about old school casts and implicit casts.
2018-07-10 22:43:16 +02:00
David CARLIER
1efcec7790 Removing unsetting jack headers path so weakjack can benefit it (#4373) 2018-07-09 11:47:00 -04:00
Lukas W
846a2afeaa Merge branch 'msvc/vst-rebase' (#4421) 2018-07-07 17:17:59 +02:00
Lukas W
f8f38a3d87 CircleCI: Make sure build fails when AppImage building does 2018-07-07 17:16:08 +02:00
Lukas W
e1cdfd1d47 RemotePlugin: Revert unnecessary invalidate() changes
Reverts some changes made in 9db8cbfb31.

The consequences of this changes are unsure, so reverting them for now.
Since a VST plugin's architecture is now detected before trying to load it,
this fix is not needed any more for 64&32-bit VSTs to work, as the
idVstBadDllFormat-message-mechanism was removed.

It should be noted however that the bug still exists, probably rendering
4fd8ecd7e4 ineffective.
2018-07-07 17:16:08 +02:00
Lukas W
156c134301 winegcc_wrapper: Remove misleading usage hint
winegcc_wrapper.in is only intended to be used within FindWine.cmake. Also
moved it to the same directory for this reason.
2018-07-07 17:16:08 +02:00
Lukas W
d42194f8e1 VstPlugin: Fix define naming conflict with MinGW 2018-07-07 17:16:08 +02:00
Lukas W
38f6371de6 Fix AppImage 64bit RemoteVstPlugin libwine discovery 2018-07-07 17:16:08 +02:00
Lukas W
ae815d3ac7 CircleCI: Display Appimage log when failing 2018-07-07 17:16:08 +02:00
Lukas W
b4d6332632 Fix AppImage VST 2018-07-07 17:16:08 +02:00
Shmuel H
e2a7587600 AudioSdl: Use NULL for device names in order to get the default device.
The zero index device may not be the default device.

Many thanks to @PhysSong.
2018-07-07 17:16:08 +02:00
Shmuel H
ff8de2d7eb AudioSDL -> SDL2: Fix a crash from calling a SDL1 function instead of
SDL2's.
2018-07-07 17:16:08 +02:00
Shmuel H
ec28a65c89 AudioSdl: Add support for full SDL2 with float samples and recording
(with backward compatibility for SDL1).

Cherry-picked from dcc442411f
2018-07-07 17:16:08 +02:00
Lukas W
8165152552 MSVC VST compilation fixes 2018-07-07 17:16:08 +02:00
Lukas W
fe2483e309 Enable 64bit VSTs on Linux
* Remove trial-and-error approach of detecting VST's machine types. Read PE
  headers instead.
* Add RemoteVstPlugin64 to AppImage
2018-07-07 17:16:08 +02:00
justnope
f2a8f56944 MSVC fixes (#4352)
* locale: using path instead of individual files to reduce command line size
* remotevstplugin: changed order return type & calling convention (compiler error)
* lmmsobj: removed single quotes for command line defines
* added vcpkg support & std::make_unique for MSVC
* carla: include exports header
* package_linux: corrected RemoteVstPlugin name
* vstbase: toolchain file conditional on MSVC
* Added install for remotevstplugin
* msvc: installer works with vcpkg

Remotevst 64bit install removed due to an ApImage problem
2018-07-07 17:16:08 +02:00
Lukas W
23e284b189 CMake: Fix Clang detection 2018-07-07 17:16:08 +02:00
Lukas W
20a6b96161 Fix 64bit VSTs on Linux by fixing callback calling convention 2018-07-07 17:16:08 +02:00
Lukas W
d454ef60e2 More export fixes 2018-07-07 17:16:08 +02:00
Lukas W
90799d91ea Mingw64 compilation fixes 2018-07-07 17:16:08 +02:00
Lukas W
2e6bb72847 Fix export errors with MinGW 2018-07-07 17:16:08 +02:00
Lukas W
48cdce9a79 Fix compilation with MinGW versions without threads support
Older versions of MinGW don't provide std::mutex or std::thread
2018-07-07 17:16:08 +02:00
Lukas W
ff9622c10e CMake quoting fixes 2018-07-07 17:16:08 +02:00
Lukas W
bba072d54e VST build fixes 2018-07-07 17:16:08 +02:00
Lukas W
ea154694f9 Fix Linux VST compilation 2018-07-07 17:16:02 +02:00
Lukas W
47a5248d1d Linux compile fixes 2018-07-07 16:40:37 +02:00
Lukas W
7feedb4ed9 VST: Fix main entry calling convention
This will probably break everything, but it was needed to load 32bit VST
plugins with MSVC.
2018-07-07 16:40:37 +02:00
Lukas W
d756a7ade0 MSVC: Fix VST build 2018-07-07 16:40:37 +02:00
Lukas W
07a22181da RemoteVstPlugin: Debug LoadLibrary failure 2018-07-07 16:40:37 +02:00
Lukas W
87a7b0a2f0 MSVC: Port RemoteVstPlugin 2018-07-07 16:40:37 +02:00
Lukas W
1027386113 CMake: Fix MSVC architecture detection 2018-07-07 16:40:33 +02:00
Lukas W
966bf1c6de Use CMake GenerateExportHeader 2018-07-07 11:20:54 +02:00
Hyunin Song
170a46e7a3 Merge branch 'stable-1.2' 2018-07-07 10:40:35 +09:00
Lukas W
a7b0c99242 MSYS compilation fixes
* Fix MSYS and processor detection when not using the provided toolchain
  file
* Fix creation of import library (ENABLE_EXPORTS not working)
2018-07-06 15:58:29 +02:00
Lukas W
3c6f200beb Merge branch 'stable-1.2'
# Conflicts:
#	cmake/modules/BuildPlugin.cmake
#	plugins/CMakeLists.txt
#	plugins/LadspaEffect/swh/CMakeLists.txt
#	plugins/LadspaEffect/tap/CMakeLists.txt
#	plugins/zynaddsubfx/zynaddsubfx
#	plugins/zynaddsubfx/zynaddsubfx/src/Misc/QtXmlWrapper.cpp
#	src/gui/MainWindow.cpp
2018-07-06 12:42:15 +02:00
Pikamander2
406bbcc2ee Fix grammar on MIDI import dialog (#4457) 2018-07-02 11:37:05 +09:00
Lukas W
392c7534d5 Fix Clang compilation 2018-06-22 17:44:26 +02:00
wadej
c3575a4c17 Ensure MSVC startup project is LMMS 2018-06-22 17:44:26 +02:00
Lukas W
11c693205e Remove usage of deprecated Qt API
Removes usage of the following deprecated Qt functions:
- QPixmap::grabWidget
- QString::null
- qFind
- qSort
- qGreater
- qCopy
2018-06-17 14:27:28 +02:00
Lukas W
fefec9a8c6 Fix cleanup logic error 2018-06-17 14:03:01 +02:00
Lukas W
da1c78ce86 Remove Qt4 compatibility code 2018-06-17 12:47:12 +02:00
Lukas W
a87aa7e356 Merge branch 'stable-1.2'
# Conflicts:
#	src/gui/widgets/EffectView.cpp
2018-06-17 11:51:50 +02:00
dobbelaj
d11966a7ea Introduce UI_CTRL_KEY and use where appropriate (#4431)
This is an abstraction for the name of the 'Ctrl' (or equivalent) key on
linux, windows and apple
2018-06-17 11:20:00 +02:00
Oskar Wallgren
1bdaafc488 Typo - austain -> sustain 2018-06-10 16:39:12 +02:00
Dave French
662f5199fd Merge pull request #4416 from curlymorphic/eqaa
Equalizer plugin has antialiasing enabled in the spectrum analyzer
2018-06-09 21:30:15 +01:00
curlymorphic
cbf4d5056d Equalizer plugin has Antialiasing enabled in the spectrum analizer widget 2018-06-09 20:58:47 +01:00
Dave French
0e98e03745 Equaliser, Disable analyser when not visible (#4399) 2018-06-08 18:26:07 +02:00
Dave French
7f284626e4 Merge pull request #4396 from curlymorphic/eqlp
Fix one of Equlizer LP48 filter taking HP value
2018-06-06 02:38:03 +01:00
Hussam al-Homsi
6d46bd473f Remove "What's This?" and update tooltips (#4128) 2018-06-06 01:50:11 +03:00
curlymorphic
5751d75ced The Equliser plugin had a bug,where the LP48 filter was having one of its
poles incorrectly set by the HP filter model. This resulted, in an unusable
LP48 filter.

This fixes the above.
2018-06-03 15:14:53 +01:00
Colin Wallace
4fd8ecd7e4 RemoteVST: process all remaining messages after the process has quit
Courtesy of @justnope (https://github.com/LMMS/lmms/pull/4371)
2018-06-01 20:53:35 -07:00
Douglas
fad13626bc Initialize peak controller last sample with base value (#4382)
* Bug fix in peak_controller_effect.cpp

This change makes it so that when an LMMS project is loaded, each knob connected to a Peak Controller will be set to the Peak Controller's Base value, rather than its minimum possible value.
2018-06-01 20:47:32 -07:00
Colin Wallace
2c672d47fe Prefer = default over empty destructor.
Same thing but less verbose.
2018-05-28 19:28:05 -07:00
Hyunin Song
3cf2afd831 Merge branch 'stable-1.2'
# Conflicts:
#	include/MixerWorkerThread.h
#	src/core/MixerWorkerThread.cpp
2018-05-26 16:09:38 +09:00
Colin Wallace
a3cdda04c0 Give our threads names (#4356)
* Give our threads names

It helps with debugging.

* Use Q_OBJECT macro to automatically name threads.

By default, QThread sets its name based on the Qt meta class. To get an
accurate metaclass, the class which inherits QThread must declare
Q_OBJECT in its header. Futhermore, Qt's MOC requires that a Qt type be
the primary base class when declaring Q_OBJECT, hence the order of
base classes has been rearranged for some classes.
2018-05-24 18:01:51 -07:00
Hyunjin Song
0fa7fbde0f Fix MSYS2 build 2018-05-22 11:45:41 +02:00
Johannes Lorenz
074d82f2aa CALF: Version bump, fix issues from #3987 2018-05-19 08:52:54 +02:00
Matt Kline
9c0d50d425 plugins/LadspaEffect: Use C++11
The rest of LMMS is built against it, and almost every flavor of MinGW
should support it these days.
2018-05-13 20:02:01 -07:00
Matt Kline
ea98ba4dae FPTruncateMode: Removed unused variables on non-386
While we're at it, make fistp an inline function. Type safety is nice.
2018-05-13 20:02:01 -07:00
SecondFlight
4585a07673 Allow renaming of FX mixer channels with the F2 and enter keys. (#4348)
* Add f2 as a FX mixer rename shortcut. Enter doesn't work yet.

* Add both enter keys, remove code duplication

* Fix renaming with enter/return

* Clean up
2018-05-13 17:15:32 -04:00
Hussam Eddin Alhomsi
0d73f32c03 Reorder the main windows' buttons & shortcuts (#3938)
Puts Project notes after Controller rack.
2018-05-11 12:23:31 +03:00
Oskar Wallgren
d6d55cef7b Remove old commented out code (#4349) 2018-05-10 12:05:44 +02:00
Premik
e8b69b9700 Zooming with mouse wheel center (#3835)
* Horizontal mouse-wheel zooming. Ensure zoom center is always on the current mouse position.

* Horizontal zoom using mouse wheel center on the mouse position. For the SongEditor too.

* Wheel center on the Automation editor too.
2018-05-10 00:45:45 +02:00
Colin Wallace
82972ca842 Merge pull request #4260 from curlymorphic/master
Remove audio artifacts when automating the Equalizer parameters.
2018-05-08 20:11:47 -07:00
Colin Wallace
b4a6ae7bcc Merge pull request #4344 from mrkline/default-empty-detors
Default some empty destructors
2018-05-08 18:44:48 -07:00
Matt Kline
68c9d227d0 Default some empty destructors
Moving empty destructors out of the .cpp files and into headers
allows them to be devirtualized in certain cases.
(When the compiler can't "see" a function in a header, it must largely
assume it's some black box that the linker will resolve.)

While we're at it, use C++11's `= default` to define empty virtual
desturctors for us.

For some classes (e.g., Piano), nothing is derived from it, so we can
mark the class as final and remove any explicit virtual dtor.

There are many other places where this can be done, but this is a large
enough patch as-is.
2018-05-06 16:34:08 -07:00
Hussam Eddin Alhomsi
c1b2728d65 Allow setting/moving points at the left edge of AE grid (#4323) 2018-05-01 23:04:39 -07:00
Hyunin Song
4b36ba9f81 Fix a regression from #3711 2018-05-02 12:41:10 +09:00
Hyunin Song
8a41def616 Merge branch 'stable-1.2'
# Conflicts:
#       .circleci/config.yml
#       .travis/osx..install.sh
#       CMakeLists.txt
#       plugins/zynaddsubfx/zynaddsubfx
#       plugins/zynaddsubfx/zynaddsubfx/src/DSP/FFTwrapper.h
#       plugins/zynaddsubfx/zynaddsubfx/src/Misc/QtXmlWrapper.cpp
#       plugins/zynaddsubfx/zynaddsubfx/src/Params/PADnoteParameters.cpp
#       plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.cpp
#       src/CMakeLists.txt
#       src/core/Track.cpp
#       src/tracks/Pattern.cpp
2018-05-01 09:59:07 +09:00
Lukas W
d2e068ca40 Merge pull request #4330 from lukas-w/circleci-update
Update CircleCI to Ubuntu 18.04
2018-04-28 22:26:19 +02:00
Matt Kline
ebed0296b3 Axe atomic int (#4326)
* ThreadableJob: Move from AtomicInt to std::atomic

This is the first in a series of commits that migrates away from
AtomicInt towards the C++11 standard library types.
This would allow the removal of AtomicInt and related Qt
version-specific code.

While we're at it, also make ProcessingState an `enum class` so that
it's not implicitly convertible to integers.

* LocklessAllocator: Switch from AtomicInt to std::atomic_int

If it looks like some assignments around the Compare & Swap loops went
missing, it's because compare_exchange_weak() updates the first argument
to the current value when it fails (i.e., returns false).

* BufferManager: Remove extra AtomicInt include

* MixerWorkerThread: AtomicInt to std::atomic_int

* NotePlayHandle: AtomicInt to std::atomic_int

* Remove AtomicInt.h

* Move from QAtomicPointer to std::atomic<T*>

This removes some #ifdef trickery that was being used to get
load-acquire and store-release from Qt5 and "plain" (presumably
sequentially-consistent) loads and stores from Qt4.
2018-04-28 12:54:46 -07:00
Lukas W
4ff993e2a4 Update CircleCI to Ubuntu 18.04 2018-04-28 11:15:09 +02:00
Lukas W
d42a685007 Refactoring: Remove duplicate code (#4310) 2018-04-25 18:49:39 +02:00
Matt Kline
ffccd6ddd2 Use atomics to count shared_object without locks
C++11 (and subsequent C++ standards) provide portable ways to issue
atomic hardware instructions, which allow multiple threads to load,
store, and modify integers without taking a lock. The standard also
defines a memory model that lets you express the ordering guarantees
around these atomic operations. (x86 is relatively strongly-ordered, but
many other common architectures, such as ARM, are free to reorder loads
and stores unless told not to.)

This patch removes the lock from shared_object and replaces it with the
standard thread-safe reference counting implementation used in
C++'s std::shared_ptr, Rust's std::sync::Arc, and many others.

Additional resources on the topic:
https://assets.bitbashing.io/papers/concurrency-primer.pdf
https://www.youtube.com/watch?v=ZQFzMfHIxng
2018-04-25 12:50:44 +02:00
Hussam Eddin Alhomsi
f7a0553e6a Responsive "Effects chain" & "User controller" LEDs (#4297) 2018-04-24 11:25:49 +03:00
Lukas W
418bcce402 AppImage: Use wget -N instead of mtime logic 2018-04-22 14:05:20 +02:00
Lukas W
d9ea65ad7f Fix AppImage build with missing fuse support 2018-04-22 14:05:20 +02:00
Lukas W
19bc0439a6 Fix mingw pkg-config 2018-04-22 14:05:20 +02:00
Lukas W
138281badf Add CircleCI config.yml 2018-04-22 14:05:20 +02:00
Colin Wallace
3401de4a83 Use themed file dialogs everywhere. (#4298)
Previously lmms used themed dialogs for project saving/opening, but not
when editing settings (edit -> settings).

With this change, the settings editor also uses themed dialogs.
2018-04-20 19:01:11 -07:00
Tres Finocchiaro
ef264eafa7 Re-enable upstream libgig formulae (#4304) 2018-04-20 15:45:35 -04:00
Lukas W
78a7f4563f Remove -fstrength-reduce compiler options
Clang doesn't support -fstrength-reduce and warns when it's used. GCC will
specify it by default when using -O2, which is  implied by -O3.
2018-04-18 08:22:46 +02:00
Colin Wallace
da126bfb5c Use range-based for loops + fix const correctness 2018-04-17 09:17:33 +02:00
Tres Finocchiaro
ae0dd21df3 Upgrade Calf LADSPA plugins to 0.90 (#3987)
Upgrade Calf LADSPA plugins to 0.90
2018-04-15 21:38:37 -04:00
Hyunjin Song
0850b78104 Try git fetch for unadvertised object error
Fixes fetching submodules from non-default branches.
2018-04-13 13:50:12 +09:00
gnudles
0c0bfbd060 Add the function randsv to Xpressive (#4089)
Adds the function randsv, which gives you persistent upon note plays and waveforms transit in the gui.
Moves lmms exprtk submodule back to latest upstream
2018-04-12 11:05:42 -04:00
Tres Finocchiaro
9af7821eb1 Add PerfLog (#3974)
Add `PerfTime` class representing a point in CPU time and `PerfLogTimer`, used for measuring and logging a time period. Used in `ProjectRenderer::run()
2018-04-03 13:37:25 +02:00
Colin Wallace
ca3a7f3015 Remove unused method and extraneous state from AutomatableModelView (#4258)
* Remove DataType.

An AutomatableModel should not need to know what concrete type it is.
Use virtual methods and implement them in the derived class instead of
testing the type in the base class.

* Remove unused method

* Remove m_hasLinkedModels

We can compute it on-the-fly with very little cost, and doing so
simplifies the code.

* Remove extra 'public:'

Probably a remnant of merging master
2018-03-28 00:03:10 -07:00
liushuyu
47ab8edef8 i18n: update translation file 2018-03-23 13:11:04 -06:00
Tres Finocchiaro
7bdb607391 Add ZynAddSubFX status (#4264) 2018-03-21 15:52:57 -04:00
Colin Wallace
56b4740146 Copy/paste model values to system clipboard
Previously they were copy/pasted internally, and not visible across LMMS
instances.
2018-03-20 00:43:15 -07:00
Colin Wallace
7593b2ee58 Replace macro magic with a template base class 2018-03-20 00:42:21 -07:00
Hyunin Song
7cf1be1dc5 Bump ZynAddSubFX submodule 2018-03-19 07:28:21 +09:00
curlymorphic
1e777cf945 Remove audio artifacts when automating the Equliser parameters.
The Equliser pluging uses biquad filters, These do not like having
there parameters updating during processing, and are know to produce
clicks and DC biasing. A twin filter system has been employed with a
cross fade, to interpolate between parameters.

This has removed for the use of sample exactness, as the filter is only
updated once per frame, with interpolation provided by the crossfade.

The same filters are used as pervious, ensuring unautomated filtering
remains unchanged.
2018-03-17 22:25:12 +00:00
Colin Wallace
bf1b61023c Use ampToDbfs instead of 20*log10 x.
The function's there (in lmms_math.h) for a reason :)
2018-03-16 20:35:08 -07:00
Colin Wallace
b706ee208d Replace more instances new/delete with owning types (#4245)
* Use owning types when possible.

Note: the QByteArray s is detached to mimic previous behavior;
detach() guarantees that the QByteArray uniquely owns its data, since
otherwise it's COW. This may be relevant in case Plugin:instantiate
modifies s.data() -- this way the original QString is safe.

* Make m_filter a unique_ptr.

* Make m_activeRenderer a unique_ptr

* use std::string instead of strcpy + buffers
2018-03-15 18:46:55 -07:00
Colin Wallace
80ce77fc91 Merge pull request #4249 from Wallacoloo/refactor/ModelViewTypes
Make *ModelView a templated type instead of macro-based class
2018-03-13 22:54:34 -07:00
Colin Wallace
7adad4790e Merge pull request #4063 from Sawuare/Widgets
Use "Set value" as title for QInputDialog of some widgets.
2018-03-13 21:52:57 -07:00
Colin Wallace
45f9fc03c2 Make *ModelView a templated type instead of macro-based class.
Among other things, this makes it easier to grep for FloatModelView,
BoolModelView, IntModelView in the code base.
2018-03-13 20:57:34 -07:00
Colin Wallace
748cc0e3e3 Merge pull request #4235 from Wallacoloo/refactor/use-unique-ptr
refactor: Use unique_ptr for memory management
2018-03-12 22:45:59 -07:00
Colin Wallace
ec3c9cdf10 Only use specific std:: items we need.
Also, fix `using std::unique_ptr` to `using std::make_unique` in
stdshims.h
2018-03-11 09:07:00 -07:00
Colin Wallace
c8d9cc02d5 Use namespace std instead of prefixing {move,unique_ptr} with std::. 2018-03-10 23:30:30 -08:00
Colin Wallace
ba278becbd Don't use #pragma; don't redefine make_unique if using C++14 2018-03-10 23:29:22 -08:00
Colin Wallace
a9d097cad9 Prefer emplace_back; take argument by value.
We copy the QString, so it makes sense to accept it by value and _move_
it into the collection instead. This causes the caller to move any
rvalue QString into the function, and then the QString is never actually
copied at all.
2018-03-10 16:08:21 -08:00
liushuyu
8120db292a i18n: update strings 2018-03-10 13:25:58 -07:00
liushuyu
c8ba4c548c Merge remote-tracking branch 'upstream/stable-1.2' 2018-03-10 13:23:02 -07:00
Colin Wallace
876615e3a3 Warn when compiling with C++14 or greater. 2018-03-10 00:28:58 -08:00
Colin Wallace
0f993895d4 Fix missing includes 2018-03-09 23:48:07 -08:00
Colin Wallace
fd871e46c9 refactor: Use unique_ptr for memory management 2018-03-09 23:03:19 -08:00
Tres Finocchiaro
d2c370a953 Enable FPE on Mac (#4213)
Allow #3687 to work on Mac
2018-03-09 11:41:17 -05:00
Hyunin Song
0a5d056bdb Merge branch 'stable-1.2'
# Conflicts:
        #       .travis/osx..install.sh
        #       .travis/osx..script.sh
        #       cmake/linux/package_linux.sh.in
        #       data/locale/en.ts
        #       src/core/CMakeLists.txt
        #       src/core/ProjectRenderer.cpp
        #       src/gui/FileBrowser.cpp
2018-03-07 23:54:28 +09:00
tresf
9f08e285bb Fix $PATH for creating AppImages 2018-01-07 02:37:11 -05:00
tresf
9547575c50 Move exprtk to non-volatile branch
Fix Travis-CI for #4089
2018-01-05 17:25:14 -05:00
tresf
5c3c052712 Remove QT5 flags
Fix a regression caused by #4041, closes #4077
2018-01-02 09:53:54 -05:00
Michael Gregorius
ab2cc42eea Make Song::setModified more compact
Implement a comment from a code review by pulling condition of the
second if clause into the first one.
2017-12-26 00:33:11 +01:00
Michael Gregorius
9acff89ad3 Remove Song's dependency to MainWindow
Finally remove Song's dependency to MainWindow by moving the window
title update which is triggered due to a changed project file name from
the class Song into MainWindow.

Implementation details:
Add a new signal projectFileNameChanged to Song and connect the new slot
method MainWindow::onProjectFileNameChanged to it. Update the window
title whenever the slot is triggered.

Add a new private method Song::setProjectFileName which sets the project
file name and emits the signal (only if the file name really changes).
Call setProjectFileName everywhere where m_fileName was manipulated
directly. This is done to ensure that the signal can be potentially
emitted in all relevant situations.

Remove the calls to gui->mainWindow from
Song::createNewProjectFromTemplate.

These changes finally remove the include to "MainWindow.h". The include
for "ConfigManager.h" was previously done implicitly through the include
of "MainWindow.h" and therefore had to be added explicitly after the
latter is removed.
2017-12-26 00:33:11 +01:00
Michael Gregorius
b79999a6bf Move some window title updates from Song into MainWindow
Move the window title updates which are triggered due to a changed
modify state from Song to MainWindow.

Implementation details:
Add a new signal modified to Song and connect the new slot method
MainWindow::onSongModified to it.

Currently only the window title is updated in the slot. It is only
updated if the code is executed from the GUI main thread. This
implementation was taken over from the original implementation of
Song::setModified. The assumption here seems to be that the Song might
also be set as modified from other threads (which is a bad design).

Add a new private method Song::setModified(bool) and replace all direct
manipulations of m_modified in Song by calls to this method. This is done
to ensure that the signal can be emitted in all these cases. Make
Song::setModified() delegates to Song::setModified(bool) for the same
reason.

Other changes:
Slightly refactor MainWindow::resetWindowTitle to get rid of an
unnecessary if statement.
2017-12-26 00:33:11 +01:00
Michael Gregorius
07caf85bf5 Remove GUI related code from Song::stop
Add the new signal Song::stopped which is emitted when the song is
stopped. Connect the new slot method MainWindow::onSongStopped to that
signal. Remove all GUI updates from Song::stop and handle them in
MainWindow::onSongStopped.
2017-12-26 00:33:11 +01:00
Michael Gregorius
7fa62266a9 Move showing of save result dialog out of Song
Move the showing of save result dialogs, e.g. "The project XYZ is now
saved.", from the class Song into the class MainWindow.

Implementation details:
Add three new methods guiSaveProject, guiSaveProjectAs and
handleSaveResult to MainWindow. The first two correspond to the methods
with the same name in Song which don't do anything GUI related anymore.
The GUI related actions are instead implemented in the two new methods
in MainWindow. The method handleSaveResult shows the dialogs for
successful and failed saves, updates the list of recent files and the
title bar of the main window.

This commit also fixes a problem in Song::guiSaveProject where a failed
saved without a GUI would still have returned true, i.e. success.
2017-12-26 00:33:11 +01:00
Michael Gregorius
6a716ef985 Move import functionality from Song to MainWindow
Move the functionality of the method Song::importProject into the
MainWindow as it mainly consists of GUI related actions.

Add a new method Song::setLoadOnLauch to ensure that the boolean
Song::m_loadOnLaunch is still set at the end of the import.
2017-12-26 00:33:11 +01:00
Michael Gregorius
78d65ccc3a Move song export and track export from Song into MainWindow
The code to export a song and the tracks of a song mainly consisted of
GUI code. Therefore it was moved completely into MainWindow.

Add two new slots and a method that does the actual work to MainWindow.
Make both slots delegate to the worker method.
2017-12-26 00:33:11 +01:00
Michael Gregorius
989db1dc9b Move GUI dependencies out of Song::exportProjectMidi
Move all GUI dependencies out of Song::exportProjectMidi and move them
into the MainWindow.

Show the GUI in the new slot method MainWindow::onExportProjectMidi and
delegate to Song::exportProjectMidi once the file name has been
determined. The file name is given as a parameter to
Song::exportProjectMidi which still contains the business logic of
exporting the data.
2017-12-26 00:33:11 +01:00
Tres Finocchiaro
7f9d01e3b6 Enable auto-uploading of PRs (#4041)
Removes Qt4 from build system
Uploads PRs to transfer.sh
2017-12-23 02:23:32 -05:00
Tres Finocchiaro
07de45347a Install homebrew fftw without gcc 2017-12-22 22:10:23 -05:00
Hussam Eddin Alhomsi
9f0f61d914 Use "Set value" as title for QInputDialog of some widgets.
These widgets are the Fader, Knob and LcdSpinBox.
2017-12-21 12:17:03 +03:00
Hyunin Song
e9b76a5178 Add a comment for VST dependencies 2017-12-20 14:17:07 +09:00
Hyunin Song
59cfcf41a7 Merge branch 'stable-1.2'
# Conflicts:
#	.travis/linux..before_install.sh
#	.travis/linux..install.sh
#	.travis/linux..script.sh
#	cmake/linux/package_linux.sh.in
#	include/AudioWeakJack.def
#	plugins/vst_base/CMakeLists.txt
#	plugins/zynaddsubfx/zynaddsubfx
2017-12-20 14:16:16 +09:00
Hyunin Song
6aeba4fd13 Bump WeakJack to latest version 2017-12-20 13:58:28 +09:00
Michael Gregorius
3660ac9a6c Revert "Fix a crash that occurs when library "KF5WidgetsAddons" cannot be loaded"
This reverts commit 17fb59cdeb. It's
reverted because it's already fixed in stable-1.2 and only need to be
merged.
2017-12-08 18:50:55 +01:00
Michael Gregorius
17fb59cdeb Fix a crash that occurs when library "KF5WidgetsAddons" cannot be loaded
Add a check to see if the library "KF5WidgetsAddons" could be loaded and
return if that's not the case.

Also move a using declaration near the place where it is used first.
2017-12-07 18:55:40 +01:00
Hussam Eddin Alhomsi
004da34942 Remove the "Empty project" message and allow exporting empty projects. 2017-12-05 13:20:20 +03:00
Hussam Eddin Alhomsi
2469851e6b Allow exporting empty projects. 2017-12-04 14:43:13 +03:00
Lukas W
03e9889605 Remove old CMake compat code 2017-11-29 17:33:18 +01:00
Lukas W
e735260d53 Merge pull request #3860 from PhysSong/unit-auto
Fix warning in automation unit test
2017-11-29 17:24:00 +01:00
Hyunjin Song
6de7cb6a87 Fix song-editor regressions and BB-editor bugs from #3487 (#4008)
* Fix TCO copy with Ctrl + Dragging
* Fix text float display in song editor
* avoids override cursor in BBEditor for sampletracks at left side
2017-11-29 14:31:13 +09:00
Lukas W
4ff5eba0f9 Merge pull request #4010 from LMMS/fix/sendEvent-assert
Fix sendEvent assert
2017-11-27 20:43:02 +01:00
Tres Finocchiaro
67231cbba0 Bump to exprtk submodule to latest (#4013) 2017-11-27 10:02:54 -05:00
Lukas W
a96771bb2d Add Q_OBJECT to FloatModel, IntModel, BoolModel 2017-11-24 13:48:36 +01:00
Lukas W
c9c22e4a0e shared_object: Use deleteLater in unref for thread safety
This makes unref safe when it's not called from within the object's thread.

Fixes #4009
2017-11-24 13:30:15 +01:00
Lukas W
aa1406bac9 Merge pull request #4000 from LMMS/fix/msvc
MSVC fixes
2017-11-24 11:58:12 +01:00
Hyunin Song
26b0f74130 Fix libgig install logic for packaging 2017-11-24 11:18:07 +09:00
Hyunin Song
90b1fb57f0 Merge brnach 'stable-1.2' 2017-11-24 09:56:08 +09:00
Lukas W
7fdbcc3c71 Xpressive: Fix Clang patch on macOS 2017-11-23 15:05:01 +01:00
Léo Andrès
79e4775cd3 Fix CMake warning (#4002) 2017-11-22 18:01:05 -05:00
Lukas W
3c9a1bbe5e Fix Clang compilation with gig 2017-11-22 20:38:10 +01:00
Lukas W
1531fb9e1a MSVC: Fix include, fix GNU compiler flag 2017-11-22 17:57:42 +01:00
Lukas W
8f3ab4b1b0 Merge branch 'master' into fix/msvc
# Conflicts:
#	plugins/LadspaEffect/CMakeLists.txt
#	plugins/Xpressive/Xpressive.cpp
#	plugins/opl2/CMakeLists.txt
#	plugins/papu/CMakeLists.txt
#	plugins/xpressive/CMakeLists.txt
#	src/CMakeLists.txt
2017-11-22 17:34:22 +01:00
Lukas W
852708863a Fix Linux compilation issues caused by MSVC fixes 2017-11-22 16:36:51 +01:00
Lukas W
313d43bc16 MSVC: Show compiler version in AboutDialog
Make AboutDialog support MSVC compiler info so we can use a screenshot of
it to brag with on #devtalk
2017-11-22 13:54:19 +01:00
Lukas W
95c0538d1c MSVC: Fix plugins not loading with debug builds
The "d" suffix used in debug builds breaks plugin loading because LMMS
expects to find a descriptor named e.g. "kickerd_plugin_descriptor" instead
of "kicker_plugin_descriptor" when discovering a plugin with the filename
"kickerd.dll".
2017-11-22 13:52:31 +01:00
Lukas W
6224e5ed6b MSVC: Various fixes
* CMake
  * Compiler flags fixes
  * Don't strip
* Fix default template argument errors
* Fix VLAs. MSVC doesn't support C99, so Variable-Length-Arrays are not
  available. Use QVarLengthArray instead.
2017-11-22 13:49:57 +01:00
Lukas W
3d2062392d MSVC: Blacklist unsupported plugins 2017-11-22 11:51:37 +01:00
Lukas W
ba2ed12f05 MSVC: EXPORT macro fixes 2017-11-22 11:08:47 +01:00
Tres Finocchiaro
d634ed344f Various CheckSubmodules fixes (#3996)
Various CheckSubmodules fixes
Closes #3992, #3993, #3994
2017-11-20 23:42:52 -05:00
tresf
5e2c105d5b Fix CheckSubmodules.cmake 2017-11-17 09:51:56 -05:00
Tres Finocchiaro
5aa713d5a6 Switch weakjack to submodule 2017-11-17 09:51:56 -05:00
Hussam Eddin Alhomsi
e8debf9015 Fix horizontal track resizing.
Fixes a regression from PR #3878 that broke horizontal track resizing.
2017-11-17 10:31:59 +03:00
Tres Finocchiaro
c102fa8ab4 Switch tap to submodule 2017-11-16 22:23:00 -05:00
Tres Finocchiaro
d63cfe0980 Bump veal submodule 2017-11-16 22:16:00 -05:00
tresf
d393bdc36d Coerce XML files to C 2017-11-16 21:12:47 -05:00
tresf
44a704cfe7 Move swh to submodule 2017-11-16 21:12:47 -05:00
Hussam Eddin Alhomsi
aad98d7405 Remove useless code from the about & export dialogs.
A follow-up to PR #3826.
2017-11-16 15:28:35 +03:00
Tres Finocchiaro
0dab4aea06 Use CMake to fetch submodules
Custom CMake module which attempts to automatically clone submodules when they're missing.  Uses the `--depth` option if supported, which should be faster than running `--recursive` on initial clone.
2017-11-15 14:23:04 -05:00
François Mazen
0f7d192681 Replace int by int32_t in aeffectx.h structures (#3094)
* Replace int by int32_t in aeffectx.h structures to ensure that size does not vary with platform or compiler.
* Add missing header in aeffectx.h
2017-11-15 01:57:14 -05:00
Steffen Baranowsky
6289071bcd adds doxygen documentation to SubWindow.cpp (#3450)
Doxygen documentation for SubWindow.cpp
2017-11-15 00:15:01 -05:00
Levin Oehlmann
918f449eb3 UI: New behavior for the Plugin Browser (#3773)
Remove widget resizing altogether, display plugin info in tooltip instead
2017-11-15 00:08:48 -05:00
Hussam Eddin Alhomsi
548baa50a0 About dialog & export dialog improvements. (#3826)
* Improve appearance of about dialog, export dialog
* Cleanup code comments/formatting
2017-11-14 23:59:14 -05:00
Hyunjin Song
57de274fe8 Fix time display (#3711)
Make Bar:Beat:Tick / Min:Sec:Msec agree with playhead
2017-11-14 23:42:26 -05:00
Hussam Eddin Alhomsi
c9e5d3aef5 Restrict playing notes on the keyboard of the Piano Roll editor to left-clicks. (#3771)
Restrict playing notes on the keyboard of the Piano Roll editor to left-clicks
2017-11-14 23:31:39 -05:00
Hussam Eddin Alhomsi
6f305a6308 Track operations fixes and other stuff. (#3878) 2017-11-14 23:30:17 -05:00
Tres Finocchiaro
77b4985a2d Enable sf3 extension (#3895)
Add sf3 file extension, move `sf2` to `soundfonts`.
2017-11-14 21:59:58 -05:00
Tres Finocchiaro
28a4eb27f2 Patch exprtk on Clang (#3971) 2017-11-14 01:28:38 -05:00
tresf
231cc82de1 Rename xpressive to Xpressive 2017-11-10 21:57:44 -05:00
tresf
80a49db6f6 Switch exprtk to submodoule 2017-11-10 21:57:44 -05:00
Tres Finocchiaro
6c9e62164c Attempt to fix Travis-CI
Closes #3966
2017-11-10 21:19:32 -05:00
tresf
d37284b32a Point calf submodule at fork, rename library 2017-11-10 18:10:14 -05:00
tresf
ae291e0709 Move calf to submodule 2017-11-10 18:10:14 -05:00
tresf
289887f4fc Rename OPL2 to OpulenZ 2017-11-10 09:20:03 -05:00
tresf
dce32bede9 Switch opl2 to submodule 2017-11-10 09:20:03 -05:00
Hussam Eddin Alhomsi
aea3394810 Update patterns in song editor after shifting their notes by semitones in piano roll. (#3961)
After shifting notes up/down, call rearrangeAllNotes() to sort notes and dataChanged()
to update the pattern the Song Editor.
2017-11-09 16:27:01 +01:00
tresf
9e36e98753 Update translations 2017-11-08 20:47:22 -05:00
tresf
f0cdcd236c Rename papu to FreeBoy
Make API calls more intuitive
2017-11-08 20:47:22 -05:00
tresf
eef042dbd6 Refactor/subclass Basic_Gb_Apu 2017-11-08 20:47:22 -05:00
tresf
3794d2ee84 Switch papu to submodule 2017-11-08 20:47:22 -05:00
tresf
9d317e158e Cleanup unused files 2017-11-03 15:37:36 -04:00
tresf
b621c7eb34 Move zynaddsubfx to submodule 2017-11-03 15:37:36 -04:00
Steffen Baranowsky
c765249723 Sampletrack - resize from left (#3487)
Sampletrack - resize from left
2017-11-01 14:43:39 -04:00
Lukas W
68c85c8e05 Merge branch 'stable-1.2' 2017-10-30 11:07:05 +01:00
liushuyu
9fb74d9bff Update i18n strings 2017-10-20 13:30:52 -06:00
Lukas W
ad5884d2fe Revert "LADSPA: CAPS: fix compilation with MinGW GCC >= 5.0"
This reverts commit 14b2028438.
2017-10-20 16:26:23 +02:00
Lukas W
ff958338e7 Revert Travis docker changes 2017-10-20 10:54:24 +02:00
Lukas W
307deaef4c Fix merge damage 2017-10-19 22:18:52 +02:00
Lukas W
72501a0f2f Fix & silence shellcheck warnings 2017-10-19 09:48:08 +02:00
Lukas W
8927ceaed5 Merge remote-tracking branch 'origin/master' 2017-10-19 09:38:00 +02:00
Lukas W
01a6cb13f7 Merge pull request #3894 from LMMS/fix/scripts
Fix shellcheck failing on master
2017-10-19 08:38:08 +02:00
Lukas W
ae73fa4521 Fix some shellchecks warnings 2017-10-18 23:27:21 +02:00
Tobias Junghans
9fd77a4959 Travis: fix installer name 2017-10-18 19:22:07 +02:00
Tobias Junghans
0c06bc2498 Travis: install libz-mingw-w64-dev for Windows builds 2017-10-18 19:02:45 +02:00
Tobias Junghans
3781412a2e Travis: use Qt5LinguistTools from mingw-w64 toolchain 2017-10-18 18:51:26 +02:00
Tobias Junghans
f68b462a61 CMake: always require Qt5LinguistTools 2017-10-18 18:51:01 +02:00
Tobias Junghans
597e54ac8a CMake: enforce new behaviour for CMP0020 2017-10-18 18:47:58 +02:00
Tobias Junghans
350cd2738c Travis: fix syntax error in script 2017-10-18 18:38:50 +02:00
Tobias Junghans
cd677273ac Travis: only install required packages for software-properties-common 2017-10-18 18:36:04 +02:00
Tobias Junghans
c4ee2f70bd Travis: remove MinGW package caching relicts 2017-10-18 18:32:51 +02:00
Tobias Junghans
e462f90df1 Travis: call build script directly for Docker-based builds 2017-10-18 18:31:54 +02:00
Tobias Junghans
874edf362c Travis: fix typo in package name 2017-10-18 18:29:23 +02:00
Tobias Junghans
57a53feadd Travis: fix syntax error in Dockerfiles 2017-10-18 18:25:36 +02:00
Tobias Junghans
4730f8b068 Travis: cross-compile in Docker containers with mingw-w64 toolchain 2017-10-18 18:21:56 +02:00
Tobias Junghans
6e3046d9f9 CMake: migrate to new mingw-w64 toolchain 2017-10-18 18:17:53 +02:00
Lukas W
1059c92d87 Merge branch 'stable-1.2'
# Conflicts:
#	.travis/linux..before_install.sh
#	.travis/linux..install.sh
#	cmake/linux/lmms.desktop
#	plugins/vst_base/CMakeLists.txt
2017-10-18 17:33:55 +02:00
Tobias Junghans
14b2028438 LADSPA: CAPS: fix compilation with MinGW GCC >= 5.0 2017-10-18 08:00:40 +02:00
Lukas W
9ae1bdecda MSVC compilation fixes 2017-10-16 15:51:21 +02:00
Lukas W
c2af8ae554 Remove "-fno-exceptions" compile flag 2017-10-16 15:03:20 +02:00
Lukas W
8ed6295a7d Use CMAKE_CXX_STANDARD as a portable way of setting C++11
Fixes MSVC warnings "unknown option -std=c++11"
2017-10-16 15:01:13 +02:00
Lukas W
d32b373d78 MSVC: Fix 64bit detection 2017-10-16 14:49:34 +02:00
Lukas W
f123b82f27 MSVC: Use Q_LIKELY and Q_UNLIKELY instead of gcc-specific extensions 2017-10-16 11:18:15 +02:00
Lukas W
5d4bba9c3c Port MicroTimer to portable C++11 for MSVC compatibility 2017-10-16 11:17:30 +02:00
Lukas W
142f0f29cd MSVC: Fix compiler warning flags 2017-10-16 11:17:03 +02:00
Tres Finocchiaro
7f92b82738 Upgrade to fluidsynth 1.1.8, switch to gist 2017-10-14 13:41:17 -04:00
Dan Williams
4d26654534 Fix warnings (#3852)
* Remove register keyword

Register is meaningless in c++, and removed in c++17

* Fix compiler warningsg

Add missing override, remove unused capture, and remove unused local variablees
2017-10-11 19:10:03 +02:00
Hyunin Song
0a6a6d1a77 Fix warning in automation unit test 2017-10-07 16:15:09 +09:00
Hyunin Song
e0bd797876 Merge branch 'stable-1.2' 2017-10-03 15:56:16 +09:00
Steffen Baranowsky
31d27d2099 don't allow dragging TCOs in BBEditor (#3832)
* don't allow dragging TCOs in BBEditor

* change bbtrack detecting

* code improvements
2017-10-03 00:53:49 +02:00
David CARLIER
fdec4da50c fixing C abs/C++ abs mix up (#3837) 2017-10-03 00:47:55 +02:00
Hussam Eddin Alhomsi
e5c1854df0 Update the grid after changing the quantization value in automation editor 2017-10-02 22:05:16 +02:00
Oskar Wallgren
29d8734c51 Save track height under a separate name, 'trackheight' (#3840) 2017-10-02 15:10:33 +02:00
Dominic Clark
d5a2ea136f Fix hang when remote plugin is missing (#3770) 2017-10-01 17:30:37 +02:00
Michael Gregorius
b1af4c233f Introduce an enum to describe the VCA mode
Replace the integer encoding of the VCA mode with an enumeration.
2017-10-01 11:51:44 +02:00
Michael Gregorius
4fa96bc6c6 LB302: Move init of VCA members into constructor initializer list
Move the initialization of the members belonging to the VCA into
lb302Synth's constructor initializer list. This also removes a
duplication initialization of vca_mode from the code.
2017-10-01 11:51:44 +02:00
Michael Gregorius
b2a01ad8c3 Fix #3842: Opening a project with LB302 produces a noise burst
Fix the noise burst described in #3842 by removing the second
initialization of vca_a to 9 in the constructor of lb302Synth.
2017-10-01 11:51:44 +02:00
Hyunjin Song
4ca6cdb9c7 Fix VST effect control icon display
Fix broken VST effect control icon display in master branch due to the difference in CMakeLists.txt
2017-09-24 15:42:02 +09:00
LMMS Service Account
28140aa1a4 Updating translations for data/locale/nl.ts 2017-09-13 10:25:26 -04:00
Steffen Baranowsky
b69b585612 fix CTRL in songeditor by losing focus (#3796)
* fix CTRL in songeditor by losing focus

* init m_ctrlAction
2017-09-12 21:57:40 +02:00
LMMS Service Account
30020ebc8c Updating translations for data/locale/fr.ts 2017-09-11 12:32:45 -04:00
liushuyu
661daedbe2 Update i18n strings 2017-09-09 16:14:20 -06:00
liushuyu
242223e1bf Update i18n source strings 2017-09-09 13:56:07 -06:00
liushuyu
da7b61535b Merge stable-1.2 into master 2017-09-09 13:55:36 -06:00
tresf
55521b508d Install libgig-*.dll for Windows builds 2017-09-07 16:12:21 -04:00
tresf
b18480ec2c Fix pthread location for msys2 2017-09-07 14:58:38 -04:00
Hyunjin Song
d67ecacdb4 Don't use temporary gz file for ppa listing
Fix shellcheck error, introduced by commit b6c97c5.
2017-09-07 16:54:41 +09:00
tresf
b6c97c5973 Msys2 fixes 2017-09-06 22:52:46 -07:00
Lukas W
12edb58c77 Merge remote-tracking branch 'upstream/stable-1.2'
# Conflicts:
#	data/themes/default/style.css
#	src/gui/ExportProjectDialog.cpp
#	src/tracks/Pattern.cpp
2017-08-27 13:07:45 +02:00
Steffen Baranowsky
9b5d3790b0 shortcut refactor for songeditor (#3649)
* shortcut refactor for songeditor

* Ctrl-modifier for copy Tcos

* QAction()::trigger methode qt4 compatible
2017-08-27 12:23:08 +02:00
Andrés
e387e77445 same note layering when sustain pedal is pressed (#3774) 2017-08-26 06:01:01 +02:00
Arash Partow
8dcf997872 General improvements and fixes (#3772)
Added fixes for a clean GCC 7.+ compile
2017-08-23 21:09:43 +02:00
Andrés
153ab375f9 "misc" view now shows the model state, of the track use of master pitch (#3753) 2017-08-16 01:35:04 +02:00
David CARLIER
9ae339c82b Fixes the OpenBSD build. (#3716) 2017-08-08 12:27:54 +02:00
Levin Oehlmann
e9a4063119 Add FLAC export and related options (#3731)
* Add FLAC export, based on WAV renderer

* Depend on sndfile>=1.0.18 (previously >=1.0.11)

* Add compression option to FLAC export, if available.

The code related to compression is only generated if LMMS_HAVE_SF_COMPLEVEL is defined(libsndfile>=1.0.26).

* Save into the correct file extension upon single-export.

* Use unique_ptr in FLAC renderer and be more expressive about involved types.

* Use unique_ptr and remove manual memory management in ExportProjectDialog

* Add 'flac' format info to --help and manpage
2017-08-04 07:19:39 +09:00
Hyunjin Song
37f6032b4d Fix deadlock when exporting is finished, if the project has any Sample TCO(s). (#3742)
[cherry-picked from stable-1.2]
2017-08-02 09:14:52 +02:00
Andrés
44028c8594 Midi sustain working when envelope is on (#3730)
* midi sustain working when envelope is on

* pressing sustain pedal again doesn't pause release
2017-08-02 07:20:09 +02:00
Tres Finocchiaro
0e88a27389 Add support for SDL2 (#3732) 2017-08-01 00:39:00 -04:00
Oskar Wallgren
4402ca95f2 Fixes to recover file system (#3722)
Don't auto-save while playing by default. On weaker machines (xp?) we
see glitches so better turn this on after need.

Remove the last of Limited Sessin which was removed in 290556e.

[cherry-picked from stable-1.2]
2017-07-30 14:33:30 +02:00
Michael Gregorius
1f257f8125 Fix another memory leak by returning the error messages on the stack
Change Song::errorSummary() to return the string with the error messages
on the stack to remove another memory leak.
2017-07-27 19:16:05 +02:00
Michael Gregorius
017fb4b089 Fix a memory leak in Song (dynamically allocated error list)
Make the member Song::m_errors a static member to prevent memory leaks.
The member was allocated dynamically when an instance of a Song was
created but was not deleted in the destructor.
2017-07-27 19:07:19 +02:00
Michael Gregorius
9d92ea2cca Show the names of patterns in their tool tip
Adjust PatternView::update to show the name of the pattern as the tool
tip (regardless of whether it is a beat and bassline or a melody
pattern).

Override the public slot TrackContentObjectView::update for
AutomationPatternView and BBTCOView. Implement it similar to
PatternView::update.
2017-07-27 17:26:13 +02:00
Michael Gregorius
379e1020ab Sample tracks: Show the file name of the loaded file in the label
Show the file name without the full path in the text label for sample
tracks. Show the file name with the full path in the tool tip.
2017-07-26 21:16:19 +02:00
Michael Gregorius
0a27bc180e Expose properties for note border color and fill color to style sheets
Expose properties to set the colors for note borders and note fills for
patterns to the style sheets. Both properties are exposed for the muted
and not muted case. Use these new properties during rendering.

Adjust the style sheets for the classic and default theme.
2017-07-26 20:39:50 +02:00
Michael Gregorius
5141dc5f3d Fix problem with Qt5 and move painting code in one block
Fix a problem with Qt5 by explicitly setting the pen width to 0 after
setting the transformation.

Reorder some of the other code to differentiate better between some
calculations that are in done in preparation for the painting and the
actual painting itself.
2017-07-26 20:39:50 +02:00
Michael Gregorius
ce0de8a3ff Paint notes as lines at small sizes and add a small border
Draw notes as lines in case the pattern size is smaller than 64 pixels.
Antialiasing is only used when the notes are drawn as rectangles.

Add a border of four pixels at the top and bottom of the area where the
notes are drawn so they don't get pushed under the pattern borders.

Set the transparency of the text label to 100.

Clean up of some other code:
* Remove an unnecessary assignment to a pixmap
* Move code closer to where it is needed
* Remove an unncessary call to QPainter::end()
2017-07-26 20:39:50 +02:00
Michael Gregorius
461cb2bb3c Improve the rendering of melody patterns (mapped to [0,1] x [0,1])
Compute the height of the potential text field before rendering the
melody pattern so that we can use that information later.

Transform the painter so that notes drawn into a [0,1] x [0,1]
coordinate system are drawn at the correct position on the pattern
widget. Add code that moves the pattern notes smoothly under the text
label in case there is not much space, i.e. for narrow patterns. Notes
are drawn as filled rectangles with a slightly darker border.

Always draw at least an octave of notes onto the pattern, so that
patterns with just a single note will not look strange, i.e. that they
are not filled completely with the note. If there is additional space to
fill it will be rather filled at the top of the pattern so that single
notes have a high chance of being drawn below the pattern text.

Simplify the drawing of the inner and outer border.

Use numeric_limits to initialize the minimum and maximum key.

Remove some redundant checks whether the pattern holds notes and
decrease the indentation depth by two tabs for most of the code.
2017-07-26 20:39:50 +02:00
Michael Gregorius
c1be21f478 First implementation to draw pattern notes as boxes
Still uses absolute positions without any transformations. Some
refactorings/changes to make the code better understandable and concise.
2017-07-26 20:39:50 +02:00
irrenhaus3
c8af34af2f Respect build options in export dialogs (#3714)
* Respect build options in ExportProjectDialog

* Use QItem user data instead of hard ordering to identify export format in ExportProjectDialog

* For compatibility with QVariant, ExportFileFormats is now explicitly an int.

* Don't break out of format identifier loop prematurely in Song export.
2017-07-26 19:48:25 +09:00
Andrés
2464a57f3c Fix recording of sustained midi notes (#3710) 2017-07-26 02:48:24 +02:00
Tres Finocchiaro
ebfdc0491a Sync zyn with repo version (#3715)
Sync zyn plugin with zyn repo fixes
2017-07-22 04:21:04 -04:00
tresf
fda557fd10 Sync zyn license with repo version 2017-07-21 16:26:50 -04:00
Michael Gregorius
17f1856c84 Add back the rendering of text shadows for pattern labels
Add back the rendering of text shadows for pattern labels. If some
design does not want shadows beneath the text it's always possible to
set the CSS property qproperty-textShadowColor to something completely
transparent.
2017-07-20 19:53:02 +02:00
Michael Gregorius
a81b14b6cf Handle cases where elided text becomes empty or "..."
Render the whole text if the elided text becomes empty or if it only
contains one character, i.e. if it becomes "…". Solved as implemented
because I was not able to check for "…" explicitly, i.e. the comparison
against "…" still failed.
2017-07-20 19:53:02 +02:00
Michael Gregorius
f15fe18360 Expose the background color of the text labels in the style sheet
Add a new property "textBackgroundColor" to TrackContentObjectView to
expose the property to the style sheets. Use this property in the code
that renders the text labels.

Adjust the two existing style sheets.
2017-07-20 19:53:02 +02:00
Michael Gregorius
a23e344886 Make text rendering consistent for TrackContentObjectViews
Add the method paintTextLabel to TrackContentObjectView. This methods
implements the painting of a given text on a given painter. The new
implementation does not draw any text label in case the trimmed text
becomes empty.

Use the method paintTextLabel to paint the text for automation patterns,
BB patterns and instrument patterns.

Adjust the style sheet of the classic and default theme by moving the
font definition from PatternView into TrackContentObjectView so that it
can be used by all inheriting classes.
2017-07-20 19:53:02 +02:00
Michael Gregorius
bcdb5ecb5a Fix a problem with the time display
Some changes made in commit e05c82758e
have broken the update of the time display. This commit fixes the problem
by introducing a second version of MidiTime::ticksToMilliseconds which
takes a double as an argument for the ticks. This new method is then
used by the call to ticksToMilliseconds in Song::processNextBuffer which
fixes the problem.
2017-07-20 18:23:10 +02:00
Oskar Wallgren
6f1b11f0ee Envelopes and LFO - Don't divide by 0 (#3381)
We perform division with some Envelope and LFO variables so they mustn't
be zero. They are given a minimum value of one frame ( f_cnt_t ).
Since #3687 we have a compile flag to turn on debugging of floating point
operations. This will currently not let you pass the Envelope/LFO
initiation and this is also fixed by this PR.
2017-07-20 02:33:31 +02:00
Karmo Rosental
dc829f48af Added support for wine-stable from WineHQ repositories. (#3708)
Added support for wine-stable from WineHQ repositories.
2017-07-19 15:46:27 -04:00
Michael Gregorius
e05c82758e Remove explicit time calculations by moving them into Song and MidiTime
Add a method to convert a MidiTime instance to milliseconds. Also add a
static method to MidiTime that computes the time in milliseconds for a
given number of ticks and a tempo.

Remove the method that sets the milliseconds explicitly from Song.
Replace it by a method that takes a MidiTime instance and one method
that takes an amount of ticks.

Remove several explicit time calculations from the implementation of
Song and TimeLineWidget. Instead use the new methods.
2017-07-18 21:26:15 +02:00
Michael Gregorius
ebc9137a0f Restore the track height when loading files
The track height is already stored for every file that is saved. Remove a
condition that prevents its retrieval from files.

The removed condition was added as a fix for an issue with the number
#3585927 but it was not possible anymore to find out what this issue was
about.
2017-07-16 11:58:13 +02:00
Michael Gregorius
b7b2204cbb Remove unnecessary assignments to pixmaps in TCOs
Simplify the code that reinitializes the pixmap that caches the
graphical representation of some TCO widgets.

See comment in issue #3699.
2017-07-15 15:27:11 +02:00
Hyunin Song
cc3822141e Merge branch 'stable-1.2' into master (@liushuyu) 2017-07-15 08:08:07 +09:00
Karmo Rosental
aaf09bb4db Updated Freeboy files from Game Music Emu 0.6.1. (#3618)
Uses upstream files to fix #326
2017-07-14 16:51:58 -04:00
Half-Gray
98952636b5 Add tooltip for refresh button (#3643) 2017-07-14 04:14:29 +02:00
Michael Gregorius
51dd094403 Add CMake option to enable the debugging of floating point exceptions
Add a new CMake option WANT_DEBUG_FPE which adds the define
LMMS_DEBUG_FPE if activated. Extend lmmsconfig.h.in with regards to that
define. Include information about development options to the CMake
output.

Install a signal handler to trap floating point exceptions when starting
LMMS in case it is compiled using the option described above. The
current implementation of the signal handler prints a stack trace and
then exits the application.

Currently this option is only enabled for Linux builds due to
uncertainty with regards to which of the needed headers are supported by
Windows and Apple.
2017-07-12 21:51:48 +02:00
Michael Gregorius
a70d255418 Use font properties from CSS to draw the pattern labels
Use the font properties that are defined in the CSS to draw the pattern
labels. This provides flexibility with regards to the font properties
that are used (size, font family, etc.).

Adjust the CSS for the default theme and the classic theme.
2017-07-11 21:23:13 +02:00
Michael Gregorius
c0a4f67544 Render a black semitransparent rectangle beneath the elided pattern text
Make the pattern names better readable by rendering them on top of a
semitransparent black rectangle. Elide the text and make it render a bit
more to the right.
2017-07-11 21:23:13 +02:00
Michael Gregorius
1b24a0520d Move the search bar on top of the file browser for sidebar pages (#3657)
Move the search bar on top of the file browser for the following sidebar
windows:
* "My Projects"
* "My Samples"
* "My Presets"
* "My Home"
* "My Computer"

Add the greyed out text "Search" to the search text edit.
The text is only shown as long as no text is entered in the search field.

Also rename some variable names to something more meaningful. Rename the
member m_l of FileBrowser to m_fileBrowserTreeWidget. Rename the
following local variables in the constructor of FileBrowser:
* ops -> searchWidget
* opl -> searchWidgetLayout
2017-07-07 18:52:41 +02:00
Tres Finocchiaro
94420d9d5c Merge pull request #3667 from zapashcanon/scripts
Fix scripts for shellcheck
2017-07-04 10:19:45 -04:00
zapashcanon
060c012b10 Clean code 2017-07-04 11:24:38 +02:00
zapashcanon
e90bc630fa Fix scripts 2017-07-04 11:12:21 +02:00
m4sk1n
996b1c4bfa Added Polish strings to LMMS.desktop (#3666) 2017-07-02 16:19:47 +02:00
gnudles
dff76b2e83 Xpressive plugin (#3259)
* First Preview of the X-Pressive Plugin
(exprtk.hpp is not included, get it from my exprtk fork in the branch
internal_data_functions)
available keys:
f- note's frequency. available only in the output expressions
t- time in seconds. in the Waves (W1,W2,W3) it's in the range [0,1)
key- the note's keyboard key. available only in the output expressions.
v- the note's velocity (divided by 255.0 so it is in the range [0,1]).
available only in the output expressions.
rel- gives 0 while the key is holded, and 1 after the key release.
available only in the output expressions.
A1,A2,A3- general purpose knobs (you can control them with the
automations). available only in the output expressions.
W1,W2,W3- precalculated wave forms. can be also load from file. you can
use them only in the output expressions
available functions:
cent(x)- gives pow(2,x/1200)
rand()- random number generator. in range [-1,1). each call gives other
value.
randv(i)- random vector (with pseudo infinite integer cells). the values
are in range [-1,1). it's stays consistent only across the note
playback. so each note playback will get other vector (even on the same
key).
sinew- sine wave with period of 1.
saww- saw wave with period of 1.
squarew- square wave with period of 1.
trianglew- triangle wave with period of 1.
expw- exponent wave with period of 1.
expnw- another exponent wave with period of 1.
moogw- moog wave with period of 1.
moogsaww- moog-saw wave with period of 1.
you can use * % ^ / + - pow sin log pi etc.

* Xpressive Plug-In:
Added Release transition knob that control the "rel" variable. (the
duration of transit from 0 to 1)
Fixed some problems in the displays. (update display when changing
A1,A2,A3, clear display with invalid expression.

* X-Pressive Plug-In: Few more fixes
Changed the callbacks in exprfront.cpp to be templated.
Added help.
Added ExprTk.hpp.
some bug fixes (inf issues).
Added integrate function.

* Special version of ExprTk with modified license (BSL) for the LMMS project https://github.com/LMMS/lmms

* Xpressive Plug-In- fixed some building errors.
Added the "e" euler's constant.

* Xpressive Plug-In - fix mingw64 issues

* X-Pressive Plug-in:
Added "trel" (time since release) variable.
The integrate function can now have unlimited usage.
Added selective interpolation per wave.
Improved a little the random vector function.
Some other improvements, code cleaning, etc...

* Xpressive Plug-In:
move clearGraph definition into Graph.cpp.
fixed compilation errors. (oops..)

* X-Pressive plug-in: updated presets names

* X-Pressive plug-in
added semitone function, added sample-rate variable

* X-Pressive plug-in, code cleaning, changed the rendering function to
achieve performace gain.

* X-Pressive plug-in - fix the string counting function

* X-Pressive plug-in - until somebody will find a better solution,
exprtk.hpp is patched under the name exprtk.patched.hpp ...

* X-Pressive plug-in - fix compiling errors.

* X-Pressive plug-in - added patch file for exprtk.hpp,
added last function that gives last calculated samples.
moved ExprSynth to be with ExprFront for performance reasons.

* X-Pressive plugin - moved the patched file back to the source tree, added .gitignore file..

* X-Pressive plugin - fix compilation error. (isnan isinf)

* X-Pressive plugin - tried to fix embed.cpp problem,
added new variable to the parser (tempo)

* X-Pressive plugin - fixed cmake script

* X-Pressive plugin - updated the license and the diff file.

* Updates to ExprTk

* Added return statement enable/disable via parser settings

Added exprtk_disable_return_statement macro for disabling return statements and associated exceptions at the source code level.

* X-Pressive plugin - updated CMakeLists.txt to use the correct flags on each platform.
also added exprtk.hpp as a dependency for the patch command.
Updated the exprtk diff file.

* X-Pressive plugin - moved the enhanced features flag to the WIN64 installation.

* X-Pressive plugin - another fix for CMakeLists.txt

* Minor updates to ExprTk

Updated multi-sub expression operator to return final sub-expression type.
Updates to exprtk_disable_return_statement macro for disabling return statements and associated exceptions at the source code level.

* X-Pressive plug-in - added try-block around exprtk calls and enabled the
-fexceptions flag, so patch file is no longer needed.

* X-Pressive plug-in - small fix in CMakeLists.txt

* Update ExprTk to tip of branch.

* X-Pressive plugin - added graph drawing feature..

* Updating exprtk.hpp to the latest upstream version
2017-06-26 19:45:59 +02:00
LMMS Service Account
d8dc29e675 Updating translations for data/locale/fr.ts 2017-06-03 10:30:10 -04:00
Tres Finocchiaro
e6cbdf6447 Better message for missing sndio (#3596)
Better message for missing sndio
2017-06-01 21:15:54 -04:00
LMMS Service Account
730605fd59 Updating translations for data/locale/es.ts 2017-05-16 21:27:42 -04:00
LMMS Service Account
b4ab48277c Updating translations for data/locale/it.ts 2017-05-16 13:32:31 -04:00
LMMS Service Account
b683004172 Updating translations for data/locale/cs.ts 2017-05-15 15:32:09 -04:00
Tres Finocchiaro
51329a821d Merge pull request #3554 from karmux/missing_vsteffect_icons
Show missing pixmaps in VST effects dialog.
2017-05-12 21:31:15 -04:00
Karmo Rosental
7ea92305bf Show missing pixmaps in VST effects dialog. 2017-05-12 21:41:00 +03:00
LMMS Service Account
2ebd961f3f Updating translations for data/locale/nl.ts 2017-05-09 13:11:55 -04:00
liushuyu
1e3d0aa8a4 update i18n strings 2017-05-09 21:49:16 +08:00
Michael Gregorius
241d5f7479 Merge pull request #3516 from michaelgregorius/3021-24-Bit-Export
Implement 24 bit support for WAV export (#3021) and improve the export dialog (only show widgets relevant to output format, add variable bitrates for Ogg)
2017-05-07 12:31:04 +02:00
Tres Finocchiaro
094258670f Merge pull request #3444 from LMMS/jasp00-patch-3
Document identifier collision in peak_controller_effect_controls.cpp
2017-05-02 22:20:28 -04:00
Michael Gregorius
954659fa8e Rename entry for bit depth from "24 Bit Float" to "24 Bit Integer" 2017-05-02 18:11:29 +02:00
Tres Finocchiaro
e3dc82c4a3 Merge pull request #3506 from zapashcanon/macosscript
Fix macos scripts
2017-05-01 18:44:52 -04:00
Léo Andrès
a74df5a4c5 Fix osx script, drop MacPorts support 2017-05-02 00:42:24 +02:00
Léo Andrès
c08c5ac0fc Use new brew package name syntax 2017-05-02 00:38:49 +02:00
tresf
7a82d5b0c6 Revert "Fix sporadic msys2 pkg-config path problems"
This reverts commit 4e76b78691.
2017-04-30 09:26:07 -07:00
tresf
4e76b78691 Fix sporadic msys2 pkg-config path problems
Closes #3492
2017-04-30 09:17:31 -07:00
Michael Gregorius
8ecae3e59c Make the 24 bit export the default selection in the export dialog 2017-04-30 11:48:35 +02:00
Michael Gregorius
02a36d1387 Add copyright info to the file OutputSettings.h 2017-04-30 11:19:57 +02:00
tresf
f9e01b59b4 Fix PPA downloads
Per #3492
2017-04-29 22:33:35 -07:00
Michael Gregorius
0ba4df406c Add the option to enable variable bit rates to the export dialog
If the variables bit rate is not enabled the nominal bit rate will be
used for the minimum and maximum bit rate in the encoder.

If the variable bit rate is enabled the current implementation will
compute the minimum bitrate by subtracting 64 kBit/s from the nominal
bit rate. The maximum bit rate is computed by adding 64 kBit/s to it.

Example: The nominal bit rate is set to 160 kBit/s and variable bit rate
is enabled in the export dialog. The minimum bit rate is then set to 96
kBit/s and the maximum bit rate to 224 kBit/s.
2017-04-29 16:14:33 +02:00
Michael Gregorius
3a14d3b434 Only show relevant widgets on the export dialog
Only show widgets on the export dialog that are relevant to the selected
file format (Wave/Ogg):
* Sample rate is always shown.
* Bit depth settings are only shown when Wave is selected.
* Bit rate settings are only shown when Ogg is selected.

Remove the label that informs the user that not all settings apply to
all export formats as it is not needed anymore. The english text of that
label was: "Please note that not all of the parameters above apply for
all file formats."
2017-04-29 15:50:31 +02:00
Michael Gregorius
515b28d044 Simplification of code and structure in the area of the file export
Pull the class OutputSettings out of the class ProjectRenderer so that
it can be used in other contexts as well. Also move the enum
ProjectRenderer::Depth into the new class OutputSettings and rename it
to BitDepth. Adjust all places that referenced
ProjectRenderer::OutputSettings accordingly.

Adjust the two places where an instance of OutputSettings is created:
the main function and ExportProjectDialog::startExport.

Store an instance of OutputSettings in AudioFileDevice and remove
several members and methods which are now replaced by this instance. Add
a getter for the OutputSettings to AudioFileDevice. Storing an instance
of OutputSettings in the base class AudioFileDevice enables the
simplification of the following constructors and general code in the
following classes:
* AudioFileDevice
* AudioFileOgg
* AudioFileWave

Because OutputSettings contains everything related to sample rate, bit
rate settings and bit depth these parameters could be removed from the
parameter list of the aforementioned constructors.

Simplify the signature of the factory method AudioFileDeviceInstantiaton
(defined in AudioFileDevice.h) and reorder the parameters by significance.

Move the logic of how the minimum and maximum bitrate is calculated
using the nominal bitrate into AudioFileOgg::minBitrate() and
AudioFileOgg::maxBitrate(). Previously this was defined in the
constructor of ProjectRenderer where it does not belong as it an
implementation detail of the OGG export.

Remove the code that converted the bit depth enum to an integer from
ProjectRenderer as it is now solely represented as an enum.

Remove class members for the minimum and maximum bit rate from
AudioFileOgg and adjust the code in the implementation to use the values
stored in OutputSettings.
2017-04-29 15:00:54 +02:00
Karmo Rosental
2815da2805 Fixed #3498. Show missing pixmaps in VeSTige plugin. (#3501) 2017-04-28 23:09:31 +02:00
Michael Gregorius
b1df8fd4fc Implement 24 bit support for WAV export (#3021)
Add a new value of "24 Bit Float" to the "Depth" combo box in the
project export dialog.

Add a new enum value to ProjectRenderer::Depth and extend the evaluation
of the different enum values in ProjectRenderer.

Add the new case of a depth of 24 to AudioFileWave and remove some
repetition with regards to SF_FORMAT_WAV in the code. It's only set once
now and then the depth is "added" in a switch statement.
2017-04-28 22:16:57 +02:00
Tres Finocchiaro
cea7d7d002 Merge pull request #3476 from zapashcanon/shellcheck
Add shellcheck to the build
2017-04-17 02:26:40 -04:00
Karmo Rosental
5e58d3c00b Fixed #3182. Always using master channel for preset previews. (#3503)
* Fixed #3182. Always using master channel for preset previews.
2017-04-16 08:57:06 -04:00
zapashcanon
7844b3e289 Add shellcheck to the build 2017-04-16 00:46:47 +02:00
Karmo Rosental
fc70ae3fba Simpler SF2 Player file dialog. Copied from GIG Player. Opens correct SF2 plugin directory when running LMMS from build directory without install. (#3502) 2017-04-14 21:05:34 -04:00
Jousboxx
e67779f817 Added Buzzer Beater to demos (#3482)
Add 2017 kicker competition winner to demo projects.
2017-04-08 15:32:30 -04:00
Lukas W
c7ce554ea1 Merge branch 'stable-1.2' 2017-04-07 11:41:27 +02:00
Lukas W
96a00300e8 Fix automation processing in BB tracks (#3481)
Fixes #3464
2017-04-06 23:10:00 +02:00
Tres Finocchiaro
b5ac3161c9 Revert "Update README.md"
Accidental github commit
This reverts commit bd1fb1a382.
2017-04-04 23:16:45 -04:00
Tres Finocchiaro
a486a7281c Revert "Update README.md"
Accidental GitHub commmit
This reverts commit 5f1550de72.
2017-04-04 23:16:07 -04:00
Tres Finocchiaro
5f1550de72 Update README.md 2017-04-04 23:08:27 -04:00
Tres Finocchiaro
bd1fb1a382 Update README.md 2017-04-04 23:04:22 -04:00
Karmo Rosental
0b43741f7e Added support for official wine-devel and wine-staging packages. (#3278)
* Added support for wine-devel packages.

* Added support for wine-staging packages.

* Staging extra flags.

* Dynamic Wine branch detection (stable, devel, staging).

* Using STRING() to correct WINE_INCLUDE_DIR and WINE_LIBRARY.

* Don't override CMAKE_PREFIX_PATH.

* REPLACE outputs new variables.

* Renamed variables.
2017-04-01 12:15:23 +00:00
Tres Finocchiaro
fc272d7aee Merge pull request #3455 from zapashcanon/scripts
Fix scripts using shellcheck
2017-03-28 14:31:22 -04:00
z-up
9c5a334fdd Always highlight the beats in PianoRoll and AutomationEditor using only time signature (#3458)
* Duration of the beat is defined by the denominator of the time signature
and it does not depend on whether or not you use triplets.

* Fortmatting fixed.
2017-03-28 15:27:56 +02:00
Oskar Wallgren
517417f0ca Automation Pattern - Rename 'controlKey' (#3459) 2017-03-28 09:54:53 +00:00
Lukas W
a22099c13f Merge branch 'stable-1.2' 2017-03-28 11:28:08 +02:00
Léo Andrès
5fca3d6f8c Fix scripts using shellcheck 2017-03-28 09:57:23 +02:00
Lukas W
9f905bce3e Use Qt's Resource System (2nd approach) (#1891)
* Remove bin2res, use Qt's resource system
* Use QDir search paths and QImageReader in getIconPixmap
* Don't include "embed.cpp" in plugins
* getIconPixmap: Use QPixmapCache, use QPixmap::fromImageReader
* Require CMake 2.8.9

* Fix ReverbSC embed usage
2017-03-26 22:06:43 +02:00
Léo Andrès
abc73c06ee Fix CMake warning (#3457) 2017-03-26 21:51:46 +02:00
Lukas W
de3b344edd lmms_math: C++11 updates 2017-03-26 12:38:30 +02:00
Javier Serrano Polo
91f20b65c6 Flag identifier collision in peak_controller_effect_controls.cpp 2017-03-20 02:43:23 +00:00
1633 changed files with 54426 additions and 228409 deletions

31
.appveyor.yml Normal file
View File

@@ -0,0 +1,31 @@
clone_depth: 1
version: "{build}"
image: Visual Studio 2017
platform:
- x86
- x64
environment:
matrix:
- compiler: msvc
install:
- cd C:\Tools\vcpkg
- git pull
- .\bootstrap-vcpkg.bat
- cd %APPVEYOR_BUILD_FOLDER%
- vcpkg install --triplet %PLATFORM%-windows --recurse fftw3 libsamplerate libsndfile lilv lv2 sdl2
- nuget install clcache -Version 4.1.0
build_script:
- cd %APPVEYOR_BUILD_FOLDER%
- mkdir build
- cd build
- ps: $env:CMAKE_PLATFORM="$(if ($env:PLATFORM -eq 'x64') { 'x64' } else { '' })"
- ps: $env:QT_SUFFIX="$(if ($env:PLATFORM -eq 'x64') { '_64' } else { '' })"
- cmake -DUSE_COMPILE_CACHE=ON -DCACHE_TOOL=%APPVEYOR_BUILD_FOLDER%/clcache.4.1.0/clcache-4.1.0/clcache.exe -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_PREFIX_PATH=c:/Qt/5.12/msvc2017%QT_SUFFIX%;c:/tools/vcpkg/installed/%PLATFORM%-windows -DCMAKE_GENERATOR_PLATFORM="%CMAKE_PLATFORM%" ..
- cmake --build . -- /maxcpucount:4
- cmake --build . --target tests
- cmake --build . --target package
artifacts:
- path: 'build\lmms-*.exe'
name: Installer
cache:
- c:/tools/vcpkg/installed

View File

@@ -1,11 +1,222 @@
# Dummy CircleCI Config File
version: 2
shared:
restore_cache: &restore_cache
restore_cache:
keys:
- ccache-{{ arch }}-{{ .Environment.CIRCLE_JOB }}-{{ .Branch }}
- ccache-{{ arch }}-{{ .Environment.CIRCLE_JOB }}
- ccache-{{ arch }}
save_cache: &save_cache
save_cache:
key: ccache-{{ arch }}-{{ .Environment.CIRCLE_JOB }}-{{ .Branch }}-{{ .BuildNum }}
paths:
- ~/.ccache
restore_homebrew_cache: &restore_homebrew_cache
restore_cache:
keys:
- homebrew-{{ arch }}-{{ .Environment.CIRCLE_JOB }}-{{ .Branch }}
- homebrew-{{ arch }}-{{ .Environment.CIRCLE_JOB }}
- homebrew-{{ arch }}
save_homebrew_cache: &save_homebrew_cache
save_cache:
key: homebrew-{{ arch }}-{{ .Environment.CIRCLE_JOB }}-{{ .Branch }}-{{ .BuildNum }}
paths:
- ~/Library/Caches/Homebrew
- /usr/local/Homebrew
ccache_stats: &ccache_stats
run:
name: Print ccache statistics
command: |
echo "[ccache config]"
ccache -p
echo "[ccache stats]"
ccache -s
# Commmon initializing commands
init: &init
run:
name: Initialize
command: |
mkdir -p /tmp/artifacts
# Workaround for failing submodule fetching
git config --global --unset url."ssh://git@github.com".insteadOf || true
if [[ -n "${CIRCLE_PR_NUMBER}" ]]
then
echo "Fetching out merged pull request"
git fetch -u origin refs/pull/${CIRCLE_PR_NUMBER}/merge:pr/merge
git checkout pr/merge
else
echo "Not a pull request"
fi
# Commmon environment variables
common_environment: &common_environment
QT5: True
CMAKE_OPTS: -DUSE_WERROR=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -DUSE_CCACHE=ON
CCACHE_MAXSIZE: 500M
CCACHE_LOGFILE: /tmp/artifacts/ccache.log
MAKEFLAGS: -j6
jobs:
build:
machine: true
branches:
ignore: stable-1.2
mingw32:
environment:
<<: *common_environment
docker:
- image: lmmsci/linux.mingw32:18.04
steps:
- checkout
- *init
- *restore_cache
- run:
name: Dummy
command: echo "Dummy command to prevent error"
name: Building
command: |
mkdir build && cd build
../cmake/build_win32.sh
make lmms
make
- run:
name: Build tests
command: cd build && make tests
- run:
name: Build installer
command: |
cd build
make package
cp ./lmms-*.exe /tmp/artifacts/
- store_artifacts:
path: /tmp/artifacts/
destination: /
- *ccache_stats
- *save_cache
mingw64:
environment:
<<: *common_environment
docker:
- image: lmmsci/linux.mingw64:18.04
steps:
- checkout
- *init
- *restore_cache
- run:
name: Building
command: |
mkdir build && cd build
../cmake/build_win64.sh
make
- run:
name: Build tests
command: cd build && make tests
- run:
name: Build installer
command: |
cd build
make package
cp ./lmms-*.exe /tmp/artifacts/
- store_artifacts:
path: /tmp/artifacts/
destination: /
- *ccache_stats
- *save_cache
linux.gcc:
docker:
- image: lmmsci/linux.gcc:16.04
environment:
<<: *common_environment
steps:
- checkout
- *init
- *restore_cache
- run:
name: Configure
command: |
source /opt/qt5*/bin/qt5*-env.sh || true
mkdir build && cd build
cmake .. $CMAKE_OPTS -DCMAKE_INSTALL_PREFIX=./install
- run:
name: Build
command: cd build && make
- run:
name: Build tests
command: cd build && make tests
- run:
name: Run tests
command: build/tests/tests
- *ccache_stats
- run:
name: Build AppImage
command: |
cd build
make install
make appimage || (cat appimage.log && false)
cp ./lmms-*.AppImage /tmp/artifacts/
- store_artifacts:
path: /tmp/artifacts/
destination: /
- store_artifacts:
path: build/appimage.log
destination: /
- *save_cache
shellcheck:
docker:
- image: koalaman/shellcheck-alpine:v0.4.6
steps:
- checkout
- run:
name: Shellcheck
command: shellcheck $(find "./cmake/" -type f -name '*.sh' -o -name "*.sh.in")
macos:
environment:
<<: *common_environment
macos:
xcode: "9.4.1"
steps:
- checkout
- *init
- *restore_homebrew_cache
- *restore_cache
- run:
name: Install Homebrew dependencies
command: |
# uninstall Homebrew's python 2 to prevent errors on brew install
brew uninstall python@2 || true
brew update && brew install ccache fftw cmake pkg-config libogg libvorbis lame libsndfile libsamplerate jack sdl libgig libsoundio lilv lv2 stk fluid-synth portaudio fltk qt5 carla
- run:
name: Install nodejs dependencies
command: npm install -g appdmg
- run:
name: Building
command: |
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX="../target" -DCMAKE_PREFIX_PATH="$(brew --prefix qt5)" $CMAKE_OPTS -DUSE_WERROR=OFF
make
- run:
name: Build tests
command: cd build && make tests
- run:
name: Run tests
command: build/tests/tests
- run:
name: Build DMG
command: |
cd build
make install
make dmg
cp ./lmms-*.dmg /tmp/artifacts/
- store_artifacts:
path: /tmp/artifacts/
destination: /
- *save_cache
- *save_homebrew_cache
workflows:
version: 2
build-and-test:
jobs:
- macos
- mingw32
- mingw64
- linux.gcc
- shellcheck

5
.editorconfig Normal file
View File

@@ -0,0 +1,5 @@
root = true
[*]
indent_style = tab
tab_width = 4

1
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1 @@
custom: https://lmms.io/get-involved/#donate

36
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,36 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''
---
# Please search the issue tracker for existing bug reports before submitting your own. Delete this line to confirm no similar report has been posted yet.
### Bug Summary
#### Steps to reproduce
#### Expected behavior
#### Actual behavior
#### Screenshot
#### Affected LMMS versions
<!--
LMMS's version is visible on the splash screen and under Help > About.
If your version isn't from lmms.io/download, please note which branch it was built from.
Finally, if possible, please test if the bug occurs on both stable and master.
-->
#### Logs
<details>
<summary>Click to expand</summary>
<pre>
<!-- paste logs here -->
</pre>
</details>

4
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -0,0 +1,4 @@
contact_links:
- name: Get help on Discord
url: https://lmms.io/chat/
about: Need help? Have a question? Reach out to other LMMS users on our Discord server!

View File

@@ -0,0 +1,18 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement
assignees: ''
---
# Please search the issue tracker for existing feature requests before submitting your own. Delete this line to confirm no similar request has been posted yet.
### Enhancement Summary
#### Justification
#### Mockup
<!-- If your request encompasses changes to the user interface, provide a mockup of your proposal here -->

47
.gitmodules vendored
View File

@@ -3,4 +3,49 @@
url = https://github.com/Lukas-W/qt5-x11embed.git
[submodule "src/3rdparty/rpmalloc/rpmalloc"]
path = src/3rdparty/rpmalloc/rpmalloc
url = https://github.com/rampantpixels/rpmalloc.git
url = https://github.com/mjansson/rpmalloc.git
[submodule "plugins/zynaddsubfx/zynaddsubfx"]
path = plugins/zynaddsubfx/zynaddsubfx
url = https://github.com/lmms/zynaddsubfx.git
[submodule "plugins/FreeBoy/game-music-emu"]
path = plugins/FreeBoy/game-music-emu
url = https://bitbucket.org/mpyne/game-music-emu.git
[submodule "plugins/OpulenZ/adplug"]
path = plugins/OpulenZ/adplug
url = https://github.com/adplug/adplug.git
[submodule "plugins/LadspaEffect/calf/veal"]
path = plugins/LadspaEffect/calf/veal
url = https://github.com/lmms/veal
[submodule "plugins/Xpressive/exprtk"]
path = plugins/Xpressive/exprtk
url = https://github.com/ArashPartow/exprtk
[submodule "plugins/LadspaEffect/swh/ladspa"]
path = plugins/LadspaEffect/swh/ladspa
url = https://github.com/swh/ladspa
[submodule "plugins/LadspaEffect/tap/tap-plugins"]
path = plugins/LadspaEffect/tap/tap-plugins
url = https://github.com/tomszilagyi/tap-plugins
[submodule "src/3rdparty/weakjack/weakjack"]
path = src/3rdparty/weakjack/weakjack
url = https://github.com/x42/weakjack.git
[submodule "src/3rdparty/mingw-std-threads"]
path = src/3rdparty/mingw-std-threads
url = https://github.com/meganz/mingw-std-threads.git
[submodule "doc/wiki"]
path = doc/wiki
url = https://github.com/lmms/lmms.wiki.git
[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
[submodule "plugins/sid/resid"]
path = plugins/Sid/resid
url = https://github.com/simonowen/resid
[submodule "src/3rdparty/jack2"]
path = src/3rdparty/jack2
url = https://github.com/jackaudio/jack2
[submodule "plugins/LadspaEffect/cmt/cmt"]
path = plugins/LadspaEffect/cmt/cmt
url = https://github.com/lmms/cmt

View File

@@ -30,3 +30,4 @@ 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>
Hussam al-Homsi <sawuare@gmail.com> Hussam Eddin Alhomsi <hussameddin.alhomsi@gmail.com>

View File

@@ -1,6 +1,6 @@
language: cpp
compiler: gcc
dist: trusty
dist: xenial
sudo: required
cache:
directories:
@@ -9,17 +9,8 @@ cache:
- $HOME/pbuilder-bases
matrix:
include:
- env: TARGET_OS=win32
- env: TARGET_OS=win64
- os: osx
osx_image: xcode8.2
- env: QT5=
- env: QT5=True
- env: QT5=True TARGET_OS=win32 TARGET_DEPLOY=True
- env: QT5=True TARGET_OS=win64 TARGET_DEPLOY=True
- os: osx
osx_image: xcode8.2
env: QT5=True
- env: TYPE=style
- os: linux
- env: TARGET_OS=debian-sid TARGET_DEPLOY=True
git:
depth: false
@@ -30,35 +21,13 @@ matrix:
env: TARGET_OS=debian-sid
git:
depth: false
- os: osx
osx_image: xcode9.4
before_install:
- . ${TRAVIS_BUILD_DIR}/.travis/${TRAVIS_OS_NAME}.${TARGET_OS}.before_install.sh
install:
- . ${TRAVIS_BUILD_DIR}/.travis/${TRAVIS_OS_NAME}.${TARGET_OS}.install.sh
before_script:
- export CMAKE_FLAGS="-DWANT_QT5=$QT5 -DUSE_WERROR=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo"
- if [ -z "$TRAVIS_TAG" ]; then export CMAKE_FLAGS="$CMAKE_FLAGS -DUSE_CCACHE=ON"; fi
script:
- . ${TRAVIS_BUILD_DIR}/.travis/${TRAVIS_OS_NAME}.${TARGET_OS}.script.sh
after_script:
- ccache -s
deploy:
provider: releases
api_key:
secure: d4a+x4Gugpss7JK2DcHjyBZDmEFFh4iVfKDfITSD50T6Mc6At4LMgojvEu+6qT6IyOY2vm3UVT6fhyeuWDTRDwW9tfFlaHVA0h8aTRD+eAXOA7pQ8rEMwQO3+WCKuKTfEqUkpL4wxhww8dpkv54tqeIs0S4TBqz9tk8UhzU7XbE=
file_glob: true
file:
- lmms-${TRAVIS_TAG:1}-$TARGET_OS.exe
- /var/cache/pbuilder/result/lmms_*.tar.xz
skip_cleanup: true
on:
tags: true
all_branches: true
condition: '"$TARGET_DEPLOY" = True'
repo: LMMS/lmms
notifications:
webhooks:
urls:
- https://webhooks.gitter.im/e/1ac7fc698195981a9227
on_success: change # options: [always|never|change] default: always
on_failure: always # options: [always|never|change] default: always
on_start: never # options: [always|never|change] default: always
# appdmg doesn't work with old Node.js
- if [ "$TRAVIS_OS_NAME" = osx ]; then nvm install 10; fi
install: ${TRAVIS_BUILD_DIR}/.travis/install.sh
script: ${TRAVIS_BUILD_DIR}/.travis/script.sh
after_script: ${TRAVIS_BUILD_DIR}/.travis/after_script.sh
before_deploy:
- if [ "$TARGET_OS" != debian-sid ]; then make package; fi

7
.travis/after_script.sh Executable file
View File

@@ -0,0 +1,7 @@
#!/usr/bin/env bash
set -e
if [ "$TYPE" != 'style' ]; then
ccache -s
fi

11
.travis/install.sh Executable file
View File

@@ -0,0 +1,11 @@
#!/usr/bin/env bash
set -e
if [ "$TYPE" = 'style' ]; then
sudo apt-get -yqq update
sudo apt-get install shellcheck
else
"$TRAVIS_BUILD_DIR/.travis/$TRAVIS_OS_NAME.$TARGET_OS.before_install.sh"
"$TRAVIS_BUILD_DIR/.travis/$TRAVIS_OS_NAME.$TARGET_OS.install.sh"
fi

7
.travis/linux..before_install.sh Normal file → Executable file
View File

@@ -1,9 +1,8 @@
#!/usr/bin/env bash
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
set -e
sudo add-apt-repository ppa:beineri/opt-qt592-xenial -y
sudo dpkg --add-architecture i386
sudo apt-get update -qq || true

30
.travis/linux..install.sh Normal file → Executable file
View File

@@ -1,25 +1,23 @@
#!/usr/bin/env bash
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
libgig-dev libsoundio-dev"
libfluidsynth-dev portaudio19-dev g++-multilib libfltk1.3-dev fluid
libgig-dev libsoundio-dev qt59base qt59translations qt59tools"
VST_PACKAGES="wine-dev libqt5x11extras5-dev qtbase5-private-dev libxcb-util0-dev libxcb-keysyms1-dev"
# swh build dependencies
SWH_PACKAGES="perl libxml2-utils libxml-perl liblist-moreutils-perl"
# VST dependencies
VST_PACKAGES="wine-dev qt59x11extras qtbase5-private-dev libxcb-util0-dev libxcb-keysyms1-dev"
# LV2 dependencies; libsuil-dev is not required
LV2_PACKAGES="lv2-dev liblilv-dev"
# Help with unmet dependencies
PACKAGES="$PACKAGES $VST_PACKAGES libjack-jackd2-0"
if [ $QT5 ]; then
PACKAGES="$PACKAGES qt59base qt59translations qt59tools"
else
PACKAGES="$PACKAGES libqt4-dev"
fi
PACKAGES="$PACKAGES $SWH_PACKAGES $VST_PACKAGES $LV2_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

18
.travis/linux..script.sh Normal file → Executable file
View File

@@ -1,17 +1,15 @@
#!/usr/bin/env bash
unset QTDIR QT_PLUGIN_PATH LD_LIBRARY_PATH
# shellcheck disable=SC1091
source /opt/qt59/bin/qt59-env.sh
set -e
mkdir build
cd build
if [ $QT5 ]; then
unset QTDIR QT_PLUGIN_PATH LD_LIBRARY_PATH
source /opt/qt59/bin/qt59-env.sh
fi
cmake -DCMAKE_INSTALL_PREFIX=../target/ -DUSE_WERROR=ON $CMAKE_FLAGS ..
# shellcheck disable=SC2086
cmake -DUSE_WERROR=ON -DCMAKE_INSTALL_PREFIX=../target $CMAKE_FLAGS ..
make -j4
make tests
./tests/tests
make install
make appimage

View File

@@ -1,7 +1,7 @@
#!/bin/sh
#!/bin/bash
set -e
: ${TARGET_ARCH:=amd64}
: "${TARGET_ARCH:=amd64}"
BASETGZ="$HOME/pbuilder-bases/debian-sid-$TARGET_ARCH.tgz"
MIRROR=http://cdn-fastly.deb.debian.org/debian
@@ -60,7 +60,7 @@ sync_version() {
esac
sed "1 s/@VERSION@/$VERSION/" -i debian/changelog
echo Set Debian version to $VERSION
echo "Set Debian version to $VERSION"
}
sync_version

6
.travis/linux.win.download.sh Normal file → Executable file
View File

@@ -1,11 +1,13 @@
#!/usr/bin/env bash
set -e
CACHE_DIR=$HOME/apt_mingw_cache/$1
mkdir -p $CACHE_DIR
mkdir -p "$CACHE_DIR"
pushd $CACHE_DIR
pushd "$CACHE_DIR"
# shellcheck disable=SC2086
apt-get --print-uris --yes install $MINGW_PACKAGES | grep ^\' | cut -d\' -f2 > downloads.list
wget -N --input-file downloads.list

2
.travis/linux.win32.before_install.sh Normal file → Executable file
View File

@@ -1,4 +1,6 @@
#!/usr/bin/env bash
set -e
sudo add-apt-repository ppa:tobydox/mingw-x-trusty -y
sudo apt-get update -qq

20
.travis/linux.win32.install.sh Normal file → Executable file
View File

@@ -1,31 +1,29 @@
#!/usr/bin/env bash
set -e
if [ $QT5 ]; then
MINGW_PACKAGES="mingw32-x-qt5base"
else
MINGW_PACKAGES="mingw32-x-qt"
fi
set -e
MINGW_PACKAGES="mingw32-x-sdl mingw32-x-libvorbis mingw32-x-fluidsynth mingw32-x-stk
mingw32-x-glib2 mingw32-x-portaudio mingw32-x-libsndfile mingw32-x-fftw
mingw32-x-flac mingw32-x-fltk mingw32-x-libsamplerate
mingw32-x-pkgconfig mingw32-x-binutils mingw32-x-gcc mingw32-x-runtime
mingw32-x-libgig mingw32-x-libsoundio mingw32-x-lame $MINGW_PACKAGES"
mingw32-x-libgig mingw32-x-libsoundio mingw32-x-lame mingw32-x-qt5base"
# swh build dependencies
SWH_PACKAGES="perl libxml2-utils libxml-perl liblist-moreutils-perl"
export MINGW_PACKAGES
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
. $DIR/linux.win.download.sh win32
"$TRAVIS_BUILD_DIR/.travis/linux.win.download.sh" win32
PACKAGES="nsis cloog-isl libmpc3 qt4-linguist-tools mingw32 $MINGW_PACKAGES"
PACKAGES="nsis cloog-isl libmpc3 qt4-linguist-tools mingw32 $MINGW_PACKAGES $SWH_PACKAGES"
# shellcheck disable=SC2086
sudo apt-get install -y $PACKAGES
# ccache 3.2 is needed because mingw32-x-gcc is version 4.9, which causes cmake
# to use @file command line passing, which in turn ccache 3.1.9 doesn't support
pushd /tmp
wget http://archive.ubuntu.com/ubuntu/pool/main/c/ccache/ccache_3.2.4-1_amd64.deb
sha256sum -c $TRAVIS_BUILD_DIR/.travis/ccache.sha256
sha256sum -c "$TRAVIS_BUILD_DIR/.travis/ccache.sha256"
sudo dpkg -i ccache_3.2.4-1_amd64.deb
popd

7
.travis/linux.win32.script.sh Normal file → Executable file
View File

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

4
.travis/linux.win64.before_install.sh Normal file → Executable file
View File

@@ -1,3 +1,5 @@
#!/usr/bin/env bash
. .travis/linux.win32.before_install.sh
set -e
"$TRAVIS_BUILD_DIR/.travis/linux.win32.before_install.sh"

17
.travis/linux.win64.install.sh Normal file → Executable file
View File

@@ -1,26 +1,19 @@
#!/usr/bin/env bash
set -e
# First, install 32-bit deps
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
. $DIR/linux.win32.install.sh
if [ $QT5 ]; then
MINGW_PACKAGES="mingw64-x-qt5base"
else
MINGW_PACKAGES="mingw64-x-qt"
fi
"$TRAVIS_BUILD_DIR/.travis/linux.win32.install.sh"
MINGW_PACKAGES="mingw64-x-sdl mingw64-x-libvorbis mingw64-x-fluidsynth mingw64-x-stk
mingw64-x-glib2 mingw64-x-portaudio mingw64-x-libsndfile
mingw64-x-fftw mingw64-x-flac mingw64-x-fltk mingw64-x-libsamplerate
mingw64-x-pkgconfig mingw64-x-binutils mingw64-x-gcc mingw64-x-runtime
mingw64-x-libgig mingw64-x-libsoundio mingw64-x-lame $MINGW_PACKAGES"
mingw64-x-libgig mingw64-x-libsoundio mingw64-x-lame mingw64-x-qt5base"
export MINGW_PACKAGES
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
. $DIR/linux.win.download.sh win64
"$TRAVIS_BUILD_DIR/.travis/linux.win.download.sh" win64
# shellcheck disable=SC2086
sudo apt-get install -y $MINGW_PACKAGES

7
.travis/linux.win64.script.sh Normal file → Executable file
View File

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

7
.travis/osx..before_install.sh Normal file → Executable file
View File

@@ -1,6 +1,7 @@
#!/usr/bin/env bash
brew update
set -e
# appdmg doesn't work with old versions of Node.js
nvm install --lts
brew update
# Python 2 may cause conflicts on dependency installation
brew unlink python@2 || true

23
.travis/osx..install.sh Normal file → Executable file
View File

@@ -1,17 +1,22 @@
#!/usr/bin/env bash
PACKAGES="cmake pkgconfig fftw libogg libvorbis lame libsndfile libsamplerate jack sdl libgig libsoundio stk fluid-synth portaudio node fltk carla"
set -e
if [ $QT5 ]; then
PACKAGES="$PACKAGES qt5"
PACKAGES="cmake pkg-config libogg libvorbis lame libsndfile libsamplerate lilv lv2 jack sdl libgig libsoundio stk fluid-synth portaudio node fltk qt carla"
if "${TRAVIS}"; then
PACKAGES="$PACKAGES ccache"
fi
brew install $PACKAGES ccache
# removing already installed packages from the list
for p in $(brew list); do
PACKAGES=${PACKAGES//$p/}
done;
if [ -z "$QT5" ]; then
brew tap cartr/qt4
brew tap-pin cartr/qt4
brew install qt@4
fi
# shellcheck disable=SC2086
brew install $PACKAGES
# fftw tries to install gcc which conflicts with travis
brew install fftw --ignore-dependencies
npm install -g appdmg

15
.travis/osx..script.sh Normal file → Executable file
View File

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

48
.travis/script.sh Executable file
View File

@@ -0,0 +1,48 @@
#!/usr/bin/env bash
set -e
if [ "$TYPE" = 'style' ]; then
# SC2185 is disabled because of: https://github.com/koalaman/shellcheck/issues/942
# once it's fixed, it should be enabled again
# shellcheck disable=SC2185
# shellcheck disable=SC2046
shellcheck $(find -O3 . -maxdepth 3 -type f -name '*.sh' -o -name "*.sh.in")
shellcheck doc/bash-completion/lmms
else
export CMAKE_FLAGS="-DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUNDLE_QT_TRANSLATIONS=ON"
if [ -z "$TRAVIS_TAG" ]; then
export CMAKE_FLAGS="$CMAKE_FLAGS -DUSE_CCACHE=ON"
fi
"$TRAVIS_BUILD_DIR/.travis/$TRAVIS_OS_NAME.$TARGET_OS.script.sh"
# Package and upload non-tagged builds
if [ -n "$TRAVIS_TAG" ]; then
# Skip, handled by travis deploy instead
exit 0
elif [[ $TARGET_OS == win* ]]; then
cd build
make -j4 package
PACKAGE="$(ls lmms-*win*.exe)"
elif [[ $TRAVIS_OS_NAME == osx ]]; then
cd build
make -j4 install > /dev/null
make dmg
PACKAGE="$(ls lmms-*.dmg)"
elif [[ $TARGET_OS != debian-sid ]]; then
cd build
make -j4 install > /dev/null
make appimage
PACKAGE="$(ls lmms-*.AppImage)"
fi
echo "Uploading $PACKAGE to transfer.sh..."
# Limit the connection time to 3 minutes and total upload time to 5 minutes
# Otherwise the build may hang
curl --connect-timeout 180 --max-time 300 --upload-file "$PACKAGE" "https://transfer.sh/$PACKAGE" || true
fi

View File

@@ -1,26 +1,37 @@
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.7)
CMAKE_MINIMUM_REQUIRED(VERSION 3.3)
PROJECT(lmms)
SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules" ${CMAKE_MODULE_PATH})
SET(LMMS_BINARY_DIR ${CMAKE_BINARY_DIR})
SET(LMMS_SOURCE_DIR ${CMAKE_SOURCE_DIR})
IF(COMMAND CMAKE_POLICY)
CMAKE_POLICY(SET CMP0005 NEW)
CMAKE_POLICY(SET CMP0003 NEW)
IF (CMAKE_MAJOR_VERSION GREATER 2)
CMAKE_POLICY(SET CMP0026 OLD)
CMAKE_POLICY(SET CMP0026 NEW)
CMAKE_POLICY(SET CMP0045 NEW)
CMAKE_POLICY(SET CMP0050 OLD)
ENDIF()
CMAKE_POLICY(SET CMP0020 NEW)
CMAKE_POLICY(SET CMP0057 NEW)
ENDIF(COMMAND CMAKE_POLICY)
# Import of windows.h breaks min()/max()
ADD_DEFINITIONS(-DNOMINMAX)
INCLUDE(PluginList)
INCLUDE(CheckSubmodules)
INCLUDE(AddFileDependencies)
INCLUDE(CheckIncludeFiles)
INCLUDE(FindPkgConfig)
INCLUDE(GenerateExportHeader)
STRING(TOUPPER "${CMAKE_PROJECT_NAME}" PROJECT_NAME_UCASE)
SET(PROJECT_YEAR 2019)
SET(PROJECT_YEAR 2020)
SET(PROJECT_AUTHOR "LMMS Developers")
SET(PROJECT_URL "https://lmms.io")
@@ -28,23 +39,22 @@ SET(PROJECT_EMAIL "lmms-devel@lists.sourceforge.net")
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 "1")
SET(VERSION_STAGE "")
SET(VERSION_BUILD "0")
SET(VERSION_MINOR "3")
SET(VERSION_RELEASE "0")
SET(VERSION_STAGE "alpha")
SET(VERSION_BUILD "")
SET(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_RELEASE}")
IF(VERSION_STAGE)
SET(VERSION "${VERSION}-${VERSION_STAGE}")
ENDIF()
IF(VERSION_BUILD)
SET(VERSION "${VERSION}.${VERSION_BUILD}")
SET(VERSION "${VERSION}-${VERSION_BUILD}")
ENDIF()
# Override version information for non-base builds
INCLUDE(VersionInfo)
INCLUDE(DetectMachine)
OPTION(WANT_ALSA "Include ALSA (Advanced Linux Sound Architecture) support" ON)
OPTION(WANT_CALF "Include CALF LADSPA plugins" ON)
OPTION(WANT_CAPS "Include C* Audio Plugin Suite (LADSPA plugins)" ON)
@@ -52,6 +62,8 @@ OPTION(WANT_CARLA "Include Carla plugin" ON)
OPTION(WANT_CMT "Include Computer Music Toolkit LADSPA plugins" ON)
OPTION(WANT_JACK "Include JACK (Jack Audio Connection Kit) support" ON)
OPTION(WANT_WEAKJACK "Loosely link JACK libraries" ON)
OPTION(WANT_LV2 "Include Lv2 plugins" ON)
OPTION(WANT_SUIL "Include SUIL for LV2 plugin UIs" ON)
OPTION(WANT_MP3LAME "Include MP3/Lame support" ON)
OPTION(WANT_OGGVORBIS "Include OGG/Vorbis support" ON)
OPTION(WANT_PULSEAUDIO "Include PulseAudio support" ON)
@@ -65,9 +77,11 @@ OPTION(WANT_STK "Include Stk (Synthesis Toolkit) support" ON)
OPTION(WANT_SWH "Include Steve Harris's LADSPA plugins" ON)
OPTION(WANT_TAP "Include Tom's Audio Processing LADSPA plugins" ON)
OPTION(WANT_VST "Include VST support" ON)
OPTION(WANT_VST_NOWINE "Include partial VST support (without wine)" OFF)
OPTION(WANT_VST_32 "Include 32-bit VST support" ON)
OPTION(WANT_VST_64 "Include 64-bit VST support" ON)
OPTION(WANT_WINMM "Include WinMM MIDI support" OFF)
OPTION(WANT_QT5 "Build with Qt5" OFF)
OPTION(WANT_DEBUG_FPE "Debug floating point exceptions" OFF)
OPTION(BUNDLE_QT_TRANSLATIONS "Install Qt translation files for LMMS" OFF)
IF(LMMS_BUILD_APPLE)
@@ -87,14 +101,13 @@ ENDIF(LMMS_BUILD_APPLE)
IF(LMMS_BUILD_WIN32)
SET(WANT_ALSA OFF)
SET(WANT_JACK OFF)
SET(WANT_PULSEAUDIO OFF)
SET(WANT_SNDIO OFF)
SET(WANT_SOUNDIO OFF)
SET(WANT_WINMM ON)
SET(BUNDLE_QT_TRANSLATIONS ON)
SET(LMMS_HAVE_WINMM TRUE)
SET(STATUS_ALSA "<not supported on this platform>")
SET(STATUS_JACK "<not supported on this platform>")
SET(STATUS_PULSEAUDIO "<not supported on this platform>")
SET(STATUS_SOUNDIO "<disabled in this release>")
SET(STATUS_WINMM "OK")
@@ -113,6 +126,7 @@ IF(LMMS_BUILD_MSYS AND CMAKE_BUILD_TYPE STREQUAL "Debug")
SET(STATUS_STK "not built as requested")
ENDIF()
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
CHECK_INCLUDE_FILES(stdint.h LMMS_HAVE_STDINT_H)
CHECK_INCLUDE_FILES(stdlib.h LMMS_HAVE_STDLIB_H)
@@ -123,6 +137,7 @@ CHECK_INCLUDE_FILES(sys/types.h LMMS_HAVE_SYS_TYPES_H)
CHECK_INCLUDE_FILES(sys/ipc.h LMMS_HAVE_SYS_IPC_H)
CHECK_INCLUDE_FILES(sys/shm.h LMMS_HAVE_SYS_SHM_H)
CHECK_INCLUDE_FILES(sys/time.h LMMS_HAVE_SYS_TIME_H)
CHECK_INCLUDE_FILES(sys/times.h LMMS_HAVE_SYS_TIMES_H)
CHECK_INCLUDE_FILES(sched.h LMMS_HAVE_SCHED_H)
CHECK_INCLUDE_FILES(sys/soundcard.h LMMS_HAVE_SYS_SOUNDCARD_H)
CHECK_INCLUDE_FILES(soundcard.h LMMS_HAVE_SOUNDCARD_H)
@@ -135,64 +150,92 @@ CHECK_INCLUDE_FILES(locale.h LMMS_HAVE_LOCALE_H)
LIST(APPEND CMAKE_PREFIX_PATH "${CMAKE_INSTALL_PREFIX}")
IF(WANT_QT5)
SET(QT5 TRUE)
FIND_PACKAGE(Qt5 5.6.0 COMPONENTS Core Gui Widgets Xml REQUIRED)
FIND_PACKAGE(Qt5 COMPONENTS LinguistTools QUIET)
FIND_PACKAGE(Qt5Core REQUIRED)
FIND_PACKAGE(Qt5Gui REQUIRED)
FIND_PACKAGE(Qt5LinguistTools)
FIND_PACKAGE(Qt5Widgets REQUIRED)
FIND_PACKAGE(Qt5Xml REQUIRED)
INCLUDE_DIRECTORIES(
${Qt5Core_INCLUDE_DIRS}
${Qt5Gui_INCLUDE_DIRS}
${Qt5Widgets_INCLUDE_DIRS}
${Qt5Xml_INCLUDE_DIRS}
)
INCLUDE_DIRECTORIES(
${Qt5Core_INCLUDE_DIRS}
${Qt5Gui_INCLUDE_DIRS}
${Qt5Widgets_INCLUDE_DIRS}
${Qt5Xml_INCLUDE_DIRS}
)
SET(QT_LIBRARIES
Qt5::Core
Qt5::Gui
Qt5::Widgets
Qt5::Xml
)
SET(QT_LIBRARIES
Qt5::Core
Qt5::Gui
Qt5::Widgets
Qt5::Xml
)
IF(LMMS_BUILD_LINUX AND WANT_VST)
FIND_PACKAGE(Qt5X11Extras REQUIRED)
LIST(APPEND QT_LIBRARIES Qt5::X11Extras)
ENDIF()
# Resolve Qt5::qmake to full path for use in packaging scripts
GET_TARGET_PROPERTY(QT_QMAKE_EXECUTABLE "${Qt5Core_QMAKE_EXECUTABLE}" IMPORTED_LOCATION)
FIND_PACKAGE(Qt5Test)
SET(QT_QTTEST_LIBRARY Qt5::Test)
ELSE()
SET(QT5 FALSE)
# check for Qt4
SET(QT_MIN_VERSION "4.6.0" COMPONENTS QtCore QtGui QtXml)
FIND_PACKAGE(Qt4 REQUIRED)
SET(QT_USE_QTXML 1)
IF(WIN32)
SET(QT_TRANSLATIONS_DIR "${MINGW_PREFIX}/share/qt4/translations/")
ENDIF(WIN32)
IF(EXISTS "${QT_TRANSLATIONS_DIR}")
MESSAGE("-- Found Qt translations in ${QT_TRANSLATIONS_DIR}")
ADD_DEFINITIONS(-D'QT_TRANSLATIONS_DIR="${QT_TRANSLATIONS_DIR}"')
ENDIF()
IF(NOT WIN32)
STRING(REPLACE "-DQT_DLL" "" QT_DEFINITIONS "${QT_DEFINITIONS}")
ENDIF()
INCLUDE("${QT_USE_FILE}")
IF(LMMS_BUILD_LINUX AND WANT_VST)
FIND_PACKAGE(Qt5 COMPONENTS X11Extras REQUIRED)
LIST(APPEND QT_LIBRARIES Qt5::X11Extras)
ENDIF()
# Resolve Qt5::qmake to full path for use in packaging scripts
GET_TARGET_PROPERTY(QT_QMAKE_EXECUTABLE "${Qt5Core_QMAKE_EXECUTABLE}" IMPORTED_LOCATION)
# Find the location of Qt translation files
execute_process(COMMAND ${QT_QMAKE_EXECUTABLE} -query QT_INSTALL_TRANSLATIONS
OUTPUT_VARIABLE QT_TRANSLATIONS_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
IF(EXISTS "${QT_TRANSLATIONS_DIR}")
MESSAGE("-- Found Qt translations in ${QT_TRANSLATIONS_DIR}")
ADD_DEFINITIONS(-D'QT_TRANSLATIONS_DIR="${QT_TRANSLATIONS_DIR}"')
ENDIF()
FIND_PACKAGE(Qt5Test)
SET(QT_QTTEST_LIBRARY Qt5::Test)
# check for libsndfile
PKG_CHECK_MODULES(SNDFILE REQUIRED sndfile>=1.0.11)
FIND_PACKAGE(SndFile REQUIRED)
IF(NOT SNDFILE_FOUND)
MESSAGE(FATAL_ERROR "LMMS requires libsndfile1 and libsndfile1-dev >= 1.0.11 - please install, remove CMakeCache.txt and try again!")
ENDIF(NOT SNDFILE_FOUND)
MESSAGE(FATAL_ERROR "LMMS requires libsndfile1 and libsndfile1-dev >= 1.0.18 - please install, remove CMakeCache.txt and try again!")
ENDIF()
# check if we can use SF_SET_COMPRESSION_LEVEL
IF(NOT SNDFILE_VERSION VERSION_LESS 1.0.26)
SET(LMMS_HAVE_SF_COMPLEVEL TRUE)
ENDIF()
IF(WANT_LV2)
IF(PKG_CONFIG_FOUND)
PKG_CHECK_MODULES(LV2 lv2)
PKG_CHECK_MODULES(LILV lilv-0)
ENDIF()
IF(NOT LV2_FOUND AND NOT LILV_FOUND)
FIND_PACKAGE(LV2 CONFIG)
FIND_PACKAGE(LILV CONFIG)
IF(LILV_FOUND)
SET(LILV_LIBRARIES "lilv::lilv")
ENDIF()
ENDIF()
IF(LV2_FOUND AND LILV_FOUND)
SET(LMMS_HAVE_LV2 TRUE)
SET(STATUS_LV2 "OK")
ELSE()
SET(STATUS_LV2 "not found, install it or set PKG_CONFIG_PATH appropriately")
ENDIF()
ELSE(WANT_LV2)
SET(STATUS_LV2 "not built as requested")
ENDIF(WANT_LV2)
IF(WANT_SUIL)
IF(PKG_CONFIG_FOUND)
PKG_CHECK_MODULES(SUIL suil-0)
IF(SUIL_FOUND)
SET(LMMS_HAVE_SUIL TRUE)
SET(STATUS_SUIL "OK")
ELSE()
SET(STATUS_SUIL "not found, install it or set PKG_CONFIG_PATH appropriately")
ENDIF()
ELSE()
SET(STATUS_SUIL "not found, requires pkg-config")
ENDIF()
ELSE(WANT_SUIL)
SET(STATUS_SUIL "not built as requested")
ENDIF(WANT_SUIL)
IF(WANT_CALF)
SET(LMMS_HAVE_CALF TRUE)
@@ -241,31 +284,48 @@ 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)
# check for SDL
# check for SDL2
IF(WANT_SDL)
SET(SDL2_BUILDING_LIBRARY TRUE)
FIND_PACKAGE(SDL2)
IF(SDL2_FOUND)
SET(LMMS_HAVE_SDL TRUE)
SET(LMMS_HAVE_SDL2 TRUE)
SET(STATUS_SDL "OK, using SDL2")
SET(SDL_INCLUDE_DIR "")
SET(SDL_LIBRARY "")
ELSE()
SET(SDL2_INCLUDE_DIR "")
SET(SDL2_LIBRARY "")
ENDIF()
ENDIF()
# fallback to SDL1
IF(WANT_SDL AND NOT LMMS_HAVE_SDL2)
# Fallback to SDL1.2
SET(SDL_BUILDING_LIBRARY TRUE)
FIND_PACKAGE(SDL)
IF(SDL_FOUND)
SET(LMMS_HAVE_SDL TRUE)
SET(STATUS_SDL "OK")
ELSE(SDL_FOUND)
SET(STATUS_SDL "not found, please install libsdl1.2-dev (or similar) "
"if you require SDL support")
ENDIF(SDL_FOUND)
ENDIF(WANT_SDL)
IF(NOT LMMS_HAVE_SDL)
SET(SDL_INCLUDE_DIR "")
ELSE(NOT LMMS_HAVE_SDL)
IF(NOT SDL_INCLUDE_DIR)
SET(SDL_INCLUDE_DIR "${CMAKE_FIND_ROOT_PATH}/include")
ENDIF(NOT SDL_INCLUDE_DIR)
ENDIF(NOT LMMS_HAVE_SDL)
SET(STATUS_SDL "OK, using SDL1.2")
# fix mingw since 53abd65
IF(NOT SDL_INCLUDE_DIR)
SET(SDL_INCLUDE_DIR "${CMAKE_FIND_ROOT_PATH}/include")
ENDIF()
ELSE()
SET(STATUS_SDL "not found, please install libsdl2-dev (or similar) "
"if you require SDL support")
SET(SDL_INCLUDE_DIR "")
SET(SDL_LIBRARY "")
ENDIF()
ENDIF()
# check for Stk
IF(WANT_STK)
@@ -297,13 +357,13 @@ ENDIF(WANT_PORTAUDIO)
IF(WANT_SOUNDIO)
FIND_PACKAGE(SoundIo)
IF(SOUNDIO_FOUND)
SET(LMMS_HAVE_SOUNDIO TRUE)
SET(STATUS_SOUNDIO "OK")
INCLUDE_DIRECTORIES("${SOUNDIO_INCLUDE_DIR}")
SET(LMMS_HAVE_SOUNDIO TRUE)
SET(STATUS_SOUNDIO "OK")
INCLUDE_DIRECTORIES("${SOUNDIO_INCLUDE_DIR}")
ELSE(SOUNDIO_FOUND)
SET(SOUNDIO_INCLUDE_DIR "")
SET(STATUS_SOUNDIO "not found, please install libsoundio if you require libsoundio support")
SET(SOUNDIO_LIBRARY "")
SET(SOUNDIO_INCLUDE_DIR "")
SET(STATUS_SOUNDIO "not found, please install libsoundio if you require libsoundio support")
SET(SOUNDIO_LIBRARY "")
ENDIF(SOUNDIO_FOUND)
ENDIF(WANT_SOUNDIO)
@@ -380,32 +440,38 @@ ENDIF(NOT LMMS_HAVE_ALSA)
# check for JACK
IF(WANT_JACK)
PKG_CHECK_MODULES(JACK jack>=0.77)
IF(JACK_FOUND)
IF(WANT_WEAKJACK)
SET(LMMS_HAVE_WEAKJACK TRUE)
SET(STATUS_JACK "OK (weak linking enabled)")
SET(JACK_INCLUDE_DIRS "")
# use dlsym instead
SET(JACK_LIBRARIES ${CMAKE_DL_LIBS})
ELSE()
IF(WANT_WEAKJACK)
SET(LMMS_HAVE_WEAKJACK TRUE)
SET(WEAKJACK_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/src/3rdparty/weakjack/weakjack)
SET(JACK_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/src/3rdparty/jack2/common)
SET(STATUS_JACK "OK (weak linking enabled)")
# use dlsym instead
SET(JACK_LIBRARIES ${CMAKE_DL_LIBS})
SET(LMMS_HAVE_JACK TRUE)
SET(JACK_FOUND TRUE)
ELSE()
PKG_CHECK_MODULES(JACK jack>=0.77)
IF(JACK_FOUND)
SET(STATUS_JACK "OK")
ENDIF()
SET(LMMS_HAVE_JACK TRUE)
ELSE(JACK_FOUND)
SET(STATUS_JACK "not found, please install libjack0.100.0-dev (or similar) "
"if you require JACK support")
ENDIF(JACK_FOUND)
ENDIF()
IF(NOT JACK_FOUND)
SET(JACK_INCLUDE_DIRS "")
SET(STATUS_JACK "not found")
ENDIF()
ENDIF(WANT_JACK)
# check for FFTW3F-library
PKG_CHECK_MODULES(FFTW3F REQUIRED fftw3f>=3.0.0)
FIND_PACKAGE(FFTW COMPONENTS fftw3f REQUIRED)
# check for FLTK
FIND_PACKAGE(FLTK)
IF(FLTK_FOUND)
SET(STATUS_ZYN "OK")
ELSE()
SET(STATUS_ZYN "not found, please install fltk")
ENDIF()
# check for Fluidsynth
IF(WANT_SF2)
@@ -431,10 +497,11 @@ If(WANT_GIG)
ENDIF(WANT_GIG)
# check for pthreads
IF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE OR LMMS_BUILD_OPENBSD OR LMMS_BUILD_FREEBSD)
IF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE OR LMMS_BUILD_OPENBSD OR LMMS_BUILD_FREEBSD OR LMMS_BUILD_HAIKU)
FIND_PACKAGE(Threads)
ENDIF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE OR LMMS_BUILD_OPENBSD OR LMMS_BUILD_FREEBSD)
ENDIF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE OR LMMS_BUILD_OPENBSD OR LMMS_BUILD_FREEBSD OR LMMS_BUILD_HAIKU)
# check for sndio (roaraudio won't work yet)
IF(WANT_SNDIO)
FIND_PACKAGE(Sndio)
IF(SNDIO_FOUND)
@@ -467,32 +534,52 @@ IF(LMMS_BUILD_WIN32)
SET(STATUS_VST "OK")
ENDIF(LMMS_BUILD_WIN32)
IF(WANT_DEBUG_FPE)
IF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE)
SET(LMMS_DEBUG_FPE TRUE)
SET (STATUS_DEBUG_FPE "Enabled")
ELSE()
SET (STATUS_DEBUG_FPE "Wanted but disabled due to unsupported platform")
ENDIF()
ELSE()
SET (STATUS_DEBUG_FPE "Disabled")
ENDIF(WANT_DEBUG_FPE)
# check for libsamplerate
PKG_CHECK_MODULES(SAMPLERATE REQUIRED samplerate>=0.1.8)
FIND_PACKAGE(Samplerate 0.1.8 MODULE REQUIRED)
# set compiler flags
SET(WERROR_FLAGS "-Wall -Werror=unused-function -Wno-sign-compare -Wno-strict-overflow")
OPTION(USE_WERROR "Add -werror to the build flags. Stops the build on warnings" OFF)
IF(${USE_WERROR})
SET(WERROR_FLAGS "${WERROR_FLAGS} -Werror")
IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
SET(WERROR_FLAGS "-Wall -Werror=unused-function -Wno-sign-compare -Wno-strict-overflow")
OPTION(USE_WERROR "Add -werror to the build flags. Stops the build on warnings" OFF)
IF(${USE_WERROR})
SET(WERROR_FLAGS "${WERROR_FLAGS} -Werror")
ENDIF()
# 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 -Wno-attributes")
ENDIF()
ELSEIF(MSVC)
# Remove any existing /W flags
STRING(REGEX REPLACE "/W[0-4]" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
SET(WERROR_FLAGS "/W2")
IF(${USE_WERROR})
SET(WERROR_FLAGS "${WERROR_FLAGS} /WX")
ENDIF()
ENDIF()
# 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")
ENDIF()
IF(NOT CMAKE_BUILD_TYPE)
message(STATUS "Setting build type to 'Release' as none was specified.")
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
# Set the possible values of build type for cmake-gui
SET_PROPERTY(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
"MinSizeRel" "RelWithDebInfo")
"MinSizeRel" "RelWithDebInfo")
ENDIF()
SET(CMAKE_C_FLAGS "${WERROR_FLAGS} ${CMAKE_C_FLAGS}")
SET(CMAKE_CXX_FLAGS "-fno-exceptions ${WERROR_FLAGS} ${CMAKE_CXX_FLAGS}")
SET(CMAKE_CXX_FLAGS "${WERROR_FLAGS} ${CMAKE_CXX_FLAGS}")
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DLMMS_DEBUG")
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DLMMS_DEBUG")
@@ -519,38 +606,19 @@ IF(GIT_FOUND AND NOT CONTRIBUTORS)
TIMEOUT 1)
ENDIF()
# embedded resources stuff
IF(WIN32 OR WIN64)
# compile buildtools native
SET(BIN2RES_CPP "${CMAKE_SOURCE_DIR}/buildtools/bin2res.cpp")
SET(BIN2RES "${CMAKE_BINARY_DIR}/bin2res")
ADD_CUSTOM_TARGET(bin2res COMMAND g++ "\"${BIN2RES_CPP}\"" -o "\"${BIN2RES}\"" DEPENDS "${BIN2RES_CPP}")
ELSE(WIN32 OR WIN64)
ADD_EXECUTABLE(bin2res buildtools/bin2res.cpp)
GET_TARGET_PROPERTY(BIN2RES bin2res LOCATION)
ENDIF(WIN32 OR WIN64)
# we somehow have to make LMMS-binary depend on MOC-files
ADD_FILE_DEPENDENCIES("${CMAKE_BINARY_DIR}/lmmsconfig.h")
IF(WIN32)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-attributes")
ELSE(WIN32)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -DPIC")
ENDIF(WIN32)
IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
IF(WIN32)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-attributes")
ELSE(WIN32)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -DPIC")
ENDIF(WIN32)
ENDIF()
# use ccache
OPTION(USE_CCACHE "Use ccache for compilation" OFF)
IF(USE_CCACHE)
FIND_PROGRAM(CCACHE ccache)
IF (CCACHE)
MESSAGE(STATUS "Using ccache found in PATH")
SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE})
SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE})
ELSE()
MESSAGE(WARNING "USE_CCACHE enabled, but no ccache found")
ENDIF()
ENDIF()
include(CompileCache)
# make sub-directories
ADD_SUBDIRECTORY(cmake)
@@ -560,18 +628,23 @@ ADD_SUBDIRECTORY(tests)
ADD_SUBDIRECTORY(data)
ADD_SUBDIRECTORY(doc)
# post-install tasks
ADD_SUBDIRECTORY(cmake/postinstall)
# install tasks
ADD_SUBDIRECTORY(cmake/install)
ADD_CUSTOM_COMMAND(OUTPUT "${CMAKE_BINARY_DIR}/lmms.1.gz"
COMMAND gzip -c ${CMAKE_SOURCE_DIR}/doc/lmms.1 > ${CMAKE_BINARY_DIR}/lmms.1.gz
DEPENDS "${CMAKE_SOURCE_DIR}/doc/lmms.1"
COMMENT "Generating lmms.1.gz"
VERBATIM)
FIND_PACKAGE(UnixCommands)
IF(GZIP)
ADD_CUSTOM_COMMAND(OUTPUT "${CMAKE_BINARY_DIR}/lmms.1.gz"
COMMAND ${GZIP} -c ${CMAKE_SOURCE_DIR}/doc/lmms.1 > ${CMAKE_BINARY_DIR}/lmms.1.gz
DEPENDS "${CMAKE_SOURCE_DIR}/doc/lmms.1"
COMMENT "Generating lmms.1.gz"
VERBATIM)
ADD_CUSTOM_TARGET(manpage ALL
DEPENDS "${CMAKE_BINARY_DIR}/lmms.1.gz")
ADD_CUSTOM_TARGET(manpage ALL
DEPENDS "${CMAKE_BINARY_DIR}/lmms.1.gz")
ELSEIF(UNIX)
MESSAGE(FATAL_ERROR "Can't find gzip required for generating lmms.1.gz")
ENDIF()
# install headers
@@ -616,6 +689,15 @@ ADD_CUSTOM_TARGET(dist
COMMAND tar cjf lmms-${VERSION}-src.tar.bz2 "${TMP}"
COMMAND rm -rf "${TMP}")
#
# add uninstall-target
#
ADD_CUSTOM_TARGET(uninstall
COMMAND ${CMAKE_COMMAND} -DCMAKE_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}" -P "${CMAKE_CURRENT_SOURCE_DIR}/cmake/uninstall.cmake"
)
#
# display configuration information
#
@@ -654,6 +736,7 @@ MESSAGE(
"Supported file formats for project export\n"
"-----------------------------------------\n"
"* WAVE : OK\n"
"* FLAC : OK\n"
"* OGG/VORBIS : ${STATUS_OGGVORBIS}\n"
"* MP3/Lame : ${STATUS_MP3LAME}\n"
)
@@ -661,6 +744,9 @@ MESSAGE(
MESSAGE(
"Optional plugins\n"
"----------------\n"
"* Lv2 plugins : ${STATUS_LV2}\n"
"* SUIL for plugin UIs : ${STATUS_SUIL}\n"
"* ZynAddSubFX instrument : ${STATUS_ZYN}\n"
"* Carla Patchbay & Rack : ${STATUS_CARLA}\n"
"* SoundFont2 player : ${STATUS_FLUIDSYNTH}\n"
"* Stk Mallets : ${STATUS_STK}\n"
@@ -674,6 +760,12 @@ MESSAGE(
"* GIG player : ${STATUS_GIG}\n"
)
MESSAGE(
"Developer options\n"
"-----------------------------------------\n"
"* Debug FP exceptions : ${STATUS_DEBUG_FPE}\n"
)
MESSAGE(
"\n"
"-----------------------------------------------------------------\n"
@@ -683,4 +775,10 @@ MESSAGE(
"-----------------------------------------------------------------\n"
"\n\n")
SET(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION "${BIN_DIR}")
if(MSVC)
# We can't set this on the install time according to the configuration
SET(CMAKE_INSTALL_DEBUG_LIBRARIES TRUE)
SET(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)
endif()
INCLUDE(InstallRequiredSystemLibraries)

View File

@@ -1,16 +1,28 @@
Building LMMS got quite simple since 0.4.0 as everything is managed
by cmake now. Therefore make sure you have CMake (>= 2.6.0 recommended) and
then run
This project uses git submodules and several are required for a successful
build. If this tarball was NOT provided with submodules (default), some source
dependencies will need to be manually added to src/3rdparty.
If this project WAS provided with submodules, there are detailed dependencies
(e.g. supported compilers, cmake requirements, cross-compilation) at
doc/wiki/Compiling.md including platform-specific build instructions (e.g.
apt-get, dnf, pacman, etc).
mkdir build
cd build
cmake ../
make
sudo make install
Online documentation:
If your system does not have "sudo", become root with your preferred mechanism
and run the "make install" command.
https://github.com/LMMS/lmms/wiki/
Live online chat via Discord (similar to IRC):
https://lmms.io/chat, Channel #programming
Basic build steps:
mkdir build
cd build
cmake ../
make
sudo make install
# or alternately: su -c 'make install'
With the above commands an out-of-tree build is performed. You can also run
"cmake ." directly in the root of source tree although this is not recommended.
@@ -25,24 +37,31 @@ that are going to be built into LMMS or built as plugins. Install the
according libraries and development files if a certain feature is not enabled.
Then remove CMakeCache.txt and run cmake again.
If you want to supply an install prefix to cmake, add the flag:
For non-root installs, or to install to a non-standard location, provide an
install prefix to cmake, using the flag:
-DCMAKE_INSTALL_PREFIX=<prefix>
-DCMAKE_INSTALL_PREFIX=<prefix>
Where <prefix> can be /usr, /usr/local, /opt, etc. The default is /usr/local.
Building with QT5
First of all please note that CMake >= 2.8.11 is required for building with
Qt5 support. In order to build LMMS with Qt5, add the following flag when
invoking cmake:
-DWANT_QT5=ON
The Compilation tutorial (see docs/wiki/Compilation.md)
specifically uses <prefix> as "../target" for all non-root installations. This
is strongly recommended if developing a patch or a feature. For root
installations, <prefix> can be /usr, /usr/local, /opt, etc. For most systems,
the default is /usr/local.
If your Qt5 installation does not reside in standard installation paths,
additionally pass e.g.
additionally pass:
-DCMAKE_PREFIX_PATH=/opt/qt53/
-DCMAKE_PREFIX_PATH=<prefix>
Where <prefix> is the location to Qt5 installation, usually /opt/qt5/, etc.
Important wiki sections:
doc/wiki/Compiling.md:
Dependencies Detailed
- Build Toolchain (cmake)
- Compiler (gcc, clang)
- Libraries (required and optional dependencies)
doc/wiki/Dependencies-<platform>.md
Platform-specific dependencies (Windows, Ubuntu, Fedora, macOS, etc.)

View File

@@ -53,7 +53,6 @@ Information about what you can do and how can be found in the
Before coding a new big feature, please _always_
[file an issue](https://github.com/LMMS/lmms/issues/new) for your idea and
suggestions about your feature and about the intended implementation on GitHub
or post to the LMMS developers mailinglist (lmms-devel@lists.sourceforge.net)
and wait for replies! Maybe there are different ideas, improvements, hints or
suggestions about your feature and about the intended implementation on GitHub,
or ask in one of the tech channels on Discord and wait for replies! Maybe there are different ideas, improvements, or hints, or
maybe your feature is not welcome/needed at the moment.

View File

@@ -1,212 +0,0 @@
/*
* bin2res.cpp - generate embedded resources from binary data (based on qembed)
*
* Copyright (c) 2005-2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program (see COPYING); if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
*/
#include <string>
#include <vector>
#include <iostream>
#include <fstream>
static void embedData( const char * _input, int _size, std::ostream & _output );
static std::string convertFileNameToCIdentifier( const std::string & _s );
struct embed
{
unsigned int size;
std::string name;
std::string cname;
} ;
typedef std::vector<std::string> stringlist;
const int MAX_FILE_SIZE = 256*256*256; // = 16 MB
int main( int argc, char * * argv )
{
if( argc < 2 )
{
std::cerr << "Usage:" << std::endl << "\t" << argv[0] <<
" files" << std::endl;
return( 1 );
}
std::cout << "// Generated by bin2res" << std::endl;
std::vector<embed *> embedded_data;
std::cout << "#ifndef _EMBEDDED_RESOURCES_H" << std::endl;
std::cout << "#define _EMBEDDED_RESOURCES_H" << std::endl;
stringlist files;
for( int i = 1; i < argc; ++i )
{
files.push_back( std::string( argv[i] ) );
}
for( stringlist::iterator it = files.begin(); it != files.end(); ++it )
{
std::ifstream f( it->c_str(), std::ios::binary );
if( f.fail() )
{
std::cerr << "Cannot open file " << *it <<
", ignoring it" << std::endl;
continue;
}
f.seekg( 0, std::ios::end );
int fsize = f.tellg();
f.seekg( 0 );
if( fsize == 0 || fsize > MAX_FILE_SIZE )
{
std::cerr << "File " << *it << " has zero size or is "
"too large to be processed with bin2res." <<
std::endl;
}
char * data = new char[fsize];
f.read( data, fsize );
embed * e = new embed;
e->size = fsize;
if( it->rfind( '/' ) != std::string::npos )
{
e->name = std::string( it->c_str() +
it->rfind( '/' ) + 1 );
}
else
{
e->name = *it;
}
e->cname = convertFileNameToCIdentifier( e->name );
embedded_data.push_back( e );
std::string s;
std::cout << "static const unsigned char " << e->cname <<
"_data[] = {";
embedData( data, fsize, std::cout );
std::cout << std::endl << "};" << std::endl << std::endl;
delete[] data;
}
if( embedded_data.size() > 0 )
{
std::cout << "static const unsigned char dummy_data[] ="
"{ 0x00 };" << std::endl << std::endl;
embed * dummy = new embed;
dummy->size = 1;
dummy->name = "dummy";
dummy->cname = convertFileNameToCIdentifier(
std::string( "dummy" ) );
embedded_data.push_back( dummy );
std::cout << "#include <string.h>" << std::endl << std::endl;
std::cout << "#include \"embed.h\"" << std::endl << std::endl;
std::cout << "static embed::descriptor embed_vec[] = {" << std::endl;
/* << "{" << std::endl
<< " int size;" << std::endl
<< " const unsigned char * data;" <<
std::endl
<< " const char * name;" << std::endl
<< "} embed_vec[] = {" << std::endl;*/
while( embedded_data.size() > 0 )
{
embed * e = embedded_data[0];
std::cout << " { " << e->size << ", " << e->cname <<
"_data, " << "\"" << e->name <<
"\" }," << std::endl;
delete e;
embedded_data.erase( embedded_data.begin() );
}
std::cout << " { 0, 0, 0 }" << std::endl << "};" << std::endl
<< std::endl
<< "static const embed::descriptor & "
"findEmbeddedData( const char * _name )"
<< std::endl << "{" << std::endl
<< " for( int i = 0; embed_vec[i].data; "
"i++ )" << std::endl
<< " {" << std::endl
<< " if( strcmp( embed_vec[i].name, "
"_name ) == 0 )" << std::endl
<< " {" << std::endl
<< " return( "
"embed_vec[i] );" << std::endl
<< " }" << std::endl
<< " }" << std::endl
/* << " printf( \"warning: embedded resource "
"%s not found!\\n\", _name );"
<< std::endl*/
<< " return( findEmbeddedData( "
"\"dummy\" ) );" << std::endl
<< "}" << std::endl << std::endl;
}
std::cout << "#endif" << std::endl;
return( 0 );
}
std::string convertFileNameToCIdentifier( const std::string & _s )
{
std::string r = _s;
int len = r.length();
if ( len > 0 && !isalpha( (char)r[0] ) )
{
r[0] = '_';
}
for ( int i = 1; i < len; i++ )
{
if ( !isalnum( (char)r[i] ) )
{
r[i] = '_';
}
}
return( r );
}
void embedData( const char * _input, int _nbytes, std::ostream & _output )
{
static const char hexdigits[] = "0123456789abcdef";
std::string s;
for( int i = 0; i < _nbytes; i++ )
{
if( ( i%14 ) == 0 )
{
s += "\n ";
_output << s;
s = "";
}
unsigned int v = _input[i];
s += "0x";
s += hexdigits[(v >> 4) & 15];
s += hexdigits[v & 15];
if( i < _nbytes-1 )
{
s += ',';
}
}
if ( s.length() )
{
_output << s;
}
}

View File

@@ -9,7 +9,7 @@ IF(VERSION_STAGE)
SET(CPACK_PACKAGE_VERSION_PATCH "${CPACK_PACKAGE_VERSION_PATCH}-${VERSION_STAGE}")
ENDIF()
IF(VERSION_BUILD)
SET(CPACK_PACKAGE_VERSION_PATCH "${CPACK_PACKAGE_VERSION_PATCH}.${VERSION_BUILD}")
SET(CPACK_PACKAGE_VERSION_PATCH "${CPACK_PACKAGE_VERSION_PATCH}-${VERSION_BUILD}")
ENDIF()
SET(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME_UCASE}")
SET(CPACK_SOURCE_GENERATOR "TBZ2")

View File

@@ -9,6 +9,11 @@ SET(MACOSX_BUNDLE_MIMETYPE "application/x-lmms-project")
SET(MACOSX_BUNDLE_MIMETYPE_ICON "project.icns")
SET(MACOSX_BUNDLE_MIMETYPE_ID "io.lmms")
SET(MACOSX_BUNDLE_PROJECT_URL "${PROJECT_URL}")
SET(MACOSX_BUNDLE_DMG_TITLE "${MACOSX_BUNDLE_BUNDLE_NAME} ${MACOSX_BUNDLE_LONG_VERSION_STRING}")
# FIXME: appdmg won't allow volume names > 27 char
# See also https://github.com/LinusU/node-appdmg/issues/48
STRING(SUBSTRING "${MACOSX_BUNDLE_DMG_TITLE}" 0 27 MACOSX_BUNDLE_DMG_TITLE)
CONFIGURE_FILE("lmms.plist.in" "${CMAKE_BINARY_DIR}/Info.plist")
CONFIGURE_FILE("install_apple.sh.in" "${CMAKE_BINARY_DIR}/install_apple.sh" @ONLY)

View File

@@ -4,13 +4,11 @@
# Examine linkings using `otool -L somelib.so`
# Debug the loading of dynamic libraries using `export DYLD_PRINT_LIBRARIES=1`
# STK rawwaves directory
STK_RAWWAVE=$HOME/stk-*/rawwaves
set -e
# STK rawwaves directory
STK_RAWWAVE=$(brew --prefix stk)/share/stk/rawwaves
if [ ! -d "$STK_RAWWAVE" ]; then
STK_RAWWAVE=$(brew --prefix stk)/share/stk/rawwaves
fi
# Place to create ".app" bundle
APP="@CMAKE_BINARY_DIR@/@PROJECT_NAME_UCASE@.app"
@@ -18,28 +16,25 @@ MSG_COLOR='\x1B[1;36m'
COLOR_RESET='\x1B[0m'
echo -e "$MSG_COLOR\n\nCreating App Bundle \"$APP\"...$COLOR_RESET"
# Locate macdeployqt, assume homebrew & Qt5
which macdeployqt > /dev/null 2>&1
if [ $? -ne 0 ]; then
export PATH=$PATH:$(brew --prefix qt)/bin
fi
qtpath="$(dirname "@QT_QMAKE_EXECUTABLE@")"
export PATH="$PATH:$qtpath"
# Remove any old .app bundles
rm -Rf "$APP"
# Copy/overwrite Info.plist
\cp "@CMAKE_BINARY_DIR@/Info.plist" "@CMAKE_INSTALL_PREFIX@/"
command cp "@CMAKE_BINARY_DIR@/Info.plist" "@CMAKE_INSTALL_PREFIX@/"
# Create .app bundle containing contents from CMAKE_INSTALL_PREFIX
mkdir -p "$APP/Contents/MacOS"
mkdir -p "$APP/Contents/Frameworks"
mkdir -p "$APP/Contents/Resources"
mkdir -p "$APP/Contents/share/stk/rawwaves"
cd "@CMAKE_INSTALL_PREFIX@"
cp -R * "$APP/Contents"
cp -R ./* "$APP/Contents"
cp "@CMAKE_SOURCE_DIR@/cmake/apple/"*.icns "$APP/Contents/Resources/"
cp $STK_RAWWAVE/*.raw "$APP/Contents/share/stk/rawwaves" > /dev/null 2>&1
cp "$STK_RAWWAVE"/*.raw "$APP/Contents/share/stk/rawwaves" > /dev/null 2>&1
# Make all libraries writable for macdeployqt
cd "$APP"
find . -type f -print0 | xargs -0 chmod u+w
@@ -48,11 +43,11 @@ lmmsbin="MacOS/@CMAKE_PROJECT_NAME@"
zynlib="lib/lmms/libzynaddsubfx.so"
zynfmk="Frameworks/libZynAddSubFxCore.dylib"
zynbin="MacOS/RemoteZynAddSubFx"
# Move lmms binary
mv "$APP/Contents/bin/@CMAKE_PROJECT_NAME@" "$APP/Contents/$lmmsbin"
# Fix zyn linking
# Fix zyn linking
mv "$APP/Contents/lib/lmms/RemoteZynAddSubFx" "$APP/Contents/$zynbin"
mv "$APP/Contents/lib/lmms/libZynAddSubFxCore.dylib" "$APP/Contents/$zynfmk"
@@ -78,13 +73,13 @@ install_name_tool -change @rpath/libcarlabase.dylib \
# Link lmms binary
_executables="${_executables} -executable=$APP/Contents/$zynbin"
_executables="${_executables} -executable=$APP/Contents/$zynfmk"
# Build a list of shared objects in target/lib/lmms
for file in "$APP/Contents/lib/lmms/"*.so; do
_thisfile="$APP/Contents/lib/lmms/${file##*/}"
_executables="${_executables} -executable=$_thisfile"
done
# Build a list of shared objects in target/lib/lmms/ladspa
for file in "$APP/Contents/lib/lmms/ladspa/"*.so; do
_thisfile="$APP/Contents/lib/lmms/ladspa/${file##*/}"
@@ -92,6 +87,7 @@ for file in "$APP/Contents/lib/lmms/ladspa/"*.so; do
done
# Finalize .app
# shellcheck disable=SC2086
macdeployqt "$APP" $_executables
# Carla is a standalone plugin. Remove library, look for it side-by-side LMMS.app
@@ -108,6 +104,7 @@ for file in "$APP/Contents/lib/lmms/"libcarla*; do
for lib in $carlalibs; do
_oldpath="../../Frameworks/lib${lib}.dylib"
_newpath="Carla.app/Contents/MacOS/lib${lib}.dylib"
# shellcheck disable=SC2086
install_name_tool -change @loader_path/$_oldpath \
@executable_path/../../../$_newpath \
"$_thisfile"

View File

@@ -1,5 +1,5 @@
{
"title": "@MACOSX_BUNDLE_BUNDLE_NAME@ @MACOSX_BUNDLE_LONG_VERSION_STRING@",
"title": "@MACOSX_BUNDLE_DMG_TITLE@",
"background": "@CMAKE_SOURCE_DIR@/cmake/apple/dmg_branding.png",
"icon-size": 128,
"contents": [

View File

@@ -1,24 +0,0 @@
#!/usr/bin/env bash
# Accomodate both linux windows mingw locations
MINGW=/mingw32
if [ -z "$MSYSCON" ]; then
MINGW=/opt$MINGW
else
CMAKE_OPTS="$CMAKE_OPTS -DLMMS_BUILD_MSYS=1"
fi
export PATH=$MINGW/bin:$PATH
export CFLAGS="-march=pentium3 -mtune=generic -mpreferred-stack-boundary=5 -mfpmath=sse"
export CXXFLAGS="$CFLAGS"
if [ "$1" = "-qt5" ]; then
QT5=True
fi
if [ $QT5 ]; then
CMAKE_OPTS="-DWANT_QT5=$QT5 -DCMAKE_PREFIX_PATH=$MINGW $CMAKE_OPTS"
fi
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cmake $DIR/.. -DCMAKE_TOOLCHAIN_FILE=$DIR/../cmake/modules/Win32Toolchain.cmake -DCMAKE_MODULE_PATH=$DIR/../cmake/modules/ $CMAKE_OPTS

View File

@@ -1,22 +0,0 @@
#!/usr/bin/env bash
# Accomodate both linux windows mingw locations
MINGW=/mingw64
if [ -z "$MSYSCON" ]; then
MINGW=/opt$MINGW
else
CMAKE_OPTS="$CMAKE_OPTS -DLMMS_BUILD_MSYS=1"
fi
export PATH=$MINGW/bin:$PATH
if [ "$1" = "-qt5" ]; then
QT5=True
fi
if [ $QT5 ]; then
CMAKE_OPTS="-DWANT_QT5=$QT5 -DCMAKE_PREFIX_PATH=$MINGW $CMAKE_OPTS"
fi
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cmake $DIR/.. -DCMAKE_TOOLCHAIN_FILE=$DIR/../cmake/modules/Win64Toolchain.cmake -DCMAKE_MODULE_PATH=$DIR/../cmake/modules/ $CMAKE_OPTS

40
cmake/build_win32.sh Executable file
View File

@@ -0,0 +1,40 @@
#!/usr/bin/env bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# Accomodate both linux windows mingw locations
if [ -z "$ARCH" ]; then
ARCH=32
fi
MINGW=/mingw$ARCH
if [ -z "$MSYSCON" ]; then
MINGW=/opt$MINGW
DISTRO=$(lsb_release -si)
DISTRO_VERSION=$(lsb_release -sr)
if [ "$DISTRO" != "Ubuntu" ]; then
echo "This script only supports Ubuntu"
exit 1
fi
if [ "$DISTRO_VERSION" == "14.04" ]; then
TOOLCHAIN="$DIR/toolchains/Ubuntu-MinGW-X-Trusty-$ARCH.cmake"
else
TOOLCHAIN="$DIR/toolchains/Ubuntu-MinGW-W64-$ARCH.cmake"
fi
else
TOOLCHAIN="$DIR/toolchains/MSYS-$ARCH.cmake"
fi
export PATH=$MINGW/bin:$PATH
export CXXFLAGS="$CFLAGS"
if [ "$ARCH" == "32" ]; then
export CFLAGS="-march=pentium3 -mtune=generic -mpreferred-stack-boundary=5 -mfpmath=sse"
fi
CMAKE_OPTS="-DCMAKE_PREFIX_PATH=$MINGW $CMAKE_OPTS"
# shellcheck disable=SC2086
cmake "$DIR/.." -DCMAKE_TOOLCHAIN_FILE="$TOOLCHAIN" $CMAKE_OPTS

3
cmake/build_win64.sh Executable file
View File

@@ -0,0 +1,3 @@
#!/usr/bin/env bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
ARCH=64 "$DIR/build_win32.sh"

View File

@@ -0,0 +1,42 @@
SET(PLUGIN_FILES "")
IF(LMMS_BUILD_WIN32)
INSTALL(FILES $<TARGET_FILE:Qt5::QWindowsIntegrationPlugin> DESTINATION platforms)
ENDIF()
IF(LMMS_BUILD_WIN32 OR LMMS_INSTALL_DEPENDENCIES)
include(InstallTargetDependencies)
# Collect directories to search for DLLs
GET_FILENAME_COMPONENT(QTBIN_DIR "${QT_QMAKE_EXECUTABLE}" PATH)
set(LIB_DIRS "${QTBIN_DIR}")
GET_PROPERTY(PLUGINS_BUILT GLOBAL PROPERTY PLUGINS_BUILT)
IF(LMMS_BUILD_WIN32)
SET(LMMS_DEP_DESTINATION ${BIN_DIR})
SET(PLUGIN_DEP_DESTINATION ${BIN_DIR})
ELSE()
SET(LMMS_DEP_DESTINATION ${LIB_DIR})
SET(PLUGIN_DEP_DESTINATION ${LIB_DIR})
ENDIF()
INSTALL_TARGET_DEPENDENCIES(
NAME "main_binary"
TARGETS lmms
DESTINATION "${LMMS_DEP_DESTINATION}"
LIB_DIRS ${LIB_DIRS}
)
INSTALL_TARGET_DEPENDENCIES(
NAME "plugins"
TARGETS ${PLUGINS_BUILT}
DESTINATION ${PLUGIN_DEP_DESTINATION}
LIB_DIRS ${LIB_DIRS} "${PLUGIN_DIR}" "${PLUGIN_DIR}/optional"
SEARCH_PATHS "${PLUGIN_DIR}" "${PLUGIN_DIR}/optional"
)
ENDIF()
IF(LMMS_BUILD_APPLE)
INSTALL(CODE "EXECUTE_PROCESS(COMMAND chmod u+x ${CMAKE_BINARY_DIR}/install_apple.sh)")
INSTALL(CODE "EXECUTE_PROCESS(COMMAND ${CMAKE_BINARY_DIR}/install_apple.sh)")
ENDIF()

View File

@@ -0,0 +1,23 @@
# List of DLLs considered to be system libraries.
# This is needed when cross-compiling for Windows.
ADVAPI32.dll
COMCTL32.dll
comdlg32.dll
dwmapi.dll
GDI32.dll
IMM32.dll
KERNEL32.dll
MPR.DLL
msvcrt.dll
ole32.dll
OLEAUT32.dll
OPENGL32.DLL
SHELL32.dll
USER32.dll
UxTheme.dll
VERSION.dll
WINMM.DLL
WS2_32.dll
RPCRT4.dll
dsound.dll
SETUPAPI.dll

View File

@@ -14,5 +14,6 @@ ADD_CUSTOM_TARGET(removeappimage
ADD_CUSTOM_TARGET(appimage
COMMAND chmod +x "${CMAKE_BINARY_DIR}/package_linux.sh"
COMMAND "${CMAKE_BINARY_DIR}/package_linux.sh"
COMMENT "Generating AppImage")
COMMENT "Generating AppImage"
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}")
ADD_DEPENDENCIES(appimage removeappimage)

View File

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

View File

@@ -4,9 +4,11 @@ GenericName=Music production suite
GenericName[ca]=Programari de producció musical
GenericName[de]=Software zur Musik-Produktion
GenericName[fr]=Suite de production musicale
GenericName[pl]=Narzędzia do produkcji muzyki
Comment=Music sequencer and synthesizer
Comment[ca]=Producció fàcil de música per a tothom!
Comment[fr]=Séquenceur et synthétiseur de musique
Comment[pl]=Prosta produkcja muzyki dla każdego!
Icon=lmms
Exec=lmms %f
Terminal=false

View File

@@ -16,6 +16,7 @@ DESKTOPFILE="${APPDIR}usr/share/applications/lmms.desktop"
STRIP=""
# Don't strip for Debug|RelWithDebInfo builds
# shellcheck disable=SC2193
if [[ "@CMAKE_BUILD_TYPE@" == *"Deb"* ]]; then
STRIP="-no-strip"
fi
@@ -52,30 +53,32 @@ fi
echo -e "\nWriting verbose output to \"${LOGFILE}\""
# Ensure linuxdeployqt uses the same qmake version as cmake
export PATH="$(pwd -P)/squashfs-root/usr/bin:$(dirname "@QT_QMAKE_EXECUTABLE@")":$PATH
PATH="$(pwd -P)/squashfs-root/usr/bin:$(dirname "@QT_QMAKE_EXECUTABLE@")":$PATH
export PATH
# Fetch portable linuxdeployqt if cache is older than $DAYSOLD
# Fetch portable linuxdeployqt if not in PATH
APPIMAGETOOL="squashfs-root/usr/bin/appimagetool"
echo -e "\nDownloading linuxdeployqt to ${LINUXDEPLOYQT}..."
mkdir -p "$HOME/bin"
DAYSOLD=2
if env -i which linuxdeployqt > /dev/null 2>&1; then
skipped "System already provides this utility"
elif ! find "$LINUXDEPLOYQT" -mtime -$DAYSOLD 2>/dev/null|grep -q "." > /dev/null 2>&1; then
url="https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-$(uname -p).AppImage"
echo " [.......] Couldn't find linuxdeployqt newer than $DAYSOLD days old"
else
filename="linuxdeployqt-continuous-$(uname -p).AppImage"
url="https://github.com/probonopd/linuxdeployqt/releases/download/continuous/$filename"
down_file="$(pwd)/$filename"
if [ ! -f "$LINUXDEPLOYQT" ]; then
ln -s "$down_file" "$LINUXDEPLOYQT"
fi
echo " [.......] Downloading ($(uname -p)): ${url}"
wget "$url" -O "$LINUXDEPLOYQT" -q || (rm "$LINUXDEPLOYQT" && false)
wget -N -q "$url" || (rm "$filename" && false)
chmod +x "$LINUXDEPLOYQT"
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
# Extract AppImage and replace LINUXDEPLOYQT variable with extracted binary
# to support systems without fuse
# Also, we need to set LD_LIBRARY_PATH, but linuxdepoyqt's AppRun unsets it
# See https://github.com/probonopd/linuxdeployqt/pull/370/
"$LINUXDEPLOYQT" --appimage-extract > /dev/null 2>&1
LINUXDEPLOYQT="squashfs-root/usr/bin/linuxdeployqt"
success "Extracted $APPIMAGETOOL"
else
skipped "$LINUXDEPLOYQT is less than $DAYSOLD days old"
fi
# Make skeleton AppDir
@@ -96,56 +99,39 @@ 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
# 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
# Handle wine linking
if [ -d "@WINE_LIBRARY_FIX@" ]; then
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:@WINE_LIBRARY_FIX@:@WINE_LIBRARY_FIX@wine/
fi
export LD_LIBRARY_PATH="${APPDIR}"usr/lib/lmms/:"${APPDIR}"usr/lib/lmms/optional:"$LD_LIBRARY_PATH"
# Move executables so linuxdeployqt can find them
ZYNLIB="${APPDIR}usr/lib/lmms/RemoteZynAddSubFx"
VSTLIB="${APPDIR}usr/lib/lmms/RemoteVstPlugin.exe.so"
VSTLIB32="${APPDIR}usr/lib/lmms/32/RemoteVstPlugin32.exe.so"
VSTLIB64="${APPDIR}usr/lib/lmms/RemoteVstPlugin64.exe.so"
ZYNBIN="${APPDIR}usr/bin/RemoteZynAddSubFx"
VSTBIN="${APPDIR}usr/bin/RemoteVstPlugin.exe.so"
VSTBIN32="${APPDIR}usr/bin/RemoteVstPlugin32.exe.so"
VSTBIN64="${APPDIR}usr/bin/RemoteVstPlugin64.exe.so"
mv "$ZYNLIB" "$ZYNBIN"
mv "$VSTLIB" "$VSTBIN"
mv "$VSTLIB32" "$VSTBIN32" || true
mv "$VSTLIB64" "$VSTBIN64" || true
# Handle wine linking
if [ -d "@WINE_32_LIBRARY_DIR@" ] && \
ldd "$VSTBIN32" | grep "libwine\.so" | grep "not found"; then
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"@WINE_32_LIBRARY_DIRS@"
fi
if [ -d "@WINE_64_LIBRARY_DIR@" ] && \
ldd "$VSTBIN64" | grep "libwine\.so" | grep "not found"; then
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"@WINE_64_LIBRARY_DIRS@"
fi
# Patch the desktop file
sed -i 's/.*Exec=.*/Exec=lmms.real/' "$DESKTOPFILE"
@@ -156,7 +142,8 @@ for file in "${APPDIR}usr/lib/lmms/"*.so; do
executables="${executables} -executable=$thisfile"
done
executables="${executables} -executable=${ZYNBIN}"
executables="${executables} -executable=${VSTBIN}"
executables="${executables} -executable=${VSTBIN32}"
executables="${executables} -executable=${VSTBIN64}"
executables="${executables} -executable=${APPDIR}usr/lib/lmms/ladspa/imp_1199.so"
executables="${executables} -executable=${APPDIR}usr/lib/lmms/ladspa/imbeq_1197.so"
executables="${executables} -executable=${APPDIR}usr/lib/lmms/ladspa/pitch_scale_1193.so"
@@ -165,19 +152,22 @@ executables="${executables} -executable=${APPDIR}usr/lib/lmms/ladspa/pitch_scale
# Bundle both qt and non-qt dependencies into appimage format
echo -e "\nBundling and relinking system dependencies..."
echo -e ">>>>> linuxdeployqt" > "$LOGFILE"
# shellcheck disable=SC2086
"$LINUXDEPLOYQT" "$DESKTOPFILE" $executables -bundle-non-qt-libs -verbose=$VERBOSITY $STRIP >> "$LOGFILE" 2>&1
success "Bundled and relinked dependencies"
# Link to original location so lmms can find them
ln -sr "$ZYNBIN" "$ZYNLIB"
ln -sr "$VSTBIN" "$VSTLIB"
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

View File

@@ -3,11 +3,13 @@
# description: build LMMS-plugin
# usage: BUILD_PLUGIN(<PLUGIN_NAME> <PLUGIN_SOURCES> MOCFILES <HEADERS_FOR_MOC> EMBEDDED_RESOURCES <LIST_OF_FILES_TO_EMBED> UICFILES <UI_FILES_TO_COMPILE> LINK <SHARED|MODULE>)
INCLUDE(GenQrc)
MACRO(BUILD_PLUGIN PLUGIN_NAME)
CMAKE_PARSE_ARGUMENTS(PLUGIN "" "" "MOCFILES;EMBEDDED_RESOURCES;UICFILES;LINK" ${ARGN})
CMAKE_PARSE_ARGUMENTS(PLUGIN "" "LINK;EXPORT_BASE_NAME" "MOCFILES;EMBEDDED_RESOURCES;UICFILES" ${ARGN})
SET(PLUGIN_SOURCES ${PLUGIN_UNPARSED_ARGUMENTS})
INCLUDE_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_BINARY_DIR}" "${CMAKE_SOURCE_DIR}/include" "${CMAKE_SOURCE_DIR}/src/gui")
INCLUDE_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_BINARY_DIR}" "${CMAKE_SOURCE_DIR}/include")
ADD_DEFINITIONS(-DPLUGIN_NAME=${PLUGIN_NAME})
@@ -25,23 +27,14 @@ MACRO(BUILD_PLUGIN PLUGIN_NAME)
ENDFOREACH()
SET(PLUGIN_EMBEDDED_RESOURCES ${NEW_ARGS})
SET(ER_H "${CMAKE_CURRENT_BINARY_DIR}/embedded_resources.h")
ADD_CUSTOM_COMMAND(OUTPUT ${ER_H}
COMMAND ${BIN2RES}
ARGS ${PLUGIN_EMBEDDED_RESOURCES} > "${ER_H}"
DEPENDS bin2res)
ADD_GEN_QRC(RCC_OUT "${PLUGIN_NAME}.qrc" PREFIX artwork/${PLUGIN_NAME} ${PLUGIN_EMBEDDED_RESOURCES})
ENDIF(ER_LEN)
IF(QT5)
QT5_WRAP_CPP(plugin_MOC_out ${PLUGIN_MOCFILES})
QT5_WRAP_UI(plugin_UIC_out ${PLUGIN_UICFILES})
ELSE()
QT4_WRAP_CPP(plugin_MOC_out ${PLUGIN_MOCFILES})
QT4_WRAP_UI(plugin_UIC_out ${PLUGIN_UICFILES})
ENDIF()
QT5_WRAP_CPP(plugin_MOC_out ${PLUGIN_MOCFILES})
QT5_WRAP_UI(plugin_UIC_out ${PLUGIN_UICFILES})
FOREACH(f ${PLUGIN_SOURCES})
ADD_FILE_DEPENDENCIES(${f} ${ER_H} ${plugin_UIC_out})
ADD_FILE_DEPENDENCIES(${f} ${RCC_OUT} ${plugin_UIC_out})
ENDFOREACH(f)
IF(LMMS_BUILD_APPLE)
@@ -57,20 +50,22 @@ MACRO(BUILD_PLUGIN PLUGIN_NAME)
SET(QT_LIBRARIES "${QT_OVERRIDE_LIBRARIES}")
ENDIF()
IF ("${PLUGIN_LINK}" STREQUAL "SHARED")
ADD_LIBRARY(${PLUGIN_NAME} SHARED ${PLUGIN_SOURCES} ${plugin_MOC_out})
ELSE ()
ADD_LIBRARY(${PLUGIN_NAME} MODULE ${PLUGIN_SOURCES} ${plugin_MOC_out})
ENDIF ()
IF(QT5)
TARGET_LINK_LIBRARIES(${PLUGIN_NAME} Qt5::Widgets Qt5::Xml)
IF (NOT PLUGIN_LINK)
SET(PLUGIN_LINK "MODULE")
ENDIF()
ADD_LIBRARY(${PLUGIN_NAME} ${PLUGIN_LINK} ${PLUGIN_SOURCES} ${plugin_MOC_out} ${RCC_OUT})
TARGET_LINK_LIBRARIES(${PLUGIN_NAME} Qt5::Widgets Qt5::Xml)
IF(LMMS_BUILD_WIN32)
TARGET_LINK_LIBRARIES(${PLUGIN_NAME} lmms)
ENDIF(LMMS_BUILD_WIN32)
INSTALL(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION "${PLUGIN_DIR}")
INSTALL(TARGETS ${PLUGIN_NAME}
LIBRARY DESTINATION "${PLUGIN_DIR}"
RUNTIME DESTINATION "${PLUGIN_DIR}"
)
IF(LMMS_BUILD_APPLE)
IF ("${PLUGIN_LINK}" STREQUAL "SHARED")
@@ -81,10 +76,26 @@ MACRO(BUILD_PLUGIN PLUGIN_NAME)
ADD_DEPENDENCIES(${PLUGIN_NAME} lmms)
ENDIF(LMMS_BUILD_APPLE)
IF(LMMS_BUILD_WIN32)
IF(STRIP)
ADD_CUSTOM_COMMAND(TARGET ${PLUGIN_NAME} POST_BUILD COMMAND ${STRIP} "$<TARGET_FILE:${PLUGIN_NAME}>")
ENDIF()
SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES PREFIX "")
ADD_CUSTOM_COMMAND(TARGET ${PLUGIN_NAME} POST_BUILD COMMAND ${STRIP} "$<TARGET_FILE:${PLUGIN_NAME}>")
ENDIF(LMMS_BUILD_WIN32)
ENDIF()
SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${ER_H} ${plugin_MOC_out}")
SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${RCC_OUT} ${plugin_MOC_out}")
IF(NOT PLUGIN_EXPORT_BASE_NAME)
SET(PLUGIN_EXPORT_BASE_NAME "PLUGIN")
ENDIF()
GENERATE_EXPORT_HEADER(${PLUGIN_NAME}
BASE_NAME ${PLUGIN_EXPORT_BASE_NAME}
)
TARGET_INCLUDE_DIRECTORIES(${PLUGIN_NAME}
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
)
SET_PROPERTY(GLOBAL APPEND PROPERTY PLUGINS_BUILT ${PLUGIN_NAME})
GET_PROPERTY(PLUGINS_BUILT GLOBAL PROPERTY PLUGINS_BUILT)
ENDMACRO(BUILD_PLUGIN)

View File

@@ -0,0 +1,33 @@
macro(CHECK_CXX_PREPROCESSOR VAR DIRECTIVE)
string(RANDOM DEFINED_KEY)
string(RANDOM UNDEFINED_KEY)
set(TMP_FILENAME "${CMAKE_CURRENT_BINARY_DIR}/CxxTmp/src.cpp")
SET(SRC "
#if ${DIRECTIVE}
#error ${DEFINED_KEY}
#else
#error ${UNDEFINED_KEY}
#endif
")
file(WRITE ${TMP_FILENAME} "${SRC}")
try_compile(RESULT_VAR
${CMAKE_CURRENT_BINARY_DIR}
${TMP_FILENAME}
OUTPUT_VARIABLE OUTPUT_VAR
)
if(OUTPUT_VAR MATCHES ${DEFINED_KEY})
set(${VAR} ON)
elseif(OUTPUT_VAR MATCHES ${UNDEFINED_KEY})
set(${VAR} OFF)
else()
message(FATAL_ERROR "Can't determine if \"${DIRECTIVE}\" is true.")
endif()
endmacro()
macro(CHECK_CXX_DEFINE VAR DEFINE)
CHECK_CXX_PREPROCESSOR(${VAR} "defined(${DEFINE})")
endmacro()

View File

@@ -0,0 +1,213 @@
# Utility for validating and, if needed, cloning all submodules
#
# Looks for a .gitmodules in the root project folder
# Loops over all modules looking well-known configure/build scripts
#
# Usage:
# INCLUDE(CheckSubmodules)
#
# Options:
# SET(PLUGIN_LIST "zynaddsubfx;...") # skips submodules for plugins not explicitely listed
#
# Or via command line:
# cmake -PLUGIN_LIST=foo;bar
#
# Copyright (c) 2019, Tres Finocchiaro, <tres.finocchiaro@gmail.com>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
# Files which confirm a successful clone
SET(VALID_CRUMBS "CMakeLists.txt;Makefile;Makefile.in;Makefile.am;configure.ac;configure.py;autogen.sh;.gitignore;LICENSE;Home.md")
OPTION(NO_SHALLOW_CLONE "Disable shallow cloning of submodules" OFF)
# Try and use the specified shallow clone on submodules, if supported
SET(DEPTH_VALUE 100)
# Number of times git commands will retry before failing
SET(MAX_ATTEMPTS 2)
MESSAGE("\nChecking submodules...")
IF(NOT EXISTS "${CMAKE_SOURCE_DIR}/.gitmodules")
MESSAGE("Skipping the check because .gitmodules not detected."
"Please make sure you have all submodules in the source tree!"
)
RETURN()
ENDIF()
FILE(READ "${CMAKE_SOURCE_DIR}/.gitmodules" SUBMODULE_DATA)
# Force English locale
SET(LC_ALL_BACKUP "$ENV{LC_ALL}")
SET(LANG_BACKUP "$ENV{LANG}")
SET(ENV{LC_ALL} "C")
SET(ENV{LANG} "en_US")
# Submodule list pairs, unparsed (WARNING: Assumes alpha-numeric paths)
STRING(REGEX MATCHALL "path = [-0-9A-Za-z/]+" SUBMODULE_LIST_RAW ${SUBMODULE_DATA})
STRING(REGEX MATCHALL "url = [.:%-0-9A-Za-z/]+" SUBMODULE_URL_RAW ${SUBMODULE_DATA})
# Submodule list pairs, parsed
SET(SUBMODULE_LIST "")
SET(SUBMODULE_URL "")
FOREACH(_path ${SUBMODULE_LIST_RAW})
# Parse SUBMODULE_PATH
STRING(REPLACE "path = " "" SUBMODULE_PATH "${_path}")
# Grab index for matching SUBMODULE_URL
LIST(FIND SUBMODULE_LIST_RAW "${_path}" SUBMODULE_INDEX)
LIST(GET SUBMODULE_URL_RAW ${SUBMODULE_INDEX} _url)
# Parse SUBMODULE_URL
STRING(REPLACE "url = " "" SUBMODULE_URL "${_url}")
SET(SKIP false)
# Loop over skipped plugins, add to SKIP_SUBMODULES (e.g. -DPLUGIN_LIST=foo;bar)
IF(${SUBMODULE_PATH} MATCHES "^plugins/")
SET(REMOVE_PLUGIN true)
FOREACH(_plugin ${PLUGIN_LIST})
IF(_plugin STREQUAL "")
CONTINUE()
ENDIF()
IF(${SUBMODULE_PATH} MATCHES "${_plugin}")
SET(REMOVE_PLUGIN false)
ENDIF()
ENDFOREACH()
IF(REMOVE_PLUGIN)
LIST(APPEND SKIP_SUBMODULES "${SUBMODULE_PATH}")
ENDIF()
ENDIF()
# Finally, loop and mark "SKIP" on match
IF(SKIP_SUBMODULES)
FOREACH(_skip ${SKIP_SUBMODULES})
IF("${SUBMODULE_PATH}" MATCHES "${_skip}")
MESSAGE("-- Skipping ${SUBMODULE_PATH} matches \"${_skip}\" (absent in PLUGIN_LIST)")
SET(SKIP true)
BREAK()
ENDIF()
ENDFOREACH()
ENDIF()
IF(NOT SKIP)
LIST(APPEND SUBMODULE_LIST "${SUBMODULE_PATH}")
LIST(APPEND SUBMODULE_URL "${SUBMODULE_URL}")
ENDIF()
ENDFOREACH()
# Once called, status is stored in GIT_RESULT respectively.
# Note: Git likes to write to stderr. Don't assume stderr is error; Check GIT_RESULT instead.
MACRO(GIT_SUBMODULE SUBMODULE_PATH FORCE_DEINIT FORCE_REMOTE NO_DEPTH)
FIND_PACKAGE(Git REQUIRED)
# Handle missing commits
SET(FORCE_REMOTE_FLAG "${FORCE_REMOTE}")
SET(NO_DEPTH_FLAG "${NO_DEPTH}")
IF(FORCE_REMOTE_FLAG)
MESSAGE("-- Adding remote submodulefix to ${SUBMODULE_PATH}")
EXECUTE_PROCESS(
COMMAND "${GIT_EXECUTABLE}" remote rm submodulefix
COMMAND "${GIT_EXECUTABLE}" remote add submodulefix ${FORCE_REMOTE}
COMMAND "${GIT_EXECUTABLE}" fetch submodulefix
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/${SUBMODULE_PATH}"
OUTPUT_QUIET ERROR_QUIET
)
# Recurse
GIT_SUBMODULE(${SUBMODULE_PATH} false false ${NO_DEPTH_FLAG})
ELSEIF(${FORCE_DEINIT})
MESSAGE("-- Resetting ${SUBMODULE_PATH}")
EXECUTE_PROCESS(
COMMAND "${GIT_EXECUTABLE}" submodule deinit -f "${CMAKE_SOURCE_DIR}/${SUBMODULE_PATH}"
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_QUIET
)
MESSAGE("-- Deleting ${CMAKE_SOURCE_DIR}/.git/${SUBMODULE_PATH}")
FILE(REMOVE_RECURSE "${CMAKE_SOURCE_DIR}/.git/modules/${SUBMODULE_PATH}")
# Recurse without depth
GIT_SUBMODULE(${SUBMODULE_PATH} false false true)
ELSE()
# Try to use the depth switch
IF(NO_SHALLOW_CLONE OR GIT_VERSION_STRING VERSION_LESS "1.8.4" OR NO_DEPTH_FLAG)
# Shallow submodules were introduced in 1.8.4
MESSAGE("-- Fetching ${SUBMODULE_PATH}")
SET(DEPTH_CMD "")
SET(DEPTH_VAL "")
ELSE()
MESSAGE("-- Fetching ${SUBMODULE_PATH} @ --depth ${DEPTH_VALUE}")
SET(DEPTH_CMD "--depth")
SET(DEPTH_VAL "${DEPTH_VALUE}")
ENDIF()
EXECUTE_PROCESS(
COMMAND "${GIT_EXECUTABLE}" submodule update --init --recursive ${DEPTH_CMD} ${DEPTH_VAL} "${CMAKE_SOURCE_DIR}/${SUBMODULE_PATH}"
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
RESULT_VARIABLE GIT_RESULT
OUTPUT_VARIABLE GIT_STDOUT
ERROR_VARIABLE GIT_STDERR
)
SET(GIT_MESSAGE "${GIT_STDOUT}${GIT_STDERR}")
MESSAGE("${GIT_MESSAGE}")
ENDIF()
ENDMACRO()
SET(MISSING_COMMIT_PHRASES "no such remote ref;reference is not a tree;unadvertised object")
SET(RETRY_PHRASES "Failed to recurse;cannot create directory;already exists;${MISSING_COMMIT_PHRASES}")
# Attempt to do lazy clone
FOREACH(_submodule ${SUBMODULE_LIST})
STRING(REPLACE "/" ";" PATH_PARTS "${_submodule}")
LIST(REVERSE PATH_PARTS)
LIST(GET PATH_PARTS 0 SUBMODULE_NAME)
MESSAGE("-- Checking ${SUBMODULE_NAME}...")
SET(CRUMB_FOUND false)
FOREACH(_crumb ${VALID_CRUMBS})
IF(EXISTS "${CMAKE_SOURCE_DIR}/${_submodule}/${_crumb}")
SET(CRUMB_FOUND true)
MESSAGE("-- Found ${_submodule}/${_crumb}")
BREAK()
ENDIF()
ENDFOREACH()
IF(NOT CRUMB_FOUND)
GIT_SUBMODULE("${_submodule}" false false false)
SET(COUNTED 0)
# Handle edge-cases where submodule didn't clone properly or re-uses a non-empty directory
WHILE(NOT GIT_RESULT EQUAL 0 AND COUNTED LESS MAX_ATTEMPTS)
MATH(EXPR COUNTED "${COUNTED}+1")
SET(MISSING_COMMIT false)
FOREACH(_phrase ${MISSING_COMMIT_PHRASES})
IF("${GIT_MESSAGE}" MATCHES "${_phrase}")
SET(MISSING_COMMIT true)
BREAK()
ENDIF()
ENDFOREACH()
FOREACH(_phrase ${RETRY_PHRASES})
IF(${MISSING_COMMIT} AND COUNTED LESS 2)
LIST(FIND SUBMODULE_LIST ${_submodule} SUBMODULE_INDEX)
LIST(GET SUBMODULE_URL_LIST ${SUBMODULE_INDEX} SUBMODULE_URL)
MESSAGE("-- Retrying ${_submodule} using 'remote add submodulefix' (attempt ${COUNTED} of ${MAX_ATTEMPTS})...")
GIT_SUBMODULE("${_submodule}" false "${SUBMODULE_URL}" false)
BREAK()
ELSEIF("${GIT_MESSAGE}" MATCHES "${_phrase}")
MESSAGE("-- Retrying ${_submodule} using 'deinit' (attempt ${COUNTED} of ${MAX_ATTEMPTS})...")
GIT_SUBMODULE("${_submodule}" true false false)
BREAK()
ENDIF()
ENDFOREACH()
ENDWHILE()
IF(NOT GIT_RESULT EQUAL 0)
MESSAGE(FATAL_ERROR "${GIT_EXECUTABLE} exited with status of ${GIT_RESULT}")
ENDIF()
ENDIF()
ENDFOREACH()
MESSAGE("-- Done validating submodules.\n")
# Reset locale
SET(ENV{LC_ALL} "${LC_ALL_BACKUP}")
SET(ENV{LANG} "${LANG_BACKUP}")

View File

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

View File

@@ -0,0 +1,25 @@
option(USE_COMPILE_CACHE "Use ccache or clcache for compilation" OFF)
# Compatibility for old option name
if(USE_CCACHE)
set(USE_COMPILE_CACHE ON)
endif()
if(USE_COMPILE_CACHE)
if(MSVC)
set(CACHE_TOOL_NAME clcache)
elseif(CMAKE_CXX_COMPILER_ID MATCHES "(GNU|AppleClang|Clang)")
set(CACHE_TOOL_NAME ccache)
else()
message(WARNING "Compile cache only available with MSVC or GNU")
endif()
find_program(CACHE_TOOL ${CACHE_TOOL_NAME})
if (CACHE_TOOL)
message(STATUS "Using ${CACHE_TOOL} found for caching")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CACHE_TOOL})
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CACHE_TOOL})
else()
message(WARNING "USE_COMPILE_CACHE enabled, but no ${CACHE_TOOL_NAME} found")
endif()
endif()

View File

@@ -0,0 +1,21 @@
function(CreateTempFilePath)
set(options CONFIG_SUFFIX)
set(oneValueArgs OUTPUT_VAR TAG)
set(multiValueArgs CONTENT)
cmake_parse_arguments(TEMP "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN} )
# Use hash to create a unique identifier
# for this file.
string(SHA1 hashed_content "${TEMP_CONTENT}")
set(file_name "${CMAKE_BINARY_DIR}/${TEMP_TAG}_${hashed_content}")
set(${TEMP_OUTPUT_VAR} "${file_name}" PARENT_SCOPE)
if(CONFIG_SUFFIX)
set(file_name "${file_name}_$<CONFIG>")
endif()
file(GENERATE OUTPUT "${file_name}"
CONTENT "${TEMP_CONTENT}")
endfunction()

View File

@@ -0,0 +1,31 @@
# This functions forwards a variable to
# the install stage.
# Parameters:
# CONTENT: Variable content.
# NAME: Variable name.
# Options:
# GENERATOR_EXPRESSION: Support generator expression for CONTENT.
function(DEFINE_INSTALL_VAR)
set(options GENERATOR_EXPRESSION)
set(oneValueArgs NAME )
set(multiValueArgs CONTENT)
cmake_parse_arguments(VAR "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN} )
# install(CODE) does not support generator expression in ver<3.14
if(VAR_GENERATOR_EXPRESSION AND ${CMAKE_VERSION} VERSION_LESS "3.14.0")
include(CreateTempFile)
if(CMAKE_CONFIGURATION_TYPES) # in case of multi-config generators like MSVC generators
CreateTempFilePath(OUTPUT_VAR file_path TAG "${VAR_NAME}" CONTENT "${VAR_CONTENT}" CONFIG_SUFFIX)
install(CODE "file(READ \"${file_path}_\${CMAKE_INSTALL_CONFIG_NAME}\" \"${VAR_NAME}\")")
else()
CreateTempFilePath(OUTPUT_VAR file_path TAG "${VAR_NAME}" CONTENT "${VAR_CONTENT}")
install(CODE "file(READ \"${file_path}\" \"${VAR_NAME}\")")
endif()
else()
if(VAR_GENERATOR_EXPRESSION)
cmake_policy(SET CMP0087 NEW)
endif()
install(CODE "set(\"${VAR_NAME}\" \"${VAR_CONTENT}\")")
endif()
endfunction()

View File

@@ -12,12 +12,19 @@ ELSE()
SET(LMMS_BUILD_LINUX 1)
ENDIF(WIN32)
# See build_mingwXX.sh for LMMS_BUILD_MSYS
# LMMS_BUILD_MSYS also set in build_winXX.sh
IF(LMMS_BUILD_WIN32 AND CMAKE_COMPILER_IS_GNUCXX AND DEFINED ENV{MSYSCON})
SET(LMMS_BUILD_MSYS TRUE)
ENDIF()
MESSAGE("PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
SET(LMMS_HOST_X86 FALSE)
SET(LMMS_HOST_X86_64 FALSE)
IF(NOT DEFINED WIN64 AND CMAKE_SIZEOF_VOID_P EQUAL 8)
SET(WIN64 ON)
ENDIF()
IF(WIN32)
IF(WIN64)
SET(IS_X86_64 TRUE)
@@ -25,6 +32,25 @@ IF(WIN32)
ELSE(WIN64)
SET(IS_X86 TRUE)
ENDIF(WIN64)
if(MSVC)
SET(MSVC_VER ${CMAKE_CXX_COMPILER_VERSION})
IF(MSVC_VER VERSION_GREATER 19.20 OR MSVC_VER VERSION_EQUAL 19.20)
SET(LMMS_MSVC_GENERATOR "Visual Studio 16 2019")
SET(LMMS_MSVC_YEAR 2019) # Qt only provides binaries for MSVC 2017, but 2019 is binary compatible
ELSEIF(MSVC_VER VERSION_GREATER 19.10 OR MSVC_VER VERSION_EQUAL 19.10)
SET(LMMS_MSVC_GENERATOR "Visual Studio 15 2017")
SET(LMMS_MSVC_YEAR 2017)
ELSEIF(MSVC_VER VERSION_GREATER 19.0 OR MSVC_VER VERSION_EQUAL 19.0)
SET(LMMS_MSVC_GENERATOR "Visual Studio 14 2015")
SET(LMMS_MSVC_YEAR 2015)
ELSE()
MESSAGE(SEND_WARNING "Can't detect MSVC version: ${MSVC_VER}")
ENDIF()
unset(MSVC_VER)
endif()
ELSE(WIN32)
EXEC_PROGRAM( ${CMAKE_C_COMPILER} ARGS "-dumpmachine ${CMAKE_C_FLAGS}" OUTPUT_VARIABLE Machine )
MESSAGE("Machine: ${Machine}")

View File

@@ -0,0 +1,47 @@
# FindFFTW.cmake - Try to find FFTW3
# Copyright (c) 2018 Lukas W <lukaswhl/at/gmail.com>
# This file is MIT licensed.
# See http://opensource.org/licenses/MIT
# Try pkgconfig for hints
find_package(PkgConfig QUIET)
if(NOT FFTW_FIND_COMPONENTS)
set(FFTW_FIND_COMPONENTS fftw3f fftw3 fftwl)
endif()
if(PKG_CONFIG_FOUND)
pkg_check_modules(FFTW_PKG QUIET fftw>=3.0.0)
pkg_check_modules(FFTW3_PKG QUIET fftw3>=3.0.0)
endif()
find_path(FFTW_INCLUDE_DIR
NAMES fftw3.h
PATHS ${FFTW_PKG_INCLUDE_DIRS} ${FFTW3_PKG_INCLUDE_DIRS}
)
set(check_list)
foreach(comp ${FFTW_FIND_COMPONENTS})
string(TOUPPER ${comp} COMP)
if(PKG_CONFIG_FOUND)
pkg_check_modules(${COMP}_PKG QUIET ${comp}>=3.0.0)
endif()
find_library(${COMP}_LIBRARY
NAMES ${comp}
PATHS ${comp}_PKG_LIBRARY_DIRS
)
list(APPEND check_list ${COMP}_LIBRARY)
set(${COMP}_LIBRARIES ${${COMP}_LIBRARY} CACHE FILEPATH "${COMP} library path")
set(${COMP}_INCLUDE_DIRS ${FFTW_INCLUDE_DIR} CACHE PATH "${COMP} include path")
mark_as_advanced(${COMP}_LIBRARIES ${COMP}_INCLUDE_DIRS)
endforeach()
find_package(PackageHandleStandardArgs)
find_package_handle_standard_args(FFTW DEFAULT_MSG FFTW_INCLUDE_DIR ${check_list})
set(FFTW_INCLUDE_DIRS ${FFTW_INCLUDE_DIR})
mark_as_advanced(FFTW_LIBRARY FFTW_LIBRARIES FFTW_INCLUDE_DIR FFTW_INCLUDE_DIRS ${check_list})

View File

@@ -0,0 +1,173 @@
# This module defines
# SDL2_LIBRARY, the name of the library to link against
# SDL2_FOUND, if false, do not try to link to SDL2
# SDL2_INCLUDE_DIR, where to find SDL.h
#
# This module responds to the the flag:
# SDL2_BUILDING_LIBRARY
# If this is defined, then no SDL2main will be linked in because
# only applications need main().
# Otherwise, it is assumed you are building an application and this
# module will attempt to locate and set the the proper link flags
# as part of the returned SDL2_LIBRARY variable.
#
# Don't forget to include SDLmain.h and SDLmain.m your project for the
# OS X framework based version. (Other versions link to -lSDL2main which
# this module will try to find on your behalf.) Also for OS X, this
# module will automatically add the -framework Cocoa on your behalf.
#
#
# Additional Note: If you see an empty SDL2_LIBRARY_TEMP in your configuration
# and no SDL2_LIBRARY, it means CMake did not find your SDL2 library
# (SDL2.dll, libsdl2.so, SDL2.framework, etc).
# Set SDL2_LIBRARY_TEMP to point to your SDL2 library, and configure again.
# Similarly, if you see an empty SDL2MAIN_LIBRARY, you should set this value
# as appropriate. These values are used to generate the final SDL2_LIBRARY
# variable, but when these values are unset, SDL2_LIBRARY does not get created.
#
#
# $SDL2DIR is an environment variable that would
# correspond to the ./configure --prefix=$SDL2DIR
# used in building SDL2.
# l.e.galup 9-20-02
#
# Modified by Eric Wing.
# Added code to assist with automated building by using environmental variables
# and providing a more controlled/consistent search behavior.
# Added new modifications to recognize OS X frameworks and
# additional Unix paths (FreeBSD, etc).
# Also corrected the header search path to follow "proper" SDL guidelines.
# Added a search for SDL2main which is needed by some platforms.
# Added a search for threads which is needed by some platforms.
# Added needed compile switches for MinGW.
#
# On OSX, this will prefer the Framework version (if found) over others.
# People will have to manually change the cache values of
# SDL2_LIBRARY to override this selection or set the CMake environment
# CMAKE_INCLUDE_PATH to modify the search paths.
#
# Note that the header path has changed from SDL2/SDL.h to just SDL.h
# This needed to change because "proper" SDL convention
# is #include "SDL.h", not <SDL2/SDL.h>. This is done for portability
# reasons because not all systems place things in SDL2/ (see FreeBSD).
#=============================================================================
# Copyright 2003-2009 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file COPYING-CMAKE-SCRIPTS for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
# message("<FindSDL2.cmake>")
SET(SDL2_SEARCH_PATHS
~/Library/Frameworks
/Library/Frameworks
/usr/local
/usr
/sw # Fink
/opt/local # DarwinPorts
/opt/csw # Blastwave
/opt
${SDL2_PATH}
)
FIND_PATH(SDL2_INCLUDE_DIR SDL.h
HINTS
$ENV{SDL2DIR}
PATH_SUFFIXES SDL2 include/SDL2 include
PATHS ${SDL2_SEARCH_PATHS}
)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(PATH_SUFFIXES lib64 lib/x64 lib)
else()
set(PATH_SUFFIXES lib/x86 lib)
endif()
FIND_LIBRARY(SDL2_LIBRARY_TEMP
NAMES SDL2
HINTS
$ENV{SDL2DIR}
PATH_SUFFIXES ${PATH_SUFFIXES}
PATHS ${SDL2_SEARCH_PATHS}
)
IF(NOT SDL2_BUILDING_LIBRARY)
IF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework")
# Non-OS X framework versions expect you to also dynamically link to
# SDL2main. This is mainly for Windows and OS X. Other (Unix) platforms
# seem to provide SDL2main for compatibility even though they don't
# necessarily need it.
FIND_LIBRARY(SDL2MAIN_LIBRARY
NAMES SDL2main
HINTS
$ENV{SDL2DIR}
PATH_SUFFIXES ${PATH_SUFFIXES}
PATHS ${SDL2_SEARCH_PATHS}
)
ENDIF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework")
ENDIF(NOT SDL2_BUILDING_LIBRARY)
# SDL2 may require threads on your system.
# The Apple build may not need an explicit flag because one of the
# frameworks may already provide it.
# But for non-OSX systems, I will use the CMake Threads package.
IF(NOT APPLE)
FIND_PACKAGE(Threads)
ENDIF(NOT APPLE)
# MinGW needs an additional link flag, -mwindows
# It's total link flags should look like -lmingw32 -lSDL2main -lSDL2 -mwindows
IF(MINGW)
SET(MINGW32_LIBRARY mingw32 "-mwindows" CACHE STRING "mwindows for MinGW")
ENDIF(MINGW)
IF(SDL2_LIBRARY_TEMP)
# For SDL2main
IF(NOT SDL2_BUILDING_LIBRARY)
IF(SDL2MAIN_LIBRARY)
SET(SDL2_LIBRARY_TEMP ${SDL2MAIN_LIBRARY} ${SDL2_LIBRARY_TEMP})
ENDIF(SDL2MAIN_LIBRARY)
ENDIF(NOT SDL2_BUILDING_LIBRARY)
# For OS X, SDL2 uses Cocoa as a backend so it must link to Cocoa.
# CMake doesn't display the -framework Cocoa string in the UI even
# though it actually is there if I modify a pre-used variable.
# I think it has something to do with the CACHE STRING.
# So I use a temporary variable until the end so I can set the
# "real" variable in one-shot.
IF(APPLE)
SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} "-framework Cocoa")
ENDIF(APPLE)
# For threads, as mentioned Apple doesn't need this.
# In fact, there seems to be a problem if I used the Threads package
# and try using this line, so I'm just skipping it entirely for OS X.
IF(NOT APPLE)
SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT})
ENDIF(NOT APPLE)
# For MinGW library
IF(MINGW)
SET(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP})
ENDIF(MINGW)
# Set the final string here so the GUI reflects the final state.
SET(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL2 Library can be found")
# Set the temp variable to INTERNAL so it is not seen in the CMake GUI
SET(SDL2_LIBRARY_TEMP "${SDL2_LIBRARY_TEMP}" CACHE INTERNAL "")
ENDIF(SDL2_LIBRARY_TEMP)
# message("</FindSDL2.cmake>")
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR)

View File

@@ -0,0 +1,34 @@
# FindFFTW.cmake - Try to find FFTW3
# Copyright (c) 2018 Lukas W <lukaswhl/at/gmail.com>
# This file is MIT licensed.
# See http://opensource.org/licenses/MIT
find_package(PkgConfig QUIET)
if(PKG_CONFIG_FOUND)
pkg_check_modules(SAMPLERATE_PKG samplerate)
endif()
find_path(SAMPLERATE_INCLUDE_DIR
NAMES samplerate.h
PATHS ${SAMPLERATE_PKG_INCLUDE_DIRS}
)
set(SAMPLERATE_NAMES samplerate libsamplerate)
if(Samplerate_FIND_VERSION_MAJOR)
list(APPEND SAMPLERATE_NAMES libsamplerate-${Samplerate_FIND_VERSION_MAJOR})
else()
list(APPEND SAMPLERATE_NAMES libsamplerate-0)
endif()
find_library(SAMPLERATE_LIBRARY
NAMES ${SAMPLERATE_NAMES}
PATHS ${SAMPLERATE_PKG_LIBRARY_DIRS}
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(SAMPLERATE DEFAULT_MSG SAMPLERATE_LIBRARY SAMPLERATE_INCLUDE_DIR)
mark_as_advanced(SAMPLERATE_INCLUDE_DIR SAMPLERATE_LIBRARY )
set(SAMPLERATE_LIBRARIES ${SAMPLERATE_LIBRARY} )
set(SAMPLERATE_INCLUDE_DIRS ${SAMPLERATE_INCLUDE_DIR})

View File

@@ -0,0 +1,39 @@
# FindSndFile.cmake - Try to find libsndfile
# Copyright (c) 2018 Lukas W <lukaswhl/at/gmail.com>
# This file is MIT licensed.
# See http://opensource.org/licenses/MIT
# Try pkgconfig for hints
find_package(PkgConfig QUIET)
if(PKG_CONFIG_FOUND)
pkg_check_modules(SNDFILE_PKG sndfile)
endif(PKG_CONFIG_FOUND)
set(SndFile_DEFINITIONS ${SNDFILE_PKG_CFLAGS_OTHER})
if(WIN32)
# Try Vcpkg
find_package(LibSndFile ${SndFile_FIND_VERSION} CONFIG QUIET)
if(LibSndFile_FOUND)
get_target_property(LibSndFile_Location sndfile-shared LOCATION)
get_target_property(LibSndFile_Include_Path sndfile-shared INTERFACE_INCLUDE_DIRECTORIES)
get_filename_component(LibSndFile_Path LibSndFile_Location PATH)
endif()
endif()
find_path(SNDFILE_INCLUDE_DIR
NAMES sndfile.h
PATHS ${SNDFILE_PKG_INCLUDE_DIRS} ${LibSndFile_Include_Path}
)
find_library(SNDFILE_LIBRARY
NAMES sndfile libsndfile libsndfile-1
PATHS ${SNDFILE_PKG_LIBRARY_DIRS} ${LibSndFile_Path}
)
find_package(PackageHandleStandardArgs)
find_package_handle_standard_args(SndFile DEFAULT_MSG SNDFILE_LIBRARY SNDFILE_INCLUDE_DIR)
set(SNDFILE_LIBRARIES ${SNDFILE_LIBRARY})
set(SNDFILE_INCLUDE_DIRS ${SNDFILE_INCLUDE_DIR})
mark_as_advanced(SNDFILE_LIBRARY SNDFILE_LIBRARIES SNDFILE_INCLUDE_DIR SNDFILE_INCLUDE_DIRS)

View File

@@ -29,6 +29,6 @@ find_package_handle_standard_args(SNDIO DEFAULT_MSG SNDIO_LIBRARY SNDIO_INCLUDE_
if(SNDIO_FOUND)
set(SNDIO_INCLUDE_DIRS "${SNDIO_INCLUDE_DIR}")
set(SNDIO_LIBRARIES "${SNDIO_LIBRARY}")
endif(HAVE_SNDIO)
endif()
mark_as_advanced(SNDIO_INCLUDE_DIR SNDIO_LIBRARY SNDIO_INCLUDE_DIRS SNDIO_LIBRARIES)

View File

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

View File

@@ -0,0 +1,48 @@
# GenQrc.cmake - Copyright (c) 2015 Lukas W <lukaswhl/at/gmail.com>
# Generates a simple qrc file containing the given resource files ${ARGN}:
# GEN_QRC(resources.qrc artwork.png icon.png PREFIX /icons)
# Files may also be added using a pattern with the GLOB keyword, e.g.:
# GEN_QRC(resources.qrc GLOB *.png)
FUNCTION(GEN_QRC OUT_FILE)
CMAKE_PARSE_ARGUMENTS(RC "" "PREFIX;GLOB" "" ${ARGN})
IF(DEFINED RC_GLOB)
FILE(GLOB GLOB_FILES ${RC_GLOB})
ENDIF()
# Set the standard prefix to "/" if none is given
IF(NOT DEFINED RC_PREFIX)
SET(RC_PREFIX "/")
ENDIF()
# We need to convert our list to a string in order to pass it to the script
# on the command line.
STRING(REPLACE ";" "\;" FILES "${RC_UNPARSED_ARGUMENTS};${GLOB_FILES}")
SET(GENQRC_SCRIPT "${CMAKE_SOURCE_DIR}/cmake/scripts/GenQrc.cmake")
ADD_CUSTOM_COMMAND(
OUTPUT ${OUT_FILE}
COMMAND ${CMAKE_COMMAND} -D OUT_FILE=${OUT_FILE} -D RC_PREFIX=${RC_PREFIX} -D FILES:list=${FILES} -D DIR=${CMAKE_CURRENT_SOURCE_DIR} -P "${GENQRC_SCRIPT}"
DEPENDS ${GENQRC_SCRIPT}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
VERBATIM
)
ENDFUNCTION()
# Generates a qrc file named ${QRC_OUT} from ${ARGN}, rccs it and returns Qt's
# output file.
# Must only be run once per CMakeLists.txt.
# Usage example:
# ADD_GEN_QRC(RCC_OUTPUT resources.qrc icon.png manual.pdf)
# ADD_EXECUTABLE(myexe main.cpp ${RCC_OUTPUT})
MACRO(ADD_GEN_QRC RCCOUT QRC_OUT)
IF(NOT IS_ABSOLUTE ${QRC_OUT})
SET(QRC_FILE "${CMAKE_CURRENT_BINARY_DIR}/${QRC_OUT}")
ELSE()
SET(QRC_FILE ${QRC_OUT})
ENDIF()
GEN_QRC(${QRC_FILE} "${ARGN}")
QT5_ADD_RESOURCES(${RCCOUT} ${QRC_FILE})
ENDMACRO()

View File

@@ -0,0 +1,184 @@
include(GetPrerequisites)
include(CMakeParseArguments)
CMAKE_POLICY(SET CMP0011 NEW)
CMAKE_POLICY(SET CMP0057 NEW)
function(make_absolute var)
get_filename_component(abs "${${var}}" ABSOLUTE BASE_DIR "${CMAKE_INSTALL_PREFIX}")
set(${var} ${abs} PARENT_SCOPE)
endfunction()
# Reads lines of a file into a list, skipping '#' comment lines
function(READ_LIST_FILE FILE VAR)
file(STRINGS "${FILE}" list)
set(result "")
foreach(item ${list})
string(STRIP "${item}" item)
if(item STREQUAL "" OR item MATCHES "^\#")
continue()
endif()
list(APPEND result "${item}")
endforeach()
set(${VAR} ${result} PARENT_SCOPE)
endfunction()
function(make_all_absolute list_var)
set(result "")
foreach(file ${${list_var}})
make_absolute(file)
list(APPEND result ${file})
endforeach()
set(${list_var} ${result} PARENT_SCOPE)
endfunction()
if(CMAKE_BINARY_DIR)
set(tmp_lib_dir "${CMAKE_BINARY_DIR}/bundled-libraries")
elseif(CMAKE_HOST_UNIX)
set(tmp_lib_dir "/tmp/bundled-libraries")
elseif(DEFINED ENV{TEMP})
set(tmp_lib_dir "$ENV{TMP}/bundled-libraries")
else()
message(FATAL_ERROR "Can't find a temp dir for libraries")
endif()
# Like file(INSTALL), but resolves symlinks
function(install_file_resolved file destination)
get_filename_component(file_name "${file}" NAME)
if(IS_SYMLINK "${file}")
get_filename_component(real_path "${file}" REALPATH)
get_filename_component(real_name "${real_path}" NAME)
file(COPY "${real_path}" DESTINATION "${tmp_lib_dir}")
file(RENAME "${tmp_lib_dir}/${real_name}" "${tmp_lib_dir}/${file_name}")
set(file_path "${tmp_lib_dir}/${file_name}")
else()
set(file_path "${file}")
endif()
file(INSTALL "${file_path}" DESTINATION "${destination}")
endfunction()
function(install_resolved)
cmake_parse_arguments("" "" "DESTINATION" "FILES" ${ARGN})
foreach(file ${_FILES})
install_file_resolved("${file}" "${_DESTINATION}")
endforeach()
endfunction()
if(CMAKE_CROSSCOMPILING)
# If we're cross-compiling, GetPrerequisites may not be able to find system libraries such as kernel32.dll because
# they're supplied by the toolchain. To suppress thousands of lines of warnings being printed to the console, we
# override gp_resolved_file_type to return "system" for any library in ${IGNORE_LIBS} without trying to resolve the
# file first.
# GetPrerequisites supports using an override function called gp_resolved_file_type_override, but it's not suited
# for our purpose because it's only called by gp_resolved_file_type *after* trying to resolve the file.
function(gp_resolved_file_type original_file file exepath dirs type_var)
set(file_find "${file}")
if(_IGNORE_CASE)
# On case-insensitive systems, convert to upper characters to respect it
string(TOUPPER "${file_find}" file_find)
endif()
SET(IGNORE_LIBS ${_IGNORE_LIBS} CACHE INTERNAL "Ignored library names" FORCE)
if(IGNORE_LIBS AND ${file_find} IN_LIST IGNORE_LIBS)
set(${type_var} system PARENT_SCOPE)
else()
#_gp_resolved_file_type(${ARGV})
_gp_resolved_file_type("${original_file}" "${file}" "${exepath}" "${dirs}" "${type_var}" ${ARGN})
endif()
endfunction()
endif()
function(INSTALL_DEPENDENCIES)
cmake_parse_arguments("" "INCLUDE_SYSTEM;IGNORE_CASE" "GP_TOOL;DESTINATION;IGNORE_LIBS_FILE" "FILES;LIB_DIRS;SEARCH_PATHS;IGNORE_LIBS" ${ARGN})
# Make paths absolute
make_absolute(_DESTINATION)
make_all_absolute(_FILES)
make_all_absolute(_LIB_DIRS)
make_all_absolute(_SEARCH_PATHS)
if(_INCLUDE_SYSTEM)
set(EXCLUDE_SYSTEM 0)
else()
set(EXCLUDE_SYSTEM 1)
endif()
if(_IGNORE_LIBS_FILE)
READ_LIST_FILE("${_IGNORE_LIBS_FILE}" _IGNORE_LIBS)
if(_IGNORE_CASE)
# On case-insensitive systems, convert to upper characters to respect it
string(TOUPPER "${_IGNORE_LIBS}" _IGNORE_LIBS)
endif()
SET(IGNORE_LIBS ${_IGNORE_LIBS} CACHE INTERNAL "Ignored library names" FORCE)
endif()
if(_GP_TOOL)
set(gp_tool "${_GP_TOOL}")
endif()
set(prereqs "")
foreach(file ${_FILES})
get_filename_component(file_name "${file}" NAME)
message("-- Finding prerequisites of ${file_name}")
find_prerequisites("${file}" _prereqs
${EXCLUDE_SYSTEM} # exclude system files
1 # recurse
""
"${_LIB_DIRS}"
"${_SEARCH_PATHS}"
"${_IGNORE_LIBS}"
)
list(APPEND prereqs ${_prereqs})
endforeach()
list(REMOVE_DUPLICATES prereqs)
foreach(prereq ${prereqs})
get_filename_component(prereq_name "${prereq}" NAME)
foreach(rpath ${_SEARCH_PATHS})
if(EXISTS "${rpath}/${prereq_name}")
list(REMOVE_ITEM prereqs "${prereq}")
break()
endif()
endforeach()
endforeach()
#file(INSTALL ${prereqs} DESTINATION ${_DESTINATION})
install_resolved(FILES ${prereqs} DESTINATION "${_DESTINATION}")
endfunction()
# Like get_prerequisites, but returns full paths
function(FIND_PREREQUISITES target RESULT_VAR exclude_system recurse
exepath dirs rpaths)
set(RESULTS)
get_prerequisites("${target}" _prereqs ${exclude_system} ${recurse}
"" "${dirs}" "${rpaths}")
foreach(prereq ${_prereqs})
get_filename_component(prereq_name "${prereq}" NAME)
if(_IGNORE_CASE)
# Windows is case insensitive.
# Use upper characters to respect it.
string(TOUPPER "${prereq_name}" prereq_name)
endif()
if("${prereq_name}" IN_LIST IGNORE_LIBS)
continue()
endif()
gp_resolve_item("${LIB_DLL}" "${prereq}" "" "${dirs}" RESOLVED_PREREQ "${rpaths}")
if(RESOLVED_PREREQ AND IS_ABSOLUTE ${RESOLVED_PREREQ} AND EXISTS ${RESOLVED_PREREQ})
list(APPEND RESULTS ${RESOLVED_PREREQ})
else()
message(FATAL_ERROR "Can't resolve dependency ${prereq}.")
endif()
endforeach()
set(${RESULT_VAR} ${RESULTS} PARENT_SCOPE)
endfunction()

View File

@@ -0,0 +1,90 @@
include(DefineInstallVar)
SET(DEFAULT_SEARCH_DIRECTORIES "${BIN_DIR}" "${LIB_DIR}" "${CMAKE_FIND_ROOT_PATH}" "${CMAKE_PREFIX_PATH}")
SET(DEFAULT_SEARCH_SUFFIXES "bin" "lib" "../bin")
# Like INSTALL_DEPENDENCIES but can be called from regular cmake code
# (instead of install(CODE)), takes targets instead of files,
# takes care of configuring search paths, and other platform-specific tweaks.
# Arguments:
# TARGETS: list of cmake targets to install.
# NAME: unique string for this install.
# DESTINATION: directory path to install the binaries to.
# LIB_DIRS: list of paths for looking up dependencies.
# LIB_DIRS_SUFFIXES: list of possible suffixes for LIB_DIRS entries.
# SEARCH_PATHS: list of library search paths on runtime
# NO_DEFAULT_PATHS: supply this value to avoid adding DEFAULT_SEARCH_DIRECTORIES
# to LIB_DIRS and DEFAULT_SEARCH_SUFFIXES to LIB_DIRS_SUFFIXES.
FUNCTION(INSTALL_TARGET_DEPENDENCIES)
set(options NO_DEFAULT_PATHS)
set(oneValueArgs NAME)
set(multiValueArgs TARGETS DESTINATION LIB_DIRS_SUFFIXES LIB_DIRS SEARCH_PATHS)
cmake_parse_arguments(DEPS "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN} )
if(NOT DEPS_LIB_DIRS)
set(DEPS_LIB_DIRS "")
endif()
# Set default values.
if(NOT DEPS_NO_DEFAULT_PATHS)
list(APPEND DEPS_LIB_DIRS ${DEFAULT_SEARCH_DIRECTORIES})
set(DEPS_LIB_DIRS_SUFFIXES "${DEPS_LIB_DIRS_SUFFIXES}" ${DEFAULT_SEARCH_SUFFIXES})
endif()
FOREACH(TARGET ${DEPS_TARGETS})
IF(NOT TARGET ${TARGET})
message(FATAL_ERROR "Not a target: ${TARGET}")
ENDIF()
# Collect target output files.
LIST(APPEND DEPLOY_TARGETS "$<TARGET_FILE:${TARGET}>")
# Collect target link directories
get_target_property(target_libs ${TARGET} LINK_LIBRARIES)
foreach(lib ${target_libs})
if(TARGET ${lib} OR NOT IS_ABSOLUTE ${lib})
continue()
endif()
get_filename_component(lib_dir ${lib} PATH)
list(APPEND DEPS_LIB_DIRS ${lib_dir})
endforeach()
ENDFOREACH()
LIST(APPEND DEPS_LIB_DIRS ${CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES})
FOREACH(LIB_PATH ${DEPS_LIB_DIRS})
FOREACH(suffix ${DEPS_LIB_DIRS_SUFFIXES})
list(APPEND DEPS_LIB_DIRS "${LIB_PATH}/${suffix}")
ENDFOREACH()
ENDFOREACH()
DEFINE_INSTALL_VAR(NAME "DEPLOY_FILES" CONTENT "${DEPLOY_TARGETS}" GENERATOR_EXPRESSION)
LIST(REMOVE_DUPLICATES DEPS_LIB_DIRS)
IF(LMMS_BUILD_LINUX)
FILE(DOWNLOAD "https://raw.githubusercontent.com/AppImage/AppImages/master/excludelist"
"${CMAKE_BINARY_DIR}/excludelist")
SET(additional_args INCLUDE_SYSTEM IGNORE_LIBS_FILE ${CMAKE_BINARY_DIR}/excludelist)
ELSEIF(LMMS_BUILD_WIN32)
SET(additional_args IGNORE_CASE IGNORE_LIBS_FILE "${LMMS_SOURCE_DIR}/cmake/install/excludelist-win")
IF(CMAKE_CROSSCOMPILING)
SET(additional_args "${additional_args}" GP_TOOL objdump)
ENDIF()
ENDIF()
INSTALL(CODE "
INCLUDE(\"${LMMS_SOURCE_DIR}/cmake/modules/InstallDependencies.cmake\")
INSTALL_DEPENDENCIES(
FILES \"\${DEPLOY_FILES}\"
DESTINATION \"${DEPS_DESTINATION}\"
LIB_DIRS \"${DEPS_LIB_DIRS}\"
SEARCH_PATHS \"${DEPS_SEARCH_PATHS}\"
${additional_args}
)
")
ENDFUNCTION()

View File

@@ -1,102 +0,0 @@
# Required by cmake if `uname -s` is inadaquate
SET(CMAKE_SYSTEM_NAME Windows)
SET(CMAKE_SYSTEM_VERSION 1)
# The target environment
SET(CMAKE_FIND_ROOT_PATH ${MINGW_PREFIX})
SET(CMAKE_INSTALL_PREFIX ${MINGW_PREFIX})
# Windows msys mingw ships with a mostly-suitable preconfigured environment
IF(LMMS_BUILD_MSYS)
SET(STRIP ${MINGW_PREFIX}/bin/strip)
SET(WINDRES ${MINGW_PREFIX}/bin/windres)
SET(CMAKE_RC_COMPILER ${WINDRES})
SET(CMAKE_C_COMPILER ${MINGW_PREFIX}/bin/gcc)
SET(CMAKE_CXX_COMPILER ${MINGW_PREFIX}/bin/g++)
# For 32-bit vst support
IF(WIN64)
# Specify the 32-bit cross compiler
SET(CMAKE_C_COMPILER32 ${MINGW_PREFIX32}/bin/gcc)
SET(CMAKE_CXX_COMPILER32 ${MINGW_PREFIX32}/bin/g++)
ENDIF()
# Msys compiler does not support @CMakeFiles/Include syntax
SET(CMAKE_C_USE_RESPONSE_FILE_FOR_INCLUDES OFF)
SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_INCLUDES OFF)
# Variable to assist override Qt debug libraries with release versions
SET(QT_OVERRIDE_LIBRARIES
optimized;${MINGW_PREFIX}/bin/QtGui4.dll;
optimized;${MINGW_PREFIX}/bin/QtCore4.dll;
optimized;${MINGW_PREFIX}/bin/QtXml4.dll;
debug;${MINGW_PREFIX}/bin/QtGui4.dll;
debug;${MINGW_PREFIX}/bin/QtCore4.dll;
debug;${MINGW_PREFIX}/bin/QtXml4.dll;
)
IF(LMMS_BUILD_MSYS AND CMAKE_BUILD_TYPE STREQUAL "Debug")
# Override Qt debug libraries with release versions
SET(QT_LIBRARIES "${QT_OVERRIDE_LIBRARIES}")
ENDIF()
# Linux mingw requires explicitly defined tools to prevent clash with native system tools
ELSE()
SET(MINGW_TOOL_PREFIX ${MINGW_PREFIX}/bin/${CMAKE_SYSTEM_PROCESSOR}-w64-mingw32-)
# Specify the cross compiler
SET(CMAKE_C_COMPILER ${MINGW_TOOL_PREFIX}gcc)
SET(CMAKE_CXX_COMPILER ${MINGW_TOOL_PREFIX}g++)
SET(CMAKE_RC_COMPILER ${MINGW_TOOL_PREFIX}gcc)
# Mingw tools
SET(STRIP ${MINGW_TOOL_PREFIX}strip)
SET(WINDRES ${MINGW_TOOL_PREFIX}windres)
SET(ENV{PKG_CONFIG} ${MINGW_TOOL_PREFIX}pkg-config)
IF(CMAKE_VERSION LESS 3)
SET(PKG_CONFIG_EXECUTABLE $ENV{PKG_CONFIG})
SET(PKG_CONFIG_FOUND TRUE)
ENDIF()
# Search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# For libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
# For 32-bit vst support
IF(WIN64)
# Specify the 32-bit cross compiler
SET(MINGW_TOOL_PREFIX32 ${MINGW_PREFIX32}/bin/${CMAKE_SYSTEM_PROCESSOR32}-w64-mingw32-)
SET(CMAKE_C_COMPILER32 ${MINGW_TOOL_PREFIX32}gcc)
SET(CMAKE_CXX_COMPILER32 ${MINGW_TOOL_PREFIX32}g++)
ENDIF()
INCLUDE_DIRECTORIES(${MINGW_PREFIX}/include)
ENDIF()
LINK_DIRECTORIES(${MINGW_PREFIX}/lib ${MINGW_PREFIX}/bin)
# Qt tools
SET(QT_BINARY_DIR ${MINGW_PREFIX}/bin)
SET(QT_QMAKE_EXECUTABLE ${QT_BINARY_DIR}/qmake)
# Echo modified cmake vars to screen for debugging purposes
IF(NOT DEFINED ENV{MINGW_DEBUG_INFO})
MESSAGE("")
MESSAGE("Custom cmake vars: (blank = system default)")
MESSAGE("-----------------------------------------")
MESSAGE("* CMAKE_C_COMPILER : ${CMAKE_C_COMPILER}")
MESSAGE("* CMAKE_CXX_COMPILER : ${CMAKE_CXX_COMPILER}")
MESSAGE("* CMAKE_RC_COMPILER : ${CMAKE_RC_COMPILER}")
MESSAGE("* WINDRES : ${WINDRES}")
MESSAGE("* ENV{PKG_CONFIG} : $ENV{PKG_CONFIG}")
MESSAGE("* MINGW_TOOL_PREFIX32 : ${MINGW_TOOL_PREFIX32}")
MESSAGE("* CMAKE_C_COMPILER32 : ${CMAKE_C_COMPILER32}")
MESSAGE("* CMAKE_CXX_COMPILER32 : ${CMAKE_CXX_COMPILER32}")
MESSAGE("* STRIP : ${STRIP}")
MESSAGE("* QT_BINARY_DIR : ${QT_BINARY_DIR}")
MESSAGE("* QT_QMAKE_EXECUTABLE : ${QT_QMAKE_EXECUTABLE}")
MESSAGE("")
# So that the debug info only appears once
SET(ENV{MINGW_DEBUG_INFO} SHOWN)
ENDIF()

View File

@@ -0,0 +1,107 @@
# Provides a fast mechanism for filtering the plugins used at build-time
SET(PLUGIN_LIST "" CACHE STRING "List of plug-ins to build")
STRING(REPLACE " " ";" PLUGIN_LIST "${PLUGIN_LIST}")
OPTION(LMMS_MINIMAL "Build a minimal list of plug-ins" OFF)
OPTION(LIST_PLUGINS "Lists the available plugins for building" OFF)
SET(MINIMAL_LIST
audio_file_processor
kicker
triple_oscillator
)
IF(LMMS_MINIMAL)
IF("${PLUGIN_LIST}" STREQUAL "")
STRING(REPLACE ";" " " MINIMAL_LIST_STRING "${MINIMAL_LIST}")
MESSAGE(
"-- Using minimal plug-ins: ${MINIMAL_LIST_STRING}\n"
" Note: You can specify specific plug-ins using -DPLUGIN_LIST=\"foo bar\""
)
ENDIF()
SET(PLUGIN_LIST ${MINIMAL_LIST} ${PLUGIN_LIST})
ENDIF()
SET(LMMS_PLUGIN_LIST
${MINIMAL_LIST}
Amplifier
BassBooster
bit_invader
Bitcrush
carlabase
carlapatchbay
carlarack
CrossoverEQ
Delay
DualFilter
dynamics_processor
Eq
Flanger
HydrogenImport
ladspa_browser
LadspaEffect
Lv2Effect
Lv2Instrument
lb302
MidiImport
MidiExport
MultitapEcho
monstro
nes
OpulenZ
organic
FreeBoy
patman
peak_controller_effect
GigPlayer
ReverbSC
sf2_player
sfxr
Sid
SpectrumAnalyzer
stereo_enhancer
stereo_matrix
stk
vst_base
vestige
VstEffect
watsyn
waveshaper
Vectorscope
vibed
Xpressive
zynaddsubfx
)
IF("${PLUGIN_LIST}" STREQUAL "")
SET(PLUGIN_LIST ${LMMS_PLUGIN_LIST})
ENDIF()
MACRO(LIST_ALL_PLUGINS)
MESSAGE("\n\nAll possible -DPLUGIN_LIST values")
MESSAGE("\n KEYWORD:")
MESSAGE(" -DLMMS_MINIMAL=True")
FOREACH(item IN LISTS MINIMAL_LIST)
MESSAGE(" ${item}")
ENDFOREACH()
MESSAGE("\n NAME:")
FOREACH(item IN LISTS LMMS_PLUGIN_LIST)
MESSAGE(" ${item}")
ENDFOREACH()
MESSAGE("\nNote: This value also impacts the fetching of git submodules.\n")
MESSAGE(FATAL_ERROR "Information was requested, aborting build!")
ENDMACRO()
IF(LIST_PLUGINS)
UNSET(LIST_PLUGINS CACHE)
LIST_ALL_PLUGINS()
ENDIF()
IF(MSVC)
SET(MSVC_INCOMPATIBLE_PLUGINS
LadspaEffect
zynaddsubfx
)
message(WARNING "Compiling with MSVC. The following plugins are not available: ${MSVC_INCOMPATIBLE_PLUGINS}")
LIST(REMOVE_ITEM PLUGIN_LIST ${MSVC_INCOMPATIBLE_PLUGINS})
ENDIF()

View File

@@ -1,29 +1,56 @@
FIND_PACKAGE(Git)
IF(GIT_FOUND AND NOT FORCE_VERSION)
# Look for git tag information (e.g. Tagged: "v1.0.0", Non-tagged: "v1.0.0-123-a1b2c3d")
SET(MAJOR_VERSION 0)
SET(MINOR_VERSION 0)
SET(PATCH_VERSION 0)
# Look for git tag information (e.g. Tagged: "v1.0.0", Untagged: "v1.0.0-123-a1b2c3d")
# Untagged format: [latest tag]-[number of commits]-[latest commit hash]
EXECUTE_PROCESS(
COMMAND "${GIT_EXECUTABLE}" describe --tags --match v[0-9].[0-9].[0-9]*
OUTPUT_VARIABLE GIT_TAG
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
TIMEOUT 10
OUTPUT_STRIP_TRAILING_WHITESPACE)
# Read: TAG_LIST = GIT_TAG.split("-")
STRING(REPLACE "-" ";" TAG_LIST "${GIT_TAG}")
# Read: TAG_LIST_LENGTH = TAG_LIST.length()
LIST(LENGTH TAG_LIST TAG_LIST_LENGTH)
# Untagged versions contain at least 2 dashes, giving 3 strings on split.
# Hence, for untagged versions TAG_LIST_LENGTH = [dashes in latest tag] + 3.
# Corollary: if TAG_LIST_LENGTH <= 2, the version must be tagged.
IF(TAG_LIST_LENGTH GREATER 0)
# Set FORCE_VERSION to TAG_LIST[0], strip any 'v's to get MAJ.MIN.PAT
LIST(GET TAG_LIST 0 FORCE_VERSION)
STRING(REPLACE "v" "" FORCE_VERSION "${FORCE_VERSION}")
# Split FORCE_VERSION on '.' and populate MAJOR/MINOR/PATCH_VERSION
STRING(REPLACE "." ";" MAJ_MIN_PAT "${FORCE_VERSION}")
LIST(GET MAJ_MIN_PAT 0 MAJOR_VERSION)
LIST(GET MAJ_MIN_PAT 1 MINOR_VERSION)
LIST(GET MAJ_MIN_PAT 2 PATCH_VERSION)
ENDIF()
# 1 dash total: Dash in latest tag, no additional commits => pre-release
IF(TAG_LIST_LENGTH EQUAL 2)
LIST(GET TAG_LIST 1 VERSION_STAGE)
SET(FORCE_VERSION "${FORCE_VERSION}-${VERSION_STAGE}")
# 2 dashes: Assume untagged with no dashes in latest tag name => stable + commits
ELSEIF(TAG_LIST_LENGTH EQUAL 3)
# Get the number of commits and latest commit hash
LIST(GET TAG_LIST 1 EXTRA_COMMITS)
SET(FORCE_VERSION "${FORCE_VERSION}.${EXTRA_COMMITS}")
LIST(GET TAG_LIST 2 COMMIT_HASH)
# Bump the patch version
MATH(EXPR PATCH_VERSION "${PATCH_VERSION}+1")
# Set the version to MAJOR.MINOR.PATCH-EXTRA_COMMITS+COMMIT_HASH
SET(FORCE_VERSION "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}")
SET(FORCE_VERSION "${FORCE_VERSION}-${EXTRA_COMMITS}+${COMMIT_HASH}")
# 3 dashes: Assume untagged with 1 dash in latest tag name => pre-release + commits
ELSEIF(TAG_LIST_LENGTH EQUAL 4)
# Get pre-release stage, number of commits, and latest commit hash
LIST(GET TAG_LIST 1 VERSION_STAGE)
LIST(GET TAG_LIST 2 EXTRA_COMMITS)
SET(FORCE_VERSION
"${FORCE_VERSION}-${VERSION_STAGE}.${EXTRA_COMMITS}")
LIST(GET TAG_LIST 3 COMMIT_HASH)
# Set the version to MAJOR.MINOR.PATCH-VERSION_STAGE.EXTRA_COMMITS+COMMIT_HASH
SET(FORCE_VERSION "${FORCE_VERSION}-${VERSION_STAGE}")
SET(FORCE_VERSION "${FORCE_VERSION}.${EXTRA_COMMITS}+${COMMIT_HASH}")
ENDIF()
ENDIF()
@@ -74,4 +101,3 @@ MESSAGE("\n"
"* Override version: -DFORCE_VERSION=x.x.x-x\n"
"* Ignore Git information: -DFORCE_VERSION=internal\n"
)

View File

@@ -1,10 +0,0 @@
IF(LMMS_BUILD_MSYS)
SET(MINGW_PREFIX /mingw32)
ELSE()
SET(MINGW_PREFIX /opt/mingw32)
ENDIF()
SET(CMAKE_SYSTEM_PROCESSOR i686)
INCLUDE(MinGWCrossCompile)

View File

@@ -1,16 +0,0 @@
IF(LMMS_BUILD_MSYS)
SET(MINGW_PREFIX /mingw64)
SET(MINGW_PREFIX32 /mingw32)
ELSE()
SET(MINGW_PREFIX /opt/mingw64)
SET(MINGW_PREFIX32 /opt/mingw32)
ENDIF()
SET(CMAKE_SYSTEM_PROCESSOR x86_64)
SET(CMAKE_SYSTEM_PROCESSOR32 i686)
SET(WIN64 TRUE)
INCLUDE(MinGWCrossCompile)

View File

@@ -0,0 +1,77 @@
#!/bin/sh
# Wrapper script for winegcc to remove .exe file ending automatically
# appended by winebuild.
# See FindWine.cmake for usage
set -e
args="$@"
# Find output name, link mode and architecture
while [ $# -gt 0 ]; do
key="$1"
case $key in
-o)
output=$2
shift
;;
-c)
no_link=true
;;
-m32)
win32=true
;;
-m64)
win64=true
;;
*)
;;
esac
shift
done
if [ -z "$output" ]; then
# If -c is used without specifying an output name, GCC defaults to "a.out".
if [ "$no_link" != true ]; then
output="a.out"
no_move=true
fi
fi
# Some Wine distributions can't find their own headers. WINE_INCLUDE_DIR provided
# by FindWine.cmake
extra_args="-I@WINE_INCLUDE_DIR@ -I@WINE_INCLUDE_DIR@/wine/windows"
# Apply manually specified flags
extra_args="$extra_args @WINE_CXX_FLAGS@"
# Apply -m32 library fix if necessary
if [ "$win32" = true ] && [ "$no_link" != true ]; then
extra_args="$extra_args @WINE_32_FLAGS@"
fi
# Apply -m64 library fix if necessary
if [ "$win64" = true ] && [ "$no_link" != true ]; then
extra_args="$extra_args @WINE_64_FLAGS@"
fi
# Work around https://bugs.winehq.org/show_bug.cgi?id=47710
extra_args="$extra_args -D__WIDL_objidl_generated_name_0000000C="
# Run winegcc
export WINEBUILD=@WINE_BUILD@
@WINE_CXX@ $extra_args $args
if [ "$no_move" = true ] || [ "$no_link" = true ]; then
exit 0
fi
if [ ! -e "$output.exe" ]; then
echo "Fatal error in winegcc wrapper: No output file \"$output.exe\" found."
exit 1
fi
mv $output.exe $output

View File

@@ -1,14 +1,16 @@
#!/bin/bash
set -e
ppa_dir=./ppa/
pushd $ppa_dir
for f in *.deb; do
echo "Extracting $f..."
ar xv $f
ar xv "$f"
rm debian-binary
rm control.tar.*
tar xf data.tar.*
tar xf data.tar.* --exclude=*mingw*/bin/fluid
rm data.tar.*
done

View File

@@ -9,10 +9,10 @@ PPA_ARCH=amd64
# These shouldn't change
PPA_HOST=http://ppa.launchpad.net
PPA_USER=tobydox
PPA_PROJECT=mingw-x-trusty
PPA_PROJECT=mingw-x-trusty
PPA_ROOT=$PPA_HOST/$PPA_USER/$PPA_PROJECT/ubuntu
PPA_URL=$PPA_ROOT/dists/$PPA_DISTRO/main/binary-$PPA_ARCH/Packages
PPA_URL=$PPA_ROOT/dists/$PPA_DISTRO/main/binary-$PPA_ARCH/Packages.gz
ppa_dir=./ppa/
@@ -20,18 +20,18 @@ temp_file=/tmp/ppa_listing_$$
temp_temp_file=/tmp/ppa_listing_temp_$$
skip_files="binutils openssl flac libgig libogg libvorbis x-bootstrap zlib"
skip_files="$skip_files x-runtime gcc qt_4 qt5 x-stk pkgconfig"
skip_files="$skip_files x-runtime gcc qt_4 qt5 x-stk pkgconfig"
skip_files="$skip_files glib2 libpng"
echo "Connecting to $PPA_HOST to get list of packages..."
wget -qO- $PPA_URL |grep "Filename:" > $temp_file
echo "Connecting to $PPA_URL to get list of packages..."
wget -qO- $PPA_URL | gzip -d -c | grep "Filename:" > $temp_file
for j in $skip_files ; do
grep -v $j $temp_file > $temp_temp_file
grep -v "$j" $temp_file > $temp_temp_file
mv $temp_temp_file $temp_file
done
line_count=`wc -l $temp_file |awk '{print $1}'`
line_count=$(wc -l $temp_file |awk '{print $1}')
echo "Found $line_count packages for download..."
@@ -39,20 +39,15 @@ echo "Downloading packages. They will be saved to $ppa_dir"
mkdir $ppa_dir
for j in `cat $temp_file` ; do
if [ "$j" = "Filename:" ] ; then
continue
fi
while read -r j
do
echo "Downloading $j..."
wget -O $ppa_dir$(basename $j) $PPA_ROOT/$j
done
echo "$PPA_ROOT/$j"
wget -qO "$ppa_dir$(basename "$j")" "$(echo "$PPA_ROOT/$j" | sed 's/\/Filename: /\//gi')"
done < $temp_file
echo "Cleaning up temporary files..."
rm -rf $temp_file
echo "Packages have been saved to $ppa_dir. Please run extract_debs.sh"

View File

@@ -1,5 +1,7 @@
#!/bin/bash
set -eu
# Git repo information
fork="lmms" # i.e. "lmms" or "tobydox"
branch="master" # i.e. "master" or "stable-1.2"
@@ -15,49 +17,45 @@ function warn() { echo -e "\n${yellow}$1${plain}"; }
function err() { echo -e "\n${red}$1${plain}"; exit 1;}
info "Checking for mingw environment"
env |grep MINGW
if [ $? -ne 0 ]; then
if ! env | grep MINGW; then
err " - Failed. Please relaunch using MinGW shell"
fi
info "Preparing the git directory..."
mkdir $HOME/.git; touch $HOME/.git/config > /dev/null &2>1
mkdir "$HOME/.git" || true
touch "$HOME/.git/config" > /dev/null 2>&1
git config --global http.sslverify false
info "Cloning the repository..."
if [ -d ./lmms ]; then
if [ -d ./lmms ]; then
warn " - Skipping, ./lmms already exists"
else
else
git clone -b $branch https://github.com/$fork/lmms.git
fi
info "Fetching ppa using cmake/msys/fetch_ppas.sh..."
if [ -d $HOME/ppa ]; then
if [ -d "$HOME/ppa" ]; then
warn " - Skipping, $HOME/ppa already exists"
else
./lmms/cmake/msys/fetch_ppa.sh
lmms/cmake/msys/fetch_ppa.sh
fi
info "Extracting debs to $HOME/ppa/opt/, etc..."
if [ -d $HOME/ppa/opt ]; then
if [ -d "$HOME/ppa/opt" ]; then
warn " - Skipping, $HOME/ppa/opt already exists"
else
./lmms/cmake/msys/extract_debs.sh
lmms/cmake/msys/extract_debs.sh
fi
info "Preparing library merge, making all qt headers writable..."
chmod u+w /mingw64/include/qt4 -R
chmod u+w /mingw32/include/qt4 -R
chmod u+w /mingw32/include/qt4 -R
info "Merging mingw headers and libraries from ppa over existing system libraries..."
find /mingw64 |grep sndfile.h
if [ $? -ne 0 ]; then
\cp -r $HOME/ppa/opt/mingw* /
else
warn " - Skipping, sndfile.h has already been merged"
if ! find /mingw64 | grep sndfile.h; then
command cp -r "$HOME/ppa/opt/mingw"* /
else
warn " - Skipping, sndfile.h has already been merged"
fi
fltkver="1.3.3"
@@ -67,220 +65,162 @@ flacver="1.3.2"
gigver="4.0.0"
stkver="4.5.1"
info "Downloading and building fltk $fltkver"
mingw_root="/$(echo "$MSYSTEM"|tr '[:upper:]' '[:lower:]')"
mingw_root="/$(echo $MSYSTEM|tr '[:upper:]' '[:lower:]')"
which fluid
if [ $? -ne 0 ]; then
wget http://fltk.org/pub/fltk/$fltkver/fltk-$fltkver-source.tar.gz -O $HOME/fltk-source.tar.gz
if [ $? -ne 0 ]; then
err "ERROR: Could not download fltk. Exiting."
fi
tar zxf $HOME/fltk-source.tar.gz -C $HOME/
pushd $HOME/fltk-$fltkver
info "Downloading and building fltk $fltkver"
if ! command -v fluid; then
wget http://fltk.org/pub/fltk/$fltkver/fltk-$fltkver-source.tar.gz -O "$HOME/fltk-source.tar.gz"
tar zxf "$HOME/fltk-source.tar.gz" -C "$HOME/"
pushd "$HOME/fltk-$fltkver"
info " - Compiling fltk $fltkver..."
./configure --prefix=$mingw_root --enable-shared
./configure --prefix="$mingw_root" --enable-shared
make
info " - Installing fltk..."
make install
if [ $? -ne 0 ]; then
err "ERROR: Could not build/install fltk -- Zyn needs this. Exiting."
fi
# ln -s $mingw_root/usr/local/bin/fluid.exe $mingw_root/bin/fluid.exe
# ln -s $mingw_root/usr/local/bin/fluid.exe $mingw_root/bin/fluid.exe
popd
else
warn " - Skipping, fluid binary already exists"
warn " - Skipping, fluid binary already exists"
fi
info "Downloading and building libogg $oggver"
if [ ! -e $mingw_root/lib/libogg.dll.a ]; then
wget http://downloads.xiph.org/releases/ogg/libogg-$oggver.tar.xz -O $HOME/libogg-source.tar.xz
if [ $? -ne 0 ]; then
err "ERROR: Could not download libogg. Exiting."
fi
tar xf $HOME/libogg-source.tar.xz -C $HOME/
pushd $HOME/libogg-$oggver
if [ ! -e "$mingw_root/lib/libogg.dll.a" ]; then
wget http://downloads.xiph.org/releases/ogg/libogg-$oggver.tar.xz -O "$HOME/libogg-source.tar.xz"
tar xf "$HOME/libogg-source.tar.xz" -C "$HOME/"
pushd "$HOME/libogg-$oggver"
info " - Compiling libogg $oggver..."
./configure --prefix=$mingw_root
./configure --prefix="$mingw_root"
make
info " - Installing libogg..."
make install
# for some reason libgig needs this
./configure --prefix=/opt$mingw_root
./configure --prefix="/opt$mingw_root"
make
info " - Installing libogg..."
make install
if [ $? -ne 0 ]; then
err "ERROR: Could not build/install fltk -- lmms needs this. Exiting."
fi
popd
else
warn " - Skipping, libogg binary already exists"
warn " - Skipping, libogg binary already exists"
fi
info "Downloading and building libvorbis $vorbisver"
if [ ! -e $mingw_root/lib/libvorbis.dll.a ]; then
wget http://downloads.xiph.org/releases/vorbis/libvorbis-$vorbisver.tar.xz -O $HOME/libvorbis-source.tar.xz
if [ $? -ne 0 ]; then
err "ERROR: Could not download libogg. Exiting."
fi
tar xf $HOME/libvorbis-source.tar.xz -C $HOME/
pushd $HOME/libvorbis-$vorbisver
if [ ! -e "$mingw_root/lib/libvorbis.dll.a" ]; then
wget http://downloads.xiph.org/releases/vorbis/libvorbis-$vorbisver.tar.xz -O "$HOME/libvorbis-source.tar.xz"
tar xf "$HOME/libvorbis-source.tar.xz" -C "$HOME/"
pushd "$HOME/libvorbis-$vorbisver"
info " - Compiling libvorbis $vorbisver..."
./configure --prefix=$mingw_root
./configure --prefix="$mingw_root"
make
info " - Installing libvorbis..."
make install
# for some reason libgig needs this
./configure --prefix=/opt$mingw_root
./configure --prefix="/opt$mingw_root"
make
info " - Installing libvorbis..."
make install
if [ $? -ne 0 ]; then
err "ERROR: Could not build/install libvorbis -- lmms needs this. Exiting."
fi
popd
else
warn " - Skipping, libvorbis binary already exists"
warn " - Skipping, libvorbis binary already exists"
fi
info "Downloading and building flac $flacver"
if [ ! -e $mingw_root/lib/libFLAC.dll.a ]; then
wget http://downloads.xiph.org/releases/flac/flac-$flacver.tar.xz -O $HOME/flac-source.tar.xz
if [ $? -ne 0 ]; then
err "ERROR: Could not download flac. Exiting."
fi
tar xf $HOME/flac-source.tar.xz -C $HOME/
pushd $HOME/flac-$flacver
if [ ! -e "$mingw_root/lib/libFLAC.dll.a" ]; then
wget http://downloads.xiph.org/releases/flac/flac-$flacver.tar.xz -O "$HOME/flac-source.tar.xz"
tar xf "$HOME/flac-source.tar.xz" -C "$HOME/"
pushd "$HOME/flac-$flacver"
info " - Compiling flac $flacver..."
./configure --prefix=$mingw_root
./configure --prefix="$mingw_root"
make
info " - Installing flac..."
make install
# for some reason libgig needs this
./configure --prefix=/opt$mingw_root
./configure --prefix="/opt$mingw_root"
make
info " - Installing flac..."
make install
if [ $? -ne 0 ]; then
err "ERROR: Could not build/install flac -- lmms needs this. Exiting."
fi
popd
else
warn " - Skipping, libvorbis flac already exists"
warn " - Skipping, libvorbis flac already exists"
fi
info "Downloading and building libgig $gigver"
if [ ! -e $mingw_root/lib/libgig/libgig.dll.a ]; then
wget http://download.linuxsampler.org/packages/libgig-$gigver.tar.bz2 -O $HOME/gig-source.tar.xz
if [ $? -ne 0 ]; then
err "ERROR: Could not download libgig. Exiting."
fi
tar xf $HOME/gig-source.tar.xz -C $HOME/
pushd $HOME/libgig-$gigver
if [ ! -e "$mingw_root/lib/libgig/libgig.dll.a" ]; then
wget http://download.linuxsampler.org/packages/libgig-$gigver.tar.bz2 -O "$HOME/gig-source.tar.xz"
tar xf "$HOME/gig-source.tar.xz" -C "$HOME/"
pushd "$HOME/libgig-$gigver"
info " - Compiling libgig $gigver..."
./configure --prefix=$mingw_root
./configure --prefix="$mingw_root"
make
info " - Installing libgig..."
make install
mv $mingw_root/lib/bin/libakai-0.dll $mingw_root/bin
mv $mingw_root/lib/bin/libgig-7.dll $mingw_root/bin
mv "$mingw_root/lib/bin/libakai-0.dll" "$mingw_root/bin"
mv "$mingw_root/lib/bin/libgig-7.dll" "$mingw_root/bin"
if [ $? -ne 0 ]; then
err "ERROR: Could not build/install libgig -- gigplayer needs this. Exiting."
fi
popd
else
warn " - Skipping, libgig binary already exists"
warn " - Skipping, libgig binary already exists"
fi
info "Downloading and building stk $stkver"
if [ ! -e $mingw_root/lib/libstk.dll ]; then
wget http://ccrma.stanford.edu/software/stk/release/stk-$stkver.tar.gz -O $HOME/stk-source.tar.xz
if [ $? -ne 0 ]; then
err "ERROR: Could not download stk. Exiting."
fi
tar xf $HOME/stk-source.tar.xz -C $HOME/
pushd $HOME/stk-$stkver
if [ ! -e "$mingw_root/lib/libstk.dll" ]; then
wget http://ccrma.stanford.edu/software/stk/release/stk-$stkver.tar.gz -O "$HOME/stk-source.tar.xz"
tar xf "$HOME/stk-source.tar.xz" -C "$HOME/"
pushd "$HOME/stk-$stkver"
info " - Compiling stk $stkver..."
./configure --prefix=$mingw_root
./configure --prefix="$mingw_root"
make
info " - Installing stk..."
make install
if [ $? -ne 0 ]; then
err "ERROR: Could not build/install stk -- mallotstk needs this. Exiting."
fi
mv $mingw_root/lib/libstk.so $mingw_root/lib/libstk.dll
mv $mingw_root/lib/libstk-$stkver.so $mingw_root/lib/libstk-$stkver.dll
mv "$mingw_root/lib/libstk.so" "$mingw_root/lib/libstk.dll"
mv "$mingw_root/lib/libstk-$stkver.so" "$mingw_root/lib/libstk-$stkver.dll"
popd
else
warn " - Skipping, stk binary already exists"
warn " - Skipping, stk binary already exists"
fi
# make a symlink to make cmake happy
if [ $mingw_root = "/mingw64" ]; then
if [ ! -e /opt/mingw64/bin/x86_64-w64-mingw32-pkg-config ]; then
if [ "$mingw_root" = "/mingw64" ]; then
if [ ! -e /opt/mingw64/bin/x86_64-w64-mingw32-pkg-config ]; then
ln -s /usr/bin/pkg-config /opt/mingw64/bin/x86_64-w64-mingw32-pkg-config
fi
fi
if [ $mingw_root = "/mingw32" ]; then
if [ ! -e /opt/mingw32/bin/i686-w64-mingw32-pkg-config ]; then
elif [ "$mingw_root" = "/mingw32" ]; then
if [ ! -e /opt/mingw32/bin/i686-w64-mingw32-pkg-config ]; then
ln -s /usr/bin/pkg-config /opt/mingw32/bin/i686-w64-mingw32-pkg-config
fi
fi
info "Cleaning up..."
rm -rf $HOME/fltk-$fltkver
rm -rf $HOME/libogg-$oggver
rm -rf $HOME/libvorbis-$vorbisver
rm -rf $HOME/flac-$flacver
rm -rf $HOME/libgig-$gigver
rm -rf $HOME/stk-$stkver
rm -rf "$HOME/fltk-$fltkver"
rm -rf "$HOME/libogg-$oggver"
rm -rf "$HOME/libvorbis-$vorbisver"
rm -rf "$HOME/flac-$flacver"
rm -rf "$HOME/libgig-$gigver"
rm -rf "$HOME/stk-$stkver"
info "Done."

View File

@@ -1,4 +1,12 @@
SET(WIN_PLATFORM mingw)
if(LMMS_MSVC_YEAR)
SET(WIN_PLATFORM "msvc${LMMS_MSVC_YEAR}")
endif()
SET(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/cmake/nsis/nsis_branding.bmp")
IF(MSVC)
STRING(REPLACE "/" "\\\\" CPACK_PACKAGE_ICON ${CPACK_PACKAGE_ICON})
ENDIF(MSVC)
SET(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/cmake/nsis/icon.ico")
SET(CPACK_NSIS_INSTALLED_ICON_NAME "${CMAKE_PROJECT_NAME}.exe" PARENT_SCOPE)
SET(CPACK_NSIS_DISPLAY_NAME "${PROJECT_NAME_UCASE} ${VERSION}" PARENT_SCOPE)
@@ -8,10 +16,11 @@ SET(CPACK_NSIS_CONTACT "${PROJECT_EMAIL}" PARENT_SCOPE)
SET(CPACK_PACKAGE_EXECUTABLES "${CMAKE_PROJECT_NAME}.exe;${PROJECT_NAME_UCASE}" PARENT_SCOPE)
SET(CPACK_NSIS_MENU_LINKS "${CMAKE_PROJECT_NAME}.exe;${PROJECT_NAME_UCASE}" PARENT_SCOPE)
SET(CPACK_NSIS_DEFINES "
!include ${CMAKE_SOURCE_DIR}/cmake/nsis/FileAssociation.nsh
!addincludedir ${CMAKE_SOURCE_DIR}/cmake/nsis
!include FileAssociation.nsh
!include LogicLib.nsh
!include WinVer.nsh")
SET(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${VERSION}-win32")
SET(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${VERSION}-${WIN_PLATFORM}-win32")
SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "
\\\${registerExtension} \\\"$INSTDIR\\\\${CMAKE_PROJECT_NAME}.exe\\\" \\\".mmp\\\" \\\"${PROJECT_NAME_UCASE} Project\\\"
\\\${registerExtension} \\\"$INSTDIR\\\\${CMAKE_PROJECT_NAME}.exe\\\" \\\".mmpz\\\" \\\"${PROJECT_NAME_UCASE} Project (compressed)\\\"
@@ -27,7 +36,7 @@ SET(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "
" PARENT_SCOPE)
IF(WIN64)
SET(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${VERSION}-win64")
SET(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${VERSION}-${WIN_PLATFORM}-win64")
SET(CPACK_INSTALL_FIX "$PROGRAMFILES64\\\\${CPACK_PACKAGE_INSTALL_DIRECTORY}\\\\")
SET(CPACK_NSIS_DEFINES "
${CPACK_NSIS_DEFINES}
@@ -37,10 +46,10 @@ ENDIF()
# Fix windows paths for msys
IF(LMMS_BUILD_MSYS)
STRING(REGEX REPLACE "/" "\\\\\\\\" CPACK_PACKAGE_ICON "${CPACK_PACKAGE_ICON}")
STRING(REGEX REPLACE "/" "\\\\\\\\" CPACK_NSIS_MUI_ICON "${CPACK_NSIS_MUI_ICON}")
STRING(REGEX REPLACE "/" "\\\\\\\\" CPACK_NSIS_DEFINES "${CPACK_NSIS_DEFINES}")
STRING(REGEX REPLACE "/" "\\\\\\\\" CMAKE_BINARY_DIR_FIX "${CMAKE_BINARY_DIR}")
STRING(REPLACE "/" "\\\\" CPACK_PACKAGE_ICON "${CPACK_PACKAGE_ICON}")
STRING(REPLACE "/" "\\\\" CPACK_NSIS_MUI_ICON "${CPACK_NSIS_MUI_ICON}")
STRING(REPLACE "/" "\\\\" CPACK_NSIS_DEFINES "${CPACK_NSIS_DEFINES}")
STRING(REPLACE "/" "\\\\" CMAKE_BINARY_DIR_FIX "${CMAKE_BINARY_DIR}")
# FIXME: there's no easy way to fix $INST_DIR, so we'll redefine it manually
IF(WIN64)

View File

@@ -1,4 +0,0 @@
IF(LMMS_BUILD_APPLE)
INSTALL(CODE "EXECUTE_PROCESS(COMMAND chmod u+x ${CMAKE_BINARY_DIR}/install_apple.sh)")
INSTALL(CODE "EXECUTE_PROCESS(COMMAND ${CMAKE_BINARY_DIR}/install_apple.sh)")
ENDIF()

View File

@@ -0,0 +1,26 @@
# GenQrcScript.cmake - Copyright (c) 2015 Lukas W <lukaswhl/at/gmail.com>
INCLUDE(CMakeParseArguments)
FILE(REMOVE ${OUT_FILE})
MACRO(OUT STRING)
FILE(APPEND ${OUT_FILE} "${STRING}\n")
ENDMACRO()
IF(NOT DEFINED RC_PREFIX)
SET(RC_PREFIX "/")
ENDIF()
# Write qrc file
OUT("<RCC>")
OUT(" <qresource prefix=\"${RC_PREFIX}\">")
FOREACH(VAR ${FILES})
GET_FILENAME_COMPONENT(FILENAME ${VAR} NAME)
IF(IS_ABSOLUTE ${VAR})
OUT(" <file alias=\"${FILENAME}\">${VAR}</file>")
ELSE()
OUT(" <file alias=\"${FILENAME}\">${DIR}/${VAR}</file>")
ENDIF()
ENDFOREACH()
OUT(" </qresource>")
OUT("</RCC>")

View File

@@ -0,0 +1,4 @@
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/common/MSYS.cmake)
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/common/Win32.cmake)
SET(MINGW_PREFIX /mingw32)

View File

@@ -0,0 +1,5 @@
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/common/MSYS.cmake)
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/common/Win64.cmake)
SET(MINGW_PREFIX /mingw64)
SET(MINGW_PREFIX32 /mingw32)

View File

@@ -0,0 +1,2 @@
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/common/Win32.cmake)
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/common/Ubuntu-MinGW-W64.cmake)

View File

@@ -0,0 +1,4 @@
SET(CMAKE_TOOLCHAIN_FILE_32 "${CMAKE_CURRENT_LIST_DIR}/Ubuntu-MinGW-W64-32.cmake")
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/common/Win64.cmake)
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/common/Ubuntu-MinGW-W64.cmake)

View File

@@ -0,0 +1,3 @@
SET(MINGW_PREFIX /opt/mingw32)
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/common/Ubuntu-MinGW-X-Trusty.cmake)

View File

@@ -0,0 +1,9 @@
SET(MINGW_PREFIX /opt/mingw64)
SET(MINGW_PREFIX32 /opt/mingw32)
SET(WIN64 TRUE)
SET(CMAKE_TOOLCHAIN_FILE_32 "${CMAKE_CURRENT_LIST_DIR}/Ubuntu-MinGW-X-Trusty-32.cmake")
SET(CMAKE_PREFIX_PATH_32 "${MINGW_PREFIX32}")
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/common/Ubuntu-MinGW-X-Trusty.cmake)

View File

@@ -0,0 +1,22 @@
# The target environment
SET(CMAKE_FIND_ROOT_PATH ${MINGW_PREFIX})
SET(CMAKE_INSTALL_PREFIX ${MINGW_PREFIX})
# Windows msys mingw ships with a mostly-suitable preconfigured environment
SET(STRIP ${MINGW_PREFIX}/bin/strip)
SET(CMAKE_RC_COMPILER ${MINGW_PREFIX}/bin/windres)
SET(CMAKE_C_COMPILER ${MINGW_PREFIX}/bin/gcc)
SET(CMAKE_CXX_COMPILER ${MINGW_PREFIX}/bin/g++)
# For 32-bit vst support
IF(WIN64)
# Specify the 32-bit cross compiler
SET(CMAKE_C_COMPILER32 ${MINGW_PREFIX32}/bin/gcc)
SET(CMAKE_CXX_COMPILER32 ${MINGW_PREFIX32}/bin/g++)
ENDIF()
# Msys compiler does not support @CMakeFiles/Include syntax
SET(CMAKE_C_USE_RESPONSE_FILE_FOR_INCLUDES OFF)
SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_INCLUDES OFF)
SET(LMMS_BUILD_MSYS 1)

View File

@@ -0,0 +1,17 @@
# Toolchain for Ubuntu MinGw compiler shipped with the mingw-w64 and
# g++-mingw-w64 packages
SET(TOOLCHAIN_PREFIX ${CMAKE_SYSTEM_PROCESSOR}-w64-mingw32)
set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++)
set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres)
set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX})
SET(ENV{PKG_CONFIG} /usr/bin/${TOOLCHAIN_PREFIX}-pkg-config)
IF(WIN64)
SET(TOOLCHAIN_PREFIX32 ${CMAKE_SYSTEM_PROCESSOR32}-w64-mingw32)
SET(CMAKE_C_COMPILER32 ${TOOLCHAIN_PREFIX32}-gcc)
SET(CMAKE_CXX_COMPILER32 ${TOOLCHAIN_PREFIX32}-g++)
ENDIF()
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/WinCrossCompile.cmake)

View File

@@ -0,0 +1,58 @@
IF(WIN64)
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/Win64.cmake)
ELSE()
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/Win32.cmake)
ENDIF()
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/WinCrossCompile.cmake)
# The target environment
SET(CMAKE_FIND_ROOT_PATH ${MINGW_PREFIX})
SET(CMAKE_INSTALL_PREFIX ${MINGW_PREFIX})
# Linux mingw requires explicitly defined tools to prevent clash with native system tools
SET(MINGW_TOOL_PREFIX ${MINGW_PREFIX}/bin/${CMAKE_SYSTEM_PROCESSOR}-w64-mingw32-)
# Specify the cross compiler
SET(CMAKE_C_COMPILER ${MINGW_TOOL_PREFIX}gcc)
SET(CMAKE_CXX_COMPILER ${MINGW_TOOL_PREFIX}g++)
SET(CMAKE_RC_COMPILER ${MINGW_TOOL_PREFIX}windres)
# Mingw tools
SET(STRIP ${MINGW_TOOL_PREFIX}strip)
SET(ENV{PKG_CONFIG} ${MINGW_TOOL_PREFIX}pkg-config)
# For 32-bit vst support
IF(WIN64)
# Specify the 32-bit cross compiler
SET(MINGW_TOOL_PREFIX32 ${MINGW_PREFIX32}/bin/${CMAKE_SYSTEM_PROCESSOR32}-w64-mingw32-)
SET(CMAKE_C_COMPILER32 ${MINGW_TOOL_PREFIX32}gcc)
SET(CMAKE_CXX_COMPILER32 ${MINGW_TOOL_PREFIX32}g++)
ENDIF()
INCLUDE_DIRECTORIES(${MINGW_PREFIX}/include)
LINK_DIRECTORIES(${MINGW_PREFIX}/lib ${MINGW_PREFIX}/bin)
# Qt tools
SET(QT_BINARY_DIR ${MINGW_PREFIX}/bin)
SET(QT_QMAKE_EXECUTABLE ${QT_BINARY_DIR}/qmake)
# Echo modified cmake vars to screen for debugging purposes
IF(NOT DEFINED ENV{MINGW_DEBUG_INFO})
MESSAGE("")
MESSAGE("Custom cmake vars: (blank = system default)")
MESSAGE("-----------------------------------------")
MESSAGE("* CMAKE_C_COMPILER : ${CMAKE_C_COMPILER}")
MESSAGE("* CMAKE_CXX_COMPILER : ${CMAKE_CXX_COMPILER}")
MESSAGE("* CMAKE_RC_COMPILER : ${CMAKE_RC_COMPILER}")
MESSAGE("* ENV{PKG_CONFIG} : $ENV{PKG_CONFIG}")
MESSAGE("* MINGW_TOOL_PREFIX32 : ${MINGW_TOOL_PREFIX32}")
MESSAGE("* CMAKE_C_COMPILER32 : ${CMAKE_C_COMPILER32}")
MESSAGE("* CMAKE_CXX_COMPILER32 : ${CMAKE_CXX_COMPILER32}")
MESSAGE("* STRIP : ${STRIP}")
MESSAGE("* QT_BINARY_DIR : ${QT_BINARY_DIR}")
MESSAGE("* QT_QMAKE_EXECUTABLE : ${QT_QMAKE_EXECUTABLE}")
MESSAGE("")
# So that the debug info only appears once
SET(ENV{MINGW_DEBUG_INFO} SHOWN)
ENDIF()

View File

@@ -0,0 +1,6 @@
SET(CMAKE_SYSTEM_NAME Windows)
SET(CMAKE_SYSTEM_VERSION 1)
SET(CMAKE_SYSTEM_PROCESSOR i686)
SET(WIN64 FALSE)

View File

@@ -0,0 +1,7 @@
SET(CMAKE_SYSTEM_NAME Windows)
SET(CMAKE_SYSTEM_VERSION 1)
SET(CMAKE_SYSTEM_PROCESSOR x86_64)
SET(CMAKE_SYSTEM_PROCESSOR32 i686)
SET(WIN64 TRUE)

View File

@@ -0,0 +1,9 @@
# Required by cmake if `uname -s` is inadaquate
SET(CMAKE_SYSTEM_NAME Windows)
SET(CMAKE_SYSTEM_VERSION 1)
# Search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# For libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

76
cmake/uninstall.cmake Normal file
View File

@@ -0,0 +1,76 @@
CMAKE_MINIMUM_REQUIRED(VERSION 3.3)
MESSAGE(STATUS "Attempting to create uninstall target for make")
#Remove all of the files listed in install_manifest.txt
SET(INSTALL_MANIFEST_PATH "${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt")
IF(NOT EXISTS ${INSTALL_MANIFEST_PATH})
MESSAGE(FATAL_ERROR "Could not find install manifest at ${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt\nThis may be because 'make install' has not been run or install_manifest.txt has been deleted")
ENDIF()
MESSAGE(STATUS "install_manifest.txt found")
FILE(STRINGS ${INSTALL_MANIFEST_PATH} FILES_TO_REMOVE)
FOREACH(FILE_TO_REMOVE ${FILES_TO_REMOVE})
IF(NOT EXISTS "${FILE_TO_REMOVE}")
MESSAGE(WARNING "Could not find file ${FILE_TO_REMOVE}")
CONTINUE()
ENDIF()
FILE(REMOVE "${FILE_TO_REMOVE}")
IF(NOT EXISTS "${FILE_TO_REMOVE}")
MESSAGE(STATUS "Successfully removed file ${FILE_TO_REMOVE}")
ELSE()
MESSAGE(FATAL_ERROR "Failed to remove file ${FILE_TO_REMOVE}.")
ENDIF()
ENDFOREACH(FILE_TO_REMOVE)
# Remove empty directories created during installation
# Checks if a directory is empty and saves the result in out_var
FUNCTION(IS_EMPTY_DIR OUT_VAR DIR)
FILE(GLOB FILES "${DIR}/*")
LIST(LENGTH FILES NUM_FILES)
IF(NUM_FILES EQUAL 0)
SET(${OUT_VAR} TRUE PARENT_SCOPE)
ELSE()
SET(${OUT_VAR} FALSE PARENT_SCOPE)
ENDIF()
ENDFUNCTION()
# Recursively append all parent directories of path to out_var
FUNCTION(PARENT_DIRECTORIES OUT_VAR PATH)
GET_FILENAME_COMPONENT(PARENT "${PATH}" DIRECTORY)
IF(PARENT AND NOT PARENT STREQUAL PATH AND NOT PARENT IN_LIST ${OUT_VAR})
LIST(APPEND ${OUT_VAR} ${PARENT})
PARENT_DIRECTORIES(${OUT_VAR} "${PARENT}")
ENDIF()
SET(${OUT_VAR} ${${OUT_VAR}} PARENT_SCOPE)
ENDFUNCTION()
# Removes all empty parent directories of the given files
FUNCTION(REMOVE_EMPTY_DIRECTORIES FILES)
SET(DIRECTORIES)
FOREACH(FILE_TO_REMOVE ${FILES})
PARENT_DIRECTORIES(DIRECTORIES "${FILE_TO_REMOVE}")
endforeach()
LIST(REMOVE_DUPLICATES DIRECTORIES)
# Sort and reverse so we remove subdirectories first
LIST(SORT DIRECTORIES)
LIST(REVERSE DIRECTORIES)
FOREACH(DIR ${DIRECTORIES})
# Skip directories not inside the install prefix
IF(NOT (EXISTS "${DIR}" AND DIR MATCHES "^${CMAKE_INSTALL_PREFIX}/"))
CONTINUE()
ENDIF()
IS_EMPTY_DIR(DIR_EMPTY "${DIR}")
IF(DIR_EMPTY)
MESSAGE(STATUS "Removing empty directory ${DIR}")
FILE(REMOVE_RECURSE "${DIR}")
ELSEIF()
MESSAGE(STATUS "Skipping non-empty directory ${DIR}")
ENDIF()
ENDFOREACH()
ENDFUNCTION()
REMOVE_EMPTY_DIRECTORIES("${FILES_TO_REMOVE}")

View File

@@ -1,15 +1,14 @@
if (QT5)
set (QT_LUPDATE_EXECUTABLE "${Qt5_LUPDATE_EXECUTABLE}")
set (QT_LRELEASE_EXECUTABLE "${Qt5_LRELEASE_EXECUTABLE}")
endif ()
SET(QT_LUPDATE_EXECUTABLE "${Qt5_LUPDATE_EXECUTABLE}")
SET(QT_LRELEASE_EXECUTABLE "${Qt5_LRELEASE_EXECUTABLE}")
IF(QT_LUPDATE_EXECUTABLE STREQUAL "")
EXECUTE_PROCESS(COMMAND "lupdate" "--help" RESULT_VARIABLE LUPDATE_FALLBACK OUTPUT_QUIET)
EXECUTE_PROCESS(COMMAND "lupdate" "-help" RESULT_VARIABLE LUPDATE_FALLBACK OUTPUT_QUIET)
IF(LUPDATE_FALLBACK EQUAL 0)
SET(QT_LUPDATE_EXECUTABLE lupdate)
SET(QT_LRELEASE_EXECUTABLE lrelease)
ELSE()
MESSAGE(FATAL_ERROR "Cannot generate locales")
MESSAGE(WARNING "Cannot generate locales")
RETURN()
ENDIF()
ENDIF()
@@ -28,7 +27,7 @@ FOREACH(_ts_file ${lmms_LOCALES})
STRING(REPLACE ".ts" ".qm" _qm_file "${_ts_file}")
STRING(REPLACE ".ts" ".qm" _qm_target "${_ts_target}")
ADD_CUSTOM_TARGET(${_ts_target}
COMMAND "${QT_LUPDATE_EXECUTABLE}" -locations none -no-obsolete -I ${CMAKE_SOURCE_DIR}/include/ ${LMMS_SRCS} ${LMMS_INCLUDES} ${LMMS_UIS} `find "\"${CMAKE_SOURCE_DIR}/plugins/\"" -type f -name '*.cpp' -or -name '*.h'` -ts "\"${_ts_file}\""
COMMAND "${QT_LUPDATE_EXECUTABLE}" -locations none -no-obsolete -I ${CMAKE_SOURCE_DIR}/include/ ${LMMS_SRCS} ${LMMS_UIS} ${CMAKE_SOURCE_DIR}/plugins -ts "\"${_ts_file}\""
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
ADD_CUSTOM_TARGET(${_qm_target}
COMMAND "${QT_LRELEASE_EXECUTABLE}" "${_ts_file}" -qm "${_qm_file}"
@@ -48,9 +47,9 @@ FOREACH(_item ${qm_targets})
ADD_DEPENDENCIES(finalize-locales "${_item}")
ENDFOREACH(_item ${qm_targets})
IF(LMMS_BUILD_WIN32)
FILE(GLOB QT_QM_FILES "${QT_TRANSLATIONS_DIR}/qt*[^h].qm")
IF(BUNDLE_QT_TRANSLATIONS)
FILE(GLOB QT_QM_FILES "${QT_TRANSLATIONS_DIR}/qt*.qm")
LIST(SORT QT_QM_FILES)
ENDIF(LMMS_BUILD_WIN32)
ENDIF()
INSTALL(FILES ${QM_FILES} ${QT_QM_FILES} DESTINATION "${LMMS_DATA_DIR}/locale")

View File

@@ -8746,7 +8746,7 @@ Double clicking any of the plugins will bring up information on the ports.</sour
</message>
</context>
<context>
<name>papuInstrument</name>
<name>FreeBoyInstrument</name>
<message>
<source>Sweep time</source>
<translation type="unfinished"/>
@@ -8841,7 +8841,7 @@ Double clicking any of the plugins will bring up information on the ports.</sour
</message>
</context>
<context>
<name>papuInstrumentView</name>
<name>FreeBoyInstrumentView</name>
<message>
<source>Sweep Time:</source>
<translation type="unfinished"/>

View File

@@ -10913,7 +10913,7 @@ Double clicking any of the plugins will bring up information on the ports.</sour
</message>
</context>
<context>
<name>papuInstrument</name>
<name>FreeBoyInstrument</name>
<message>
<location filename="plugins/papu/papu_instrument.cpp" line="65"/>
<source>Sweep time</source>
@@ -11036,7 +11036,7 @@ Double clicking any of the plugins will bring up information on the ports.</sour
</message>
</context>
<context>
<name>papuInstrumentView</name>
<name>FreeBoyInstrumentView</name>
<message>
<location filename="plugins/papu/papu_instrument.cpp" line="459"/>
<source>Sweep Time:</source>

View File

@@ -8756,7 +8756,7 @@ Fent doble clic a qualsevol connector mostrarà informació sobre els ports.</tr
</message>
</context>
<context>
<name>papuInstrument</name>
<name>FreeBoyInstrument</name>
<message>
<source>Sweep time</source>
<translation type="unfinished"/>
@@ -8851,7 +8851,7 @@ Fent doble clic a qualsevol connector mostrarà informació sobre els ports.</tr
</message>
</context>
<context>
<name>papuInstrumentView</name>
<name>FreeBoyInstrumentView</name>
<message>
<source>Sweep Time:</source>
<translation type="unfinished"/>

View File

@@ -1771,12 +1771,12 @@ Klepnutí pravým tlačítkem myši vyvolá kontextovou nabídku, kde můžete m
<message>
<location filename="../../src/core/EnvelopeAndLfoParameters.cpp" line="97"/>
<source>Decay</source>
<translation>Pokles</translation>
<translation>Útlum</translation>
</message>
<message>
<location filename="../../src/core/EnvelopeAndLfoParameters.cpp" line="98"/>
<source>Sustain</source>
<translation>Držení</translation>
<translation>Vydržení</translation>
</message>
<message>
<location filename="../../src/core/EnvelopeAndLfoParameters.cpp" line="99"/>
@@ -1861,12 +1861,12 @@ Klepnutí pravým tlačítkem myši vyvolá kontextovou nabídku, kde můžete m
<message>
<location filename="../../src/gui/widgets/EnvelopeAndLfoView.cpp" line="119"/>
<source>HOLD</source>
<translation>ZADR</translation>
<translation>DRŽ</translation>
</message>
<message>
<location filename="../../src/gui/widgets/EnvelopeAndLfoView.cpp" line="121"/>
<source>Hold:</source>
<translation>Zadržení:</translation>
<translation>Držení:</translation>
</message>
<message>
<location filename="../../src/gui/widgets/EnvelopeAndLfoView.cpp" line="123"/>
@@ -1876,12 +1876,12 @@ Klepnutí pravým tlačítkem myši vyvolá kontextovou nabídku, kde můžete m
<message>
<location filename="../../src/gui/widgets/EnvelopeAndLfoView.cpp" line="129"/>
<source>DEC</source>
<translation>POK</translation>
<translation>ÚTL</translation>
</message>
<message>
<location filename="../../src/gui/widgets/EnvelopeAndLfoView.cpp" line="131"/>
<source>Decay:</source>
<translation>Pokles:</translation>
<translation>Útlum:</translation>
</message>
<message>
<location filename="../../src/gui/widgets/EnvelopeAndLfoView.cpp" line="133"/>
@@ -1891,7 +1891,7 @@ Klepnutí pravým tlačítkem myši vyvolá kontextovou nabídku, kde můžete m
<message>
<location filename="../../src/gui/widgets/EnvelopeAndLfoView.cpp" line="141"/>
<source>SUST</source>
<translation>DRŽE</translation>
<translation>VYD</translation>
</message>
<message>
<location filename="../../src/gui/widgets/EnvelopeAndLfoView.cpp" line="143"/>
@@ -1906,12 +1906,12 @@ Klepnutí pravým tlačítkem myši vyvolá kontextovou nabídku, kde můžete m
<message>
<location filename="../../src/gui/widgets/EnvelopeAndLfoView.cpp" line="152"/>
<source>REL</source>
<translation>DOZ</translation>
<translation>UVOL</translation>
</message>
<message>
<location filename="../../src/gui/widgets/EnvelopeAndLfoView.cpp" line="154"/>
<source>Release:</source>
<translation>Doznění:</translation>
<translation>Uvolnění:</translation>
</message>
<message>
<location filename="../../src/gui/widgets/EnvelopeAndLfoView.cpp" line="156"/>
@@ -2607,6 +2607,65 @@ Ověřte si prosím, zda máte povolen zápis do souboru a do složky, ve které
<source>Rendering: %1%</source>
<translation>Renderuji: %1%</translation>
</message>
<message>
<source>Compression level:</source>
<translation>Úroveň komprese:</translation>
</message>
<message>
<source>(fastest)</source>
<translation>(nejrychlejší)</translation>
</message>
<message>
<source>(default)</source>
<translation>(výchozí)</translation>
</message>
<message>
<source>(smallest)</source>
<translation>(nejmenší)</translation>
</message>
</context>
<context>
<name>Expressive</name>
<message>
<source>Selected graph</source>
<translation>Zvolený graf</translation>
</message>
<message>
<source>A1</source>
<translation>A1</translation>
</message>
<message>
<source>A2</source>
<translation>A2</translation>
</message>
<message>
<source>A3</source>
<translation>A3</translation>
</message>
<message>
<source>W1 smoothing</source>
<translation>W1 vyhlazování</translation>
</message>
<message>
<source>W2 smoothing</source>
<translation>W2 vyhlazování</translation>
</message>
<message>
<source>W3 smoothing</source>
<translation>W3 vyhlazování</translation>
</message>
<message>
<source>PAN1</source>
<translation>PAN1</translation>
</message>
<message>
<source>PAN2</source>
<translation>PAN2</translation>
</message>
<message>
<source>REL TRANS</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>Fader</name>
@@ -2624,6 +2683,14 @@ Ověřte si prosím, zda máte povolen zápis do souboru a do složky, ve které
<source>Browser</source>
<translation>Prohlížeč</translation>
</message>
<message>
<source>Search</source>
<translation>Hledat</translation>
</message>
<message>
<source>Refresh list</source>
<translation>Obnovit seznam</translation>
</message>
</context>
<context>
<name>FileBrowserTreeWidget</name>
@@ -2673,6 +2740,9 @@ Ověřte si prosím, zda máte povolen zápis do souboru a do složky, ve které
<translation>--- Tovární soubory ---</translation>
</message>
</context>
<context>
<name>FileBrowserTreeWidget</name>
</context>
<context>
<name>FlangerControls</name>
<message>
@@ -4048,7 +4118,7 @@ Efektové kanály můžete odstranit nebo přesunout v kontextové nabídce, kte
<message>
<location filename="../../src/gui/widgets/InstrumentSoundShapingView.cpp" line="114"/>
<source>RESO</source>
<translation>REZON</translation>
<translation>REZO</translation>
</message>
<message>
<location filename="../../src/gui/widgets/InstrumentSoundShapingView.cpp" line="116"/>
@@ -7418,6 +7488,10 @@ Důvod: &quot;%2&quot;</translation>
<source>Compressed OGG-File (*.ogg)</source>
<translation>Komprimovaný OGG soubor (*.ogg)</translation>
</message>
<message>
<source>FLAC-File (*.flac)</source>
<translation>Soubor FLAC (*.flac)</translation>
</message>
<message>
<location filename="../../src/core/ProjectRenderer.cpp" line="55"/>
<source>Compressed MP3-File (*.mp3)</source>
@@ -8993,7 +9067,7 @@ Přesvědčte se prosím, že máte právo ke čtení tohoto souboru a příslu
<message>
<location filename="../../plugins/triple_oscillator/TripleOscillator.cpp" line="687"/>
<source>Use a square-wave for current oscillator.</source>
<translation>Klepněte sem pro pravoúhlou vlnu.</translation>
<translation>Použít pravoúhlou vlnu pro aktuální oscilátor.</translation>
</message>
<message>
<location filename="../../plugins/triple_oscillator/TripleOscillator.cpp" line="698"/>
@@ -10028,12 +10102,12 @@ Přesvědčte se prosím, že máte právo ke čtení tohoto souboru a příslu
<message>
<location filename="../../plugins/dynamics_processor/dynamics_processor_control_dialog.cpp" line="85"/>
<source>RELEASE</source>
<translation>DOZNĚNÍ</translation>
<translation>UVOLNĚNÍ</translation>
</message>
<message>
<location filename="../../plugins/dynamics_processor/dynamics_processor_control_dialog.cpp" line="86"/>
<source>Peak release time:</source>
<translation>Délka doznění špičky:</translation>
<translation>Délka uvolnění špičky:</translation>
</message>
<message>
<location filename="../../plugins/dynamics_processor/dynamics_processor_control_dialog.cpp" line="90"/>
@@ -10456,7 +10530,7 @@ Poklepáním na kterýkoliv modul se zobrazí informace o portech.</translation>
<message>
<location filename="../../plugins/lb302/lb302.cpp" line="280"/>
<source>VCF Envelope Decay</source>
<translation>VCF pokles obálky</translation>
<translation>VCF útlum obálky</translation>
</message>
<message>
<location filename="../../plugins/lb302/lb302.cpp" line="281"/>
@@ -10471,7 +10545,7 @@ Poklepáním na kterýkoliv modul se zobrazí informace o portech.</translation>
<message>
<location filename="../../plugins/lb302/lb302.cpp" line="283"/>
<source>Slide Decay</source>
<translation>Pokles sklouznutí</translation>
<translation>Útlum sklouznutí</translation>
</message>
<message>
<location filename="../../plugins/lb302/lb302.cpp" line="284"/>
@@ -10514,7 +10588,7 @@ Poklepáním na kterýkoliv modul se zobrazí informace o portech.</translation>
<message>
<location filename="../../plugins/lb302/lb302.cpp" line="847"/>
<source>Decay:</source>
<translation>Pokles:</translation>
<translation>Útlum:</translation>
</message>
<message>
<location filename="../../plugins/lb302/lb302.cpp" line="862"/>
@@ -10524,7 +10598,7 @@ Poklepáním na kterýkoliv modul se zobrazí informace o portech.</translation>
<message>
<location filename="../../plugins/lb302/lb302.cpp" line="868"/>
<source>Slide Decay:</source>
<translation>Pokles sklouznutí:</translation>
<translation>Útlum sklouznutí:</translation>
</message>
<message>
<location filename="../../plugins/lb302/lb302.cpp" line="873"/>
@@ -11183,7 +11257,7 @@ Poklepáním na kterýkoliv modul se zobrazí informace o portech.</translation>
<location filename="../../plugins/opl2/opl2instrument.cpp" line="805"/>
<location filename="../../plugins/opl2/opl2instrument.cpp" line="807"/>
<source>Decay</source>
<translation>Pokles</translation>
<translation>Útlum</translation>
</message>
<message>
<location filename="../../plugins/opl2/opl2instrument.cpp" line="809"/>
@@ -11276,7 +11350,7 @@ Poklepáním na kterýkoliv modul se zobrazí informace o portech.</translation>
</message>
</context>
<context>
<name>papuInstrument</name>
<name>FreeBoyInstrument</name>
<message>
<location filename="../../plugins/papu/papu_instrument.cpp" line="67"/>
<source>Sweep time</source>
@@ -11296,7 +11370,7 @@ Poklepáním na kterýkoliv modul se zobrazí informace o portech.</translation>
<location filename="../../plugins/papu/papu_instrument.cpp" line="72"/>
<location filename="../../plugins/papu/papu_instrument.cpp" line="81"/>
<source>Wave Pattern Duty</source>
<translation>Pracovní cyklus vlnového vzorce</translation>
<translation>Pracovní cyklus vlnového patternu</translation>
</message>
<message>
<location filename="../../plugins/papu/papu_instrument.cpp" line="74"/>
@@ -11399,7 +11473,7 @@ Poklepáním na kterýkoliv modul se zobrazí informace o portech.</translation>
</message>
</context>
<context>
<name>papuInstrumentView</name>
<name>FreeBoyInstrumentView</name>
<message>
<location filename="../../plugins/papu/papu_instrument.cpp" line="462"/>
<source>Sweep Time:</source>
@@ -11434,12 +11508,12 @@ Poklepáním na kterýkoliv modul se zobrazí informace o portech.</translation>
<location filename="../../plugins/papu/papu_instrument.cpp" line="477"/>
<location filename="../../plugins/papu/papu_instrument.cpp" line="502"/>
<source>Wave pattern duty:</source>
<translation>Pracovní cyklus vlnového vzorce:</translation>
<translation>Pracovní cyklus vlnového patternu:</translation>
</message>
<message>
<location filename="../../plugins/papu/papu_instrument.cpp" line="480"/>
<source>Wave Pattern Duty</source>
<translation>Pracovní cyklus vlnového vzorce</translation>
<translation>Pracovní cyklus vlnového patternu</translation>
</message>
<message>
<location filename="../../plugins/papu/papu_instrument.cpp" line="481"/>
@@ -11482,7 +11556,7 @@ Poklepáním na kterýkoliv modul se zobrazí informace o portech.</translation>
<message>
<location filename="../../plugins/papu/papu_instrument.cpp" line="505"/>
<source>Wave pattern duty</source>
<translation>Pracovní cyklus vlnového vzorce</translation>
<translation>Pracovní cyklus vlnového patternu</translation>
</message>
<message>
<location filename="../../plugins/papu/papu_instrument.cpp" line="511"/>
@@ -11619,7 +11693,7 @@ Poklepáním na kterýkoliv modul se zobrazí informace o portech.</translation>
<message>
<location filename="../../plugins/papu/papu_instrument.cpp" line="688"/>
<source>Wave Pattern</source>
<translation>Vlnový vzorec</translation>
<translation>Vlnový pattern</translation>
</message>
<message>
<location filename="../../plugins/papu/papu_instrument.cpp" line="689"/>
@@ -11899,6 +11973,10 @@ Tento čip byl používán v počítačích Commodore 64.</translation>
<source>Embedded ZynAddSubFX</source>
<translation>Vestavěný ZynAddSubFX</translation>
</message>
<message>
<source>Mathematical expression parser</source>
<translation>Parser matematických výrazů</translation>
</message>
</context>
<context>
<name>sf2Instrument</name>
@@ -12170,7 +12248,7 @@ Tento čip byl používán v počítačích Commodore 64.</translation>
<location filename="../../plugins/sid/sid_instrument.cpp" line="558"/>
<location filename="../../plugins/sid/sid_instrument.cpp" line="704"/>
<source>Decay:</source>
<translation>Pokles:</translation>
<translation>Útlum:</translation>
</message>
<message>
<location filename="../../plugins/sid/sid_instrument.cpp" line="560"/>
@@ -12180,7 +12258,7 @@ Tento čip byl používán v počítačích Commodore 64.</translation>
<message>
<location filename="../../plugins/sid/sid_instrument.cpp" line="564"/>
<source>Sustain:</source>
<translation>Držení:</translation>
<translation>Vydržení:</translation>
</message>
<message>
<location filename="../../plugins/sid/sid_instrument.cpp" line="566"/>
@@ -12191,7 +12269,7 @@ Tento čip byl používán v počítačích Commodore 64.</translation>
<location filename="../../plugins/sid/sid_instrument.cpp" line="570"/>
<location filename="../../plugins/sid/sid_instrument.cpp" line="710"/>
<source>Release:</source>
<translation>Doznění:</translation>
<translation>Uvolnění:</translation>
</message>
<message>
<location filename="../../plugins/sid/sid_instrument.cpp" line="572"/>
@@ -12620,7 +12698,7 @@ LED v pravém dolním rohu editoru vlny určuje, jestli bude struna v aktuální
<message>
<location filename="../../plugins/vibed/vibed.cpp" line="599"/>
<source>Use a square-wave for current oscillator.</source>
<translation>Klepněte sem pro pravoúhlou vlnu.</translation>
<translation>Použít pravoúhlou vlnu pro aktuální oscilátor.</translation>
</message>
<message>
<location filename="../../plugins/vibed/vibed.cpp" line="605"/>
@@ -12678,17 +12756,17 @@ LED v pravém dolním rohu editoru vlny určuje, jestli bude struna v aktuální
<message>
<location filename="../../plugins/sid/sid_instrument.cpp" line="98"/>
<source>Voice %1 decay</source>
<translation>Hlas %1 pokles</translation>
<translation>Hlas %1 útlum</translation>
</message>
<message>
<location filename="../../plugins/sid/sid_instrument.cpp" line="100"/>
<source>Voice %1 sustain</source>
<translation>Hlas %1 držení</translation>
<translation>Hlas %1 vydržení</translation>
</message>
<message>
<location filename="../../plugins/sid/sid_instrument.cpp" line="102"/>
<source>Voice %1 release</source>
<translation>Hlas %1 doznění</translation>
<translation>Hlas %1 uvolnění</translation>
</message>
<message>
<location filename="../../plugins/sid/sid_instrument.cpp" line="104"/>
@@ -12807,4 +12885,4 @@ LED v pravém dolním rohu editoru vlny určuje, jestli bude struna v aktuální
<translation>Zesílení výstupu</translation>
</message>
</context>
</TS>
</TS>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -503,6 +503,14 @@ Si te interesa traducir LMMS a otros idiomas o mejorar las traducciones existent
<source>Model is already connected to this pattern.</source>
<translation>El modelo ya está conectado a este patrón.</translation>
</message>
<message>
<source>Quantization</source>
<translation>Cuantización</translation>
</message>
<message>
<source>Quantization. Sets the smallest step size for the Automation Point. By default this also sets the length, clearing out other points in the range. Press &lt;Ctrl&gt; to override this behaviour.</source>
<translation>Cuantización. Define el tamaño mínimo del paso para el Punto de Automatización. Por defecto esto también define la longitud, quitando otros puntos a su alcance. Presiona &lt;Ctrl&gt; para anular este comportamiento.</translation>
</message>
</context>
<context>
<name>AutomationPattern</name>
@@ -513,10 +521,6 @@ Si te interesa traducir LMMS a otros idiomas o mejorar las traducciones existent
</context>
<context>
<name>AutomationPatternView</name>
<message>
<source>double-click to open this pattern in automation editor</source>
<translation>Haz doble click para abrir este patrón en el editor de Automatización</translation>
</message>
<message>
<source>Open in Automation editor</source>
<translation>Abrir en el editor de Automatización</translation>
@@ -714,10 +718,6 @@ Si te interesa traducir LMMS a otros idiomas o mejorar las traducciones existent
<source>Input Gain:</source>
<translation>Ganancia de Entrada:</translation>
</message>
<message>
<source>NOIS</source>
<translation>RUIDO</translation>
</message>
<message>
<source>Input Noise:</source>
<translation>Ruido de entrada:</translation>
@@ -734,10 +734,6 @@ Si te interesa traducir LMMS a otros idiomas o mejorar las traducciones existent
<source>Output Clip:</source>
<translation>Recorte de salida:</translation>
</message>
<message>
<source>Rate</source>
<translation>Tasa (rate)</translation>
</message>
<message>
<source>Rate Enabled</source>
<translation>Tasa Habilitada</translation>
@@ -746,10 +742,6 @@ Si te interesa traducir LMMS a otros idiomas o mejorar las traducciones existent
<source>Enable samplerate-crushing</source>
<translation>Habilitar reduccion de frecuencia de muestreo</translation>
</message>
<message>
<source>Depth</source>
<translation>Profundidad</translation>
</message>
<message>
<source>Depth Enabled</source>
<translation>Profundidad Habilitada</translation>
@@ -762,22 +754,30 @@ Si te interesa traducir LMMS a otros idiomas o mejorar las traducciones existent
<source>Sample rate:</source>
<translation>Frecuencia de Muestreo:</translation>
</message>
<message>
<source>STD</source>
<translation>DE</translation>
</message>
<message>
<source>Stereo difference:</source>
<translation>Diferencia estéreo:</translation>
</message>
<message>
<source>Levels</source>
<translation>Niveles</translation>
</message>
<message>
<source>Levels:</source>
<translation>Niveles:</translation>
</message>
<message>
<source>NOISE</source>
<translation>RUIDO</translation>
</message>
<message>
<source>FREQ</source>
<translation>FREC</translation>
</message>
<message>
<source>STEREO</source>
<translation>ESTÉREO</translation>
</message>
<message>
<source>QUANT</source>
<translation>SECUENCIADOR</translation>
</message>
</context>
<context>
<name>CaptionMenu</name>
@@ -1979,10 +1979,6 @@ Haciendo click derecho accederás a un menú contextual en el que podrás cambia
<source>32 Bit Float</source>
<translation>32 Bit Decimal</translation>
</message>
<message>
<source>Please note that not all of the parameters above apply for all file formats.</source>
<translation>Por favor nota que no todos los parámetros especificados anteriormente se aplican a todos los tipos de archivos.</translation>
</message>
<message>
<source>Quality settings</source>
<translation>Configuración de calidad</translation>
@@ -2069,6 +2065,89 @@ Please make sure you have write permission to the file and the directory contain
<translation>El archivo %1 no puede abrirse para escritura.
Asegúrate de tener permisos de escritura tanto del archivo como del directorio que lo contiene e inténtalo de nuevo.</translation>
</message>
<message>
<source>24 Bit Integer</source>
<translation>24 Bits Entero</translation>
</message>
<message>
<source>Use variable bitrate</source>
<translation>Usar tasa de bits variable</translation>
</message>
<message>
<source>Stereo mode:</source>
<translation>MODO ESTÉREO:</translation>
</message>
<message>
<source>Stereo</source>
<translation>Estéreo</translation>
</message>
<message>
<source>Joint Stereo</source>
<translation>Conjunto De Estéreo:</translation>
</message>
<message>
<source>Mono</source>
<translation>Mono</translation>
</message>
<message>
<source>Compression level:</source>
<translation>Compresor De Niveles:</translation>
</message>
<message>
<source>(fastest)</source>
<translation>(Rápido)</translation>
</message>
<message>
<source>(default)</source>
<translation>(Por Defecto)</translation>
</message>
<message>
<source>(smallest)</source>
<translation>(Reducir)</translation>
</message>
</context>
<context>
<name>Expressive</name>
<message>
<source>Selected graph</source>
<translation>Gráfico seleccionado</translation>
</message>
<message>
<source>A1</source>
<translation>A1</translation>
</message>
<message>
<source>A2</source>
<translation>A2</translation>
</message>
<message>
<source>A3</source>
<translation>A3</translation>
</message>
<message>
<source>W1 smoothing</source>
<translation>W1 Suavizadora</translation>
</message>
<message>
<source>W2 smoothing</source>
<translation>W2 Suavizadora</translation>
</message>
<message>
<source>W3 smoothing</source>
<translation>W3 Suavizadora</translation>
</message>
<message>
<source>PAN1</source>
<translation>PAN1</translation>
</message>
<message>
<source>PAN2</source>
<translation>PAN2</translation>
</message>
<message>
<source>REL TRANS</source>
<translation>REL TRANS</translation>
</message>
</context>
<context>
<name>Fader</name>
@@ -2083,6 +2162,14 @@ Asegúrate de tener permisos de escritura tanto del archivo como del directorio
<source>Browser</source>
<translation>Explorador</translation>
</message>
<message>
<source>Search</source>
<translation>Buscar</translation>
</message>
<message>
<source>Refresh list</source>
<translation>Actualizar Lista</translation>
</message>
</context>
<context>
<name>FileBrowserTreeWidget</name>
@@ -2172,10 +2259,6 @@ Asegúrate de tener permisos de escritura tanto del archivo como del directorio
<source>RATE</source>
<translation>TASA</translation>
</message>
<message>
<source>Rate:</source>
<translation>Tasa:</translation>
</message>
<message>
<source>AMNT</source>
<translation>CANT</translation>
@@ -2196,6 +2279,10 @@ Asegúrate de tener permisos de escritura tanto del archivo como del directorio
<source>Invert</source>
<translation>Invertir</translation>
</message>
<message>
<source>Period:</source>
<translation>Period:</translation>
</message>
</context>
<context>
<name>FxLine</name>
@@ -2249,6 +2336,18 @@ Puedes quitar y mover los canales FX a través del menú contextual. Accede a es
<source>FX %1</source>
<translation>FX %1</translation>
</message>
<message>
<source>Volume</source>
<translation>Volumen</translation>
</message>
<message>
<source>Mute</source>
<translation>Silencio</translation>
</message>
<message>
<source>Solo</source>
<translation>Solo</translation>
</message>
</context>
<context>
<name>FxMixerView</name>
@@ -3365,22 +3464,10 @@ Puedes quitar y mover los canales FX a través del menú contextual. Accede a es
<source>FX channel</source>
<translation>Canal FX</translation>
</message>
<message>
<source>ENV/LFO</source>
<translation>ENV/LFO</translation>
</message>
<message>
<source>FUNC</source>
<translation>FUNC</translation>
</message>
<message>
<source>FX</source>
<translation>FX</translation>
</message>
<message>
<source>MIDI</source>
<translation>MIDI</translation>
</message>
<message>
<source>Save preset</source>
<translation>Guardar preconfiguración</translation>
@@ -3389,10 +3476,6 @@ Puedes quitar y mover los canales FX a través del menú contextual. Accede a es
<source>XML preset file (*.xpf)</source>
<translation>archivo de preconfiguración XML (*.xpf)</translation>
</message>
<message>
<source>PLUGIN</source>
<translation>COMPLEMENTO</translation>
</message>
<message>
<source>Pitch range (semitones)</source>
<translation>Extensión (en semitonos)</translation>
@@ -3409,10 +3492,6 @@ Puedes quitar y mover los canales FX a través del menú contextual. Accede a es
<source>Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser.</source>
<translation>Haz click aquí si quieres guardar la configuración de esta pista de instrumento en un archivo de preconfiguración. Luego podrás cargar esta preconfiguración haciendo doble click en ella en el explorador de preconfiguraciones.</translation>
</message>
<message>
<source>MISC</source>
<translation>MISC</translation>
</message>
<message>
<source>Use these controls to view and edit the next/previous track in the song editor.</source>
<translation>Usa estos controles para ver y editar la pista siguiente/anterior en el editor de canción</translation>
@@ -3421,6 +3500,30 @@ Puedes quitar y mover los canales FX a través del menú contextual. Accede a es
<source>SAVE</source>
<translation>GUARDAR</translation>
</message>
<message>
<source>Envelope, filter &amp; LFO</source>
<translation>Sobre, Filtro y LFO</translation>
</message>
<message>
<source>Chord stacking &amp; arpeggio</source>
<translation>Acorde de Apilamiento y Arpegio</translation>
</message>
<message>
<source>Effects</source>
<translation>Efectos</translation>
</message>
<message>
<source>MIDI settings</source>
<translation>Configuración MIDI</translation>
</message>
<message>
<source>Miscellaneous</source>
<translation>Diversos</translation>
</message>
<message>
<source>Plugin</source>
<translation>Plugin</translation>
</message>
</context>
<context>
<name>Knob</name>
@@ -3656,16 +3759,6 @@ Haz doble click para seleccionar un archivo.</translation>
</context>
<context>
<name>MainWindow</name>
<message>
<source>Could not save config-file</source>
<translation>No se pudo guardar el archivo de configuración</translation>
</message>
<message>
<source>Could not save configuration file %1. You're probably not permitted to write to this file.
Please make sure you have write-access to the file and try again.</source>
<translation>No se pudo guardar el archivo de configuración %1. Puede ser que no tengas permisos para escribir este archivo.
Por favor asegúrate de tener los permisos necesarios e inténtalo de nuevo.</translation>
</message>
<message>
<source>&amp;New</source>
<translation>&amp;Nuevo</translation>
@@ -3920,14 +4013,6 @@ Por favor visita http://lmms.sf.net/wiki para obtener documentación acerca de L
<source>Recover the file. Please don&apos;t run multiple instances of LMMS when you do this.</source>
<translation>Recuperar el archivo. Por favor no ejecutes múltiples instancias de LMMS al hacerlo.</translation>
</message>
<message>
<source>Ignore</source>
<translation>Ignorar</translation>
</message>
<message>
<source>Launch LMMS as usual but with automatic backup disabled to prevent the present recover file from being overwritten.</source>
<translation>Ejecuta LMMS de manera usual pero desactivando el guardado automático para evitar sobreescribir el archivo de recuperación.</translation>
</message>
<message>
<source>Discard</source>
<translation>Descartar</translation>
@@ -4000,10 +4085,6 @@ Por favor visita http://lmms.sf.net/wiki para obtener documentación acerca de L
<source>Recover session. Please save your work!</source>
<translation>Recuperar sesión. ¡Por favor guarda tu trabajo!</translation>
</message>
<message>
<source>Automatic backup disabled. Remember to save your work!</source>
<translation>Guardado Automático deshabilitado. ¡Recuerda guardar tu trabajo!</translation>
</message>
<message>
<source>Recovered project not saved</source>
<translation>Proyecto recuperado no guardado</translation>
@@ -4044,6 +4125,20 @@ Por favor visita http://lmms.sf.net/wiki para obtener documentación acerca de L
<source>Volume as dBFS</source>
<translation>Volumen en dBFS</translation>
</message>
<message>
<source>Could not open file</source>
<translation>No se puede abrir el archivo</translation>
</message>
<message>
<source>Could not open file %1 for writing.
Please make sure you have write permission to the file and the directory containing the file and try again!</source>
<translation>El archivo %1 no puede abrirse para escritura.
Asegúrate de tener permisos de escritura tanto del archivo como del directorio que lo contiene e inténtalo de nuevo.</translation>
</message>
<message>
<source>Export &amp;MIDI...</source>
<translation>Exportar &amp;MIDI...</translation>
</message>
</context>
<context>
<name>MeterDialog</name>
@@ -5326,14 +5421,6 @@ PM significa &apos;modulación de fase&apos;. La fase del oscilador 3 es modulad
<source>Remove steps</source>
<translation>Quitar pasos</translation>
</message>
<message>
<source>use mouse wheel to set velocity of a step</source>
<translation>usa la rueda del ratón para definir la velocidad de un paso</translation>
</message>
<message>
<source>double-click to open in Piano Roll</source>
<translation>Haz doble click para abrir en Piano Roll</translation>
</message>
<message>
<source>Clone Steps</source>
<translation>Clonar Pasos</translation>
@@ -5721,14 +5808,6 @@ Razón: &quot;%2&quot;</translation>
</context>
<context>
<name>ProjectNotes</name>
<message>
<source>Project notes</source>
<translation>Notas del Proyecto</translation>
</message>
<message>
<source>Put down your project notes here.</source>
<translation>Coloca aquí tus notas del proyecto.</translation>
</message>
<message>
<source>Edit Actions</source>
<translation>Edición</translation>
@@ -5837,6 +5916,14 @@ Razón: &quot;%2&quot;</translation>
<source>&amp;Color...</source>
<translation>&amp;Color...</translation>
</message>
<message>
<source>Project Notes</source>
<translation>Notas del Proyecto</translation>
</message>
<message>
<source>Enter project notes here</source>
<translation>Ingrese las Notas del Proyecto Aquí</translation>
</message>
</context>
<context>
<name>ProjectRenderer</name>
@@ -5848,6 +5935,14 @@ Razón: &quot;%2&quot;</translation>
<source>Compressed OGG-File (*.ogg)</source>
<translation>Archivo OGG comprimido (*.ogg)</translation>
</message>
<message>
<source>FLAC-File (*.flac)</source>
<translation>Archivo FLAC (*.flac)</translation>
</message>
<message>
<source>Compressed MP3-File (*.mp3)</source>
<translation>Compresor De Archivos MP3 (*.mp3)</translation>
</message>
</context>
<context>
<name>QWidget</name>
@@ -6007,6 +6102,14 @@ Razón: &quot;%2&quot;</translation>
<source>All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)</source>
<translation>Todos los archivos de Audio (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw)</translation>
</message>
<message>
<source>Fail to open file</source>
<translation>No se pudo abrir el archivo</translation>
</message>
<message>
<source>Audio files are limited to %1 MB in size and %2 minutes of playing time</source>
<translation>Los archivos de audio tienen un límite de tamaño de %1 MB y %2 minutos de duración</translation>
</message>
</context>
<context>
<name>SampleTCOView</name>
@@ -6813,6 +6916,10 @@ Please make sure you have read-permission to the file and the directory containi
<source>Importing MIDI-file...</source>
<translation>Importando archivo MIDI...</translation>
</message>
<message>
<source>Loading Track %1 (%2/Total %3)</source>
<translation>Cargando Pista %1 (%2/Total %3)</translation>
</message>
</context>
<context>
<name>TrackContentObject</name>
@@ -7940,6 +8047,133 @@ Please make sure you have read-permission to the file and the directory containi
<translation>Modo Estéreo</translation>
</message>
</context>
<context>
<name>expressiveView</name>
<message>
<source>Select oscillator W1</source>
<translation>Seleccionar Oscilador W1</translation>
</message>
<message>
<source>Select oscillator W2</source>
<translation>Seleccionar Oscilador W2</translation>
</message>
<message>
<source>Select oscillator W3</source>
<translation>Seleccionar Oscilador W3</translation>
</message>
<message>
<source>Select OUTPUT 1</source>
<translation>Seleccionar SALIDA 1</translation>
</message>
<message>
<source>Select OUTPUT 2</source>
<translation>Seleccionar SALIDA 2</translation>
</message>
<message>
<source>Open help window</source>
<translation>Abrir Ventana De Ayuda</translation>
</message>
<message>
<source>Sine wave</source>
<translation>Onda sinusoidal</translation>
</message>
<message>
<source>Click for a sine-wave.</source>
<translation>Haz click aquí para elegir una onda sinusoidal.</translation>
</message>
<message>
<source>Moog-Saw wave</source>
<translation>Moog-Saw wave</translation>
</message>
<message>
<source>Click for a Moog-Saw-wave.</source>
<translation>Clic Aquí Para La Moog-Saw-wave.</translation>
</message>
<message>
<source>Exponential wave</source>
<translation>Onda Exponencial</translation>
</message>
<message>
<source>Click for an exponential wave.</source>
<translation>Clic Aquí para Obtener una Onda Exponencial.</translation>
</message>
<message>
<source>Saw wave</source>
<translation>Onda de sierra</translation>
</message>
<message>
<source>Click here for a saw-wave.</source>
<translation>Haz click aquí para elegir una onda de sierra.</translation>
</message>
<message>
<source>User defined wave</source>
<translation>Onda definida por el usuario</translation>
</message>
<message>
<source>Click here for a user-defined shape.</source>
<translation>Haz click aquí para elegir una onda personalizada.</translation>
</message>
<message>
<source>Triangle wave</source>
<translation>Onda triangular</translation>
</message>
<message>
<source>Click here for a triangle-wave.</source>
<translation>Haz click aquí para elegir una onda triangular.</translation>
</message>
<message>
<source>Square wave</source>
<translation>Onda cuadrada</translation>
</message>
<message>
<source>Click here for a square-wave.</source>
<translation>Haz click aquí para seleccionar una onda cuadrada.</translation>
</message>
<message>
<source>White noise wave</source>
<translation>Ruido blanco</translation>
</message>
<message>
<source>Click here for white-noise.</source>
<translation>Haz click aquí para elegir ruido blanco.</translation>
</message>
<message>
<source>WaveInterpolate</source>
<translation>Oleada Interpolar</translation>
</message>
<message>
<source>ExpressionValid</source>
<translation>Expresión Validada</translation>
</message>
<message>
<source>General purpose 1:</source>
<translation>Propósito General 1:</translation>
</message>
<message>
<source>General purpose 2:</source>
<translation>Propósito General 2:</translation>
</message>
<message>
<source>General purpose 3:</source>
<translation>Propósito General 3:</translation>
</message>
<message>
<source>O1 panning:</source>
<translation>Panorámica O1:</translation>
</message>
<message>
<source>O2 panning:</source>
<translation>Panorámica O2:</translation>
</message>
<message>
<source>Release transition:</source>
<translation>Liberar La Transición:</translation>
</message>
<message>
<source>Smoothness</source>
<translation>Suavizar</translation>
</message>
</context>
<context>
<name>fxLineLcdSpinBox</name>
<message>
@@ -8856,7 +9090,7 @@ Haciendo doble click en cualquier complemento se mostrará la información de su
</message>
</context>
<context>
<name>papuInstrument</name>
<name>FreeBoyInstrument</name>
<message>
<source>Sweep time</source>
<translation>Duración del barrido</translation>
@@ -8951,7 +9185,7 @@ Haciendo doble click en cualquier complemento se mostrará la información de su
</message>
</context>
<context>
<name>papuInstrumentView</name>
<name>FreeBoyInstrumentView</name>
<message>
<source>Sweep Time:</source>
<translation>Duración del barrido:</translation>
@@ -9340,6 +9574,10 @@ Este chip fue usado en las computadoras Commodore 64.</translation>
<source>Reverb algorithm by Sean Costello</source>
<translation>Algoritmo de reverberación por Sean Costello</translation>
</message>
<message>
<source>Mathematical expression parser</source>
<translation>Analizador de Expresión Matemática</translation>
</message>
</context>
<context>
<name>sf2Instrument</name>

View File

@@ -8050,7 +8050,7 @@ Double clicking any of the plugins will bring up information on the ports.</sour
</message>
</context>
<context>
<name>papuInstrument</name>
<name>FreeBoyInstrument</name>
<message>
<source>Sweep time</source>
<translation type="unfinished"></translation>
@@ -8145,7 +8145,7 @@ Double clicking any of the plugins will bring up information on the ports.</sour
</message>
</context>
<context>
<name>papuInstrumentView</name>
<name>FreeBoyInstrumentView</name>
<message>
<source>Sweep Time:</source>
<translation type="unfinished"></translation>

File diff suppressed because it is too large Load Diff

View File

@@ -8772,7 +8772,7 @@ Facendo duplo clic sobre calquera dos engadidos mostra información sobre os por
</message>
</context>
<context>
<name>papuInstrument</name>
<name>FreeBoyInstrument</name>
<message>
<source>Sweep time</source>
<translation>Tempo da varredura</translation>
@@ -8867,7 +8867,7 @@ Facendo duplo clic sobre calquera dos engadidos mostra información sobre os por
</message>
</context>
<context>
<name>papuInstrumentView</name>
<name>FreeBoyInstrumentView</name>
<message>
<source>Sweep Time:</source>
<translation>Tempo da varredura:</translation>

View File

@@ -8744,7 +8744,7 @@ Double clicking any of the plugins will bring up information on the ports.</sour
</message>
</context>
<context>
<name>papuInstrument</name>
<name>FreeBoyInstrument</name>
<message>
<source>Sweep time</source>
<translation type="unfinished"/>
@@ -8839,7 +8839,7 @@ Double clicking any of the plugins will bring up information on the ports.</sour
</message>
</context>
<context>
<name>papuInstrumentView</name>
<name>FreeBoyInstrumentView</name>
<message>
<source>Sweep Time:</source>
<translation type="unfinished"/>

File diff suppressed because it is too large Load Diff

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