Work on making peak streaming work again.
This commit is contained in:
parent
e27c0336fe
commit
fc99144548
|
@ -158,6 +158,8 @@ Audio_File_SF::close ( void )
|
||||||
if ( _in )
|
if ( _in )
|
||||||
sf_close( _in );
|
sf_close( _in );
|
||||||
|
|
||||||
|
_peaks.finish_writing();
|
||||||
|
|
||||||
_in = NULL;
|
_in = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -792,6 +792,13 @@ Audio_Region::read ( sample_t *buf, nframes_t pos, nframes_t nframes, int channe
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** prepare for capturing */
|
||||||
|
void
|
||||||
|
Audio_Region::prepare ( void )
|
||||||
|
{
|
||||||
|
log_start();
|
||||||
|
}
|
||||||
|
|
||||||
/* THREAD: IO */
|
/* THREAD: IO */
|
||||||
/** write /nframes/ from /buf/ to source. /buf/ is interleaved and
|
/** write /nframes/ from /buf/ to source. /buf/ is interleaved and
|
||||||
must match the channel layout of the write source! */
|
must match the channel layout of the write source! */
|
||||||
|
@ -825,15 +832,6 @@ Audio_Region::write ( nframes_t nframes )
|
||||||
return nframes;
|
return nframes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** prepare for capturing */
|
|
||||||
void
|
|
||||||
Audio_Region::prepare ( void )
|
|
||||||
{
|
|
||||||
log_start();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** finalize region capture. Assumes that this *is* a captured region
|
/** finalize region capture. Assumes that this *is* a captured region
|
||||||
and that no other regions refer to the same source */
|
and that no other regions refer to the same source */
|
||||||
bool
|
bool
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
peakfile reading/writing.
|
peakfile reading/writing.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "Peaks.H"
|
#include "Peaks.H"
|
||||||
|
@ -48,6 +48,8 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
|
|
||||||
|
#include "Transport.H" // for .recording
|
||||||
|
|
||||||
#include <list>
|
#include <list>
|
||||||
|
|
||||||
Peaks::peakbuffer Peaks::_peakbuf;
|
Peaks::peakbuffer Peaks::_peakbuf;
|
||||||
|
@ -376,12 +378,16 @@ Peaks::read_peakfile_peaks ( Peak *peaks, nframes_t s, int npeaks, nframes_t chu
|
||||||
|
|
||||||
nframes_t ncc = nearest_cached_chunksize( chunksize );
|
nframes_t ncc = nearest_cached_chunksize( chunksize );
|
||||||
|
|
||||||
if ( ! _peak_writer && ! current( cache_minimum ) )
|
/* never try to build peaks while recording */
|
||||||
/* Build peaks asyncronously */
|
if ( ! ( _peak_writer || transport->recording ) )
|
||||||
if ( ! fork() )
|
{
|
||||||
exit( make_peaks( ) );
|
if ( ! current() )
|
||||||
else
|
/* Build peaks asyncronously */
|
||||||
return 0;
|
if ( ! fork() )
|
||||||
|
exit( make_peaks() );
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
Peakfile _peakfile;
|
Peakfile _peakfile;
|
||||||
|
|
||||||
|
@ -493,7 +499,7 @@ Peaks::open ( void )
|
||||||
|
|
||||||
/** returns false if peak file for /filename/ is out of date */
|
/** returns false if peak file for /filename/ is out of date */
|
||||||
bool
|
bool
|
||||||
Peaks::current ( nframes_t chunksize ) const
|
Peaks::current ( void ) const
|
||||||
{
|
{
|
||||||
int sfd, pfd;
|
int sfd, pfd;
|
||||||
|
|
||||||
|
@ -515,6 +521,16 @@ Peaks::current ( nframes_t chunksize ) const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
touch ( int fd )
|
||||||
|
{
|
||||||
|
struct stat st;
|
||||||
|
|
||||||
|
fstat( fd, &st );
|
||||||
|
|
||||||
|
fchmod( fd, st.st_mode );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* The Peak_Builder is for generating peaks from imported or updated sources, or when the
|
/* The Peak_Builder is for generating peaks from imported or updated sources, or when the
|
||||||
peakfile is simply missing */
|
peakfile is simply missing */
|
||||||
|
@ -686,6 +702,16 @@ Peaks::prepare_for_writing ( void )
|
||||||
_peak_writer = new Peak_Writer( _clip->name(), cache_minimum, _clip->channels() );
|
_peak_writer = new Peak_Writer( _clip->name(), cache_minimum, _clip->channels() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Peaks::finish_writing ( void )
|
||||||
|
{
|
||||||
|
if ( _peak_writer )
|
||||||
|
{
|
||||||
|
delete _peak_writer;
|
||||||
|
_peak_writer = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Peaks::write ( sample_t *buf, nframes_t nframes )
|
Peaks::write ( sample_t *buf, nframes_t nframes )
|
||||||
{
|
{
|
||||||
|
@ -720,7 +746,10 @@ Peak_Writer::Peak_Writer ( const char *filename, nframes_t chunksize, int channe
|
||||||
|
|
||||||
Peak_Writer::~Peak_Writer ( )
|
Peak_Writer::~Peak_Writer ( )
|
||||||
{
|
{
|
||||||
|
touch( fileno( _fp ) );
|
||||||
|
|
||||||
fclose( _fp );
|
fclose( _fp );
|
||||||
|
|
||||||
delete[] _peak;
|
delete[] _peak;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -746,6 +775,5 @@ Peak_Writer::write ( sample_t *buf, nframes_t nframes )
|
||||||
memset( _peak, 0, sizeof( Peak ) * _channels );
|
memset( _peak, 0, sizeof( Peak ) * _channels );
|
||||||
_index = 0;
|
_index = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,10 +99,11 @@ public:
|
||||||
void read ( int X, float *hi, float *lo ) const;
|
void read ( int X, float *hi, float *lo ) const;
|
||||||
bool open ( void );
|
bool open ( void );
|
||||||
|
|
||||||
bool current ( nframes_t chunksize ) const;
|
bool current ( void ) const;
|
||||||
bool make_peaks ( void ) const;
|
bool make_peaks ( void ) const;
|
||||||
|
|
||||||
void prepare_for_writing ( void );
|
void prepare_for_writing ( void );
|
||||||
|
void finish_writing ( void );
|
||||||
void write ( sample_t *buf, nframes_t nframes );
|
void write ( sample_t *buf, nframes_t nframes );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1066,6 +1066,9 @@ Timeline::remove_track ( Track *track )
|
||||||
bool
|
bool
|
||||||
Timeline::record ( void )
|
Timeline::record ( void )
|
||||||
{
|
{
|
||||||
|
/* FIXME: right place for this? */
|
||||||
|
transport->recording = true;
|
||||||
|
|
||||||
Loggable::block_start();
|
Loggable::block_start();
|
||||||
|
|
||||||
for ( int i = tracks->children(); i-- ; )
|
for ( int i = tracks->children(); i-- ; )
|
||||||
|
@ -1096,6 +1099,8 @@ Timeline::stop ( void )
|
||||||
Loggable::block_end();
|
Loggable::block_end();
|
||||||
|
|
||||||
activate();
|
activate();
|
||||||
|
|
||||||
|
transport->recording = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue