Commit Graph

1519 Commits

Author SHA1 Message Date
Tobias Doerffel
b38eab0075 FxMixer: rewrote processing of FX channels
Rewrote the way FX channels (FX lines) are processed, i.e. the
calculation when to process which channel. This patch based on a patch
by Stefan Fendt but includes further improvements regarding
multithreading.
2010-08-30 17:32:19 +02:00
Tobias Doerffel
efee8ab147 PianoRoll: fix last commit
Commit 28eb7e00bf was based on a patch
created for the stable-0.4 branch. It therefore used note::selected()
instead of note::isSelected().
2010-08-25 00:35:07 +02:00
Tobias Doerffel
28eb7e00bf PianoRoll: respect stacking order of notes
Notes are always drawn on-top of each other starting from the left
to the right. However the behaviour when clicking notes was reverse,
which made it quite hard to edit notes sometimes. Now the top most
note is edited/selected/moved/resized if notes overlay.

Closes #2808603.
2010-08-24 18:42:49 +02:00
Tobias Doerffel
6e64bcfc42 SampleBuffer: for OGG files try with OGG Vorbis decoder first
This is workaround for a bug in libsndfile or our libsndfile decoder
causing some OGG files to be distorted. Therefore try the OGG Vorbis
decoder first if filename extension matches "ogg".

Closes #2957937.
2010-08-22 02:18:34 +02:00
Tobias Doerffel
8286c1031d PianoRoll: allow chaning volume and panning of step notes
There's no reason to not allow changing volume and panning of step notes
in PianoRoll. Therefore simply check whether the length is not equal to
zero (which might be disabled step notes) instead of checking for length
being greater than zero.

Closes #2836799.
2010-08-19 00:14:19 +02:00
Tobias Doerffel
46c20bdcbd PianoRoll: fixed messed up editing modes when pressing Ctrl
There were some bugs when pressing Ctrl while in SelectMode. Fix this
by always setting m_ctrlMode and m_editMode in keyPressEvent() when
Ctrl was pressed.

Closes #2854958 and #2836576.
2010-08-18 23:55:04 +02:00
Tobias Doerffel
2614474246 Song: reset global models in clearProject()
We have to reset global models such as tempo, master volume etc. before
clearing the global automation patterns attached to them. Fixes bug with
persistent automation on these controls when clearing project.

Closes #3046039.
2010-08-16 20:28:53 +02:00
Tobias Doerffel
23a3efcac0 MeterModel: clear global automation patterns in reset()
When resetting a MeterModel we also have to clear global automation
patterns attached to it. Fixes bug with persistent automation data on
e.g. time signature widget when clearing project.
2010-08-16 20:25:26 +02:00
Tobias Doerffel
9b280ffb3e Renamed all automation related files and classes to match new coding style
All automation-related files and classes have been renamed to match the
new coding style.
2010-08-16 20:21:18 +02:00
Tobias Doerffel
676a6fbad1 ControllerRackView: do not loose focus when adding controller
For an unknown reason the ControllerRackView looses focus when adding
a new controller. Fix this by explicitely calling QWidget::setFocus()
at the end of ControllerRackView::addController().

Closes #3046041.
2010-08-16 18:09:48 +02:00
Tobias Doerffel
9acb47a7a8 InstrumentTrackWindow: correctly disconnect from track's signals
We used QObject::disconnect() the wrong way leading to multiple
connections from InstrumentTrack::instrumentChanged() to
InstrumentTrackWindow::updateInstrumentView(). This resulted in
loading times being doubled each time you loaded a preset on the same
InstrumentTrack.

Closes #2934099.
2010-08-15 14:19:43 +02:00
Tobias Doerffel
65311ef2b4 InstrumentTrack: do not try to load "libconnection.so" in compat code
In compat code of InstrumentTrack::loadTrackSpecificSettings() also
check for nodeName being equal to ControllerConnection::classNodeName().
This avoids trying to load the non-existing instrument "connection".
In master branch this has been fixed ugly in commit 22c877d4 before,
however implement a cleaner solution which is also suitable for
backporting.

