Commit Graph

1216 Commits

Author SHA1 Message Date
Tobias Doerffel
14cfe77804 InstrumentTrack: make sure m_runningMidiNotes[x] does not become negative
Even though there's no known code path for this event to happen we
should always make sure m_runningMidiNotes[x] does not become negative
as this might mess up future key events.
2011-07-02 14:41:17 +02:00
Tobias Doerffel
83daa2d8fb SampleBuffer: do not use UTF-8 filenames on Windows
As libogg, libsndfile & friends do not seem to have an UTF8-compatible
implementation on Windows we have to pass the filename as local 8 bit
encoding in order to make the file being read properly.

Closes #2952858.
2011-07-02 14:15:52 +02:00
Tobias Doerffel
1e83b1e23b Reset filename when recovering project after unexpected exit
We must not use "recover.mmp" as regular filename after we recovered
the sesion from it as this causes following save cycles to go into
the recovery file. Instead load the recovery file via
song::createNewProjectFromTemplate() so the used will be asked for
a filename when saving the recovered project the first time.

Closes #3294122.
2011-07-02 13:52:44 +02:00
Tobias Doerffel
4d473a36fb ConfigMgr: properly write configuration file if it contains non-ASCII chars
There has been a problem UTF-8 characters in the configuration file
since 2006 (!), as the length of the data to be written was mis-
calculated. We can omit the specification of the data length at all
when just passing a QByteArray object to QFile::write().

Fixes setup dialog appearing each start if one of the configured paths
in the setup dialog contains non-ASCII characters.

Closes #3348920, #3017409, #2812054.
2011-07-02 13:37:36 +02:00
Tobias Doerffel
7b31be67ac ConfigMgr: do not silently fail to parse configuration file
Instead of failing silently when parsing configuration file show a
messagebox with helpful debugging information.
2011-07-02 13:28:02 +02:00
Tobias Doerffel
e338b34faf Widgets classes: use "WindowTitle" property instead of "AccessibleName"
As the interface for the "AccessibleName" property might not be available
when Qt was built without accessibility support, use the "WindowTitle"
property instead where appropriate.

Closes #3300101.
2011-06-27 20:43:09 +02:00
Tobias Doerffel
1cc77b72e3 Do not apply FX mixer effects twice when playing frozen pattern
We must not process the FX mixer if we notice that currently a pattern
is frozen. Furthermore renamed some state-reading messages of the
pattern class.

Closes #3316495.
2011-06-27 20:27:03 +02:00
Tobias Doerffel
d4684f3ab1 Faders in FX mixer: added peak value indicator
Based on the patch by Thorsten Müller provided at #3307037, I continued
the work to display nice indicators for the peak value of the last 1500
ms.

Closes #3307037.
2011-06-23 10:53:39 +02:00
Thorsten Müller
ee0f6ccd10 Add tooltips to fxmixer faders
Added tooltips to show the actual value when moving the fader handle.
This works mostly like the same feature we already have for the volume
knobs. Depending on settings the value is shown in a range between
0% to 200% or -inf/-34dBV to 6.02 dBV. Again that's the same as for the
volume knob. Value range could be adjusted easily if necessary.

Closes #3305914.

Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
2011-06-23 10:16:45 +02:00
Tobias Doerffel
8f9d90df5d LadspaManager: really only load shared library on Linux
Testing the last two characters of the filename against "so" is
insufficient as this might cover e.g. ISO files as well. Therefore
explicitely check for ".so".

Thanks to Mikobuntu for the contribution.

Closes #3289932.
2011-06-23 09:56:56 +02:00
Tobias Doerffel
66d36b3071 MainWindow: skip autosave while playing or exporting
It's a very bad idea to autosave while playing as this causes severe
underrun problems. Therefore instead of autosaving, trigger a re-try
timer for 10 seconds.

Closes #3317776.
2011-06-22 11:15:20 +02:00
Tobias Doerffel
babf3edff8 Ask whether to recover session after unexpected exit
Instead of always loading the last auto-saved session (which might end
up in an endless cycle if recover.mmp is faulty or causes a crash) ask
the user whether to do so.
2011-04-06 18:35:20 +02:00
Tobias Doerffel
a90ffed0a8 SongEditor: made smoooth scrolling an optional feature
As smooth scrolling seems to cause problems for some users it now has
to be enabled explicitely in the settings dialog.

Closes #3194891.
2011-03-17 09:23:38 +01:00
Tobias Doerffel
dd9ba4b2ad AudioPulseAudio: do not initialize volume
Instead of passing an initialized pa_cvolume structure, pass NULL as
recommended by the documentation for pa_stream_connect_playback(). This
fixes the volume erroneously being set to 100% at startup.

Thanks to Thomas Moschny for forwarding the bug report.
2011-01-26 22:08:49 +01:00
Tobias Doerffel
f67e8e0af7 ControllerRackView: fixed widget size issues after closing
There were some issues with the ControllerRackView when closing it
with recent Qt versions. Issue seems to be fixed by not setting a
size constraint policy for the QMdiSubWindow.

Partially closes #3149779.
2011-01-23 23:54:06 +01:00
Tobias Doerffel
b8ad5bf025 ControllerView: fixed minor artifacts at widget drop shadow
We must not set the Qt::WA_OpaquePaintEvent attribute when painting
semi-transparent a drop shadow for the ControllerView.
2011-01-23 23:52:59 +01:00
Tobias Doerffel
4cad9517aa Add BB track when adding track to empty BB editor
When there's no BB track but a track is added to the BB editor,
automatically create a BB track so that the user doesn't get confused
by new empty track (not even showing clickable beats).

Partially closes #3149779.
2011-01-23 23:10:04 +01:00
Tobias Doerffel
4851839327 LadspaManager: print error string when failing to load LADSPA library
In order to ease debugging of problems with the LADSPA library loader
print QLibrary::errorString() if loading a library fails.
2011-01-16 18:50:01 +01:00
Andrew Kelley
7b7dc0bfb2 don't change the current project when auto-saving
every time auto-save ran, it would change the current project to
"recover.mmp". Now it doesn't do this because Song has
guiSaveProject(), guiSaveProjectAs(), and saveProjectFile().
(the latter is used for auto-save)
(cherry picked from commit 953522f34a)
2011-01-12 17:09:45 +01:00
Andrew Kelley
d75677b9d3 auto-saves every minute and recovers upon crash
auto-save time is not configurable yet. saves "recover.mmp" to
WORKING_DIR every 60 seconds. Deletes recover.mmp on successful
close of LMMS. If recover.mmp is found upon start, it loads that
project.
(cherry picked from comit f73ccadc17)
2011-01-12 17:09:14 +01:00
Tobias Doerffel
6280fd9faf Mixer: free m_inputBuffer[i] at exit
In Mixer::~Mixer make sure to free resources allocated in the
m_inputBuffer[] array.
(cherry picked from commit 1f6039340b)
2011-01-08 01:30:02 +01:00
Tobias Doerffel
cfce2bc827 Fixed various minor semantic glitches
There were various minor semantic glitches reported by cppcheck and
Andrei Smirnov.
(cherry picked from commit a4de8fa16a)
2011-01-08 00:19:11 +01:00
Tobias Doerffel
ea94e6aa32 SongEditor: added smooth autoscroll
Instead of flipping to next page when the play position marker reaches
the right edge, scroll to next page smoothly using the QTimeLine class.

Closes #3144318.
2011-01-05 12:36:14 +01:00
Tobias Doerffel
6be555d61a SongEditor: always bring up to front after loading a project
When just opening a song in order to listen to it, it's very annyoing to
manually bring up the song editor each time, therefore do it
automatically.
2011-01-05 11:53:56 +01:00
Tobias Doerffel
4641fcc6d3 Audio: Re-enabled PortAudio backend
The PortAudio backend lay down broken for quite a while. However as it
offers much better realtime capabilities on Windows compared to SDL, I
started to resurrect it, removed support for PortAudio < 1.9 and fixed
various bugs and crashes.
2011-01-02 00:54:43 +01:00
Tobias Doerffel
a9717c0cc3 NotePlayHandle: send correct MidiNoteOff events if base note changed
When changing an InstrumentTrack's base note while NotePlayHandles are
active, they will send a wrong MidiNoteOff event due to the masterKey()
translation in InstrumentTrack::processOutEvent().

Therefore in NotePlayHandle remember the original base note value and
add the difference between original and current base note to the value
returned by NotePlayHandle::key(). Fixes hanging notes in MIDI-based
instruments such as ZynAddSubFX.

Furthermore some coding style improvements.

Closes #3146975.
2010-12-31 13:23:08 +01:00
Tobias Doerffel
65a0313807 Merge branch 'win64-vst'
* win64-vst:
  VST support layer: fixed non-working 64 bit VST plugins
  VST support layer: added 32 bit VST plugin support for Win64
  Win64Toolchain: added 32 bit compiler configuration
  ZynAddSubFX: use new RemotePlugin::init() method
  RemotePlugin: added support for running remote process multiple times
(cherry picked from commit 65c073ec63)
2010-12-26 11:25:54 +01:00
Tobias Doerffel
8c4a8182ab MidiWinMM: fixed compiler warning
Pass 0 instead of NULL for 3rd and 4th argument of midiOutOpen().
2010-12-05 23:29:23 +01:00
Tobias Doerffel
60d302d09e InstrumentTrackView: use QMdiArea's window activation history
There's no need to implement an own (buggy) window activation history
for InstrumentTrackWindows. Use QMdiArea::subWindowList(...) instead.
Fixes buggy keyboard focus when switching between InstrumentTrackWindows.
(cherry picked from commit c05965117c)
2010-10-06 10:17:48 +02:00
Tobias Doerffel
3ae2b40eec 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.
(cherry picked from commit 93681760d2)
2010-10-05 11:25:43 +02:00
Tobias Doerffel
66b83dfaec SampleTrack: do not hide EffectRackView forever when closing subwindow
Whenever closing the sample track effects window using its own close
button and trying to open it again there was only a really small window
without functionality. Fixed this by explicitely also showing subwindow
content in showEffects().

Closes #3075205.
(cherry picked from commit 830c2cb975)
2010-09-29 16:10:52 +02:00
Tobias Doerffel
1c4d1f4ed3 PianoView: send NoteOff MIDI events for all keys on focus out
Commit 491910357b was a first try to fix
bug #3052228 but it broke InstrumentPlayHandle-driven instruments.
When losing focus now simply send NoteOff MIDI events for all keys
regardless of the state indicated by Piano::m_pressedKeys.

Closes #3052228.
(cherry picked from commit f8e73c5293)
2010-09-02 01:54:20 +02:00
Tobias Doerffel
706201dd79 Revert "PianoView: call InstrumentTrack::silenceAllNotes() on focus out"
This reverts commit 491910357b.
2010-09-02 01:47:28 +02:00
Tobias Doerffel
491910357b PianoView: call InstrumentTrack::silenceAllNotes() on focus out
If we lose focus, call InstrumentTrack::silenceAllNotes() after
explicitely sending NoteOff MIDI events for all keys for which presses
were recorded. In case the arpeggiator is enabled this is not
sufficient. Fixes hanging notes when switching active subwindow while
pressing keys in an instrument track window with arpeggiator enabled.

Closes #3052228.
(cherry picked from commit 2f921303eb)
2010-09-01 23:56:28 +02:00
Tobias Doerffel
8ebdee61f6 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.
(cherry picked from comit 28eb7e00bf)
2010-08-24 18:47:39 +02:00
Tobias Doerffel
819e6392cd 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.
(cherry picked from commit 6e64bcfc42)
2010-08-22 02:22:45 +02:00
Tobias Doerffel
3a79dc1741 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.
(cherry picked from commit 8286c1031d)
2010-08-19 00:17:41 +02:00
Tobias Doerffel
4e3072137b 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.
(cherry picked from commit 46c20bdcbd)
2010-08-18 23:58:49 +02:00
Tobias Doerffel
9cf0f4932a 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.
(cherry picked from commit 2614474246)
2010-08-16 23:40:48 +02:00
Tobias Doerffel
54ce5b96f6 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.
(cherry picked from commit 23a3efcac0)
2010-08-16 23:40:44 +02:00
Tobias Doerffel
89eae05a16 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.
(cherry picked from commit 9b280ffb3e)
2010-08-16 23:40:33 +02:00
Tobias Doerffel
b16e81ebff 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.
(cherry picked from commit 676a6fbad1)
2010-08-16 23:39:04 +02:00
Tobias Doerffel
564ef08127 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.
(cherry picked from commit 9acb47a7a8)
2010-08-15 14:22:38 +02:00
Tobias Doerffel
cd08109847 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.
(cherry picked from commit 65311ef2b4)
2010-08-15 14:00:11 +02:00
Tobias Doerffel
b9f5795da6 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.
(cherry picked from commit d830e7f622)
2010-08-15 12:44:29 +02:00
Tobias Doerffel
6a99bb11af 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.
(cherry picked from commit 311bc92bde)
2010-08-14 00:26:34 +02:00
Tobias Doerffel
0770bda441 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:30:59 +02:00
Paul Giblock
09b5bc906e 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-12 09:12:04 +02:00
Tobias Doerffel
d8594fad15 TrackContainerView: fixed dragged presets into BB Editor
When dragging preset files into BB Editor the patterns were messed up
because simple serializing was not enabled (and thus newly created
patterns were removed again). Fix this by enabling simple serializing
mode before calling InstrumentTrack::loadSettings().

Closes #3041686.
2010-08-11 17:54:41 +02:00
Tobias Doerffel
632dee611d 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().
(cherry picked from commit db8de3450c)
2010-07-28 20:16:24 +02:00