diff --git a/ChangeLog b/ChangeLog index 4bbbfff56..63c48664c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,17 @@ 2006-03-07 Tobias Doerffel + * src/core/arp_and_chords_tab_widget.cpp: + more senseful range for arpeggio time: 25-2000 ms (instead of 10-1000ms) + + * src/audio/audio_alsa.cpp: + * src/audio/audio_oss.cpp: + * src/midi/midi_alsa_raw.cpp: + * src/midi/midi_alsa_seq.cpp: + * src/midi/midi_oss.cpp: + only specify threading-priority when using Qt 3.3.5 or above as older + versions cause problems when running the whole app with realtime + priority - fixes several lockups + * src/widgets/knob.cpp: when moving mouse while having shift pressed, increase/decrease by single steps @@ -900,284 +912,6 @@ * configure.in: made 0.1.2 release -2006-01-02 Tobias Doerffel - - * plugins/vestige/vestige.cpp: - set vestige-logo as window-icon of plugin-GUI-window - - * src/core/instrument.cpp: - set logo of plugin as window-icon of channel-track - - * include/dummy_instrument.h: - * include/dummy_plugin.h: - * include/instrument.h: - * include/plugin.h: - * src/core/instrument.cpp: - * src/core/plugin.cpp: - small changes in plugin-API: plugin now always has to pass pointer to - plugin-descriptor to plugin-dtor to make the latter one able to - provide several information - - * src/core/plugin.cpp: - search for plugin-libs in configManager::pluginDir() which is - $prefix/lib/lmms - hopefully solves problems with finding plugins on - some systems - - * include/channel_track.h: - * include/midi_tab_widget.h: - * src/core/midi_tab_widget.cpp: - * src/tracks/channel_track.cpp: - when using Raw-MIDI-client, make items "MIDI input/output" checkable - and enable/disable MIDI-input/output accordingly if user - checked/unchecked it and update check-state if user changed MIDI-mode - in midi-tab-widget in channel-track - - * src/core/midi_tab_widget.cpp: - set MIDI-output-channel to 1 per default - - * src/lib/sample_buffer.cpp: - added flac-files to filter of file-selection-dialog - - * include/note_play_handle.h: - * src/core/note_play_handle.cpp: - when invalidating note-play-handle, do some stuff which actually would - be done by dtor if m_channelTrack wouldn't be NULL - -2006-01-01 Tobias Doerffel - - * src/core/track.cpp: - added tooltip to track-op-widget telling the user something about - drag'n'drop-functionality... - - * include/lmms_main_win.h: - * src/core/lmms_main_win.cpp: - * src/lib/string_pair_drag.cpp: - if main-window looses focus or a drag is completed, clear - key-modifiers of LMMS-main-window, because we might have lost - key-release-events in these cases and therefore our modifier-state-map - could be incorrect - fixes several bugs concerning drag'n'drop - - * README: - * src/core/about_dialog.cpp: - extended copyright from 2005 to 2006 - Happy New Year! - -2005-12-31 Tobias Doerffel - - * include/channel_track.h: - * src/tracks/channel_track.cpp: - removed surround-area in track-settings-widget and added button with - MIDI-connection-menu instead - -2005-12-30 Tobias Doerffel - - * include/track.h: - * include/track_container.h: - * src/core/track.cpp: - * src/core/track_container.cpp: - revised all the things around track-operations: - - tracks are now directly movable via the grip at the beginning of a - track - replaces "move up/down"-buttons and is much more usable - - actions (clone/delete track) are now part of a popup-menu - - * src/core/lmms_main_win.cpp: - - corrected file-description at the beginning - - add space at left side before adding tool-buttons - - * src/core/midi_tab_widget.cpp: - use smaller font for connection-selection-menu - -2005-12-29 Tobias Doerffel - - * src/widgets/fade_button.cpp: - do not update() directly in nextState(), use QTimer instead for avoiding - xlib-threading-errors - -2005-12-28 Tobias Doerffel - - * plugins/vestige/communication.h: - * plugins/vestige/fstclient.cpp: - * plugins/vestige/fstclient.h: - * plugins/vestige/fstserver.cpp: - * plugins/vestige/vestige.cpp: - * plugins/vestige/vestige.h: - - support for telling plugin current BPM, also catches BPM-changes - - handle plugins without GUI correctly - - * include/tool_button.h: - * src/widgets/tool_button.cpp: - catch toggle-signals to emit clicked()-signal which is neccessary if a - button is checked using setChecked()-method and not by the user - - fixes some bugs with piano-roll - - * include/piano_roll.h: - * src/core/piano_roll.cpp: - - show text-float after user copied notes - - do not play note when just moving selection - - when update()ing paint everything in a pixmap which is painted in - paintEvent() - saves all the repaints everytime mouse-cursor is moved - and makes painting tool-cursor possible again - - * src/tracks/channel_track.cpp: - corrected calculation in channelTrack::masterKey() - -2005-12-27 Tobias Doerffel - - * include/piano_roll.h: - * src/core/piano_roll.cpp: - always reset cursor when receiving leave-event - - * include/channel_track.h: - * src/tracks/channel_track.cpp: - use new fade-button as MIDI-event-indicator as well as simple - play-default-tone-button - - * include/fade_button.h: - * src/widgets/fade_button.cpp: - added fade-button which can be activated and fades back to - default-color afterwards - - * src/core/arp_and_chords_tab_widget.cpp: - * src/core/envelope_and_lfo_widget.cpp: - * src/core/envelope_tab_widget.cpp: - * src/core/midi_tab_widget.cpp: - * src/core/note.cpp: - * src/core/song_editor.cpp: - * src/core/track.cpp: - * src/tracks/bb_track.cpp: - * src/tracks/channel_track.cpp: - * src/tracks/sample_track.cpp: - do not use QString::number() for saving scalar value with - setAttribute() as it is obsolete - - * src/audio/audio_alsa.cpp: - * src/audio/audio_oss.cpp: - start audio-thread with QThread::HightestPriority for having less xruns - - * src/tracks/pattern.cpp: - save m_steps-property, otherwise restoring it in loadSettings() makes - no sense... - fixes bug which caused LMMS to always reset number of - steps to 16 when loading files, even if the user created patterns - containing more than 16 steps - - * include/audio_dummy.h: - - fixed missing implementation of thread running the whole time and - calling audioDevice::processNextBuffer() -> fixes bugs & lockups when - using audio-dummy-driver - - thread now always waits the amount of time that is left for the - current buffer, so if rendering of current buffer went faster than - in realtime, the song doesn't play at a higher speed - -2005-12-26 Tobias Doerffel - - * plugins/vestige/vestige.cpp: - determine real key of note using channelTrack::masterKey - - * include/micro_timer.h: - moved micro-timer-class from mixer.cpp in separate header for being - available to all modules of LMMS - - * src/core/mixer.cpp: - added metronome-sounds when recording in piano-roll - - * src/lib/sample_buffer.cpp: - - added resample()-method for resampling whole sample-buffer - - after libsndfile try to load sample with libvorbis instead of - SDL_sound as the latter one seems to be buggy on few systems and - leads to unexpected crashes - - if sample-decoder doesn't resample sample automatically, do it - afterwards using resample() - - * src/core/track_container.cpp: - accept drops of type samplefile and sampledata too and create new - channel-track with AudioFileProcessor - - * plugins/audio_file_processor/audio_file_processor.cpp: - save/load sample-data which was dragged on plugin in settings - - * src/core/track.cpp: - display correct length and now additionally start- and end-position of - track-content-object - - * include/bb_track.h: - * src/tracks/bb_track.cpp: - do not align position and length of bb-track-objects on tact-boundaries - as it offers an interesting new feature (incomplete/start beats etc.!) - -2005-12-25 Tobias Doerffel - - * src/widgets/visualization_widget.cpp: - enable visualization-widget per default - - * plugins/vestige/vestige.cpp: - - do not crash when loading settings with empty plugin-attribute (e.g. - older projects/presets) - - set channel-name according to plugin-name - - added note-off-button for being able to note off hanging notes - (which sometimes occurs in combination with arpeggios) - -2005-12-24 Tobias Doerffel - - * plugins/vestige/vestige.cpp: - use new parameter-saving/loading-feature when saving/loading settings - - * plugins/vestige/communication.h: - * plugins/vestige/fstclient.cpp: - * plugins/vestige/fstclient.h: - * plugins/vestige/fstserver.cpp: - * plugins/vestige/fstserver.h: - * plugins/vestige/fstcore.c: - - added support for saving/loading parameters which almost completes - LMMS's rudimentary VST-support - - support for querying parameter-properties - - some changes in initialization of plugin - - * src/tracks/pattern.cpp: - pass unused wheel-events to trackContentObect for being able to scroll - within song-editor - -2005-12-23 Tobias Doerffel - - * plugins/vestige/fstcore.c: - a lot of clean-ups and other bug-fixes making VeSTige almost usable - and stable - - * plugins/vestige/fstclient.h: - * plugins/vestige/fstclient.cpp: - save PID of children when fork()ing XFST-server which is used for - sending SIGTERM when destroying everything - - * plugins/vestige/communication.h: - * plugins/vestige/fstclient.cpp: - * plugins/vestige/fstserver.cpp: - * plugins/vestige/fstcore.c: - do not show editor until client created x11-embed-widget - solves - problems with not-embedded plugins under KDE - - * plugins/vestige/fstserver.cpp: - rewrote MIDI-enqueueing-code as the old one was very buggy and - unreliable - - * plugins/vestige/vestige.h: - * plugins/vestige/vestige.cpp: - added mutex for plugin which solves some problems - - * include/mixer.h: - * src/core/mixer.cpp: - per default clear all play-handles but instrument-play-handles in - mixer::clear() as instrument-playhandles normally exist during the - whole life-time of a certain plugin and must not be deleted when just - stopping song etc. - - * include/play_handle.h: - added type-information, so every derived class has to pass a - type-constant to playHandle-constructor - -2005-12-22 Tobias Doerffel - - * configure.in: - made 0.1.2 release - ->>>>>>> 1.27 2005-12-21 Tobias Doerffel * src/lib/sample_buffer.cpp: diff --git a/src/audio/audio_alsa.cpp b/src/audio/audio_alsa.cpp index 1459a2df8..c1c7ef6ca 100644 --- a/src/audio/audio_alsa.cpp +++ b/src/audio/audio_alsa.cpp @@ -189,7 +189,7 @@ void audioALSA::startProcessing( void ) #ifdef QT4 QThread::HighPriority #else -#if QT_VERSION >= 0x030200 +#if QT_VERSION >= 0x030505 QThread::HighestPriority #endif #endif diff --git a/src/audio/audio_oss.cpp b/src/audio/audio_oss.cpp index a0f6fd81f..4589f462f 100644 --- a/src/audio/audio_oss.cpp +++ b/src/audio/audio_oss.cpp @@ -292,7 +292,7 @@ void audioOSS::startProcessing( void ) #ifdef QT4 QThread::HighPriority #else -#if QT_VERSION >= 0x030200 +#if QT_VERSION >= 0x030505 QThread::HighestPriority #endif #endif diff --git a/src/core/arp_and_chords_tab_widget.cpp b/src/core/arp_and_chords_tab_widget.cpp index 4528af7c8..39802def2 100644 --- a/src/core/arp_and_chords_tab_widget.cpp +++ b/src/core/arp_and_chords_tab_widget.cpp @@ -295,7 +295,7 @@ arpAndChordsTabWidget::arpAndChordsTabWidget( channelTrack * _channel_track ) : m_arpTimeKnob = new tempoSyncKnob( knobBright_26, m_arpGroupBox, tr( "Arpeggio time" ), eng() ); m_arpTimeKnob->setLabel( tr( "TIME" ) ); - m_arpTimeKnob->setRange( 10.0f, 1000.0f, 1.0f ); + m_arpTimeKnob->setRange( 25.0f, 2000.0f, 1.0f ); m_arpTimeKnob->setInitValue( 100.0f ); m_arpTimeKnob->move( 164, 70 ); m_arpTimeKnob->setHintText( tr( "Arpeggio time:" ) + " ", " " + diff --git a/src/core/main.cpp b/src/core/main.cpp index f1acc8169..945f04fc2 100644 --- a/src/core/main.cpp +++ b/src/core/main.cpp @@ -66,6 +66,16 @@ int splash_alignment_flags = Qt::AlignTop | Qt::AlignLeft; int main( int argc, char * * argv ) { +#ifdef HAVE_SCHED_H + struct sched_param sparam; + sparam.sched_priority = ( sched_get_priority_max( SCHED_FIFO ) + + sched_get_priority_min( SCHED_FIFO ) ) / 2; + if( sched_setscheduler( 0, SCHED_FIFO, &sparam ) == -1 ) + { + printf( "could not set realtime priority.\n" ); + } +#endif + QApplication app( argc, argv ); QString extension = "wav"; @@ -244,17 +254,6 @@ int main( int argc, char * * argv ) e->exportBtnClicked(); } -#ifdef HAVE_SCHED_H - struct sched_param sparam; - sparam.sched_priority = ( sched_get_priority_max( SCHED_FIFO ) + - sched_get_priority_min( SCHED_FIFO ) ) / 2; - if( sched_setscheduler( 0, SCHED_FIFO, &sparam ) == -1 ) - { - printf( "could not set realtime priority.\n" ); - } -#endif - - return( app.exec() ); } diff --git a/src/midi/midi_alsa_raw.cpp b/src/midi/midi_alsa_raw.cpp index 218dc77db..35c49f925 100644 --- a/src/midi/midi_alsa_raw.cpp +++ b/src/midi/midi_alsa_raw.cpp @@ -77,7 +77,7 @@ midiALSARaw::midiALSARaw( engine * _engine ) : snd_rawmidi_poll_descriptors( m_input, m_pfds, m_npfds ); start( -#if QT_VERSION >= 0x030200 +#if QT_VERSION >= 0x030505 QThread::LowPriority #endif ); diff --git a/src/midi/midi_alsa_seq.cpp b/src/midi/midi_alsa_seq.cpp index fa2a3e2e4..8c4d4a940 100644 --- a/src/midi/midi_alsa_seq.cpp +++ b/src/midi/midi_alsa_seq.cpp @@ -102,7 +102,7 @@ midiALSASeq::midiALSASeq( engine * _engine ) : m_portListUpdateTimer.start( 1000 ); start( -#if QT_VERSION >= 0x030200 +#if QT_VERSION >= 0x030505 QThread::IdlePriority #endif ); diff --git a/src/midi/midi_oss.cpp b/src/midi/midi_oss.cpp index b6837f447..741b4db2f 100644 --- a/src/midi/midi_oss.cpp +++ b/src/midi/midi_oss.cpp @@ -71,7 +71,7 @@ midiOSS::midiOSS( engine * _engine ) : #endif { start( -#if QT_VERSION >= 0x030200 +#if QT_VERSION >= 0x030505 QThread::LowPriority #endif ); diff --git a/src/widgets/fade_button.cpp b/src/widgets/fade_button.cpp index e1fa131b7..a1ae529b7 100644 --- a/src/widgets/fade_button.cpp +++ b/src/widgets/fade_button.cpp @@ -75,6 +75,7 @@ void fadeButton::activate( void ) m_state = 1.1f; nextState(); } + update(); } @@ -119,6 +120,12 @@ void fadeButton::paintEvent( QPaintEvent * _pe ) // and blit all the drawn stuff on the screen... bitBlt( this, rect().topLeft(), &draw_pm ); #endif + if( m_state > 0.0f ) + { + // we might be called out of another thread than the GUI-/ + // event-loop-thread, so let the timer update ourself + QTimer::singleShot( 20, this, SLOT( update( void ) ) ); + } } @@ -130,9 +137,6 @@ void fadeButton::nextState( void ) { m_state -= 0.1f; QTimer::singleShot( 20, this, SLOT( nextState( void ) ) ); - // we might be called out of another thread than the GUI-/ - // event-loop-thread, so let the timer update ourself - QTimer::singleShot( 0, this, SLOT( update( void ) ) ); } }