Closes #3021259.
2010-08-15 13:56:25 +02:00
Tobias Doerffel
d830e7f622 EffectView: fixed artifacts with semitransparent widget shadow
We must not set the Qt::WA_OpaquePaintEvent attribute when using a
semitransparent background image in paintEvent(). Fixes artifacts
in EffectView's shadowed border.
2010-08-15 12:40:10 +02:00
Tobias Doerffel
311bc92bde SampleTrack: fixed non-functional solo and mute buttons
The SampleTrackView did not explicitely have a SampleTrack model
attached and thus trackView::modelChanged() was not called. This way
SampleTrackView's mute and solo buttons were not connected to the
according models of the SampleTrack model. Fix this by calling
setModel() in SampleTrackView::SampleTrackView() (as done in
constructors of other track types too) and overload the
SampleTrackView::modelChanged() method.

Closes #3043836.
2010-08-14 00:23:13 +02:00
Tobias Doerffel
114c1973e2 Renamed PATH_SEPARATOR to LADSPA_PATH_SEPARATOR and fixed it
Commit 4e9ebd09c6 introduced PATH_SEPARATOR
but with wrong syntax. Fixed this and renamed it to LADSPA_PATH_SEPARATOR.
2010-08-12 10:29:37 +02:00
Paul Giblock
4e9ebd09c6 Use proper path seperator for LADSPA_PATH
According to http://www.ladspa.org/ladspa_sdk/shared_plugins.html,
LADSPA_PATH is supposed to be delimited by colons.  This patch does so,
except on Windows.  On Windows we use ';' instead of ':' since colon is
a legal character for a path.
2010-08-11 21:40:54 -04:00
Paul Giblock
9f2640946e Use QProxyStyle support in DefaultStyle
The specializations to utilize different styles is a nice idea, but it
is hard to discover which styles a user may have installed.
Additionally, it would be impossible to override a system style.  This
patch implemnts ClassicStyle as a QProxyStyle.

This additionally fixes the missing dependency on toolbar_bg. Utilize
CSS now.
2010-08-07 18:35:49 -04:00
Tobias Doerffel
93681760d2 InstrumentTrackView: added one-window-mode + global piano focus
Added a one-window-mode which allows to have only one instrument track
window open at a time. The content of this window is replaced each time
you open a different track.

Furthermore added global reception and forwarding of key events to the
piano widget of the top-most instrument track window. This for example
enables the user to play test sounds while tweaking some effects in a
different subwindow.
2010-08-06 23:05:00 +02:00
Tobias Doerffel
68abd34908 AutomatableModelView/ContextMenu: option for unlinking all controls
Integrated patch by Rodrigo Rodrigues da Silva which adds an option
to all AutomatableModelView's context menu allowing to unlink all
linked controls.
2010-07-28 21:25:30 +02:00
Tobias Doerffel
9e42d4388e ClassicStyle: template-based derivation from native style
First attempts to get away from QPlastiqueStyle as the default style
and instead dynamically use an overloaded version of the native style.
Still needs lots of tuning, especially regarding colors.
2010-07-28 21:21:11 +02:00
Tobias Doerffel
db8de3450c TextFloat: fixed size calculation in simple mode
The height of TextFloat objects was not sufficient e.g. when used as
tooltips for knobs (while changing their values). Fixed improper
geometry calculation and static values in TextFloat::paintEvent().
2010-07-28 20:13:19 +02:00
Tobias Doerffel
206c30ff73 AudioJack: do not use QVector in processCallback()
Using QVector involves calls to malloc & friends which are not RT safe
and thus must not be used in AudioJack::processCallback(). Instead
allocate the required array upon initialization.
(cherry picked from commit ae7a4e4c2f13432d39b13c25b66231bdd6a1cc65)
2010-07-26 15:54:46 +02:00
Tobias Doerffel
31b099d74e AudioJack: more optional code for AudioPort support
There's been some more code that is only required if AUDIO_PORT_SUPPORT
is set. Added according #ifdefs and fixed a typo in AudioPort support
code.
(cherry picked from commit e98726ae992c77fb2dfdb6668319b5521ff8aaef)
2010-07-26 15:54:40 +02:00
Tobias Doerffel
b0822212b0 Merge branch 'remote-plugin-fixes'
* remote-plugin-fixes:
  RemotePlugin: sleep in waitForMessage() when actively waiting for data
  RemotePlugin: better code order in sendMessage() + cleanups
  RemotePlugin: coding style fixes + inline keyword reduces
  RemotePlugin: smaller buffers for number to string conversions
  RemotePlugin: added branch prediction hints
2010-07-26 15:52:14 +02:00
Tobias Doerffel
4ea8b9d9c2 Merge branch 'mingw64-compat-fixes'
* mingw64-compat-fixes:
  CMakeLists.txt: install libFLAC-8.dll for win32 build
  Improved support for MinGW cross compile builds
