@@ -55,6 +55,30 @@ Audio_File::all_supported_formats ( std::list <const char *> &formats ) | |||||
formats.push_back( fd->name ); | formats.push_back( fd->name ); | ||||
} | } | ||||
static bool | |||||
is_absolute ( const char *name ) | |||||
{ | |||||
return *name == '/'; | |||||
} | |||||
/** return a static pointer to /name/ corrected for relative path. */ | |||||
const char *Audio_File::realname ( const char *name ) | |||||
{ | |||||
static char rname[512]; | |||||
if ( is_absolute( name ) ) | |||||
strncpy( rname, name, sizeof( rname ) ); | |||||
else | |||||
snprintf( rname, sizeof( rname ), "sources/%s", name ); | |||||
return rname; | |||||
} | |||||
const char * | |||||
Audio_File::filename ( void ) const | |||||
{ | |||||
return realname( _filename ); | |||||
} | |||||
/** attmpet to open any supported filetype */ | /** attmpet to open any supported filetype */ | ||||
Audio_File * | Audio_File * | ||||
@@ -58,6 +58,8 @@ protected: | |||||
static const format_desc * find_format ( const format_desc *fd, const char *name ); | static const format_desc * find_format ( const format_desc *fd, const char *name ); | ||||
static const char *realname ( const char *name ); | |||||
public: | public: | ||||
Audio_File ( ) : _peaks( this ) | Audio_File ( ) : _peaks( this ) | ||||
@@ -75,7 +77,9 @@ public: | |||||
static Audio_File *from_file ( const char *filename ); | static Audio_File *from_file ( const char *filename ); | ||||
Peaks const * peaks ( ) { return &_peaks; } | Peaks const * peaks ( ) { return &_peaks; } | ||||
const char *filename ( void ) const; | |||||
const char *name ( void ) const { return _filename; } | const char *name ( void ) const { return _filename; } | ||||
nframes_t length ( void ) const { return _length; } | nframes_t length ( void ) const { return _length; } | ||||
int channels ( void ) const { return _channels; } | int channels ( void ) const { return _channels; } | ||||
@@ -61,7 +61,7 @@ Audio_File_SF::from_file ( const char *filename ) | |||||
memset( &si, 0, sizeof( si ) ); | memset( &si, 0, sizeof( si ) ); | ||||
if ( ! ( in = sf_open( filename, SFM_READ, &si ) ) ) | |||||
if ( ! ( in = sf_open( realname( filename ), SFM_READ, &si ) ) ) | |||||
return NULL; | return NULL; | ||||
/* if ( si.samplerate != timeline->sample_rate() ) */ | /* if ( si.samplerate != timeline->sample_rate() ) */ | ||||
@@ -110,7 +110,7 @@ Audio_File_SF::create ( const char *filename, nframes_t samplerate, int channels | |||||
char *name; | char *name; | ||||
asprintf( &name, "%s.%s", filename, fd->extension ); | asprintf( &name, "%s.%s", filename, fd->extension ); | ||||
if ( ! ( out = sf_open( name, SFM_WRITE, &si ) ) ) | |||||
if ( ! ( out = sf_open( realname( name ), SFM_WRITE, &si ) ) ) | |||||
{ | { | ||||
printf( "couldn't create soundfile.\n" ); | printf( "couldn't create soundfile.\n" ); | ||||
free( name ); | free( name ); | ||||
@@ -140,7 +140,7 @@ Audio_File_SF::open ( void ) | |||||
memset( &si, 0, sizeof( si ) ); | memset( &si, 0, sizeof( si ) ); | ||||
if ( ! ( _in = sf_open( _filename, SFM_READ, &si ) ) ) | |||||
if ( ! ( _in = sf_open( realname( _filename ), SFM_READ, &si ) ) ) | |||||
return false; | return false; | ||||
_current_read = 0; | _current_read = 0; | ||||
@@ -353,7 +353,7 @@ Peaks::ready ( nframes_t s, int npeaks, nframes_t chunksize ) const | |||||
{ | { | ||||
Peakfile _peakfile; | Peakfile _peakfile; | ||||
if ( ! _peakfile.open( _clip->name(), _clip->channels(), chunksize ) ) | |||||
if ( ! _peakfile.open( _clip->filename(), _clip->channels(), chunksize ) ) | |||||
return false; | return false; | ||||
return _peakfile.ready( s, npeaks ); | return _peakfile.ready( s, npeaks ); | ||||
@@ -377,7 +377,7 @@ Peaks::read_peakfile_peaks ( Peak *peaks, nframes_t s, int npeaks, nframes_t chu | |||||
Peakfile _peakfile; | Peakfile _peakfile; | ||||
if ( ! _peakfile.open( _clip->name(), _clip->channels(), chunksize ) ) | |||||
if ( ! _peakfile.open( _clip->filename(), _clip->channels(), chunksize ) ) | |||||
return 0; | return 0; | ||||
return _peakfile.read_peaks( peaks, s, npeaks, chunksize ); | return _peakfile.read_peaks( peaks, s, npeaks, chunksize ); | ||||
@@ -465,7 +465,7 @@ Peaks::read_peaks ( nframes_t s, int npeaks, nframes_t chunksize ) const | |||||
bool | bool | ||||
Peaks::current ( void ) const | Peaks::current ( void ) const | ||||
{ | { | ||||
return ! newer( _clip->name(), peakname( _clip->name() ) ); | |||||
return ! newer( _clip->filename(), peakname( _clip->filename() ) ); | |||||
} | } | ||||
bool | bool | ||||
@@ -507,7 +507,7 @@ Peaks::prepare_for_writing ( void ) | |||||
assert( ! _peak_writer ); | assert( ! _peak_writer ); | ||||
_peak_writer = new Peaks::Streamer( _clip->name(), _clip->channels(), cache_minimum ); | |||||
_peak_writer = new Peaks::Streamer( _clip->filename(), _clip->channels(), cache_minimum ); | |||||
} | } | ||||
void | void | ||||
@@ -678,7 +678,7 @@ Peaks::Builder::make_peaks_mipmap ( void ) | |||||
Audio_File *_clip = _peaks->_clip; | Audio_File *_clip = _peaks->_clip; | ||||
const char *filename = _clip->name(); | |||||
const char *filename = _clip->filename(); | |||||
FILE *rfp; | FILE *rfp; | ||||
@@ -728,7 +728,7 @@ Peaks::Builder::make_peaks_mipmap ( void ) | |||||
/* open the peakfile for the previous cache level */ | /* open the peakfile for the previous cache level */ | ||||
pf.open( rfp, _clip->channels(), cs >> Peaks::cache_step ); | pf.open( rfp, _clip->channels(), cs >> Peaks::cache_step ); | ||||
// pf.open( _clip->name(), _clip->channels(), cs >> Peaks::cache_step ); | |||||
// pf.open( _clip->filename(), _clip->channels(), cs >> Peaks::cache_step ); | |||||
write_block_header( cs ); | write_block_header( cs ); | ||||
@@ -758,7 +758,7 @@ Peaks::Builder::make_peaks ( void ) | |||||
{ | { | ||||
Audio_File *_clip = _peaks->_clip; | Audio_File *_clip = _peaks->_clip; | ||||
const char *filename = _clip->name(); | |||||
const char *filename = _clip->filename(); | |||||
DMESSAGE( "building peaks for \"%s\"", filename ); | DMESSAGE( "building peaks for \"%s\"", filename ); | ||||