- react to bb-track mute automation

- added constructor to handle frozen patterns
- use shared sample buffers


git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@360 0778d3d1-df1d-0410-868b-ea421aaaa00d
This commit is contained in:
Javier Serrano Polo
2006-08-24 00:19:17 +00:00
parent c5280c26ce
commit 90d023f43a
2 changed files with 41 additions and 14 deletions

View File

@@ -32,6 +32,8 @@
#include "types.h"
#include "engine.h"
class bbTrack;
class pattern;
class sampleBuffer;
class sampleTCO;
class track;
@@ -45,6 +47,7 @@ public:
samplePlayHandle( const QString & _sample_file, engine * _engine );
samplePlayHandle( sampleBuffer * _sample_buffer );
samplePlayHandle( sampleTCO * _tco );
samplePlayHandle( pattern * _pattern );
virtual ~samplePlayHandle();
virtual void play( void );
@@ -61,6 +64,11 @@ public:
m_doneMayReturnTrue = _enable;
}
void setBBTrack( bbTrack * _bb_track )
{
m_bbTrack = _bb_track;
}
public slots:
void setVolume( float _new_volume );
@@ -68,7 +76,6 @@ public slots:
private:
sampleBuffer * m_sampleBuffer;
const bool m_ownSampleBuffer;
bool m_doneMayReturnTrue;
f_cnt_t m_frame;
@@ -79,6 +86,8 @@ private:
float m_volume;
track * m_track;
bbTrack * m_bbTrack;
} ;

View File

@@ -26,6 +26,9 @@
#include "sample_play_handle.h"
#include "bb_track.h"
#include "instrument_track.h"
#include "pattern.h"
#include "sample_buffer.h"
#include "sample_track.h"
#include "buffer_allocator.h"
@@ -38,13 +41,13 @@ samplePlayHandle::samplePlayHandle( const QString & _sample_file,
playHandle( SAMPLE_PLAY_HANDLE ),
engineObject( _engine ),
m_sampleBuffer( new sampleBuffer( eng(), _sample_file ) ),
m_ownSampleBuffer( TRUE ),
m_doneMayReturnTrue( TRUE ),
m_frame( 0 ),
m_audioPort( new audioPort( "samplePlayHandle", eng() ) ),
m_ownAudioPort( TRUE ),
m_volume( 1.0f ),
m_track( NULL )
m_track( NULL ),
m_bbTrack( NULL )
{
}
@@ -54,14 +57,14 @@ samplePlayHandle::samplePlayHandle( const QString & _sample_file,
samplePlayHandle::samplePlayHandle( sampleBuffer * _sample_buffer ) :
playHandle( SAMPLE_PLAY_HANDLE ),
engineObject( _sample_buffer->eng() ),
m_sampleBuffer( _sample_buffer ),
m_ownSampleBuffer( FALSE ),
m_sampleBuffer( sharedObject::ref( _sample_buffer ) ),
m_doneMayReturnTrue( TRUE ),
m_frame( 0 ),
m_audioPort( new audioPort( "samplePlayHandle", eng() ) ),
m_ownAudioPort( TRUE ),
m_volume( 1.0f ),
m_track( NULL )
m_track( NULL ),
m_bbTrack( NULL )
{
}
@@ -71,14 +74,31 @@ samplePlayHandle::samplePlayHandle( sampleBuffer * _sample_buffer ) :
samplePlayHandle::samplePlayHandle( sampleTCO * _tco ) :
playHandle( SAMPLE_PLAY_HANDLE ),
engineObject( _tco->eng() ),
m_sampleBuffer( _tco->getSampleBuffer() ),
m_ownSampleBuffer( FALSE ),
m_sampleBuffer( sharedObject::ref( _tco->getSampleBuffer() ) ),
m_doneMayReturnTrue( TRUE ),
m_frame( 0 ),
m_audioPort( ( (sampleTrack *)_tco->getTrack() )->getAudioPort() ),
m_ownAudioPort( FALSE ),
m_volume( 1.0f ),
m_track( _tco->getTrack() )
m_track( _tco->getTrack() ),
m_bbTrack( NULL )
{
}
samplePlayHandle::samplePlayHandle( pattern * _pattern ) :
playHandle( SAMPLE_PLAY_HANDLE ),
engineObject( _pattern->eng() ),
m_sampleBuffer( sharedObject::ref( _pattern->getFrozenPattern() ) ),
m_doneMayReturnTrue( TRUE ),
m_frame( 0 ),
m_audioPort( _pattern->getInstrumentTrack()->getAudioPort() ),
m_ownAudioPort( FALSE ),
m_volume( 1.0f ),
m_track( _pattern->getInstrumentTrack() ),
m_bbTrack( NULL )
{
}
@@ -87,10 +107,7 @@ samplePlayHandle::samplePlayHandle( sampleTCO * _tco ) :
samplePlayHandle::~samplePlayHandle()
{
if( m_ownSampleBuffer == TRUE )
{
delete m_sampleBuffer;
}
sharedObject::unref( m_sampleBuffer );
if( m_ownAudioPort )
{
delete m_audioPort;
@@ -117,7 +134,8 @@ void samplePlayHandle::play( const fpab_t _frame_base )
const fpab_t frames = eng()->getMixer()->framesPerAudioBuffer()
- _frame_base;
if( !( m_track && m_track->muted() ) )
if( !( m_track && m_track->muted() )
&& !( m_bbTrack && m_bbTrack->muted() ) )
{
sampleFrame * buf = bufferAllocator::alloc<sampleFrame>(
frames );