2010-07-26 15:04:00 +02:00
Tobias Doerffel
e07ed33827 3rdparty/libsamplerate: renamed config.h to src_config.h
We must not have any file called config.h in directories which are added
to global include directories. For example when building the CALF plugin
the file config.h from libsamplerate was used rather than CALF's local
one. Fixes missing LADSPA symbols in CALF library if no usable
libsamplerate was found in the system at configure time.

Also bumped version number in src_config.h.
2010-07-25 14:36:01 +02:00
Tobias Doerffel
5306f7b0ca TrackContentObject: keep position in paste()
When calling TrackContentObject::paste(), only the content should be
pasted, not the position. This fixes pasting for example note patterns
and is also a more generic solution for the bug fixed in commit
4ec5c6afe1.

Closes #3005649.
2010-07-25 01:26:43 +02:00
Tobias Doerffel
3b642271a8 When cloning BB track, indicate this fact in name of cloned BB track
Cloning a BB track can be rather confusing (e.g. two "Beat/Bassline 0").
Therefore prepend an indication to the name of the cloned BB track.
2010-07-25 01:13:39 +02:00
Tobias Doerffel
c16e04c0dd Fixed cloning of BB tracks
Not sure when it broke but cloning BB tracks erroneously cloned
positions of TCOs as well which made the source BB track have
two TCOs one upon the other while the destination BB did not have
any TCOs at all.

The fix is to save the position of the destination TCO before and
restore it manually after paste().
2010-07-25 01:13:32 +02:00
Tobias Doerffel
b30e91042b NotePlayHandle: fix broken note detuning feature
Commit 884b9ca671 completely broke the
note detuning feature as the detuning value was not incoorporated into
the frequency calculation anymore. Fix this by adding the detuning value
to the pitch variable.
2010-07-25 00:23:38 +02:00
Tobias Doerffel
87f1313e57 AboutDialog: show correct copyright years
It's been two years that the copyright years were not updated in the
AboutDialog. Fix this.
(cherry picked from commit 57540de703)
2010-07-24 22:54:35 +02:00
Andrew Kelley
f9015ac945 Save/Discard instead of Yes/No
Integrates Sami Boukortt's patch described below:

I have made a patch for the “Save changes?” dialog box to let the user choose
between “Save”, “Discard” and “Cancel” instead of “Yes”, “No” and “Cancel”.

I find this way more intuitive, since it enables Qt to reorganize the buttons
properly according to the platform and to give them an icon (at least on X11).

It also allows users to know what is going to happen without having to read
the question.
2010-05-24 17:53:12 -07:00
Tobias Doerffel
5f6c42f19c EnvelopeAndLfoParameters: moved global instances management into helper class
It's a bad style to manage global instances of an object in the object
itself. Therefore introduced a nested helper class which manages all
instances of EnvelopeAndLfoParameters globally. It is now responsible
for global reset/triggers of LFOs. In contrast to previous state, this
is now done thread-safe. Fixes crashes for example while importing
MIDI files.
2010-05-21 13:27:04 +02:00
Tobias Doerffel
fe7d5e3d5a Engine: introduced deleteHelper() function
The new deleteHelper() template function takes a pointer, saves it
to a temporary, sets the passed pointer to NULL and then deletes the
object it was referring to before. This way we can spot bugs caused by
undesired references to global objects at shutdown more easily.
2010-05-21 13:25:10 +02:00
Tobias Doerffel
afba8a7ad4 AutomationEditor: thread-safe handling of AutomationPattern pointer
It was not possible to call any of the functions of AutomationEditor
from threads other than the main GUI thread as the m_pattern pointer
was not protected by a mutex. It is however desired to be able to call
for example AutomationEditor::setCurrentPattern(...) from different
threads (mainly required when deleting AutomationPatterns in other
threads). Thus made this method and all accesses to the m_pattern
pointer thread-safe.
2010-05-21 13:19:15 +02:00
Tobias Doerffel
9c9bca7098 EffectControl: store visibility information of attached EffectView
For some effects it is helpful to know whether their attached EffectView
is visible or not. This mainly concerns effects that actually do not
touch the sound data but analyze it and display the results.
2010-05-17 23:17:16 +02:00
Tobias Doerffel
51103bb674 Improved support for MinGW cross compile builds
Cross compile support for Win32 and Win64 has been unified,
simplified and adapted to the new MinGW64-based build environment.
This finally allows to produce working Win64 binaries.
2010-04-06 11:47:50 +02:00
Tobias Doerffel
9fd3dacb67 Fixed spelling errors
Fixed some spelling errors found by Lintian while checking the Debian
package of LMMS. Thanks to Patrick Winnertz for pointing out this issue.
2010-01-25 23:24:42 +01:00
Tobias Doerffel
04699ba412 MainWindow: stop playing song when asking whether to save project
Users reported the last buffer played repeatedly while the dialog asking
whether to save project is shown. This behaviour even continued while
loading a project. An easy workaround for this is to stop playing song
(or whichever TrackContainer is active at the moment) in
MainWindow::mayChangeProject().

