added singerbot plugin

git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@452 0778d3d1-df1d-0410-868b-ea421aaaa00d
This commit is contained in:
Javier Serrano Polo
2007-01-20 14:24:27 +00:00
parent 03a5e5df89
commit 56eead9a65
23 changed files with 801 additions and 42 deletions

View File

@@ -4,7 +4,7 @@
* arp_and_chords_tab_widget.cpp - widget for use in arp/chord-tab of
* instrument-track-window
*
* Copyright (c) 2004-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2004-2007 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
*
@@ -461,7 +461,7 @@ void arpAndChordsTabWidget::processNote( notePlayHandle * _n )
break;
}
// create copy of base-note
note note_copy( NULL, 0, 0,
note note_copy( NULL, _n->length(), 0,
(tones)( sub_note_key %
NOTES_PER_OCTAVE ),
(octaves)( sub_note_key /
@@ -477,6 +477,10 @@ void arpAndChordsTabWidget::processNote( notePlayHandle * _n )
_n->framesAhead(),
_n->frames(), note_copy );
note_play_handle->setBBTrackFrom( _n );
#if SINGERBOT_SUPPORT
note_play_handle->setPatternIndex(
_n->patternIndex() );
#endif
// add sub-note to base-note, now all stuff is
// done by notePlayHandle::play_note()
_n->addSubNote( note_play_handle );
@@ -640,6 +644,9 @@ void arpAndChordsTabWidget::processNote( notePlayHandle * _n )
new_note,
TRUE );
note_play_handle->setBBTrackFrom( _n );
#if SINGERBOT_SUPPORT
note_play_handle->setPatternIndex( _n->patternIndex() );
#endif
// add sub-note to base-note - now all stuff is done by
// notePlayHandle::playNote()

View File

@@ -4,7 +4,7 @@
* note_play_handle.cpp - implementation of class notePlayHandle, part of
* play-engine
*
* Copyright (c) 2004-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2004-2007 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
*
@@ -59,6 +59,9 @@ notePlayHandle::notePlayHandle( instrumentTrack * _it,
m_arpNote( _arp_note ),
m_muted( FALSE ),
m_bbTrack( NULL )
#if SINGERBOT_SUPPORT
, m_patternIndex( 0 )
#endif
{
// if the instrument is monophonic we do not allow other note-play-
// handles to exist for this track and therefore remove them
@@ -117,7 +120,7 @@ notePlayHandle::~notePlayHandle()
noteOff( 0 );
}
if( m_instrumentTrack != NULL )
if( m_instrumentTrack != NULL && m_pluginData != NULL )
{
m_instrumentTrack->deleteNotePluginData( this );
}
@@ -252,7 +255,10 @@ void notePlayHandle::checkValidity( void )
{
noteOff( 0 );
}
m_instrumentTrack->deleteNotePluginData( this );
if( m_pluginData )
{
m_instrumentTrack->deleteNotePluginData( this );
}
m_instrumentTrack = NULL;
}
// sub-notes might not be registered at mixer (for example arpeggio-

View File

@@ -397,7 +397,7 @@ f_cnt_t sampleBuffer::decodeSampleSDL( const char * _f,
{
AUDIO_S16SYS,
_channels,
_samplerate,
_samplerate
} ;
f_cnt_t frames = 0;

View File

@@ -4,7 +4,7 @@
* instrument_track.cpp - implementation of instrument-track-class
* (window + data-structures)
*
* Copyright (c) 2004-2006 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2004-2007 Tobias Doerffel <tobydox/at/users.sourceforge.net>
*
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
*
@@ -664,7 +664,9 @@ void instrumentTrack::processInEvent( const midiEvent & _me,
{
m_notesMutex.lock();
m_notes[_me.key()] = nph;
m_notesMutex.unlock();
}
return;
}
break;
}
@@ -777,7 +779,7 @@ QString instrumentTrack::instrumentName( void ) const
void instrumentTrack::deleteNotePluginData( notePlayHandle * _n )
{
if( m_instrument != NULL )
if( m_instrument != NULL && _n->m_pluginData != NULL )
{
m_instrument->deleteNotePluginData( _n );
}
@@ -996,6 +998,9 @@ bool FASTCALL instrumentTrack::play( const midiTime & _start,
noteVector & notes = p->notes();
// ...and set our index to zero
noteVector::iterator it = notes.begin();
#if SINGERBOT_SUPPORT
int note_idx = 0;
#endif
// very effective algorithm for playing notes that are
// posated within the current sample-frame
@@ -1006,6 +1011,12 @@ bool FASTCALL instrumentTrack::play( const midiTime & _start,
// skip notes which are posated before start-tact
while( it != notes.end() && ( *it )->pos() < cur_start )
{
#if SINGERBOT_SUPPORT
if( ( *it )->length() != 0 )
{
++note_idx;
}
#endif
++it;
}
}
@@ -1045,6 +1056,9 @@ bool FASTCALL instrumentTrack::play( const midiTime & _start,
note_frames,
*cur_note );
note_play_handle->setBBTrack( bb_track );
#if SINGERBOT_SUPPORT
note_play_handle->setPatternIndex( note_idx );
#endif
note_play_handle->play( FALSE );
// could we play all within current number of
// frames per audio-buffer?
@@ -1061,6 +1075,9 @@ bool FASTCALL instrumentTrack::play( const midiTime & _start,
delete note_play_handle;
}
played_a_note = TRUE;
#if SINGERBOT_SUPPORT
++note_idx;
#endif
}
++it;
}

View File

@@ -73,7 +73,7 @@
projectNotes::projectNotes( engine * _engine) :
projectNotes::projectNotes( engine * _engine ) :
QMainWindow( _engine->getMainWindow()->workspace()
#ifndef QT4
, 0, Qt::WStyle_Title