fixed lockup and renamed constant
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@449 0778d3d1-df1d-0410-868b-ea421aaaa00d
This commit is contained in:
23
ChangeLog
23
ChangeLog
@@ -1,3 +1,22 @@
|
||||
2006-12-28 Tobias Doerffel <tobydox/at/users/dot/sourceforge/dot/net>
|
||||
|
||||
* src/tracks/instrument_track.cpp:
|
||||
before calling mixer::addPlayHandle(), unlock m_notesMutex as in some
|
||||
cases (when running into xruns)
|
||||
instrumentTrack::deleteNotePluginData() is called while the mutex is
|
||||
locked and the program was frozen
|
||||
|
||||
* include/track.h:
|
||||
* plugins/flp_import/flp_import.cpp:
|
||||
* plugins/midi_import/midi_import.cpp:
|
||||
* src/core/file_browser.cpp:
|
||||
* src/core/preset_preview_play_handle.cpp:
|
||||
* src/core/song_editor.cpp:
|
||||
* src/core/track.cpp:
|
||||
* src/core/track_container.cpp:
|
||||
* src/tracks/instrument_track.cpp:
|
||||
changed name of constant CHANNEL_TRACK to INSTRUMENT_TRACK
|
||||
|
||||
2006-12-24 Tobias Doerffel <tobydox/at/users/dot/sourceforge/dot/net>
|
||||
|
||||
* plugins/kicker/kicker.cpp:
|
||||
@@ -2522,7 +2541,7 @@
|
||||
* plugins/flp_import/flp_import.cpp:
|
||||
improvements for having a working flp-filter as soon as possible
|
||||
|
||||
2005-03-28 Danny McRae <khjklujn/at/yahoo/dot/com>
|
||||
2006-03-28 Danny McRae <khjklujn/at/yahoo/dot/com>
|
||||
|
||||
* src/lib/sample_buffer.cpp:
|
||||
corrected miscalculation of buffer size in resample
|
||||
@@ -2549,7 +2568,7 @@
|
||||
support for default-velocity for MIDI-in and/or -out-events - useful
|
||||
when recording with constant velocity
|
||||
|
||||
2005-03-26 Danny McRae <khjklujn/at/yahoo/dot/com>
|
||||
2006-03-26 Danny McRae <khjklujn/at/yahoo/dot/com>
|
||||
|
||||
* plugins/vibed/:
|
||||
added "Vibed"-plugin, a powerful combination of PluckedStringSynth and
|
||||
|
||||
5
TODO
5
TODO
@@ -1,6 +1,6 @@
|
||||
- select number of channels in export-project-dialog
|
||||
- MIDI over Ethernet support
|
||||
- lock m_instrument in instrumentTrack-class for not crashing when using m_instrument in notePlayHandle::supportsParallelizing() while instrument is being deleted or so
|
||||
- lock m_instrument in instrumentTrack-class for not crashing when using m_instrument in notePlayHandle::supportsParallelizing() while instrument is being deleted or so - toby 061228: already fixed on 061218?
|
||||
- try to make vestige-plugin-dlls relative
|
||||
- do song-editor-tempo-connection to vst-plugin inside remoteVSTPlugin
|
||||
- add/remove-steps button in bb-editor for adding/removing according number of steps to/from all patterns of visible beat/baseline
|
||||
@@ -23,7 +23,6 @@
|
||||
- AMS/OMS-bindings
|
||||
- remove binary-embed-system
|
||||
- recording-functionality
|
||||
- show loading-vst-hint when cloning vestige-track
|
||||
- do not hang when saving while loading VST-plugin (because then we call dispatcher while the load-process is still going on)
|
||||
- tempo-recogn. and sync of beat-samples
|
||||
- do not quantize when importing from MIDI-file
|
||||
@@ -40,10 +39,8 @@
|
||||
- pre-listen when opening sample with QFileDialog
|
||||
- panning-editing in piano-roll
|
||||
- speed up painting of sampleTCO
|
||||
- solve problems with different keyboard-layouts when playing channel-track with pc-keyboard -> use tr()
|
||||
- panning env+lfo
|
||||
- rewrite export-project-dialog using layout-mechanism
|
||||
- dynamic pitch-change
|
||||
- make piano-roll use the global clipboard??
|
||||
- add more localizations:
|
||||
- Swedish
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_PREREQ(2.50)
|
||||
AC_INIT(lmms, 0.2.1-svn20061224, lmms-devel/at/lists/dot/sf/dot/net)
|
||||
AM_INIT_AUTOMAKE(lmms, 0.2.1-svn20061224)
|
||||
AC_INIT(lmms, 0.2.1-svn20061228, lmms-devel/at/lists/dot/sf/dot/net)
|
||||
AM_INIT_AUTOMAKE(lmms, 0.2.1-svn20061228)
|
||||
|
||||
AM_CONFIG_HEADER(config.h)
|
||||
|
||||
|
||||
@@ -399,7 +399,7 @@ class track : public journallingObject
|
||||
public:
|
||||
enum trackTypes
|
||||
{
|
||||
CHANNEL_TRACK,
|
||||
INSTRUMENT_TRACK,
|
||||
BB_TRACK,
|
||||
SAMPLE_TRACK,
|
||||
EVENT_TRACK,
|
||||
|
||||
@@ -364,7 +364,7 @@ bool flpImport::tryImport( trackContainer * _tc )
|
||||
printf( "new channel\n" );
|
||||
|
||||
it = dynamic_cast<instrumentTrack *>(
|
||||
track::create( track::CHANNEL_TRACK, _tc->eng()->getBBEditor() ) );
|
||||
track::create( track::INSTRUMENT_TRACK, _tc->eng()->getBBEditor() ) );
|
||||
assert( it != NULL );
|
||||
i_tracks.push_back( it );
|
||||
it_inst = it->loadInstrument(
|
||||
|
||||
@@ -219,7 +219,7 @@ invalid_format:
|
||||
// now create new channel-track for reading track
|
||||
instrumentTrack * ct = dynamic_cast<instrumentTrack *>(
|
||||
track::create(
|
||||
track::CHANNEL_TRACK,
|
||||
track::INSTRUMENT_TRACK,
|
||||
_tc ) );
|
||||
#ifdef LMMS_DEBUG
|
||||
assert( ct != NULL );
|
||||
|
||||
@@ -331,7 +331,7 @@ void fileBrowser::openInNewInstrumentTrack( trackContainer * _tc )
|
||||
if( m_contextMenuItem->type() == fileItem::SAMPLE_FILE )
|
||||
{
|
||||
instrumentTrack * ct = dynamic_cast<instrumentTrack *>(
|
||||
track::create( track::CHANNEL_TRACK, _tc ) );
|
||||
track::create( track::INSTRUMENT_TRACK, _tc ) );
|
||||
#ifdef LMMS_DEBUG
|
||||
assert( ct != NULL );
|
||||
#endif
|
||||
@@ -346,7 +346,7 @@ void fileBrowser::openInNewInstrumentTrack( trackContainer * _tc )
|
||||
else if( m_contextMenuItem->type() == fileItem::PRESET_FILE )
|
||||
{
|
||||
multimediaProject mmp( m_contextMenuItem->fullName() );
|
||||
track * t = track::create( track::CHANNEL_TRACK, _tc );
|
||||
track * t = track::create( track::INSTRUMENT_TRACK, _tc );
|
||||
instrumentTrack * ct = dynamic_cast<instrumentTrack *>( t );
|
||||
if( ct != NULL )
|
||||
{
|
||||
@@ -418,7 +418,7 @@ void listView::contentsMouseDoubleClickEvent( QMouseEvent * _me )
|
||||
// samples are per default opened in bb-editor because
|
||||
// they're likely drum-samples etc.
|
||||
instrumentTrack * it = dynamic_cast<instrumentTrack *>(
|
||||
track::create( track::CHANNEL_TRACK,
|
||||
track::create( track::INSTRUMENT_TRACK,
|
||||
eng()->getBBEditor() ) );
|
||||
#ifdef LMMS_DEBUG
|
||||
assert( it != NULL );
|
||||
@@ -436,7 +436,7 @@ void listView::contentsMouseDoubleClickEvent( QMouseEvent * _me )
|
||||
{
|
||||
// presets are per default opened in bb-editor
|
||||
multimediaProject mmp( f->fullName() );
|
||||
track * t = track::create( track::CHANNEL_TRACK,
|
||||
track * t = track::create( track::INSTRUMENT_TRACK,
|
||||
eng()->getBBEditor() );
|
||||
instrumentTrack * it = dynamic_cast<instrumentTrack *>(
|
||||
t );
|
||||
|
||||
@@ -63,7 +63,7 @@ public:
|
||||
{
|
||||
setJournalling( FALSE );
|
||||
m_previewInstrumentTrack = dynamic_cast<instrumentTrack *>(
|
||||
track::create( track::CHANNEL_TRACK,
|
||||
track::create( track::INSTRUMENT_TRACK,
|
||||
this ) );
|
||||
m_previewInstrumentTrack->setJournalling( FALSE );
|
||||
hide();
|
||||
|
||||
@@ -1470,11 +1470,11 @@ void songEditor::createNewProject( void )
|
||||
eng()->getProjectJournal()->setJournalling( FALSE );
|
||||
|
||||
track * t;
|
||||
t = track::create( track::CHANNEL_TRACK, this );
|
||||
t = track::create( track::INSTRUMENT_TRACK, this );
|
||||
dynamic_cast< instrumentTrack * >( t )->loadInstrument(
|
||||
"tripleoscillator" );
|
||||
track::create( track::SAMPLE_TRACK, this );
|
||||
t = track::create( track::CHANNEL_TRACK, eng()->getBBEditor() );
|
||||
t = track::create( track::INSTRUMENT_TRACK, eng()->getBBEditor() );
|
||||
dynamic_cast< instrumentTrack * >( t )->loadInstrument(
|
||||
"tripleoscillator" );
|
||||
track::create( track::BB_TRACK, this );
|
||||
|
||||
@@ -1659,7 +1659,7 @@ track * track::create( trackTypes _tt, trackContainer * _tc )
|
||||
|
||||
switch( _tt )
|
||||
{
|
||||
case CHANNEL_TRACK: t = new instrumentTrack( _tc ); break;
|
||||
case INSTRUMENT_TRACK: t = new instrumentTrack( _tc ); break;
|
||||
case BB_TRACK: t = new bbTrack( _tc ); break;
|
||||
case SAMPLE_TRACK: t = new sampleTrack( _tc ); break;
|
||||
// case EVENT_TRACK:
|
||||
|
||||
@@ -495,7 +495,7 @@ void trackContainer::dragEnterEvent( QDragEnterEvent * _dee )
|
||||
stringPairDrag::processDragEnterEvent( _dee,
|
||||
QString( "presetfile,sampledata,samplefile,instrument,midifile,"
|
||||
"track_%1,track_%2" ).
|
||||
arg( track::CHANNEL_TRACK ).
|
||||
arg( track::INSTRUMENT_TRACK ).
|
||||
arg( track::SAMPLE_TRACK ) );
|
||||
}
|
||||
|
||||
@@ -509,7 +509,7 @@ void trackContainer::dropEvent( QDropEvent * _de )
|
||||
if( type == "instrument" )
|
||||
{
|
||||
instrumentTrack * it = dynamic_cast<instrumentTrack *>(
|
||||
track::create( track::CHANNEL_TRACK,
|
||||
track::create( track::INSTRUMENT_TRACK,
|
||||
this ) );
|
||||
it->loadInstrument( value );
|
||||
it->toggledInstrumentTrackButton( TRUE );
|
||||
@@ -518,7 +518,7 @@ void trackContainer::dropEvent( QDropEvent * _de )
|
||||
else if( type == "sampledata" || type == "samplefile" )
|
||||
{
|
||||
instrumentTrack * it = dynamic_cast<instrumentTrack *>(
|
||||
track::create( track::CHANNEL_TRACK,
|
||||
track::create( track::INSTRUMENT_TRACK,
|
||||
this ) );
|
||||
instrument * i = it->loadInstrument( "audiofileprocessor" );
|
||||
i->setParameter( type, value );
|
||||
@@ -529,7 +529,7 @@ void trackContainer::dropEvent( QDropEvent * _de )
|
||||
{
|
||||
multimediaProject mmp( value );
|
||||
instrumentTrack * it = dynamic_cast<instrumentTrack *>(
|
||||
track::create( track::CHANNEL_TRACK,
|
||||
track::create( track::INSTRUMENT_TRACK,
|
||||
this ) );
|
||||
it->loadTrackSpecificSettings( mmp.content().firstChild().
|
||||
toElement() );
|
||||
|
||||
@@ -106,8 +106,7 @@ const char * surroundarea_help = QT_TRANSLATE_NOOP( "instrumentTrack",
|
||||
"feature." );
|
||||
|
||||
|
||||
const int CHANNEL_WIDTH = 250;
|
||||
const int INSTRUMENT_WIDTH = CHANNEL_WIDTH;
|
||||
const int INSTRUMENT_WIDTH = 250;
|
||||
const int INSTRUMENT_HEIGHT = INSTRUMENT_WIDTH;
|
||||
const int PIANO_HEIGHT = 84;
|
||||
|
||||
@@ -116,7 +115,7 @@ instrumentTrack::instrumentTrack( trackContainer * _tc ) :
|
||||
QWidget( _tc->eng()->getMainWindow()->workspace() ),
|
||||
track( _tc ),
|
||||
midiEventProcessor(),
|
||||
m_trackType( CHANNEL_TRACK ),
|
||||
m_trackType( INSTRUMENT_TRACK ),
|
||||
m_midiPort( eng()->getMixer()->getMIDIClient()->addPort( this,
|
||||
tr( "unnamed_channel" ) ) ),
|
||||
m_audioPort( new audioPort( tr( "unnamed_channel" ), eng() ) ),
|
||||
@@ -314,7 +313,7 @@ instrumentTrack::instrumentTrack( trackContainer * _tc ) :
|
||||
|
||||
// setup piano-widget
|
||||
m_pianoWidget = new pianoWidget( this );
|
||||
m_pianoWidget->setFixedSize( CHANNEL_WIDTH, PIANO_HEIGHT );
|
||||
m_pianoWidget->setFixedSize( INSTRUMENT_WIDTH, PIANO_HEIGHT );
|
||||
|
||||
|
||||
vlayout->addWidget( m_generalSettingsWidget );
|
||||
@@ -380,7 +379,7 @@ instrumentTrack::instrumentTrack( trackContainer * _tc ) :
|
||||
|
||||
_tc->updateAfterTrackAdd();
|
||||
#ifndef QT3
|
||||
setFixedWidth( CHANNEL_WIDTH );
|
||||
setFixedWidth( INSTRUMENT_WIDTH );
|
||||
resize( sizeHint() );
|
||||
#endif
|
||||
|
||||
@@ -653,9 +652,17 @@ void instrumentTrack::processInEvent( const midiEvent & _me,
|
||||
_time.frames(
|
||||
eng()->framesPerTact64th() ),
|
||||
valueRanges<f_cnt_t>::max, n );
|
||||
// as mixer::addPlayHandle() might
|
||||
// delete note (when running into
|
||||
// critical XRuns) which will call
|
||||
// deleteNotePluginData which locks
|
||||
// this mutex, we have to unlock
|
||||
// it here temporarily
|
||||
m_notesMutex.unlock();
|
||||
if( eng()->getMixer()->addPlayHandle(
|
||||
nph ) )
|
||||
{
|
||||
m_notesMutex.lock();
|
||||
m_notes[_me.key()] = nph;
|
||||
}
|
||||
}
|
||||
@@ -1299,7 +1306,7 @@ void instrumentTrack::invalidateAllMyNPH( void )
|
||||
// invalidate all note-play-handles linked to this channel
|
||||
eng()->getMixer()->checkValidityOfPlayHandles();
|
||||
|
||||
m_trackType = CHANNEL_TRACK;
|
||||
m_trackType = INSTRUMENT_TRACK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user