Closes bug #2904781.
2009-12-17 21:17:34 +01:00
Tobias Doerffel
fa9aeeb3b1 RemotePlugin: added branch prediction hints
Added some branch prediction hints, especially to ShmFifo locking
functions.
2009-12-14 10:19:14 +01:00
Tobias Doerffel
cef439b1ce AutomatableModel: made member variables private again
As of commit dd28a654b5 some member
variables were made protected without any actual requirement for it.
Revert the part of the commit.
2009-12-03 19:09:55 +01:00
Tobias Doerffel
d45de34c0d Revert "AutomatableModel: fix member variable initialization order"
This reverts commit a141fd477a.
2009-12-03 18:31:13 +01:00
Tobias Doerffel
a141fd477a AutomatableModel: fix member variable initialization order
Initialize member variables of AutomatableModel in order of their
declaration to fix compiler warning.
2009-12-03 01:10:12 +01:00
Andrew Kelley
48d7e7cf50 Bugfix: crash dealing with clearing the project
FxMixerView was being cleared before fxMixer which caused a crash.
Fixed.
2009-11-29 18:54:58 -07:00
Tobias Doerffel
0e82b0facc Merge branch 'master' into mixer-new-fifo-arch
Conflicts:
	include/Mixer.h
	src/core/Mixer.cpp
	src/core/audio/AudioPort.cpp
	src/core/main.cpp
2009-11-30 00:50:31 +01:00
Tobias Doerffel
9bb3ab5f16 ProjectRenderer: lock Mixer while calling Song::{start,stop}Export()
We have to lock Mixer when touching Song's state via Song::startExport()
and Song::stopExport() in ProjectRenderer::run() as the FIFO writer
thread may call Mixer::renderNextBuffer() (which calls Song::doActions())
simultaneously. Fixes a random segfault when exporting project.

This was a new bug as the ProjectRenderer does not operate FIFO-less
anymore.
2009-11-29 23:57:30 +01:00
Tobias Doerffel
294fa87475 Merge branch 'auto-save'
* auto-save:
  don't change the current project when auto-saving
  auto-saves every minute and recovers upon crash
  don't show WelcomeScreen when importing/loading

Conflicts:
	src/gui/MainWindow.cpp
2009-11-29 23:21:54 +01:00
Tobias Doerffel
c9802d8a26 ProjectRenderer: start thread with normal priority
There's no need to start the ProjectRenderer thread with high priority
anymore as the actual rendering is done on the other side of the FIFO.
The ProjectRenderer just waits for new data in the FIFO and encodes
them as they arrive.
2009-11-29 15:49:21 +01:00
Tobias Doerffel
03d3548ba1 ProjectRenderer: renamed OutputSettings to EncoderSettings + Doxygen comments
Renamed the ProjectRenderer::OutputSettings structure to
ProjectRenderer::EncoderSettings to better reflect its meaning.

Additionally added some basic Doxygen comments.
2009-11-29 15:37:04 +01:00
Tobias Doerffel
20589f19e4 Mixer: rewrote processing chain of rendered audio buffers
Until now, Mixer not only was responsible for rendering audio buffers
but also managed writing them to audio backend (through a FIFO) and
handled various quality related parameters.

All this functionality has been moved into the new AudioOutputContext
class. It glues together AudioBackend (formerly called AudioDevice),
global quality settings and the Mixer.

The AudioOutputContext class creates a FifoWriter which calls
Mixer::renderNextBuffer() and writes the output into the BufferFifo of
the AudioOutputContext it belongs to. The BufferFifo is read by the
according AudioBackend which belongs to the AudioOutputContext as well.

The AudioOutputContext also handles resampling in case the AudioBackend
wants the buffers in a different samplerate.

During this rewrite the Mixer class and the according source files have
been renamed from "mixer" to "Mixer". This results in small changes
all over LMMS' code base.
2009-11-29 01:46:23 +01:00